packages feed

chart-svg 0.2.3 → 0.3.0

raw patch · 49 files changed

+7358/−6463 lines, 49 filesdep +adjunctionsdep +formatndep +neat-interpolationdep −JuicyPixelsdep −chart-svgdep −generic-lensdep ~attoparsecdep ~numhaskdep ~numhask-spacePVP ok

version bump matches the API change (PVP)

Dependencies added: adjunctions, formatn, neat-interpolation, numhask-array, optics-core, random

Dependencies removed: JuicyPixels, chart-svg, generic-lens, lens, linear, reanimate, reanimate-svg, unordered-containers

Dependency ranges changed: attoparsec, numhask, numhask-space

API changes (from Hackage documentation)

- Chart: Adjustments :: Double -> Double -> Double -> Bool -> Adjustments
- Chart: AnchorEnd :: Anchor
- Chart: AnchorMiddle :: Anchor
- Chart: AnchorStart :: Anchor
- Chart: AxisBar :: RectStyle -> Double -> Double -> AxisBar
- Chart: AxisOptions :: Maybe AxisBar -> Maybe Adjustments -> Tick -> Place -> AxisOptions
- Chart: BlankA :: Annotation
- Chart: CanvasAspect :: Double -> ChartAspect
- Chart: Chart :: Annotation -> [XY a] -> Chart a
- Chart: ChartAspect :: ChartAspect
- Chart: ChartDims :: Rect a -> Rect a -> Rect a -> ChartDims a
- Chart: CircleGlyph :: GlyphShape
- Chart: EllipseGlyph :: Double -> GlyphShape
- Chart: FixedAspect :: Double -> ChartAspect
- Chart: GlyphA :: GlyphStyle -> Annotation
- Chart: GlyphStyle :: Double -> Colour -> Colour -> Double -> GlyphShape -> Maybe Double -> Maybe (Point Double) -> GlyphStyle
- Chart: HLineGlyph :: Double -> GlyphShape
- Chart: Hori :: Orientation
- Chart: Hud :: ([Chart a] -> StateT (ChartDims a) m [Chart a]) -> HudT m a
- Chart: HudOptions :: Maybe RectStyle -> [Title] -> [AxisOptions] -> Maybe (LegendOptions, [(Annotation, Text)]) -> HudOptions
- Chart: LegendOptions :: Double -> Double -> Double -> TextStyle -> Int -> Double -> Double -> Maybe RectStyle -> Place -> Double -> LegendOptions
- Chart: LineA :: LineStyle -> Annotation
- Chart: LineCapButt :: LineCap
- Chart: LineCapRound :: LineCap
- Chart: LineCapSquare :: LineCap
- Chart: LineJoinBevel :: LineJoin
- Chart: LineJoinMiter :: LineJoin
- Chart: LineJoinRound :: LineJoin
- Chart: LineStyle :: Double -> Colour -> Maybe LineCap -> Maybe LineJoin -> Maybe [Double] -> Maybe Double -> LineStyle
- Chart: NoCssOptions :: CssOptions
- Chart: NoTickExtend :: TickExtend
- Chart: PathA :: PathStyle -> [PathInfo Double] -> Annotation
- Chart: PathGlyph :: Text -> GlyphShape
- Chart: PathStyle :: Double -> Colour -> Colour -> PathStyle
- Chart: PlaceAbsolute :: Point Double -> Place
- Chart: PlaceBottom :: Place
- Chart: PlaceLeft :: Place
- Chart: PlaceRight :: Place
- Chart: PlaceTop :: Place
- Chart: RectA :: RectStyle -> Annotation
- Chart: RectRoundedGlyph :: Double -> Double -> Double -> GlyphShape
- Chart: RectSharpGlyph :: Double -> GlyphShape
- Chart: RectStyle :: Double -> Colour -> Colour -> RectStyle
- Chart: SquareGlyph :: GlyphShape
- Chart: SvgOptions :: Double -> Maybe Double -> Maybe Double -> Maybe RectStyle -> CssOptions -> ChartAspect -> Maybe Colour -> SvgOptions
- Chart: TextA :: TextStyle -> [Text] -> Annotation
- Chart: TextStyle :: Double -> Colour -> Anchor -> Double -> Double -> Double -> Maybe Double -> TextStyle
- Chart: Tick :: TickStyle -> Maybe (GlyphStyle, Double) -> Maybe (TextStyle, Double) -> Maybe (LineStyle, Double) -> Tick
- Chart: TickExact :: FormatN -> Int -> TickStyle
- Chart: TickExtend :: TickExtend
- Chart: TickLabels :: [Text] -> TickStyle
- Chart: TickNone :: TickStyle
- Chart: TickPlaced :: [(Double, Text)] -> TickStyle
- Chart: TickRound :: FormatN -> Int -> TickExtend -> TickStyle
- Chart: Title :: Text -> TextStyle -> Place -> Anchor -> Double -> Title
- Chart: TriangleGlyph :: Point Double -> Point Double -> Point Double -> GlyphShape
- Chart: UnadjustedAspect :: ChartAspect
- Chart: UseCssCrisp :: CssOptions
- Chart: UseGeometricPrecision :: CssOptions
- Chart: VLineGlyph :: Double -> GlyphShape
- Chart: Vert :: Orientation
- Chart: [$sel:adjust:AxisOptions] :: AxisOptions -> Maybe Adjustments
- Chart: [$sel:allowDiagonal:Adjustments] :: Adjustments -> Bool
- Chart: [$sel:anchor:TextStyle] :: TextStyle -> Anchor
- Chart: [$sel:anchor:Title] :: Title -> Anchor
- Chart: [$sel:angledRatio:Adjustments] :: Adjustments -> Double
- Chart: [$sel:annotation:Chart] :: Chart a -> Annotation
- Chart: [$sel:axisBar:AxisOptions] :: AxisOptions -> Maybe AxisBar
- Chart: [$sel:axisTick:AxisOptions] :: AxisOptions -> Tick
- Chart: [$sel:background:SvgOptions] :: SvgOptions -> Maybe Colour
- Chart: [$sel:borderColor:GlyphStyle] :: GlyphStyle -> Colour
- Chart: [$sel:borderColor:PathStyle] :: PathStyle -> Colour
- Chart: [$sel:borderColor:RectStyle] :: RectStyle -> Colour
- Chart: [$sel:borderSize:GlyphStyle] :: GlyphStyle -> Double
- Chart: [$sel:borderSize:PathStyle] :: PathStyle -> Double
- Chart: [$sel:borderSize:RectStyle] :: RectStyle -> Double
- Chart: [$sel:buff:AxisBar] :: AxisBar -> Double
- Chart: [$sel:buff:Title] :: Title -> Double
- Chart: [$sel:canvasDim:ChartDims] :: ChartDims a -> Rect a
- Chart: [$sel:chartAspect:SvgOptions] :: SvgOptions -> ChartAspect
- Chart: [$sel:chartDim:ChartDims] :: ChartDims a -> Rect a
- Chart: [$sel:chartFrame:SvgOptions] :: SvgOptions -> Maybe RectStyle
- Chart: [$sel:color:GlyphStyle] :: GlyphStyle -> Colour
- Chart: [$sel:color:LineStyle] :: LineStyle -> Colour
- Chart: [$sel:color:PathStyle] :: PathStyle -> Colour
- Chart: [$sel:color:RectStyle] :: RectStyle -> Colour
- Chart: [$sel:color:TextStyle] :: TextStyle -> Colour
- Chart: [$sel:cssOptions:SvgOptions] :: SvgOptions -> CssOptions
- Chart: [$sel:dasharray:LineStyle] :: LineStyle -> Maybe [Double]
- Chart: [$sel:dashoffset:LineStyle] :: LineStyle -> Maybe Double
- Chart: [$sel:dataDim:ChartDims] :: ChartDims a -> Rect a
- Chart: [$sel:gtick:Tick] :: Tick -> Maybe (GlyphStyle, Double)
- Chart: [$sel:hgap:LegendOptions] :: LegendOptions -> Double
- Chart: [$sel:hsize:TextStyle] :: TextStyle -> Double
- Chart: [$sel:hudAxes:HudOptions] :: HudOptions -> [AxisOptions]
- Chart: [$sel:hudCanvas:HudOptions] :: HudOptions -> Maybe RectStyle
- Chart: [$sel:hudLegend:HudOptions] :: HudOptions -> Maybe (LegendOptions, [(Annotation, Text)])
- Chart: [$sel:hudTitles:HudOptions] :: HudOptions -> [Title]
- Chart: [$sel:innerPad:LegendOptions] :: LegendOptions -> Double
- Chart: [$sel:innerPad:SvgOptions] :: SvgOptions -> Maybe Double
- Chart: [$sel:legendFrame:LegendOptions] :: LegendOptions -> Maybe RectStyle
- Chart: [$sel:linecap:LineStyle] :: LineStyle -> Maybe LineCap
- Chart: [$sel:linejoin:LineStyle] :: LineStyle -> Maybe LineJoin
- Chart: [$sel:lmax:LegendOptions] :: LegendOptions -> Int
- Chart: [$sel:lplace:LegendOptions] :: LegendOptions -> Place
- Chart: [$sel:lscale:LegendOptions] :: LegendOptions -> Double
- Chart: [$sel:lsize:LegendOptions] :: LegendOptions -> Double
- Chart: [$sel:ltext:LegendOptions] :: LegendOptions -> TextStyle
- Chart: [$sel:ltick:Tick] :: Tick -> Maybe (LineStyle, Double)
- Chart: [$sel:maxXRatio:Adjustments] :: Adjustments -> Double
- Chart: [$sel:maxYRatio:Adjustments] :: Adjustments -> Double
- Chart: [$sel:nudge1:TextStyle] :: TextStyle -> Double
- Chart: [$sel:outerPad:LegendOptions] :: LegendOptions -> Double
- Chart: [$sel:outerPad:SvgOptions] :: SvgOptions -> Maybe Double
- Chart: [$sel:place:AxisOptions] :: AxisOptions -> Place
- Chart: [$sel:place:Title] :: Title -> Place
- Chart: [$sel:rotation:GlyphStyle] :: GlyphStyle -> Maybe Double
- Chart: [$sel:rotation:TextStyle] :: TextStyle -> Maybe Double
- Chart: [$sel:rstyle:AxisBar] :: AxisBar -> RectStyle
- Chart: [$sel:shape:GlyphStyle] :: GlyphStyle -> GlyphShape
- Chart: [$sel:size:GlyphStyle] :: GlyphStyle -> Double
- Chart: [$sel:size:TextStyle] :: TextStyle -> Double
- Chart: [$sel:style:Title] :: Title -> TextStyle
- Chart: [$sel:svgHeight:SvgOptions] :: SvgOptions -> Double
- Chart: [$sel:text:Title] :: Title -> Text
- Chart: [$sel:translate:GlyphStyle] :: GlyphStyle -> Maybe (Point Double)
- Chart: [$sel:tstyle:Tick] :: Tick -> TickStyle
- Chart: [$sel:ttick:Tick] :: Tick -> Maybe (TextStyle, Double)
- Chart: [$sel:unhud:Hud] :: HudT m a -> [Chart a] -> StateT (ChartDims a) m [Chart a]
- Chart: [$sel:vgap:LegendOptions] :: LegendOptions -> Double
- Chart: [$sel:vsize:TextStyle] :: TextStyle -> Double
- Chart: [$sel:wid:AxisBar] :: AxisBar -> Double
- Chart: [$sel:width:LineStyle] :: LineStyle -> Double
- Chart: [$sel:xys:Chart] :: Chart a -> [XY a]
- Chart: adjustTick :: Adjustments -> Rect Double -> Rect Double -> Place -> Tick -> Tick
- Chart: annotationText :: Annotation -> Text
- Chart: blob :: Colour -> RectStyle
- Chart: border :: Double -> Colour -> RectStyle
- Chart: canvas :: Monad m => RectStyle -> HudT m Double
- Chart: chartAspectHud :: Monad m => ChartAspect -> HudT m Double
- Chart: clear :: RectStyle
- Chart: colourAnn :: Colour -> Annotation -> Annotation
- Chart: colourHudOptions :: Colour -> HudOptions -> HudOptions
- Chart: data Adjustments
- Chart: data Anchor
- Chart: data Annotation
- Chart: data AxisBar
- Chart: data AxisOptions
- Chart: data Chart a
- Chart: data ChartAspect
- Chart: data ChartDims a
- Chart: data CssOptions
- Chart: data GlyphShape
- Chart: data GlyphStyle
- Chart: data HudOptions
- Chart: data LegendOptions
- Chart: data LineCap
- Chart: data LineJoin
- Chart: data LineStyle
- Chart: data Orientation
- Chart: data PathStyle
- Chart: data Place
- Chart: data RectStyle
- Chart: data SvgOptions
- Chart: data TextStyle
- Chart: data Tick
- Chart: data TickExtend
- Chart: data TickStyle
- Chart: data Title
- Chart: dataBox :: Chart Double -> Maybe (Rect Double)
- Chart: dataBoxes :: [Chart Double] -> Maybe (Rect Double)
- Chart: dataBoxesS :: [Chart Double] -> Rect Double
- Chart: defaultAdjustments :: Adjustments
- Chart: defaultAxisBar :: AxisBar
- Chart: defaultAxisOptions :: AxisOptions
- Chart: defaultCanvas :: RectStyle
- Chart: defaultGlyphStyle :: GlyphStyle
- Chart: defaultGlyphTick :: GlyphStyle
- Chart: defaultHudOptions :: HudOptions
- Chart: defaultLegendOptions :: LegendOptions
- Chart: defaultLineStyle :: LineStyle
- Chart: defaultLineTick :: LineStyle
- Chart: defaultPathStyle :: PathStyle
- Chart: defaultRectStyle :: RectStyle
- Chart: defaultSvgFrame :: RectStyle
- Chart: defaultSvgOptions :: SvgOptions
- Chart: defaultTextStyle :: TextStyle
- Chart: defaultTextTick :: TextStyle
- Chart: defaultTick :: Tick
- Chart: defaultTickStyle :: TickStyle
- Chart: defaultTitle :: Text -> Title
- Chart: flipAxis :: AxisOptions -> AxisOptions
- Chart: frameChart :: RectStyle -> Double -> [Chart Double] -> [Chart Double]
- Chart: fromAnchor :: IsString s => Anchor -> s
- Chart: fromChartAspect :: IsString s => ChartAspect -> s
- Chart: fromDashArray :: [Double] -> Text
- Chart: fromLineCap :: IsString s => LineCap -> s
- Chart: fromLineJoin :: IsString s => LineJoin -> s
- Chart: fromOrientation :: IsString s => Orientation -> s
- Chart: glyphText :: GlyphShape -> Text
- Chart: hori :: Double -> [[Chart Double]] -> [Chart Double]
- Chart: initialCanvas :: ChartAspect -> [Chart Double] -> Rect Double
- Chart: legendHud :: LegendOptions -> [Chart Double] -> Hud Double
- Chart: makeHud :: Rect Double -> HudOptions -> ([Hud Double], [Chart Double])
- Chart: makeTickDates :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Int, Text)]
- Chart: makeTickDatesContinuous :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Double, Text)]
- Chart: moveChart :: Additive a => XY a -> [Chart a] -> [Chart a]
- Chart: newtype HudT m a
- Chart: padBox :: Maybe (Rect Double) -> Rect Double
- Chart: padChart :: Double -> [Chart Double] -> [Chart Double]
- Chart: padRect :: Subtractive a => a -> Rect a -> Rect a
- Chart: placeText :: Place -> Text
- Chart: projectArcPosition :: Rect Double -> Rect Double -> ArcPosition Double -> ArcInfo Double
- Chart: projectXYs :: Rect Double -> [Chart Double] -> [Chart Double]
- Chart: projectXYsWith :: Rect Double -> Rect Double -> [Chart Double] -> [Chart Double]
- Chart: runHud :: Rect Double -> [Hud Double] -> [Chart Double] -> [Chart Double]
- Chart: runHudWith :: Rect Double -> Rect Double -> [Hud Double] -> [Chart Double] -> [Chart Double]
- Chart: scaleAnn :: Double -> Annotation -> Annotation
- Chart: scaleOpacAnn :: Double -> Annotation -> Annotation
- Chart: scaleOpacHudOptions :: HudOptions -> Double -> HudOptions
- Chart: simulHud :: (Ord a, Monad m) => HudT m a -> HudT m a -> HudT m a
- Chart: stack :: Int -> Double -> [[Chart Double]] -> [Chart Double]
- Chart: styleBox :: Chart Double -> Maybe (Rect Double)
- Chart: styleBoxGlyph :: GlyphStyle -> Rect Double
- Chart: styleBoxText :: TextStyle -> Text -> Point Double -> Rect Double
- Chart: styleBoxes :: [Chart Double] -> Maybe (Rect Double)
- Chart: styleBoxesS :: [Chart Double] -> Rect Double
- Chart: tick :: Monad m => Place -> Tick -> HudT m Double
- Chart: tickStyleText :: TickStyle -> Text
- Chart: title :: Monad m => Title -> HudT m Double
- Chart: toAnchor :: (Eq s, IsString s) => s -> Anchor
- Chart: toChartAspect :: (Eq s, IsString s) => s -> Double -> ChartAspect
- Chart: toLineCap :: (Eq s, IsString s) => s -> LineCap
- Chart: toLineJoin :: (Eq s, IsString s) => s -> LineJoin
- Chart: toOrientation :: (Eq s, IsString s) => s -> Orientation
- Chart: toPathChart :: PathStyle -> [(PathInfo Double, Point Double)] -> Chart Double
- Chart: type Hud = HudT Identity
- Chart: vert :: Double -> [[Chart Double]] -> [Chart Double]
- Chart.Bar: [barHudOptions] :: BarOptions -> HudOptions
- Chart.Examples: arcExample :: ChartSvg
- Chart.Examples: compoundExample :: ChartSvg
- Chart.Examples: glinesExample :: ChartSvg
- Chart.Examples: labelExample :: ChartSvg
- Chart.Examples: legendExample :: ChartSvg
- Chart.Examples: lglyphExample :: ChartSvg
- Chart.Examples: svgOptionsExample :: ChartSvg
- Chart.Examples: textLocalExample :: ChartSvg
- Chart.Reanimate: ChartReanimate :: [Tree] -> Rect Double -> Point Double -> ChartReanimate
- Chart.Reanimate: ReanimateConfig :: Double -> Maybe Text -> Maybe [Text] -> Maybe FontStyle -> Alignment -> ReanimateConfig
- Chart.Reanimate: [background] :: ReanimateConfig -> Maybe Text
- Chart.Reanimate: [box] :: ChartReanimate -> Rect Double
- Chart.Reanimate: [duration] :: ReanimateConfig -> Double
- Chart.Reanimate: [globalAlignment] :: ReanimateConfig -> Alignment
- Chart.Reanimate: [globalFontFamily] :: ReanimateConfig -> Maybe [Text]
- Chart.Reanimate: [globalFontStyle] :: ReanimateConfig -> Maybe FontStyle
- Chart.Reanimate: [size] :: ChartReanimate -> Point Double
- Chart.Reanimate: [trees] :: ChartReanimate -> [Tree]
- Chart.Reanimate: animChartSvg :: ReanimateConfig -> (Double -> ChartSvg) -> Animation
- Chart.Reanimate: chartReanimate :: ChartSvg -> ChartReanimate
- Chart.Reanimate: data ChartReanimate
- Chart.Reanimate: data ReanimateConfig
- Chart.Reanimate: defaultReanimateConfig :: ReanimateConfig
- Chart.Reanimate: instance GHC.Classes.Eq Chart.Reanimate.ChartReanimate
- Chart.Reanimate: instance GHC.Classes.Eq Chart.Reanimate.ReanimateConfig
- Chart.Reanimate: instance GHC.Generics.Generic Chart.Reanimate.ChartReanimate
- Chart.Reanimate: instance GHC.Generics.Generic Chart.Reanimate.ReanimateConfig
- Chart.Reanimate: instance GHC.Show.Show Chart.Reanimate.ChartReanimate
- Chart.Reanimate: instance GHC.Show.Show Chart.Reanimate.ReanimateConfig
- Chart.Reanimate: toTreeA :: ReanimateConfig -> (Double -> ChartSvg) -> Double -> Tree
- Chart.Reanimate: tree :: Chart Double -> Tree
- Chart.Reanimate: treeFromFile :: FilePath -> IO Tree
- Chart.Render: ChartSvg :: SvgOptions -> HudOptions -> [Hud Double] -> [Chart Double] -> ChartSvg
- Chart.Render: [chartList] :: ChartSvg -> [Chart Double]
- Chart.Render: [hudList] :: ChartSvg -> [Hud Double]
- Chart.Render: [hudOptions] :: ChartSvg -> HudOptions
- Chart.Render: [svgOptions] :: ChartSvg -> SvgOptions
- Chart.Render: attsGlyph :: GlyphStyle -> [Attribute]
- Chart.Render: attsLine :: LineStyle -> [Attribute]
- Chart.Render: attsPath :: PathStyle -> [Attribute]
- Chart.Render: attsRect :: RectStyle -> [Attribute]
- Chart.Render: attsText :: TextStyle -> [Attribute]
- Chart.Render: chartSvg :: ChartSvg -> Text
- Chart.Render: chartSvgDefault :: [Chart Double] -> Text
- Chart.Render: chartSvgHud :: [Chart Double] -> Text
- Chart.Render: cssCrisp :: Html ()
- Chart.Render: data ChartSvg
- Chart.Render: geometricPrecision :: Html ()
- Chart.Render: instance GHC.Base.Monoid Chart.Render.ChartSvg
- Chart.Render: instance GHC.Base.Semigroup Chart.Render.ChartSvg
- Chart.Render: instance GHC.Generics.Generic Chart.Render.ChartSvg
- Chart.Render: makeAttribute :: Text -> Text -> Attribute
- Chart.Render: renderChartsWith :: SvgOptions -> [Chart Double] -> Text
- Chart.Render: renderHudChart :: SvgOptions -> [Hud Double] -> [Chart Double] -> Text
- Chart.Render: renderToCRS :: SvgOptions -> [Chart Double] -> ([Chart Double], Rect Double, Point Double)
- Chart.Render: renderToCharts :: ChartSvg -> [Chart Double]
- Chart.Render: svg :: Chart Double -> Html ()
- Chart.Render: svg2Tag :: Term [Attribute] (s -> t) => s -> t
- Chart.Render: svgShape :: GlyphShape -> Double -> Point Double -> Html ()
- Chart.Render: terms :: Text -> [Attribute] -> Html ()
- Chart.Render: writeChartSvg :: FilePath -> ChartSvg -> IO ()
- Chart.Render: writeChartSvgDefault :: FilePath -> [Chart Double] -> IO ()
- Chart.Render: writeChartSvgHud :: FilePath -> [Chart Double] -> IO ()
- Chart.Types: Adjustments :: Double -> Double -> Double -> Bool -> Adjustments
- Chart.Types: AnchorEnd :: Anchor
- Chart.Types: AnchorMiddle :: Anchor
- Chart.Types: AnchorStart :: Anchor
- Chart.Types: AxisBar :: RectStyle -> Double -> Double -> AxisBar
- Chart.Types: AxisOptions :: Maybe AxisBar -> Maybe Adjustments -> Tick -> Place -> AxisOptions
- Chart.Types: BlankA :: Annotation
- Chart.Types: CanvasAspect :: Double -> ChartAspect
- Chart.Types: Chart :: Annotation -> [XY a] -> Chart a
- Chart.Types: ChartAspect :: ChartAspect
- Chart.Types: ChartDims :: Rect a -> Rect a -> Rect a -> ChartDims a
- Chart.Types: CircleGlyph :: GlyphShape
- Chart.Types: EllipseGlyph :: Double -> GlyphShape
- Chart.Types: FixedAspect :: Double -> ChartAspect
- Chart.Types: GlyphA :: GlyphStyle -> Annotation
- Chart.Types: GlyphStyle :: Double -> Colour -> Colour -> Double -> GlyphShape -> Maybe Double -> Maybe (Point Double) -> GlyphStyle
- Chart.Types: HLineGlyph :: Double -> GlyphShape
- Chart.Types: Hori :: Orientation
- Chart.Types: Hud :: ([Chart a] -> StateT (ChartDims a) m [Chart a]) -> HudT m a
- Chart.Types: HudOptions :: Maybe RectStyle -> [Title] -> [AxisOptions] -> Maybe (LegendOptions, [(Annotation, Text)]) -> HudOptions
- Chart.Types: LegendOptions :: Double -> Double -> Double -> TextStyle -> Int -> Double -> Double -> Maybe RectStyle -> Place -> Double -> LegendOptions
- Chart.Types: LineA :: LineStyle -> Annotation
- Chart.Types: LineCapButt :: LineCap
- Chart.Types: LineCapRound :: LineCap
- Chart.Types: LineCapSquare :: LineCap
- Chart.Types: LineJoinBevel :: LineJoin
- Chart.Types: LineJoinMiter :: LineJoin
- Chart.Types: LineJoinRound :: LineJoin
- Chart.Types: LineStyle :: Double -> Colour -> Maybe LineCap -> Maybe LineJoin -> Maybe [Double] -> Maybe Double -> LineStyle
- Chart.Types: NoCssOptions :: CssOptions
- Chart.Types: NoTickExtend :: TickExtend
- Chart.Types: PathA :: PathStyle -> [PathInfo Double] -> Annotation
- Chart.Types: PathGlyph :: Text -> GlyphShape
- Chart.Types: PathStyle :: Double -> Colour -> Colour -> PathStyle
- Chart.Types: PlaceAbsolute :: Point Double -> Place
- Chart.Types: PlaceBottom :: Place
- Chart.Types: PlaceLeft :: Place
- Chart.Types: PlaceRight :: Place
- Chart.Types: PlaceTop :: Place
- Chart.Types: RectA :: RectStyle -> Annotation
- Chart.Types: RectRoundedGlyph :: Double -> Double -> Double -> GlyphShape
- Chart.Types: RectSharpGlyph :: Double -> GlyphShape
- Chart.Types: RectStyle :: Double -> Colour -> Colour -> RectStyle
- Chart.Types: SquareGlyph :: GlyphShape
- Chart.Types: SvgOptions :: Double -> Maybe Double -> Maybe Double -> Maybe RectStyle -> CssOptions -> ChartAspect -> Maybe Colour -> SvgOptions
- Chart.Types: TextA :: TextStyle -> [Text] -> Annotation
- Chart.Types: TextStyle :: Double -> Colour -> Anchor -> Double -> Double -> Double -> Maybe Double -> TextStyle
- Chart.Types: Tick :: TickStyle -> Maybe (GlyphStyle, Double) -> Maybe (TextStyle, Double) -> Maybe (LineStyle, Double) -> Tick
- Chart.Types: TickExact :: FormatN -> Int -> TickStyle
- Chart.Types: TickExtend :: TickExtend
- Chart.Types: TickLabels :: [Text] -> TickStyle
- Chart.Types: TickNone :: TickStyle
- Chart.Types: TickPlaced :: [(Double, Text)] -> TickStyle
- Chart.Types: TickRound :: FormatN -> Int -> TickExtend -> TickStyle
- Chart.Types: Title :: Text -> TextStyle -> Place -> Anchor -> Double -> Title
- Chart.Types: TriangleGlyph :: Point Double -> Point Double -> Point Double -> GlyphShape
- Chart.Types: UnadjustedAspect :: ChartAspect
- Chart.Types: UseCssCrisp :: CssOptions
- Chart.Types: UseGeometricPrecision :: CssOptions
- Chart.Types: VLineGlyph :: Double -> GlyphShape
- Chart.Types: Vert :: Orientation
- Chart.Types: [$sel:adjust:AxisOptions] :: AxisOptions -> Maybe Adjustments
- Chart.Types: [$sel:allowDiagonal:Adjustments] :: Adjustments -> Bool
- Chart.Types: [$sel:anchor:TextStyle] :: TextStyle -> Anchor
- Chart.Types: [$sel:anchor:Title] :: Title -> Anchor
- Chart.Types: [$sel:angledRatio:Adjustments] :: Adjustments -> Double
- Chart.Types: [$sel:annotation:Chart] :: Chart a -> Annotation
- Chart.Types: [$sel:axisBar:AxisOptions] :: AxisOptions -> Maybe AxisBar
- Chart.Types: [$sel:axisTick:AxisOptions] :: AxisOptions -> Tick
- Chart.Types: [$sel:background:SvgOptions] :: SvgOptions -> Maybe Colour
- Chart.Types: [$sel:borderColor:GlyphStyle] :: GlyphStyle -> Colour
- Chart.Types: [$sel:borderColor:PathStyle] :: PathStyle -> Colour
- Chart.Types: [$sel:borderColor:RectStyle] :: RectStyle -> Colour
- Chart.Types: [$sel:borderSize:GlyphStyle] :: GlyphStyle -> Double
- Chart.Types: [$sel:borderSize:PathStyle] :: PathStyle -> Double
- Chart.Types: [$sel:borderSize:RectStyle] :: RectStyle -> Double
- Chart.Types: [$sel:buff:AxisBar] :: AxisBar -> Double
- Chart.Types: [$sel:buff:Title] :: Title -> Double
- Chart.Types: [$sel:canvasDim:ChartDims] :: ChartDims a -> Rect a
- Chart.Types: [$sel:chartAspect:SvgOptions] :: SvgOptions -> ChartAspect
- Chart.Types: [$sel:chartDim:ChartDims] :: ChartDims a -> Rect a
- Chart.Types: [$sel:chartFrame:SvgOptions] :: SvgOptions -> Maybe RectStyle
- Chart.Types: [$sel:color:GlyphStyle] :: GlyphStyle -> Colour
- Chart.Types: [$sel:color:LineStyle] :: LineStyle -> Colour
- Chart.Types: [$sel:color:PathStyle] :: PathStyle -> Colour
- Chart.Types: [$sel:color:RectStyle] :: RectStyle -> Colour
- Chart.Types: [$sel:color:TextStyle] :: TextStyle -> Colour
- Chart.Types: [$sel:cssOptions:SvgOptions] :: SvgOptions -> CssOptions
- Chart.Types: [$sel:dasharray:LineStyle] :: LineStyle -> Maybe [Double]
- Chart.Types: [$sel:dashoffset:LineStyle] :: LineStyle -> Maybe Double
- Chart.Types: [$sel:dataDim:ChartDims] :: ChartDims a -> Rect a
- Chart.Types: [$sel:gtick:Tick] :: Tick -> Maybe (GlyphStyle, Double)
- Chart.Types: [$sel:hgap:LegendOptions] :: LegendOptions -> Double
- Chart.Types: [$sel:hsize:TextStyle] :: TextStyle -> Double
- Chart.Types: [$sel:hudAxes:HudOptions] :: HudOptions -> [AxisOptions]
- Chart.Types: [$sel:hudCanvas:HudOptions] :: HudOptions -> Maybe RectStyle
- Chart.Types: [$sel:hudLegend:HudOptions] :: HudOptions -> Maybe (LegendOptions, [(Annotation, Text)])
- Chart.Types: [$sel:hudTitles:HudOptions] :: HudOptions -> [Title]
- Chart.Types: [$sel:innerPad:LegendOptions] :: LegendOptions -> Double
- Chart.Types: [$sel:innerPad:SvgOptions] :: SvgOptions -> Maybe Double
- Chart.Types: [$sel:legendFrame:LegendOptions] :: LegendOptions -> Maybe RectStyle
- Chart.Types: [$sel:linecap:LineStyle] :: LineStyle -> Maybe LineCap
- Chart.Types: [$sel:linejoin:LineStyle] :: LineStyle -> Maybe LineJoin
- Chart.Types: [$sel:lmax:LegendOptions] :: LegendOptions -> Int
- Chart.Types: [$sel:lplace:LegendOptions] :: LegendOptions -> Place
- Chart.Types: [$sel:lscale:LegendOptions] :: LegendOptions -> Double
- Chart.Types: [$sel:lsize:LegendOptions] :: LegendOptions -> Double
- Chart.Types: [$sel:ltext:LegendOptions] :: LegendOptions -> TextStyle
- Chart.Types: [$sel:ltick:Tick] :: Tick -> Maybe (LineStyle, Double)
- Chart.Types: [$sel:maxXRatio:Adjustments] :: Adjustments -> Double
- Chart.Types: [$sel:maxYRatio:Adjustments] :: Adjustments -> Double
- Chart.Types: [$sel:nudge1:TextStyle] :: TextStyle -> Double
- Chart.Types: [$sel:outerPad:LegendOptions] :: LegendOptions -> Double
- Chart.Types: [$sel:outerPad:SvgOptions] :: SvgOptions -> Maybe Double
- Chart.Types: [$sel:place:AxisOptions] :: AxisOptions -> Place
- Chart.Types: [$sel:place:Title] :: Title -> Place
- Chart.Types: [$sel:rotation:GlyphStyle] :: GlyphStyle -> Maybe Double
- Chart.Types: [$sel:rotation:TextStyle] :: TextStyle -> Maybe Double
- Chart.Types: [$sel:rstyle:AxisBar] :: AxisBar -> RectStyle
- Chart.Types: [$sel:shape:GlyphStyle] :: GlyphStyle -> GlyphShape
- Chart.Types: [$sel:size:GlyphStyle] :: GlyphStyle -> Double
- Chart.Types: [$sel:size:TextStyle] :: TextStyle -> Double
- Chart.Types: [$sel:style:Title] :: Title -> TextStyle
- Chart.Types: [$sel:svgHeight:SvgOptions] :: SvgOptions -> Double
- Chart.Types: [$sel:text:Title] :: Title -> Text
- Chart.Types: [$sel:translate:GlyphStyle] :: GlyphStyle -> Maybe (Point Double)
- Chart.Types: [$sel:tstyle:Tick] :: Tick -> TickStyle
- Chart.Types: [$sel:ttick:Tick] :: Tick -> Maybe (TextStyle, Double)
- Chart.Types: [$sel:unhud:Hud] :: HudT m a -> [Chart a] -> StateT (ChartDims a) m [Chart a]
- Chart.Types: [$sel:vgap:LegendOptions] :: LegendOptions -> Double
- Chart.Types: [$sel:vsize:TextStyle] :: TextStyle -> Double
- Chart.Types: [$sel:wid:AxisBar] :: AxisBar -> Double
- Chart.Types: [$sel:width:LineStyle] :: LineStyle -> Double
- Chart.Types: [$sel:xys:Chart] :: Chart a -> [XY a]
- Chart.Types: adjustTick :: Adjustments -> Rect Double -> Rect Double -> Place -> Tick -> Tick
- Chart.Types: annotationText :: Annotation -> Text
- Chart.Types: blob :: Colour -> RectStyle
- Chart.Types: border :: Double -> Colour -> RectStyle
- Chart.Types: canvas :: Monad m => RectStyle -> HudT m Double
- Chart.Types: chartAspectHud :: Monad m => ChartAspect -> HudT m Double
- Chart.Types: clear :: RectStyle
- Chart.Types: colourAnn :: Colour -> Annotation -> Annotation
- Chart.Types: colourHudOptions :: Colour -> HudOptions -> HudOptions
- Chart.Types: data Adjustments
- Chart.Types: data Anchor
- Chart.Types: data Annotation
- Chart.Types: data AxisBar
- Chart.Types: data AxisOptions
- Chart.Types: data Chart a
- Chart.Types: data ChartAspect
- Chart.Types: data ChartDims a
- Chart.Types: data CssOptions
- Chart.Types: data GlyphShape
- Chart.Types: data GlyphStyle
- Chart.Types: data HudOptions
- Chart.Types: data LegendOptions
- Chart.Types: data LineCap
- Chart.Types: data LineJoin
- Chart.Types: data LineStyle
- Chart.Types: data Orientation
- Chart.Types: data PathStyle
- Chart.Types: data Place
- Chart.Types: data RectStyle
- Chart.Types: data SvgOptions
- Chart.Types: data TextStyle
- Chart.Types: data Tick
- Chart.Types: data TickExtend
- Chart.Types: data TickStyle
- Chart.Types: data Title
- Chart.Types: dataBox :: Chart Double -> Maybe (Rect Double)
- Chart.Types: dataBoxes :: [Chart Double] -> Maybe (Rect Double)
- Chart.Types: dataBoxesS :: [Chart Double] -> Rect Double
- Chart.Types: defaultAdjustments :: Adjustments
- Chart.Types: defaultAxisBar :: AxisBar
- Chart.Types: defaultAxisOptions :: AxisOptions
- Chart.Types: defaultCanvas :: RectStyle
- Chart.Types: defaultGlyphStyle :: GlyphStyle
- Chart.Types: defaultGlyphTick :: GlyphStyle
- Chart.Types: defaultHudOptions :: HudOptions
- Chart.Types: defaultLegendOptions :: LegendOptions
- Chart.Types: defaultLineStyle :: LineStyle
- Chart.Types: defaultLineTick :: LineStyle
- Chart.Types: defaultPathStyle :: PathStyle
- Chart.Types: defaultRectStyle :: RectStyle
- Chart.Types: defaultSvgFrame :: RectStyle
- Chart.Types: defaultSvgOptions :: SvgOptions
- Chart.Types: defaultTextStyle :: TextStyle
- Chart.Types: defaultTextTick :: TextStyle
- Chart.Types: defaultTick :: Tick
- Chart.Types: defaultTickStyle :: TickStyle
- Chart.Types: defaultTitle :: Text -> Title
- Chart.Types: flipAxis :: AxisOptions -> AxisOptions
- Chart.Types: frameAllCharts :: [Chart Double] -> [Chart Double]
- Chart.Types: frameChart :: RectStyle -> Double -> [Chart Double] -> [Chart Double]
- Chart.Types: fromAnchor :: IsString s => Anchor -> s
- Chart.Types: fromChartAspect :: IsString s => ChartAspect -> s
- Chart.Types: fromDashArray :: [Double] -> Text
- Chart.Types: fromLineCap :: IsString s => LineCap -> s
- Chart.Types: fromLineJoin :: IsString s => LineJoin -> s
- Chart.Types: fromOrientation :: IsString s => Orientation -> s
- Chart.Types: glyphText :: GlyphShape -> Text
- Chart.Types: hori :: Double -> [[Chart Double]] -> [Chart Double]
- Chart.Types: initialCanvas :: ChartAspect -> [Chart Double] -> Rect Double
- Chart.Types: instance GHC.Base.Monad m => GHC.Base.Monoid (Chart.Types.HudT m a)
- Chart.Types: instance GHC.Base.Monad m => GHC.Base.Semigroup (Chart.Types.HudT m a)
- Chart.Types: instance GHC.Base.Monoid Chart.Types.HudOptions
- Chart.Types: instance GHC.Base.Semigroup Chart.Types.HudOptions
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Adjustments
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Anchor
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Annotation
- Chart.Types: instance GHC.Classes.Eq Chart.Types.AxisBar
- Chart.Types: instance GHC.Classes.Eq Chart.Types.AxisOptions
- Chart.Types: instance GHC.Classes.Eq Chart.Types.ChartAspect
- Chart.Types: instance GHC.Classes.Eq Chart.Types.CssOptions
- Chart.Types: instance GHC.Classes.Eq Chart.Types.GlyphShape
- Chart.Types: instance GHC.Classes.Eq Chart.Types.GlyphStyle
- Chart.Types: instance GHC.Classes.Eq Chart.Types.HudOptions
- Chart.Types: instance GHC.Classes.Eq Chart.Types.LegendOptions
- Chart.Types: instance GHC.Classes.Eq Chart.Types.LineCap
- Chart.Types: instance GHC.Classes.Eq Chart.Types.LineJoin
- Chart.Types: instance GHC.Classes.Eq Chart.Types.LineStyle
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Orientation
- Chart.Types: instance GHC.Classes.Eq Chart.Types.PathStyle
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Place
- Chart.Types: instance GHC.Classes.Eq Chart.Types.RectStyle
- Chart.Types: instance GHC.Classes.Eq Chart.Types.SvgOptions
- Chart.Types: instance GHC.Classes.Eq Chart.Types.TextStyle
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Tick
- Chart.Types: instance GHC.Classes.Eq Chart.Types.TickComponents
- Chart.Types: instance GHC.Classes.Eq Chart.Types.TickExtend
- Chart.Types: instance GHC.Classes.Eq Chart.Types.TickStyle
- Chart.Types: instance GHC.Classes.Eq Chart.Types.Title
- Chart.Types: instance GHC.Classes.Eq a => GHC.Classes.Eq (Chart.Types.Chart a)
- Chart.Types: instance GHC.Classes.Eq a => GHC.Classes.Eq (Chart.Types.ChartDims a)
- Chart.Types: instance GHC.Generics.Generic (Chart.Types.Chart a)
- Chart.Types: instance GHC.Generics.Generic (Chart.Types.ChartDims a)
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Adjustments
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Anchor
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Annotation
- Chart.Types: instance GHC.Generics.Generic Chart.Types.AxisBar
- Chart.Types: instance GHC.Generics.Generic Chart.Types.AxisOptions
- Chart.Types: instance GHC.Generics.Generic Chart.Types.ChartAspect
- Chart.Types: instance GHC.Generics.Generic Chart.Types.CssOptions
- Chart.Types: instance GHC.Generics.Generic Chart.Types.GlyphShape
- Chart.Types: instance GHC.Generics.Generic Chart.Types.GlyphStyle
- Chart.Types: instance GHC.Generics.Generic Chart.Types.HudOptions
- Chart.Types: instance GHC.Generics.Generic Chart.Types.LegendOptions
- Chart.Types: instance GHC.Generics.Generic Chart.Types.LineCap
- Chart.Types: instance GHC.Generics.Generic Chart.Types.LineJoin
- Chart.Types: instance GHC.Generics.Generic Chart.Types.LineStyle
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Orientation
- Chart.Types: instance GHC.Generics.Generic Chart.Types.PathStyle
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Place
- Chart.Types: instance GHC.Generics.Generic Chart.Types.RectStyle
- Chart.Types: instance GHC.Generics.Generic Chart.Types.SvgOptions
- Chart.Types: instance GHC.Generics.Generic Chart.Types.TextStyle
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Tick
- Chart.Types: instance GHC.Generics.Generic Chart.Types.TickComponents
- Chart.Types: instance GHC.Generics.Generic Chart.Types.TickExtend
- Chart.Types: instance GHC.Generics.Generic Chart.Types.TickStyle
- Chart.Types: instance GHC.Generics.Generic Chart.Types.Title
- Chart.Types: instance GHC.Show.Show Chart.Types.Adjustments
- Chart.Types: instance GHC.Show.Show Chart.Types.Anchor
- Chart.Types: instance GHC.Show.Show Chart.Types.Annotation
- Chart.Types: instance GHC.Show.Show Chart.Types.AxisBar
- Chart.Types: instance GHC.Show.Show Chart.Types.AxisOptions
- Chart.Types: instance GHC.Show.Show Chart.Types.ChartAspect
- Chart.Types: instance GHC.Show.Show Chart.Types.CssOptions
- Chart.Types: instance GHC.Show.Show Chart.Types.GlyphShape
- Chart.Types: instance GHC.Show.Show Chart.Types.GlyphStyle
- Chart.Types: instance GHC.Show.Show Chart.Types.HudOptions
- Chart.Types: instance GHC.Show.Show Chart.Types.LegendOptions
- Chart.Types: instance GHC.Show.Show Chart.Types.LineCap
- Chart.Types: instance GHC.Show.Show Chart.Types.LineJoin
- Chart.Types: instance GHC.Show.Show Chart.Types.LineStyle
- Chart.Types: instance GHC.Show.Show Chart.Types.Orientation
- Chart.Types: instance GHC.Show.Show Chart.Types.PathStyle
- Chart.Types: instance GHC.Show.Show Chart.Types.Place
- Chart.Types: instance GHC.Show.Show Chart.Types.RectStyle
- Chart.Types: instance GHC.Show.Show Chart.Types.SvgOptions
- Chart.Types: instance GHC.Show.Show Chart.Types.TextStyle
- Chart.Types: instance GHC.Show.Show Chart.Types.Tick
- Chart.Types: instance GHC.Show.Show Chart.Types.TickComponents
- Chart.Types: instance GHC.Show.Show Chart.Types.TickExtend
- Chart.Types: instance GHC.Show.Show Chart.Types.TickStyle
- Chart.Types: instance GHC.Show.Show Chart.Types.Title
- Chart.Types: instance GHC.Show.Show a => GHC.Show.Show (Chart.Types.Chart a)
- Chart.Types: instance GHC.Show.Show a => GHC.Show.Show (Chart.Types.ChartDims a)
- Chart.Types: legendHud :: LegendOptions -> [Chart Double] -> Hud Double
- Chart.Types: makeHud :: Rect Double -> HudOptions -> ([Hud Double], [Chart Double])
- Chart.Types: makeTickDates :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Int, Text)]
- Chart.Types: makeTickDatesContinuous :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Double, Text)]
- Chart.Types: moveChart :: Additive a => XY a -> [Chart a] -> [Chart a]
- Chart.Types: newtype HudT m a
- Chart.Types: padBox :: Maybe (Rect Double) -> Rect Double
- Chart.Types: padChart :: Double -> [Chart Double] -> [Chart Double]
- Chart.Types: padRect :: Subtractive a => a -> Rect a -> Rect a
- Chart.Types: placeText :: Place -> Text
- Chart.Types: projectArcPosition :: Rect Double -> Rect Double -> ArcPosition Double -> ArcInfo Double
- Chart.Types: projectXYs :: Rect Double -> [Chart Double] -> [Chart Double]
- Chart.Types: projectXYsWith :: Rect Double -> Rect Double -> [Chart Double] -> [Chart Double]
- Chart.Types: runHud :: Rect Double -> [Hud Double] -> [Chart Double] -> [Chart Double]
- Chart.Types: runHudWith :: Rect Double -> Rect Double -> [Hud Double] -> [Chart Double] -> [Chart Double]
- Chart.Types: scaleAnn :: Double -> Annotation -> Annotation
- Chart.Types: scaleOpacAnn :: Double -> Annotation -> Annotation
- Chart.Types: scaleOpacHudOptions :: HudOptions -> Double -> HudOptions
- Chart.Types: simulHud :: (Ord a, Monad m) => HudT m a -> HudT m a -> HudT m a
- Chart.Types: stack :: Int -> Double -> [[Chart Double]] -> [Chart Double]
- Chart.Types: styleBox :: Chart Double -> Maybe (Rect Double)
- Chart.Types: styleBoxGlyph :: GlyphStyle -> Rect Double
- Chart.Types: styleBoxText :: TextStyle -> Text -> Point Double -> Rect Double
- Chart.Types: styleBoxes :: [Chart Double] -> Maybe (Rect Double)
- Chart.Types: styleBoxesS :: [Chart Double] -> Rect Double
- Chart.Types: tick :: Monad m => Place -> Tick -> HudT m Double
- Chart.Types: tickStyleText :: TickStyle -> Text
- Chart.Types: title :: Monad m => Title -> HudT m Double
- Chart.Types: toAnchor :: (Eq s, IsString s) => s -> Anchor
- Chart.Types: toChartAspect :: (Eq s, IsString s) => s -> Double -> ChartAspect
- Chart.Types: toLineCap :: (Eq s, IsString s) => s -> LineCap
- Chart.Types: toLineJoin :: (Eq s, IsString s) => s -> LineJoin
- Chart.Types: toOrientation :: (Eq s, IsString s) => s -> Orientation
- Chart.Types: toPathChart :: PathStyle -> [(PathInfo Double, Point Double)] -> Chart Double
- Chart.Types: type Hud = HudT Identity
- Chart.Types: vert :: Double -> [[Chart Double]] -> [Chart Double]
- Chart.Various: addLineX :: Double -> LineStyle -> [Chart Double] -> [Chart Double]
- Chart.Various: addLineY :: Double -> LineStyle -> [Chart Double] -> [Chart Double]
- Chart.Various: blendMidLineStyles :: Int -> Double -> (Colour, Colour) -> [LineStyle]
- Chart.Various: digitChart :: Text -> [UTCTime] -> [Double] -> ChartSvg
- Chart.Various: digitSurfaceChart :: SurfaceStyle -> SurfaceLegendOptions -> (Text, Text, Text) -> [Text] -> [(Int, Int)] -> [Chart Double]
- Chart.Various: gpalette :: [(GlyphShape, Double)]
- Chart.Various: gpaletteStyle :: Double -> [GlyphStyle]
- Chart.Various: histChart :: Text -> Maybe [Text] -> Range Double -> Int -> [Double] -> ChartSvg
- Chart.Various: lineLegend :: Double -> [Text] -> [Colour] -> (LegendOptions, [(Annotation, Text)])
- Chart.Various: quantileChart :: Text -> [Text] -> [LineStyle] -> [AxisOptions] -> [[Double]] -> ChartSvg
- Chart.Various: quantileHistChart :: Text -> Maybe [Text] -> [Double] -> [Double] -> ChartSvg
- Chart.Various: scatterChart :: [[Point Double]] -> [Chart Double]
- Chart.Various: stdLineChart :: Double -> [Colour] -> [[Double]] -> [Chart Double]
- Chart.Various: stdLines :: Double -> [LineStyle]
- Chart.Various: tableChart :: [[Text]] -> [Chart Double]
- Chart.Various: titlesHud :: Text -> Text -> Text -> HudOptions
- Chart.Various: tsAxes :: [UTCTime] -> [AxisOptions]
- Chart.Various: xify :: [Double] -> [Point Double]
- Chart.Various: xify' :: [Double] -> [XY Double]
- Chart.Various: yify :: [Double] -> [Point Double]
- Chart.Various: yify' :: [Double] -> [XY Double]
- Data.Colour: blend :: Double -> Colour -> Colour -> Colour
- Data.Colour: blends :: Double -> [Colour] -> Colour
- Data.Colour: palette1_ :: [Colour]
- Data.Colour: setOpac :: Double -> Colour -> Colour
- Data.FormatN: FormatComma :: Maybe Int -> FormatN
- Data.FormatN: FormatDecimal :: Maybe Int -> FormatN
- Data.FormatN: FormatDollar :: Maybe Int -> FormatN
- Data.FormatN: FormatExpt :: Maybe Int -> FormatN
- Data.FormatN: FormatFixed :: Maybe Int -> FormatN
- Data.FormatN: FormatNone :: FormatN
- Data.FormatN: FormatPercent :: Maybe Int -> FormatN
- Data.FormatN: FormatPrec :: Maybe Int -> FormatN
- Data.FormatN: comma :: Maybe Int -> Double -> Text
- Data.FormatN: data FormatN
- Data.FormatN: decimal :: Maybe Int -> Double -> Text
- Data.FormatN: defaultFormatN :: FormatN
- Data.FormatN: dollar :: Maybe Int -> Double -> Text
- Data.FormatN: expt :: Maybe Int -> Double -> Text
- Data.FormatN: fixed :: Maybe Int -> Double -> Text
- Data.FormatN: formatN :: FormatN -> Double -> Text
- Data.FormatN: formatNs :: FormatN -> [Double] -> [Text]
- Data.FormatN: fromFormatN :: IsString s => FormatN -> s
- Data.FormatN: instance GHC.Classes.Eq Data.FormatN.FormatN
- Data.FormatN: instance GHC.Generics.Generic Data.FormatN.FormatN
- Data.FormatN: instance GHC.Show.Show Data.FormatN.FormatN
- Data.FormatN: percent :: Maybe Int -> Double -> Text
- Data.FormatN: prec :: Maybe Int -> Double -> Text
- Data.FormatN: precision :: (Maybe Int -> Double -> Text) -> Maybe Int -> [Double] -> [Text]
- Data.FormatN: roundSig :: Int -> Double -> Scientific
- Data.FormatN: showOr :: FormatN -> Double -> Text
- Data.FormatN: toFormatN :: (Eq s, IsString s) => s -> Maybe Int -> FormatN
- Data.Path: ArcI :: ArcInfo a -> PathInfo a
- Data.Path: CubicI :: Point a -> Point a -> PathInfo a
- Data.Path: LineI :: PathInfo a
- Data.Path: QuadI :: Point a -> PathInfo a
- Data.Path: StartI :: PathInfo a
- Data.Path: data PathInfo a
- Data.Path: instance GHC.Classes.Eq Data.Path.StateInfo
- Data.Path: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Path.PathInfo a)
- Data.Path: instance GHC.Generics.Generic (Data.Path.PathInfo a)
- Data.Path: instance GHC.Generics.Generic Data.Path.StateInfo
- Data.Path: instance GHC.Show.Show Data.Path.StateInfo
- Data.Path: instance GHC.Show.Show a => GHC.Show.Show (Data.Path.PathInfo a)
- Data.Path: parsePath :: Text -> [PathCommand]
- Data.Path: singletonPie' :: Point Double -> ArcPosition Double -> [(PathInfo Double, Point Double)]
- Data.Path: toPathAbsolute :: (PathInfo Double, Point Double) -> Text
- Data.Path: toPathAbsolutes :: [(PathInfo Double, Point Double)] -> Text
- Data.Path: toPathCommand :: (PathInfo Double, Point Double) -> PathCommand
- Data.Path: toPathXYs :: [PathCommand] -> [(PathInfo Double, Point Double)]
- Data.Path: toSingletonArc :: [(PathInfo Double, Point Double)] -> Maybe (ArcPosition Double)
+ Chart.Bar: [barLegendOptions] :: BarOptions -> LegendOptions
+ Chart.Data: Point :: a -> a -> Point a
+ Chart.Data: Rect' :: Compose Point Range a -> Rect a
+ Chart.Data: [_x] :: Point a -> a
+ Chart.Data: [_y] :: Point a -> a
+ Chart.Data: abs :: Signed a => a -> a
+ Chart.Data: addp :: Point Double -> Point Double -> Point Double
+ Chart.Data: angle :: Direction coord dir => coord -> dir
+ Chart.Data: basis :: Norm a b => a -> a
+ Chart.Data: class Additive a
+ Chart.Data: class (Additive coord, Multiplicative coord, Additive dir, Multiplicative dir) => Direction coord dir | coord -> dir
+ Chart.Data: class Multiplicative a
+ Chart.Data: class (Additive a, Multiplicative b, Additive b) => Norm a b | a -> b
+ Chart.Data: class (Additive a, Multiplicative a) => Signed a
+ Chart.Data: data Point a
+ Chart.Data: newtype Rect a
+ Chart.Data: norm :: Norm a b => a -> b
+ Chart.Data: one :: Multiplicative a => a
+ Chart.Data: padRect :: Subtractive a => a -> Rect a -> Rect a
+ Chart.Data: padSingletons :: Rect Double -> Rect Double
+ Chart.Data: ray :: Direction coord dir => dir -> coord
+ Chart.Data: sign :: Signed a => a -> a
+ Chart.Data: singletonGuard :: Maybe (Rect Double) -> Rect Double
+ Chart.Data: zero :: Additive a => a
+ Chart.Examples: dateExample :: ChartSvg
+ Chart.Examples: debugExample :: ChartSvg -> ChartSvg
+ Chart.Examples: gradientExample :: ChartSvg
+ Chart.Examples: wheelExample :: ChartSvg
+ Chart.Examples: writeAllExamplesDark :: IO ()
+ Chart.Hud: Adjustments :: Double -> Double -> Double -> Bool -> Adjustments
+ Chart.Hud: AxisBar :: RectStyle -> Double -> Double -> Double -> AxisBar
+ Chart.Hud: AxisOptions :: Maybe AxisBar -> Maybe Adjustments -> Ticks -> Place -> AxisOptions
+ Chart.Hud: FrameOptions :: Maybe RectStyle -> Double -> FrameOptions
+ Chart.Hud: Hud :: Priority -> State HudChart ChartTree -> Hud
+ Chart.Hud: HudChart :: ChartTree -> ChartTree -> DataBox -> HudChart
+ Chart.Hud: HudOptions :: ChartAspect -> [(Priority, AxisOptions)] -> [(Priority, FrameOptions)] -> [(Priority, LegendOptions)] -> [(Priority, Title)] -> HudOptions
+ Chart.Hud: LegendOptions :: Double -> Double -> Double -> Double -> TextStyle -> Double -> Double -> Maybe RectStyle -> Place -> Double -> [(Text, Chart)] -> LegendOptions
+ Chart.Hud: NoTickExtend :: TickExtend
+ Chart.Hud: PlaceAbsolute :: Point Double -> Place
+ Chart.Hud: PlaceBottom :: Place
+ Chart.Hud: PlaceLeft :: Place
+ Chart.Hud: PlaceRight :: Place
+ Chart.Hud: PlaceTop :: Place
+ Chart.Hud: TickExact :: FormatN -> Int -> TickStyle
+ Chart.Hud: TickExtend :: TickExtend
+ Chart.Hud: TickLabels :: [Text] -> TickStyle
+ Chart.Hud: TickNone :: TickStyle
+ Chart.Hud: TickPlaced :: [(Double, Text)] -> TickStyle
+ Chart.Hud: TickRound :: FormatN -> Int -> TickExtend -> TickStyle
+ Chart.Hud: Ticks :: TickStyle -> Maybe (GlyphStyle, Double) -> Maybe (TextStyle, Double) -> Maybe (LineStyle, Double) -> Ticks
+ Chart.Hud: Title :: Text -> TextStyle -> Place -> Anchor -> Double -> Title
+ Chart.Hud: [$sel:adjust:AxisOptions] :: AxisOptions -> Maybe Adjustments
+ Chart.Hud: [$sel:allowDiagonal:Adjustments] :: Adjustments -> Bool
+ Chart.Hud: [$sel:anchor:Title] :: Title -> Anchor
+ Chart.Hud: [$sel:angledRatio:Adjustments] :: Adjustments -> Double
+ Chart.Hud: [$sel:axes:HudOptions] :: HudOptions -> [(Priority, AxisOptions)]
+ Chart.Hud: [$sel:bar:AxisOptions] :: AxisOptions -> Maybe AxisBar
+ Chart.Hud: [$sel:buffer:AxisBar] :: AxisBar -> Double
+ Chart.Hud: [$sel:buffer:FrameOptions] :: FrameOptions -> Double
+ Chart.Hud: [$sel:buffer:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: [$sel:buffer:Title] :: Title -> Double
+ Chart.Hud: [$sel:chart:HudChart] :: HudChart -> ChartTree
+ Chart.Hud: [$sel:chartAspect:HudOptions] :: HudOptions -> ChartAspect
+ Chart.Hud: [$sel:content:LegendOptions] :: LegendOptions -> [(Text, Chart)]
+ Chart.Hud: [$sel:dataBox:HudChart] :: HudChart -> DataBox
+ Chart.Hud: [$sel:frame:FrameOptions] :: FrameOptions -> Maybe RectStyle
+ Chart.Hud: [$sel:frame:LegendOptions] :: LegendOptions -> Maybe RectStyle
+ Chart.Hud: [$sel:frames:HudOptions] :: HudOptions -> [(Priority, FrameOptions)]
+ Chart.Hud: [$sel:gtick:Ticks] :: Ticks -> Maybe (GlyphStyle, Double)
+ Chart.Hud: [$sel:hgap:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: [$sel:hud:HudChart] :: HudChart -> ChartTree
+ Chart.Hud: [$sel:hud:Hud] :: Hud -> State HudChart ChartTree
+ Chart.Hud: [$sel:innerPad:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: [$sel:legends:HudOptions] :: HudOptions -> [(Priority, LegendOptions)]
+ Chart.Hud: [$sel:ltick:Ticks] :: Ticks -> Maybe (LineStyle, Double)
+ Chart.Hud: [$sel:maxXRatio:Adjustments] :: Adjustments -> Double
+ Chart.Hud: [$sel:maxYRatio:Adjustments] :: Adjustments -> Double
+ Chart.Hud: [$sel:outerPad:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: [$sel:overallScale:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: [$sel:overhang:AxisBar] :: AxisBar -> Double
+ Chart.Hud: [$sel:place:AxisOptions] :: AxisOptions -> Place
+ Chart.Hud: [$sel:place:LegendOptions] :: LegendOptions -> Place
+ Chart.Hud: [$sel:place:Title] :: Title -> Place
+ Chart.Hud: [$sel:priority:Hud] :: Hud -> Priority
+ Chart.Hud: [$sel:size:AxisBar] :: AxisBar -> Double
+ Chart.Hud: [$sel:size:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: [$sel:style:AxisBar] :: AxisBar -> RectStyle
+ Chart.Hud: [$sel:style:Ticks] :: Ticks -> TickStyle
+ Chart.Hud: [$sel:style:Title] :: Title -> TextStyle
+ Chart.Hud: [$sel:text:Title] :: Title -> Text
+ Chart.Hud: [$sel:textStyle:LegendOptions] :: LegendOptions -> TextStyle
+ Chart.Hud: [$sel:ticks:AxisOptions] :: AxisOptions -> Ticks
+ Chart.Hud: [$sel:titles:HudOptions] :: HudOptions -> [(Priority, Title)]
+ Chart.Hud: [$sel:ttick:Ticks] :: Ticks -> Maybe (TextStyle, Double)
+ Chart.Hud: [$sel:vgap:LegendOptions] :: LegendOptions -> Double
+ Chart.Hud: adjustTicks :: Adjustments -> HudBox -> DataBox -> Place -> Ticks -> Ticks
+ Chart.Hud: applyChartAspect :: ChartAspect -> State HudChart ()
+ Chart.Hud: canvasBox' :: Lens' HudChart (Maybe CanvasBox)
+ Chart.Hud: canvasStyleBox' :: Getter HudChart (Maybe CanvasBox)
+ Chart.Hud: closes :: Traversable f => f (State HudChart ChartTree) -> State HudChart ()
+ Chart.Hud: colourHudOptions :: (Colour -> Colour) -> HudOptions -> HudOptions
+ Chart.Hud: data Adjustments
+ Chart.Hud: data AxisBar
+ Chart.Hud: data AxisOptions
+ Chart.Hud: data FrameOptions
+ Chart.Hud: data Hud
+ Chart.Hud: data HudChart
+ Chart.Hud: data HudOptions
+ Chart.Hud: data LegendOptions
+ Chart.Hud: data Place
+ Chart.Hud: data TickExtend
+ Chart.Hud: data TickStyle
+ Chart.Hud: data Ticks
+ Chart.Hud: data Title
+ Chart.Hud: defaultAdjustments :: Adjustments
+ Chart.Hud: defaultAxisBar :: AxisBar
+ Chart.Hud: defaultAxisOptions :: AxisOptions
+ Chart.Hud: defaultFrameOptions :: FrameOptions
+ Chart.Hud: defaultGlyphTick :: GlyphStyle
+ Chart.Hud: defaultHudOptions :: HudOptions
+ Chart.Hud: defaultLegendOptions :: LegendOptions
+ Chart.Hud: defaultLineTick :: LineStyle
+ Chart.Hud: defaultTextTick :: TextStyle
+ Chart.Hud: defaultTickStyle :: TickStyle
+ Chart.Hud: defaultTicks :: Ticks
+ Chart.Hud: defaultTitle :: Text -> Title
+ Chart.Hud: flipAxis :: AxisOptions -> AxisOptions
+ Chart.Hud: frameHud :: FrameOptions -> State HudChart ChartTree
+ Chart.Hud: fromEffect :: Priority -> State HudChart () -> Hud
+ Chart.Hud: getHudBox :: ChartAspect -> HudChart -> Maybe HudBox
+ Chart.Hud: hudBox' :: Lens' HudChart (Maybe HudBox)
+ Chart.Hud: hudStyleBox' :: Getter HudChart (Maybe HudBox)
+ Chart.Hud: instance GHC.Base.Monoid Chart.Hud.HudOptions
+ Chart.Hud: instance GHC.Base.Semigroup Chart.Hud.HudOptions
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.Adjustments
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.AxisBar
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.AxisOptions
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.FrameOptions
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.HudChart
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.HudOptions
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.LegendOptions
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.Place
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.TickExtend
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.TickStyle
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.Ticks
+ Chart.Hud: instance GHC.Classes.Eq Chart.Hud.Title
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.Adjustments
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.AxisBar
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.AxisOptions
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.FrameOptions
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.Hud
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.HudChart
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.HudOptions
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.LegendOptions
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.Place
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.TickExtend
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.TickStyle
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.Ticks
+ Chart.Hud: instance GHC.Generics.Generic Chart.Hud.Title
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.Adjustments
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.AxisBar
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.AxisOptions
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.FrameOptions
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.HudChart
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.HudOptions
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.LegendOptions
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.Place
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.TickExtend
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.TickStyle
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.Ticks
+ Chart.Hud: instance GHC.Show.Show Chart.Hud.Title
+ Chart.Hud: legend :: LegendOptions -> State HudChart ChartTree
+ Chart.Hud: legendFrame :: LegendOptions -> ChartTree -> ChartTree
+ Chart.Hud: legendHud :: LegendOptions -> ChartTree -> State HudChart ChartTree
+ Chart.Hud: placeText :: Place -> Text
+ Chart.Hud: runHud :: CanvasBox -> [Hud] -> ChartTree -> ChartTree
+ Chart.Hud: runHudWith :: CanvasBox -> DataBox -> [Hud] -> ChartTree -> ChartTree
+ Chart.Hud: tickStyleText :: TickStyle -> Text
+ Chart.Hud: toHuds :: HudOptions -> DataBox -> ([Hud], DataBox)
+ Chart.Hud: type CanvasBox = Rect Double
+ Chart.Hud: type DataBox = Rect Double
+ Chart.Hud: type HudBox = Rect Double
+ Chart.Hud: type Priority = Double
+ Chart.Primitive: CanvasAspect :: Double -> ChartAspect
+ Chart.Primitive: ChartAspect :: ChartAspect
+ Chart.Primitive: ChartTree :: Tree (Maybe Text, [Chart]) -> ChartTree
+ Chart.Primitive: FixedAspect :: Double -> ChartAspect
+ Chart.Primitive: Hori :: Orientation
+ Chart.Primitive: Vert :: Orientation
+ Chart.Primitive: [BlankChart] :: [Rect Double] -> Chart
+ Chart.Primitive: [GlyphChart] :: GlyphStyle -> [Point Double] -> Chart
+ Chart.Primitive: [LineChart] :: LineStyle -> [[Point Double]] -> Chart
+ Chart.Primitive: [PathChart] :: PathStyle -> [PathData Double] -> Chart
+ Chart.Primitive: [RectChart] :: RectStyle -> [Rect Double] -> Chart
+ Chart.Primitive: [TextChart] :: TextStyle -> [(Text, Point Double)] -> Chart
+ Chart.Primitive: [tree] :: ChartTree -> Tree (Maybe Text, [Chart])
+ Chart.Primitive: blank :: Rect Double -> ChartTree
+ Chart.Primitive: box :: Chart -> Maybe (Rect Double)
+ Chart.Primitive: box' :: Lens' ChartTree (Maybe (Rect Double))
+ Chart.Primitive: boxes :: [Chart] -> Maybe (Rect Double)
+ Chart.Primitive: chart' :: Traversal' ChartTree Chart
+ Chart.Primitive: charts' :: Traversal' ChartTree [Chart]
+ Chart.Primitive: colourChart :: (Colour -> Colour) -> Chart -> Chart
+ Chart.Primitive: data Chart
+ Chart.Primitive: data ChartAspect
+ Chart.Primitive: data Orientation
+ Chart.Primitive: filterChartTree :: (Chart -> Bool) -> ChartTree -> ChartTree
+ Chart.Primitive: frameChart :: RectStyle -> Double -> [Chart] -> Chart
+ Chart.Primitive: glyphize :: GlyphStyle -> ChartTree -> ChartTree
+ Chart.Primitive: group :: Maybe Text -> [ChartTree] -> ChartTree
+ Chart.Primitive: hori :: Double -> [ChartTree] -> ChartTree
+ Chart.Primitive: instance GHC.Base.Monoid Chart.Primitive.ChartTree
+ Chart.Primitive: instance GHC.Base.Semigroup Chart.Primitive.ChartTree
+ Chart.Primitive: instance GHC.Classes.Eq Chart.Primitive.Chart
+ Chart.Primitive: instance GHC.Classes.Eq Chart.Primitive.ChartAspect
+ Chart.Primitive: instance GHC.Classes.Eq Chart.Primitive.ChartTree
+ Chart.Primitive: instance GHC.Classes.Eq Chart.Primitive.Orientation
+ Chart.Primitive: instance GHC.Generics.Generic Chart.Primitive.ChartAspect
+ Chart.Primitive: instance GHC.Generics.Generic Chart.Primitive.ChartTree
+ Chart.Primitive: instance GHC.Generics.Generic Chart.Primitive.Orientation
+ Chart.Primitive: instance GHC.Show.Show Chart.Primitive.Chart
+ Chart.Primitive: instance GHC.Show.Show Chart.Primitive.ChartAspect
+ Chart.Primitive: instance GHC.Show.Show Chart.Primitive.ChartTree
+ Chart.Primitive: instance GHC.Show.Show Chart.Primitive.Orientation
+ Chart.Primitive: isEmptyChart :: Chart -> Bool
+ Chart.Primitive: maybeProjectWith :: Maybe (Rect Double) -> Maybe (Rect Double) -> Chart -> Chart
+ Chart.Primitive: moveChart :: Point Double -> Chart -> Chart
+ Chart.Primitive: named :: Text -> [Chart] -> ChartTree
+ Chart.Primitive: newtype ChartTree
+ Chart.Primitive: overText :: (TextStyle -> TextStyle) -> Chart -> Chart
+ Chart.Primitive: padChart :: Double -> [Chart] -> Chart
+ Chart.Primitive: projectChartTree :: Rect Double -> [Chart] -> [Chart]
+ Chart.Primitive: projectWith :: Rect Double -> Rect Double -> Chart -> Chart
+ Chart.Primitive: rectangularize :: RectStyle -> ChartTree -> ChartTree
+ Chart.Primitive: rename :: Maybe Text -> ChartTree -> ChartTree
+ Chart.Primitive: sbox :: Chart -> Maybe (Rect Double)
+ Chart.Primitive: scaleChart :: Double -> Chart -> Chart
+ Chart.Primitive: scaleStyle :: Double -> Chart -> Chart
+ Chart.Primitive: stack :: Int -> Double -> [ChartTree] -> ChartTree
+ Chart.Primitive: styleBox' :: Lens' ChartTree (Maybe (Rect Double))
+ Chart.Primitive: styleBoxes :: [Chart] -> Maybe (Rect Double)
+ Chart.Primitive: tree' :: Iso' ChartTree (Tree (Maybe Text, [Chart]))
+ Chart.Primitive: unnamed :: [Chart] -> ChartTree
+ Chart.Primitive: vert :: Double -> [ChartTree] -> ChartTree
+ Chart.Style: AnchorEnd :: Anchor
+ Chart.Style: AnchorMiddle :: Anchor
+ Chart.Style: AnchorStart :: Anchor
+ Chart.Style: CircleGlyph :: GlyphShape
+ Chart.Style: EllipseGlyph :: Double -> GlyphShape
+ Chart.Style: GlyphStyle :: Double -> Colour -> Colour -> Double -> GlyphShape -> Maybe Double -> Maybe (Point Double) -> GlyphStyle
+ Chart.Style: HLineGlyph :: GlyphShape
+ Chart.Style: LineCapButt :: LineCap
+ Chart.Style: LineCapRound :: LineCap
+ Chart.Style: LineCapSquare :: LineCap
+ Chart.Style: LineJoinBevel :: LineJoin
+ Chart.Style: LineJoinMiter :: LineJoin
+ Chart.Style: LineJoinRound :: LineJoin
+ Chart.Style: LineStyle :: Double -> Colour -> Maybe LineCap -> Maybe LineJoin -> Maybe [Double] -> Maybe Double -> LineStyle
+ Chart.Style: NoScaleBorder :: ScaleBorder
+ Chart.Style: NoScaleX :: ScaleX
+ Chart.Style: PathGlyph :: Text -> ScaleBorder -> GlyphShape
+ Chart.Style: PathStyle :: Double -> Colour -> Colour -> PathStyle
+ Chart.Style: RectRoundedGlyph :: Double -> Double -> Double -> GlyphShape
+ Chart.Style: RectSharpGlyph :: Double -> GlyphShape
+ Chart.Style: RectStyle :: Double -> Colour -> Colour -> RectStyle
+ Chart.Style: ScaleBorder :: ScaleBorder
+ Chart.Style: ScaleX :: ScaleX
+ Chart.Style: SquareGlyph :: GlyphShape
+ Chart.Style: TextStyle :: Double -> Colour -> Anchor -> Double -> Double -> Double -> Maybe Double -> ScaleX -> Maybe RectStyle -> TextStyle
+ Chart.Style: TriangleGlyph :: Point Double -> Point Double -> Point Double -> GlyphShape
+ Chart.Style: VLineGlyph :: GlyphShape
+ Chart.Style: [$sel:anchor:TextStyle] :: TextStyle -> Anchor
+ Chart.Style: [$sel:borderColor:GlyphStyle] :: GlyphStyle -> Colour
+ Chart.Style: [$sel:borderColor:PathStyle] :: PathStyle -> Colour
+ Chart.Style: [$sel:borderColor:RectStyle] :: RectStyle -> Colour
+ Chart.Style: [$sel:borderSize:GlyphStyle] :: GlyphStyle -> Double
+ Chart.Style: [$sel:borderSize:PathStyle] :: PathStyle -> Double
+ Chart.Style: [$sel:borderSize:RectStyle] :: RectStyle -> Double
+ Chart.Style: [$sel:color:GlyphStyle] :: GlyphStyle -> Colour
+ Chart.Style: [$sel:color:LineStyle] :: LineStyle -> Colour
+ Chart.Style: [$sel:color:PathStyle] :: PathStyle -> Colour
+ Chart.Style: [$sel:color:RectStyle] :: RectStyle -> Colour
+ Chart.Style: [$sel:color:TextStyle] :: TextStyle -> Colour
+ Chart.Style: [$sel:dasharray:LineStyle] :: LineStyle -> Maybe [Double]
+ Chart.Style: [$sel:dashoffset:LineStyle] :: LineStyle -> Maybe Double
+ Chart.Style: [$sel:frame:TextStyle] :: TextStyle -> Maybe RectStyle
+ Chart.Style: [$sel:hsize:TextStyle] :: TextStyle -> Double
+ Chart.Style: [$sel:linecap:LineStyle] :: LineStyle -> Maybe LineCap
+ Chart.Style: [$sel:linejoin:LineStyle] :: LineStyle -> Maybe LineJoin
+ Chart.Style: [$sel:rotation:GlyphStyle] :: GlyphStyle -> Maybe Double
+ Chart.Style: [$sel:rotation:TextStyle] :: TextStyle -> Maybe Double
+ Chart.Style: [$sel:scalex:TextStyle] :: TextStyle -> ScaleX
+ Chart.Style: [$sel:shape:GlyphStyle] :: GlyphStyle -> GlyphShape
+ Chart.Style: [$sel:size:GlyphStyle] :: GlyphStyle -> Double
+ Chart.Style: [$sel:size:LineStyle] :: LineStyle -> Double
+ Chart.Style: [$sel:size:TextStyle] :: TextStyle -> Double
+ Chart.Style: [$sel:translate:GlyphStyle] :: GlyphStyle -> Maybe (Point Double)
+ Chart.Style: [$sel:vshift:TextStyle] :: TextStyle -> Double
+ Chart.Style: [$sel:vsize:TextStyle] :: TextStyle -> Double
+ Chart.Style: blob :: Colour -> RectStyle
+ Chart.Style: border :: Double -> Colour -> RectStyle
+ Chart.Style: clear :: RectStyle
+ Chart.Style: data Anchor
+ Chart.Style: data GlyphShape
+ Chart.Style: data GlyphStyle
+ Chart.Style: data LineCap
+ Chart.Style: data LineJoin
+ Chart.Style: data LineStyle
+ Chart.Style: data PathStyle
+ Chart.Style: data RectStyle
+ Chart.Style: data ScaleBorder
+ Chart.Style: data ScaleX
+ Chart.Style: data TextStyle
+ Chart.Style: defaultGlyphStyle :: GlyphStyle
+ Chart.Style: defaultLineStyle :: LineStyle
+ Chart.Style: defaultPathStyle :: PathStyle
+ Chart.Style: defaultRectStyle :: RectStyle
+ Chart.Style: defaultTextStyle :: TextStyle
+ Chart.Style: fromAnchor :: IsString s => Anchor -> s
+ Chart.Style: fromDashArray :: [Double] -> Text
+ Chart.Style: fromLineCap :: IsString s => LineCap -> s
+ Chart.Style: fromLineJoin :: IsString s => LineJoin -> s
+ Chart.Style: glyphText :: GlyphShape -> Text
+ Chart.Style: gpalette1 :: Int -> GlyphShape
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.Anchor
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.GlyphShape
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.GlyphStyle
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.LineCap
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.LineJoin
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.LineStyle
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.PathStyle
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.RectStyle
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.ScaleBorder
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.ScaleX
+ Chart.Style: instance GHC.Classes.Eq Chart.Style.TextStyle
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.Anchor
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.GlyphShape
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.GlyphStyle
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.LineCap
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.LineJoin
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.LineStyle
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.PathStyle
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.RectStyle
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.ScaleBorder
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.ScaleX
+ Chart.Style: instance GHC.Generics.Generic Chart.Style.TextStyle
+ Chart.Style: instance GHC.Show.Show Chart.Style.Anchor
+ Chart.Style: instance GHC.Show.Show Chart.Style.GlyphShape
+ Chart.Style: instance GHC.Show.Show Chart.Style.GlyphStyle
+ Chart.Style: instance GHC.Show.Show Chart.Style.LineCap
+ Chart.Style: instance GHC.Show.Show Chart.Style.LineJoin
+ Chart.Style: instance GHC.Show.Show Chart.Style.LineStyle
+ Chart.Style: instance GHC.Show.Show Chart.Style.PathStyle
+ Chart.Style: instance GHC.Show.Show Chart.Style.RectStyle
+ Chart.Style: instance GHC.Show.Show Chart.Style.ScaleBorder
+ Chart.Style: instance GHC.Show.Show Chart.Style.ScaleX
+ Chart.Style: instance GHC.Show.Show Chart.Style.TextStyle
+ Chart.Style: styleBoxGlyph :: GlyphStyle -> Rect Double
+ Chart.Style: styleBoxText :: TextStyle -> Text -> Point Double -> Rect Double
+ Chart.Style: toAnchor :: (Eq s, IsString s) => s -> Anchor
+ Chart.Style: toLineCap :: (Eq s, IsString s) => s -> LineCap
+ Chart.Style: toLineJoin :: (Eq s, IsString s) => s -> LineJoin
+ Chart.Surface: surfaceAxisOptions :: Colour -> AxisOptions
+ Chart.Svg: ChartSvg :: SvgOptions -> HudOptions -> [Hud] -> ChartTree -> ChartSvg
+ Chart.Svg: CssOptions :: CssShapeRendering -> CssPreferColorScheme -> Text -> CssOptions
+ Chart.Svg: NoShapeRendering :: CssShapeRendering
+ Chart.Svg: PreferDark :: CssPreferColorScheme
+ Chart.Svg: PreferHud :: CssPreferColorScheme
+ Chart.Svg: PreferLight :: CssPreferColorScheme
+ Chart.Svg: PreferNormal :: CssPreferColorScheme
+ Chart.Svg: SvgOptions :: Double -> CssOptions -> SvgOptions
+ Chart.Svg: UseCssCrisp :: CssShapeRendering
+ Chart.Svg: UseGeometricPrecision :: CssShapeRendering
+ Chart.Svg: [charts] :: ChartSvg -> ChartTree
+ Chart.Svg: [cssExtra] :: CssOptions -> Text
+ Chart.Svg: [cssOptions] :: SvgOptions -> CssOptions
+ Chart.Svg: [extraHuds] :: ChartSvg -> [Hud]
+ Chart.Svg: [hudOptions] :: ChartSvg -> HudOptions
+ Chart.Svg: [preferColorScheme] :: CssOptions -> CssPreferColorScheme
+ Chart.Svg: [shapeRendering] :: CssOptions -> CssShapeRendering
+ Chart.Svg: [svgHeight] :: SvgOptions -> Double
+ Chart.Svg: [svgOptions] :: ChartSvg -> SvgOptions
+ Chart.Svg: chartSvg :: ChartSvg -> Text
+ Chart.Svg: cssPreferColorScheme :: (Colour, Colour) -> CssPreferColorScheme -> Text
+ Chart.Svg: cssShapeRendering :: CssShapeRendering -> Text
+ Chart.Svg: data ChartSvg
+ Chart.Svg: data CssOptions
+ Chart.Svg: data CssPreferColorScheme
+ Chart.Svg: data CssShapeRendering
+ Chart.Svg: data SvgOptions
+ Chart.Svg: defaultCssOptions :: CssOptions
+ Chart.Svg: defaultSvgOptions :: SvgOptions
+ Chart.Svg: initialCanvas :: ChartAspect -> ChartTree -> CanvasBox
+ Chart.Svg: instance GHC.Base.Monoid Chart.Svg.ChartSvg
+ Chart.Svg: instance GHC.Base.Semigroup Chart.Svg.ChartSvg
+ Chart.Svg: instance GHC.Classes.Eq Chart.Svg.CssOptions
+ Chart.Svg: instance GHC.Classes.Eq Chart.Svg.CssPreferColorScheme
+ Chart.Svg: instance GHC.Classes.Eq Chart.Svg.CssShapeRendering
+ Chart.Svg: instance GHC.Classes.Eq Chart.Svg.SvgOptions
+ Chart.Svg: instance GHC.Generics.Generic Chart.Svg.ChartSvg
+ Chart.Svg: instance GHC.Generics.Generic Chart.Svg.CssOptions
+ Chart.Svg: instance GHC.Generics.Generic Chart.Svg.CssPreferColorScheme
+ Chart.Svg: instance GHC.Generics.Generic Chart.Svg.CssShapeRendering
+ Chart.Svg: instance GHC.Generics.Generic Chart.Svg.SvgOptions
+ Chart.Svg: instance GHC.Show.Show Chart.Svg.CssOptions
+ Chart.Svg: instance GHC.Show.Show Chart.Svg.CssPreferColorScheme
+ Chart.Svg: instance GHC.Show.Show Chart.Svg.CssShapeRendering
+ Chart.Svg: instance GHC.Show.Show Chart.Svg.SvgOptions
+ Chart.Svg: toChartTree :: ChartSvg -> ChartTree
+ Chart.Svg: writeChartSvg :: FilePath -> ChartSvg -> IO ()
+ Data.Colour: LAB' :: Array '[3] a -> LAB a
+ Data.Colour: LCH' :: Array '[3] a -> LCH a
+ Data.Colour: LCHA' :: LCH Double -> Double -> LCHA
+ Data.Colour: RGB3' :: Array '[3] a -> RGB3 a
+ Data.Colour: [_alpha] :: LCHA -> Double
+ Data.Colour: [_lch] :: LCHA -> LCH Double
+ Data.Colour: [labArray] :: LAB a -> Array '[3] a
+ Data.Colour: [lchArray] :: LCH a -> Array '[3] a
+ Data.Colour: [rgb3Array] :: RGB3 a -> Array '[3] a
+ Data.Colour: alpha' :: Lens' LCHA Double
+ Data.Colour: cLCH' :: Lens' (LCH Double) Double
+ Data.Colour: chroma' :: Lens' Colour Double
+ Data.Colour: data LCHA
+ Data.Colour: grey :: Double -> Double -> Colour
+ Data.Colour: greyed :: Colour -> Colour
+ Data.Colour: hLCH' :: Lens' (LCH Double) Double
+ Data.Colour: hue' :: Lens' Colour Double
+ Data.Colour: instance GHC.Base.Functor Data.Colour.LAB
+ Data.Colour: instance GHC.Base.Functor Data.Colour.LCH
+ Data.Colour: instance GHC.Base.Functor Data.Colour.RGB3
+ Data.Colour: instance GHC.Classes.Eq Data.Colour.LCHA
+ Data.Colour: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Colour.LAB a)
+ Data.Colour: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Colour.LCH a)
+ Data.Colour: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Colour.RGB3 a)
+ Data.Colour: instance GHC.Exts.IsList (Data.Colour.LAB a)
+ Data.Colour: instance GHC.Exts.IsList (Data.Colour.LCH a)
+ Data.Colour: instance GHC.Exts.IsList (Data.Colour.RGB3 a)
+ Data.Colour: instance GHC.Show.Show Data.Colour.LCHA
+ Data.Colour: instance GHC.Show.Show a => GHC.Show.Show (Data.Colour.LAB a)
+ Data.Colour: instance GHC.Show.Show a => GHC.Show.Show (Data.Colour.LCH a)
+ Data.Colour: instance GHC.Show.Show a => GHC.Show.Show (Data.Colour.RGB3 a)
+ Data.Colour: instance System.Random.Internal.Uniform (Data.Colour.RGB3 GHC.Types.Double)
+ Data.Colour: instance System.Random.Internal.Uniform Data.Colour.Colour
+ Data.Colour: lLCH' :: Lens' (LCH Double) Double
+ Data.Colour: lch' :: Lens' LCHA (LCH Double)
+ Data.Colour: lcha2colour' :: Iso' LCHA Colour
+ Data.Colour: lightness' :: Lens' Colour Double
+ Data.Colour: mix :: Double -> Colour -> Colour -> Colour
+ Data.Colour: mixLCHA :: Double -> LCHA -> LCHA -> LCHA
+ Data.Colour: mixTrim :: Double -> Colour -> Colour -> Colour
+ Data.Colour: mixes :: Double -> [Colour] -> Colour
+ Data.Colour: newtype LAB a
+ Data.Colour: newtype LCH a
+ Data.Colour: newtype RGB3 a
+ Data.Colour: opac' :: Lens' Colour Double
+ Data.Colour: palette1a :: Int -> Double -> Colour
+ Data.Colour: paletteR :: [Colour]
+ Data.Colour: pattern LAB :: a -> a -> a -> LAB a
+ Data.Colour: pattern LCH :: a -> a -> a -> LCH a
+ Data.Colour: pattern LCHA :: Double -> Double -> Double -> Double -> LCHA
+ Data.Colour: pattern RGB3 :: a -> a -> a -> RGB3 a
+ Data.Colour: rgb :: Colour -> Colour -> Colour
+ Data.Colour: rgb32colour' :: Iso' (RGB3 Double, Double) Colour
+ Data.Colour: rgbd' :: Iso' (RGB3 Double) (RGB3 Word8)
+ Data.Colour: rvColour :: [Colour]
+ Data.Colour: rvRGB3 :: [RGB3 Double]
+ Data.Colour: showRGB :: Colour -> Text
+ Data.Colour: showRGBA :: Colour -> Text
+ Data.Colour: showSwatch :: Text -> Colour -> Text
+ Data.Colour: showSwatches :: Text -> Text -> [(Text, Colour)] -> Text
+ Data.Colour: trimColour :: Colour -> Colour
+ Data.Colour: validColour :: Colour -> Bool
+ Data.Colour: validate :: Colour -> Maybe Colour
+ Data.Colour: xy2ch' :: Iso' (Double, Double) (Double, Double)
+ Data.Path: ArcP :: ArcInfo a -> Point a -> PathData a
+ Data.Path: CubicP :: Point a -> Point a -> Point a -> PathData a
+ Data.Path: LineP :: Point a -> PathData a
+ Data.Path: QuadP :: Point a -> Point a -> PathData a
+ Data.Path: StartP :: Point a -> PathData a
+ Data.Path: data PathData a
+ Data.Path: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Path.PathData a)
+ Data.Path: instance GHC.Generics.Generic (Data.Path.PathData a)
+ Data.Path: instance GHC.Show.Show a => GHC.Show.Show (Data.Path.PathData a)
+ Data.Path: movePath :: Additive a => Point a -> PathData a -> PathData a
+ Data.Path: pointPath :: PathData a -> Point a
+ Data.Path: projectPaths :: Rect Double -> Rect Double -> [PathData Double] -> [PathData Double]
+ Data.Path: scalePath :: Multiplicative a => a -> PathData a -> PathData a
+ Data.Path.Parser: CurveTo :: !Origin -> ![(Point Double, Point Double, Point Double)] -> PathCommand
+ Data.Path.Parser: EllipticalArc :: !Origin -> ![(Double, Double, Double, Bool, Bool, Point Double)] -> PathCommand
+ Data.Path.Parser: EndPath :: PathCommand
+ Data.Path.Parser: HorizontalTo :: !Origin -> ![Double] -> PathCommand
+ Data.Path.Parser: LineTo :: !Origin -> ![Point Double] -> PathCommand
+ Data.Path.Parser: MoveTo :: !Origin -> ![Point Double] -> PathCommand
+ Data.Path.Parser: OriginAbsolute :: Origin
+ Data.Path.Parser: OriginRelative :: Origin
+ Data.Path.Parser: QuadraticBezier :: !Origin -> ![(Point Double, Point Double)] -> PathCommand
+ Data.Path.Parser: SmoothCurveTo :: !Origin -> ![(Point Double, Point Double)] -> PathCommand
+ Data.Path.Parser: SmoothQuadraticBezierCurveTo :: !Origin -> ![Point Double] -> PathCommand
+ Data.Path.Parser: VerticalTo :: !Origin -> ![Double] -> PathCommand
+ Data.Path.Parser: data Origin
+ Data.Path.Parser: data PathCommand
+ Data.Path.Parser: instance GHC.Classes.Eq Data.Path.Parser.Origin
+ Data.Path.Parser: instance GHC.Classes.Eq Data.Path.Parser.PathCommand
+ Data.Path.Parser: instance GHC.Classes.Eq Data.Path.Parser.PathCursor
+ Data.Path.Parser: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Path.Parser.PathInfo a)
+ Data.Path.Parser: instance GHC.Generics.Generic (Data.Path.Parser.PathInfo a)
+ Data.Path.Parser: instance GHC.Generics.Generic Data.Path.Parser.Origin
+ Data.Path.Parser: instance GHC.Generics.Generic Data.Path.Parser.PathCommand
+ Data.Path.Parser: instance GHC.Generics.Generic Data.Path.Parser.PathCursor
+ Data.Path.Parser: instance GHC.Show.Show Data.Path.Parser.Origin
+ Data.Path.Parser: instance GHC.Show.Show Data.Path.Parser.PathCommand
+ Data.Path.Parser: instance GHC.Show.Show Data.Path.Parser.PathCursor
+ Data.Path.Parser: instance GHC.Show.Show a => GHC.Show.Show (Data.Path.Parser.PathInfo a)
+ Data.Path.Parser: parsePath :: Text -> Either String [PathCommand]
+ Data.Path.Parser: pathDataToSvg :: [PathData Double] -> Text
+ Data.Path.Parser: svgToPathData :: Text -> [PathData Double]
- Chart.Bar: BarData :: [[Double]] -> Maybe [Text] -> Maybe [Text] -> BarData
+ Chart.Bar: BarData :: [[Double]] -> [Text] -> [Text] -> BarData
- Chart.Bar: BarOptions :: [RectStyle] -> [TextStyle] -> Double -> Double -> Double -> Double -> Bool -> FormatN -> Bool -> Orientation -> HudOptions -> BarOptions
+ Chart.Bar: BarOptions :: [RectStyle] -> [TextStyle] -> Double -> Double -> Double -> Double -> Bool -> FormatN -> Bool -> Orientation -> LegendOptions -> BarOptions
- Chart.Bar: [barColumnLabels] :: BarData -> Maybe [Text]
+ Chart.Bar: [barColumnLabels] :: BarData -> [Text]
- Chart.Bar: [barRowLabels] :: BarData -> Maybe [Text]
+ Chart.Bar: [barRowLabels] :: BarData -> [Text]
- Chart.Bar: bars :: BarOptions -> BarData -> [Chart Double]
+ Chart.Bar: bars :: BarOptions -> BarData -> [Chart]
- Chart.Examples: ellipseExample :: ChartSvg
+ Chart.Examples: ellipseExample :: ChartAspect -> ChartSvg
- Chart.Surface: defaultSurfaceLegendOptions :: Text -> SurfaceLegendOptions
+ Chart.Surface: defaultSurfaceLegendOptions :: Colour -> Text -> SurfaceLegendOptions
- Chart.Surface: surfacef :: (Point Double -> Double) -> SurfaceOptions -> ([Chart Double], Range Double)
+ Chart.Surface: surfacef :: (Point Double -> Double) -> SurfaceOptions -> ([Chart], Range Double)
- Chart.Surface: surfacefl :: (Point Double -> Double) -> SurfaceOptions -> SurfaceLegendOptions -> ([Chart Double], [Hud Double])
+ Chart.Surface: surfacefl :: (Point Double -> Double) -> SurfaceOptions -> SurfaceLegendOptions -> ([Chart], [Hud])
- Chart.Surface: surfaces :: RectStyle -> [SurfaceData] -> [Chart Double]
+ Chart.Surface: surfaces :: RectStyle -> [SurfaceData] -> [Chart]
- Data.Path: arcCentroid :: (FromInteger a, Ord a, TrigField a, ExpField a) => ArcPosition a -> ArcCentroid a
+ Data.Path: arcCentroid :: (Ord a, FromInteger a, TrigField a, ExpField a) => ArcPosition a -> ArcCentroid a
- Data.Path: cubicBezier :: (ExpField a, FromInteger a) => CubicPosition a -> a -> Point a
+ Data.Path: cubicBezier :: (FromInteger a, TrigField a) => CubicPosition a -> a -> Point a
- Data.Path: cubicPosition :: (Eq a, ExpField a, TrigField a) => CubicPolar a -> CubicPosition a
+ Data.Path: cubicPosition :: (Eq a, TrigField a, ExpField a) => CubicPolar a -> CubicPosition a
- Data.Path: pathBox :: Point Double -> (PathInfo Double, Point Double) -> Rect Double
+ Data.Path: pathBox :: Point Double -> PathData Double -> Rect Double
- Data.Path: pathBoxes :: [(PathInfo Double, Point Double)] -> Maybe (Rect Double)
+ Data.Path: pathBoxes :: [PathData Double] -> Maybe (Rect Double)
- Data.Path: quadBezier :: (ExpField a, FromInteger a) => QuadPosition a -> a -> Point a
+ Data.Path: quadBezier :: (FromInteger a, ExpField a) => QuadPosition a -> a -> Point a
- Data.Path: quadPolar :: (Eq a, ExpField a, TrigField a) => QuadPosition a -> QuadPolar a
+ Data.Path: quadPolar :: (Eq a, TrigField a, ExpField a) => QuadPosition a -> QuadPolar a
- Data.Path: quadPosition :: (ExpField a, TrigField a) => QuadPolar a -> QuadPosition a
+ Data.Path: quadPosition :: TrigField a => QuadPolar a -> QuadPosition a
- Data.Path: singletonArc :: ArcPosition Double -> [(PathInfo Double, Point Double)]
+ Data.Path: singletonArc :: ArcPosition Double -> [PathData Double]
- Data.Path: singletonCubic :: CubicPosition Double -> [(PathInfo Double, Point Double)]
+ Data.Path: singletonCubic :: CubicPosition Double -> [PathData Double]
- Data.Path: singletonPie :: ArcPosition Double -> [(PathInfo Double, Point Double)]
+ Data.Path: singletonPie :: Point Double -> ArcPosition Double -> [PathData Double]
- Data.Path: singletonQuad :: QuadPosition Double -> [(PathInfo Double, Point Double)]
+ Data.Path: singletonQuad :: QuadPosition Double -> [PathData Double]

Files

− app/reanimate-example.hs
@@ -1,55 +0,0 @@-#!/usr/bin/env stack--- stack runghc --package reanimate--{-# LANGUAGE MonoLocalBinds #-}-{-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE OverloadedStrings #-}---- | reanimate example------ To run this example:------ stack runghc --package reanimate app/reanimate-example.hs------ and wait for the browser to open ...-module Main where--import Chart-import Chart.Examples-import Chart.Reanimate-import Control.Lens hiding (transform)-import Data.Foldable-import Reanimate as Re--main :: IO ()-main =-  reanimate $-    foldl' seqA (pause 0) $ (applyE (overBeginning 1 fadeInE) . applyE (overEnding 1 fadeOutE)) . mapA pathify . (\cs -> animChartSvg defaultReanimateConfig (const cs)) . (#hudOptions %~ colourHudOptions light) <$> examples--examples :: [ChartSvg]-examples =-  [ unitExample,-    svgOptionsExample,-    hudOptionsExample,-    rectExample,-    textExample,-    glyphsExample,-    lineExample,-    barExample,-    waveExample,-    lglyphExample,-    glinesExample,-    compoundExample,-    textLocalExample,-    labelExample,-    legendExample,-    surfaceExample,-    arcExample,-    arcFlagsExample,-    ellipseExample,-    quadExample,-    cubicExample,-    pathExample,-    vennExample,-    arrowExample-  ]
chart-svg.cabal view
@@ -1,23 +1,25 @@ cabal-version:   2.4 name:            chart-svg-version:         0.2.3+version:         0.3.0 synopsis:        Charting library targetting SVGs. description:   This package provides a charting library targetting SVG as the rendered output.   .   == Usage   .-  >>> import Chart   >>> :set -XOverloadedLabels-  >>>let xs = fmap (fmap (uncurry Point)) [[(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)], [(0.0, 0.0), (3.2, 3.0)], [(0.5, 4.0), (0.5, 0)]] :: [[Point Double]]-  >>> let anns = zipWith (\w c -> LineA (LineStyle w c Nothing Nothing Nothing Nothing)) [0.015, 0.03, 0.01] palette1_-  >>> let lineExample = mempty & (#chartList .~ zipWith Chart anns (fmap (fmap PointXY) xs)) & #hudOptions .~ defaultHudOptions & #svgOptions .~ defaultSvgOptions :: ChartSvg-  .-  > writeChartSvg "other/line.svg" lineExample+  >>> :set -XOverloadedStrings+  >>> import Chart+  >>> import Optics.Core+  >>> let lines = [[Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],[Point 0.0 0.0, Point 2.8 3.0],[Point 0.5 4.0, Point 0.5 0]]+  >>> let styles = (\c -> defaultLineStyle & #color .~ palette1 c & #size .~ 0.015) <$> [0..2]+  >>> let cs = zipWith (\s x -> LineChart s [x]) styles lines+  >>> let lineExample = mempty & #charts .~ named "line" cs & #hudOptions .~ defaultHudOptions :: ChartSvg+  >>> writeChartSvg "other/usage.svg" lineExample   .-  ![main example](docs/other/lines.svg)+  ![usage example](docs/other/usage.svg)   .-  See "Chart" for a broad overview of concepts, and "Chart.Examples" for a variety of practical examples.+  See "Chart" for a broad overview of concepts, and "Chart.Examples" for practical examples.  category:        charts homepage:        https://github.com/tonyday567/chart-svg#readme@@ -29,7 +31,7 @@ license-file:    LICENSE build-type:      Simple extra-doc-files: other/*.svg-tested-with:     GHC ==8.8.4 || ==8.10.4 || ==9.0.1 || ==9.2.0.20210821+tested-with:     GHC ==8.8.4 || ==8.10.7 || ==9.2.1  source-repository head   type:     git@@ -39,61 +41,44 @@   exposed-modules:     Chart     Chart.Bar+    Chart.Data     Chart.Examples-    Chart.Reanimate-    Chart.Render+    Chart.Hud+    Chart.Primitive+    Chart.Style     Chart.Surface-    Chart.Types-    Chart.Various+    Chart.Svg     Data.Colour-    Data.FormatN     Data.Path+    Data.Path.Parser    hs-source-dirs:     src   build-depends:-    , attoparsec            ^>=0.14-    , base                  >=4.7     && <5-    , Color                 ^>=0.3-    , containers            ^>=0.6-    , cubicbezier           ^>=0.6-    , foldl                 ^>=1.4-    , generic-lens          >=1.2     && <3.0-    , JuicyPixels           ^>=3.3-    , lens                  ^>=5.0-    , linear                ^>=1.21-    , lucid                 ^>=2.9-    , mtl                   ^>=2.2.2-    , numhask               ^>=0.8-    , numhask-space         ^>=0.8-    , reanimate             ^>=1.1.1.0-    , reanimate-svg         ^>=0.13-    , scientific            ^>=0.3-    , tagsoup               ^>=0.14-    , text                  ^>=1.2-    , time                  ^>=1.9-    , transformers          ^>=0.5-    , unordered-containers  ^>=0.2+    , adjunctions         ^>=4.4+    , attoparsec          >=0.13.2 && <0.15+    , base                >=4.7    && <5+    , Color               ^>=0.3+    , containers          ^>=0.6+    , cubicbezier         ^>=0.6+    , foldl               ^>=1.4+    , formatn             ^>=0.2+    , lucid               ^>=2.9+    , mtl                 ^>=2.2.2+    , neat-interpolation  ^>=0.5.1+    , numhask             ^>=0.10+    , numhask-array       ^>=0.10+    , numhask-space       ^>=0.10+    , optics-core         ^>=0.4+    , random              ^>=1.2.1+    , scientific          ^>=0.3+    , tagsoup             ^>=0.14+    , text                ^>=1.2+    , time                ^>=1.9+    , transformers        ^>=0.5    default-language:   Haskell2010   default-extensions: StrictData   ghc-options:     -Wall -Wcompat -Wincomplete-record-updates     -Wincomplete-uni-patterns -Wredundant-constraints -fwrite-ide-info-    -hiedir=.hie -Wunused-packages--executable reanimate-example-  main-is:            reanimate-example.hs-  hs-source-dirs:     app-  build-depends:-    , base       >=4.7     && <5-    , chart-svg-    , lens       ^>=5.0-    , reanimate  ^>=1.1.1.0--  default-language:   Haskell2010-  default-extensions:-  ghc-options:-    -Wall -Wcompat -Wincomplete-record-updates-    -Wincomplete-uni-patterns -Wredundant-constraints-    -funbox-strict-fields -fwrite-ide-info -hiedir=.hie-    -Wunused-packages+    -hiedir=.hie
− other/arc.svg
@@ -1,145 +0,0 @@-<svg height="300.0" width="302.19127533282744" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6 -0.5330998616968212 1.1154380916726987 1.107349731170277"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9069060898743935" y="-0.5" width="0.9455996520193282" x="-0.4455996520193281"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.40690608987439353-0.5,0.40690608987439353"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.3244600817039941-0.5,0.3244600817039941"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.24201407353359472-0.5,0.24201407353359472"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.1595680653631953-0.5,0.1595680653631953"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,7.712205719279586e-2-0.5,7.712205719279586e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-5.323950977603409e-3-0.5,-5.323950977603409e-3"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-8.77699591480029e-2-0.5,-8.77699591480029e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.17021596731840227-0.5,-0.17021596731840227"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.25266197548880165-0.5,-0.25266197548880165"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.335107983659201-0.5,-0.335107983659201"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.4175539918296004-0.5,-0.4175539918296004"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,-0.5-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4200562281775722" x="-0.5">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3376102200071728" x="-0.5">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2551642118367734" x="-0.5">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.17271820366637397" x="-0.5">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="9.027219549597465e-2" x="-0.5">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="7.826187325575218e-3" x="-0.5">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-7.461982084482444e-2" x="-0.5">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1570658290152236" x="-0.5">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.23951183718562297" x="-0.5">0.7</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.32195784535602223" x="-0.5">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4044038535264217" x="-0.5">0.9</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4868498616968212" x="-0.5">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.4706580427978403, 0.40690608987439353)"><polyline points="-0.4706580427978403,0.42190608987439354--0.4706580427978403,0.3919060898743935"/></g><g transform="rotate(-90.0, -0.4706580427978403, 0.3244600817039941)"><polyline points="-0.4706580427978403,0.3394600817039941--0.4706580427978403,0.3094600817039941"/></g><g transform="rotate(-90.0, -0.4706580427978403, 0.24201407353359472)"><polyline points="-0.4706580427978403,0.25701407353359473--0.4706580427978403,0.2270140735335947"/></g><g transform="rotate(-90.0, -0.4706580427978403, 0.1595680653631953)"><polyline points="-0.4706580427978403,0.1745680653631953--0.4706580427978403,0.14456806536319528"/></g><g transform="rotate(-90.0, -0.4706580427978403, 7.712205719279586e-2)"><polyline points="-0.4706580427978403,9.212205719279586e-2--0.4706580427978403,6.212205719279586e-2"/></g><g transform="rotate(-90.0, -0.4706580427978403, -5.323950977603409e-3)"><polyline points="-0.4706580427978403,9.67604902239659e-3--0.4706580427978403,-2.032395097760341e-2"/></g><g transform="rotate(-90.0, -0.4706580427978403, -8.77699591480029e-2)"><polyline points="-0.4706580427978403,-7.27699591480029e-2--0.4706580427978403,-0.1027699591480029"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.17021596731840227)"><polyline points="-0.4706580427978403,-0.15521596731840226--0.4706580427978403,-0.18521596731840229"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.25266197548880165)"><polyline points="-0.4706580427978403,-0.23766197548880164--0.4706580427978403,-0.26766197548880166"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.335107983659201)"><polyline points="-0.4706580427978403,-0.320107983659201--0.4706580427978403,-0.35010798365920104"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.4175539918296004)"><polyline points="-0.4706580427978403,-0.4025539918296004--0.4706580427978403,-0.4325539918296004"/></g><g transform="rotate(-90.0, -0.4706580427978403, -0.5)"><polyline points="-0.4706580427978403,-0.485--0.4706580427978403,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9069060898743935" y="-0.5" width="3.782398608077331e-3" x="-0.4588380471475987"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.40690608987439353--0.4455996520193281,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.34053302401718055,0.40690608987439353--0.34053302401718055,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.23546639601503294,0.40690608987439353--0.23546639601503294,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.13039976801288533,0.40690608987439353--0.13039976801288533,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-2.533314001073772e-2,0.40690608987439353--2.533314001073772e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="7.973348799140978e-2,0.40690608987439353-7.973348799140978e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1848001159935574,0.40690608987439353-0.1848001159935574,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.289866743995705,0.40690608987439353-0.289866743995705,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3949333719978525,0.40690608987439353-0.3949333719978525,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.5,0.40690608987439353-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.4455996520193281" transform="rotate(-45.0, -0.4455996520193281, 0.5)">-0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.34053302401718055" transform="rotate(-45.0, -0.34053302401718055, 0.5)">-0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.23546639601503294" transform="rotate(-45.0, -0.23546639601503294, 0.5)">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-0.13039976801288533" transform="rotate(-45.0, -0.13039976801288533, 0.5)">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="-2.533314001073772e-2" transform="rotate(-45.0, -2.533314001073772e-2, 0.5)">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="7.973348799140978e-2" transform="rotate(-45.0, 7.973348799140978e-2, 0.5)">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.1848001159935574" transform="rotate(-45.0, 0.1848001159935574, 0.5)">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.289866743995705" transform="rotate(-45.0, 0.289866743995705, 0.5)">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.3949333719978525" transform="rotate(-45.0, 0.3949333719978525, 0.5)">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.158620689655172e-2"><text y="0.5" x="0.5" transform="rotate(-45.0, 0.5, 0.5)">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.4455996520193281,0.4459391012560649--0.4455996520193281,0.41593910125606487"/><polyline points="-0.34053302401718055,0.4459391012560649--0.34053302401718055,0.41593910125606487"/><polyline points="-0.23546639601503294,0.4459391012560649--0.23546639601503294,0.41593910125606487"/><polyline points="-0.13039976801288533,0.4459391012560649--0.13039976801288533,0.41593910125606487"/><polyline points="-2.533314001073772e-2,0.4459391012560649--2.533314001073772e-2,0.41593910125606487"/><polyline points="7.973348799140978e-2,0.4459391012560649-7.973348799140978e-2,0.41593910125606487"/><polyline points="0.1848001159935574,0.4459391012560649-0.1848001159935574,0.41593910125606487"/><polyline points="0.289866743995705,0.4459391012560649-0.289866743995705,0.41593910125606487"/><polyline points="0.3949333719978525,0.4459391012560649-0.3949333719978525,0.41593910125606487"/><polyline points="0.5,0.4459391012560649-0.5,0.41593910125606487"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6276243594975943e-3" y="0.41597515077313746" width="0.9455996520193282" x="-0.4455996520193281"/></g><g fill-opacity="0.1" stroke-opacity="0.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#000000"><path d="M 0.5,0.3245 A 0.5253331400107378 0.412230040851997 -0.0 0 1 -0.0253,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="0.5,0.3244600817039942-0.483369277234746,0.3307309001377951-0.4664957468010773,0.3365887087530307-0.44939606083614747,0.34202772659989517-0.43208709466531137,0.347042586024505-0.414585930148219,0.35162833796612425-0.3969098388210801,0.3557804568412907-0.37907626485174506,0.3594948450100198-0.3611028078244165,0.3627678368196808-0.34300720537098606,0.36559620222255296-0.3248073156661314,0.3679771499634932-0.3065210998034561,0.3699083303345671-0.2881666040700581,0.3713878374939279-0.26976194213702254,0.37241421134665165-0.25132527718341724,0.37298643898567446-0.23287480397142646,0.37310395569140997-0.21442873089031855,0.3727666454890592-0.196005261986964,0.37197484126306346-0.17762257900063916,0.3707293244285878-0.15929882341984458,0.36903132416035866-0.14105207857884716,0.366882516179617-0.1229003518116123,0.3642850211003825-0.10486155668073893,0.3612414023366659-8.695349529893737e-2,0.3577546635726868-6.91938407604924e-2,0.353828245798601-5.16001197000544e-2,0.34946602391465836-3.4189694995966025e-2,0.3446723029071443-1.6979748635198022e-2,0.339451813599878--1.2735243196226875e-5,0.33380970798546095--1.677098710937719e-2,0.32775155414088153--3.327846859221828e-2,0.32128333073249615--4.951888880068217e-2,0.3144114211158069--6.547622040096385e-2,0.3071426070358604--8.11347154335329e-2,0.29948406193448485--9.647892085446813e-2,0.2914433438709686--0.1114936937857463,0.2830283880631685--0.1261642164594346,0.2742474990564076--0.1404760108410384,0.26510934252789203--0.1544149529175723,0.25562293673473413--0.16796728663625615,0.24579764361402107--0.1811196374800791,0.23564315954371323--0.193859025666831,0.22516950577349076--0.20617287895858183,0.2143870185349896--0.21804904506896183,0.20330633884118865--0.2294758036560015,0.191938401985015--0.24044187788869215,0.18029442674753132--0.2509364455758589,0.16838590432635142--0.2609491498463553,0.15622458699521702--0.2704701093700449,0.1438224765059225--0.2794899281094799,0.13119181224403542--0.287999704592658,0.11834505915009985--0.2959910406976985,0.10529489541824505--0.3034560499407747,9.205419998434006e-2--0.31038736525912214,7.863603981603812e-2--0.3167781462814395,6.505365701725652e-2--0.32262208607850884,5.132045575982125e-2--0.3279134173873738,3.744998905516522e-2--0.33264691830293114,2.345594537914475e-2--0.3368179174313213,9.352135163164521e-3--0.34042229850002936,-4.847522835048301e-3--0.3434565044201495,-1.9129015267579152e-2--0.34591754079680204,-3.347824802580801e-2--0.3478029788842397,-4.7881060149592924e-2--0.3491109579827261,-6.2323237802426434e-2--0.3498401872748227,-7.679052829877775e-2--0.3499899470992681,-9.12686541697727e-2--0.34956008966119856,-0.10574332725332858--0.34855103917800234,-0.12020026279484874--0.34696379146066925,-0.13462519354454794--0.34479991293104495,-0.14900388383750696--0.3420615390759619,-0.16332214364255282--0.3387513723397717,-0.17756584256610797--0.3348726794573588,-0.19172092379718286--0.3304292882302672,-0.20577341797974957--0.32542558374912384,-0.21970945699880995--0.3198665040660817,-0.2335152876665515--0.31375753532156003,-0.24717728529508287--0.307104706330086,-0.26068196714235425--0.2999145826305821,-0.27401600571799756--0.2921942600069721,-0.28716624193594986--0.2839513574854994,-0.3001196981008821--0.27519400981566844,-0.31286359071561676--0.265930859442228,-0.3253853430968975--0.25617104797612356,-0.33767259778705516--0.24592420717282815,-0.34971322874932953--0.23520044942696644,-0.36149535333479876--0.2240103577925993,-0.3730073440091236--0.21236497553902822,-0.3842378398275176--0.20027579525242306,-0.39517575764662705--0.1877547474940251,-0.4058103030622574--0.174814189026125,-0.4161309810621461--0.16146689061742991,-0.4261276063832713--0.14772602443985788,-0.4357903135634775--0.1336051510691924,-0.4451095666774971--0.1191182061024344,-0.45407616874775303--0.1042794864050468,-0.4626812708206709--8.910363600167909e-2,-0.47091638069952146--7.360563162427924e-2,-0.47877337132519915--5.780076793187067e-2,-0.4862444887966433--4.170464241656818e-2,-0.4933223600230059--2.533314001073772e-2,-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0e-2" y="-0.10276996127589864" width="3.0000000000000027e-2" x="0.22233343541807982"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="0.8731172355803916" y="-0.5" width="0.8500068705306324" x="-0.3500068705306324"/></g><g></g></svg>
other/arcflags.svg view
@@ -1,1201 +1,1240 @@-<svg height="300.0" width="312.5971457599038" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0.0 -4.94987663248166 9.0 8.637314948722489"><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.6"><text y="-0.0" x="0.5549999999999999" transform="rotate(-90.0, 0.5549999999999999, -0.0)">Sweep</text></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="1.5099999999999998" x="1.7149999999999999" transform="rotate(-90.0, 1.7149999999999999, 1.5099999999999998)">True</text></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="-1.5100000000000002" x="1.7149999999999999" transform="rotate(-90.0, 1.7149999999999999, -1.5100000000000002)">False</text></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="5.409999999999999,1.6699999999999995-5.408026728428272,1.607209480470686-5.402114701314478,1.5446667664356952-5.392287250728689,1.4826186854142747-5.378583161128631,1.4213101128351444-5.361056516295154,1.360983005625052-5.339776485888249,1.3018754473153216-5.314827052466018,1.244220708434927-5.286306680043863,1.1882463258982843-5.2543279255020146,1.134173205021003-5.219016994374947,1.0822147477075261-5.180513242775787,1.0325760102513097-5.138968627421411,0.9854528940713108-5.094547105928688,0.9410313725785877-5.047423989748689,0.8994867572242105-4.9977852522924735,0.860983005625052-4.945826794978997,0.8256720744979842-4.8917536741017145,0.793693319956136-4.835779291565073,0.7651729475339799-4.7781245526846785,0.7402235141117481-4.719016994374945,0.7189434837048458-4.658689887164854,0.7014168388713689-4.597381314585725,0.6877127492713107-4.535333233564302,0.6778852986855215-4.472790519529314,0.6719732715717277-4.409999999999999,0.6699999999999995-4.347209480470687,0.6719732715717277-4.284666766435696,0.6778852986855215-4.222618685414275,0.6877127492713107-4.161310112835144,0.7014168388713689-4.100983005625053,0.7189434837048458-4.041875447315322,0.7402235141117481-3.9842207084349273,0.7651729475339799-3.9282463258982845,0.793693319956136-3.8741732050210023,0.8256720744979846-3.822214747707527,0.860983005625052-3.7725760102513104,0.8994867572242105-3.725452894071311,0.9410313725785877-3.6810313725785884,0.9854528940713108-3.6394867572242102,1.0325760102513097-3.6009830056250527,1.0822147477075261-3.565672074497984,1.1341732050210025-3.5336933199561353,1.1882463258982843-3.5051729475339797,1.244220708434927-3.480223514111748,1.3018754473153211-3.4589434837048465,1.360983005625052-3.441416838871369,1.4213101128351444-3.4277127492713113,1.4826186854142747-3.417885298685522,1.5446667664356952-3.4119732715717284,1.607209480470686-3.41,1.6699999999999995-3.4119732715717284,1.732790519529313-3.417885298685522,1.7953332335643037-3.4277127492713113,1.8573813145857243-3.4414168388713686,1.9186898871648541-3.4589434837048465,1.9790169943749472-3.480223514111748,2.0381245526846774-3.5051729475339792,2.095779291565072-3.5336933199561367,2.151753674101715-3.565672074497984,2.205826794978996-3.6009830056250527,2.2577852522924724-3.6394867572242102,2.3074239897486892-3.6810313725785884,2.3545471059286878-3.7254528940713114,2.398968627421411-3.7725760102513104,2.440513242775789-3.822214747707527,2.479016994374947-3.8741732050210036,2.514327925502015-3.9282463258982845,2.546306680043863-3.9842207084349277,2.574827052466019-4.041875447315322,2.599776485888251-4.100983005625052,2.621056516295153-4.161310112835144,2.6385831611286306-4.222618685414275,2.6522872507286883-4.284666766435695,2.6621147013144775-4.347209480470687,2.668026728428271-4.409999999999999,2.6699999999999995-4.472790519529313,2.668026728428271-4.535333233564302,2.6621147013144775-4.597381314585725,2.6522872507286883-4.658689887164854,2.6385831611286306-4.719016994374945,2.621056516295153-4.778124552684677,2.599776485888251-4.835779291565071,2.5748270524660195-4.891753674101716,2.546306680043863-4.945826794978997,2.5143279255020143-4.9977852522924735,2.479016994374947-5.0474239897486886,2.440513242775789-5.094547105928688,2.398968627421411-5.138968627421411,2.354547105928688-5.18051324277579,2.3074239897486892-5.219016994374947,2.257785252292473-5.2543279255020146,2.2058267949789965-5.286306680043863,2.1517536741017147-5.314827052466018,2.0957792915650724-5.339776485888249,2.0381245526846774-5.361056516295154,1.9790169943749472-5.378583161128631,1.9186898871648541-5.392287250728689,1.8573813145857243-5.402114701314478,1.7953332335643042-5.408026728428272,1.7327905195293127-5.409999999999999,1.6699999999999995"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="4.409999999999999,2.6699999999999995-4.408026728428271,2.607209480470686-4.402114701314478,2.5446667664356952-4.392287250728688,2.4826186854142747-4.378583161128631,2.421310112835145-4.361056516295152,2.360983005625052-4.339776485888251,2.3018754473153216-4.314827052466019,2.244220708434927-4.286306680043864,2.1882463258982843-4.2543279255020146,2.134173205021003-4.219016994374948,2.0822147477075266-4.180513242775789,2.0325760102513097-4.138968627421411,1.9854528940713108-4.094547105928688,1.941031372578588-4.047423989748689,1.8994867572242105-3.997785252292472,1.860983005625052-3.9458267949789967,1.8256720744979844-3.891753674101715,1.7936933199561358-3.8357792915650717,1.76517294753398-3.778124552684677,1.7402235141117481-3.7190169943749467,1.7189434837048458-3.6586898871648548,1.7014168388713686-3.5973813145857236,1.6877127492713109-3.5353332335643035,1.6778852986855215-3.472790519529313,1.6719732715717277-3.41,1.6699999999999995-3.3472094804706867,1.6719732715717277-3.284666766435696,1.6778852986855215-3.2226186854142753,1.6877127492713107-3.1613101128351446,1.7014168388713686-3.1009830056250527,1.7189434837048458-3.0418754473153222,1.7402235141117481-2.9842207084349273,1.76517294753398-2.9282463258982845,1.793693319956136-2.8741732050210023,1.8256720744979846-2.822214747707527,1.860983005625052-2.7725760102513104,1.8994867572242102-2.725452894071311,1.941031372578588-2.6810313725785884,1.9854528940713108-2.6394867572242102,2.0325760102513097-2.6009830056250527,2.082214747707526-2.565672074497984,2.1341732050210025-2.5336933199561353,2.1882463258982843-2.5051729475339806,2.244220708434927-2.480223514111748,2.3018754473153216-2.4589434837048465,2.360983005625052-2.4414168388713686,2.421310112835145-2.4277127492713113,2.482618685414275-2.417885298685522,2.5446667664356952-2.4119732715717284,2.607209480470686-2.4099999999999997,2.6699999999999995-2.4119732715717284,2.732790519529313-2.417885298685522,2.7953332335643037-2.4277127492713113,2.8573813145857243-2.4414168388713686,2.918689887164854-2.4589434837048465,2.9790169943749474-2.480223514111748,3.0381245526846774-2.50517294753398,3.095779291565072-2.5336933199561367,3.1517536741017147-2.565672074497984,3.205826794978996-2.6009830056250527,3.2577852522924724-2.6394867572242102,3.3074239897486892-2.6810313725785884,3.3545471059286878-2.7254528940713114,3.398968627421411-2.7725760102513104,3.440513242775789-2.822214747707527,3.479016994374947-2.8741732050210036,3.514327925502015-2.9282463258982845,3.546306680043863-2.9842207084349277,3.574827052466019-3.0418754473153222,3.599776485888251-3.1009830056250522,3.621056516295153-3.1613101128351446,3.6385831611286306-3.2226186854142753,3.6522872507286883-3.2846667664356954,3.6621147013144775-3.3472094804706867,3.668026728428271-3.409999999999999,3.6699999999999995-3.4727905195293127,3.668026728428271-3.5353332335643035,3.6621147013144775-3.597381314585723,3.6522872507286883-3.6586898871648548,3.6385831611286306-3.7190169943749467,3.621056516295153-3.7781245526846767,3.599776485888251-3.835779291565071,3.5748270524660195-3.891753674101715,3.546306680043863-3.9458267949789967,3.5143279255020143-3.997785252292472,3.479016994374947-4.047423989748689,3.440513242775789-4.094547105928688,3.398968627421411-4.138968627421411,3.354547105928688-4.180513242775789,3.3074239897486892-4.219016994374947,3.257785252292473-4.2543279255020146,3.2058267949789965-4.286306680043864,3.1517536741017147-4.314827052466019,3.0957792915650724-4.339776485888251,3.0381245526846774-4.361056516295152,2.979016994374947-4.378583161128631,2.918689887164854-4.392287250728688,2.8573813145857243-4.402114701314478,2.795333233564304-4.408026728428271,2.732790519529313-4.409999999999999,2.67"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="3.41,1.6699999999999995-3.4257073173118204,1.6701233675183391-3.441410759078128,1.6704934396342677-3.4571064507096416,1.6711101250380294-3.472790519529313,1.6719732715717277-3.488459095727845,1.6730826662668714-3.5041083133185134,1.6744380353969195-3.519734311091045,1.6760390445448197-3.5353332335643035,1.6778852986855215-3.5509012319375817,1.679976342283442-3.56643446504023,1.6823116594048617-3.5819291002794094,1.6848906738452256-3.5973813145857236,1.6877127492713109-3.6127872953565126,1.6907771893782337-3.6281432413965424,1.694083238061252-3.6434453638559043,1.697630079602323-3.6586898871648548,1.7014168388713686-3.673873049965372,1.7054425815422014-3.688991106039228,1.7097063143230564-3.7040403252323033,1.7142069852016695-3.7190169943749467,1.7189434837048458-3.733917418198149,1.7239146411724546-3.7487379202452904,1.729119231045774-3.7634748437792567,1.7345559691701322-3.778124552684677,1.7402235141117481-3.7926834323650898,1.7461204674887127-3.8071478906347798,1.7522453743160185-3.8215143586051084,1.7585967233645543-3.8357792915650717,1.76517294753398-3.849939169855915,1.771972424239384-3.863990499739547,1.7789934758116317-3.877929814260573,1.786234369911306-3.891753674101715,1.793693319956136-3.9054586684324066,1.8013684855618084-3.9190414157503715,1.8092579729960558-3.932498564715948,1.8173598356459073-3.9458267949789967,1.8256720744979844-3.9590228179981315,1.8341926386317293-3.9720833778521296,1.8429194257254378-3.9850052520432784,1.851850282574976-3.997785252292472,1.860983005625052-4.010420225325884,1.8703153415129088-4.022907053652976,1.8798449876243093-4.035242656335705,1.8895695926616698-4.047423989748689,1.8994867572242105-4.059448048330183,1.9095940343999684-4.0713118653236515,1.91988893036954-4.0830125135097735,1.93036890502139-4.094547105928688,1.9410313725785882-4.105912796592314,1.9518737022368107-4.117106781186547,1.962893218813452-4.128126297763188,1.9740872034076853-4.138968627421411,1.9854528940713108-4.149631094978609,1.9969874864902262-4.160111069630459,2.0086881346763477-4.170405965600031,2.020551951669816-4.180513242775789,2.0325760102513097-4.190430407338329,2.044757343664294-4.20015501237569,2.057092946347023-4.20968465848709,2.0695797746741156-4.219016994374948,2.0822147477075266-4.2281497174250235,2.094994747956721-4.237080574274562,2.1079166221478687-4.24580736136827,2.1209771820018677-4.2543279255020146,2.134173205021003-4.262640164354092,2.1475014352840507-4.270742027003943,2.160958584249628-4.2786315144381915,2.174541331567592-4.286306680043864,2.1882463258982843-4.293765630088693,2.202070185739426-4.3010065241883675,2.2160095002604527-4.308027575760615,2.2300608301440845-4.314827052466019,2.244220708434927-4.321403276635445,2.258485641394891-4.327754625683981,2.272852109365219-4.333879532511286,2.28731656763491-4.339776485888251,2.3018754473153216-4.345444030829867,2.3165251562207425-4.350880768954225,2.331262079754708-4.356085358827545,2.3460825818018503-4.361056516295152,2.360983005625052-4.36579301479833,2.3759596747676954-4.370293685676943,2.39100889396077-4.3745574184577976,2.406126950034627-4.378583161128631,2.421310112835145-4.382369920397676,2.436554636144094-4.385916761938748,2.4518567586034568-4.3892228106217654,2.467212704643487-4.392287250728688,2.4826186854142747-4.395109326154774,2.49807089972059-4.3976883405951375,2.5135655349597688-4.400023657716557,2.5290987680624166-4.402114701314478,2.5446667664356952-4.4039609554551795,2.560265688908954-4.40556196460308,2.5758916866814854-4.406917333733127,2.5915409042721547-4.408026728428271,2.6072094804706865-4.40888987496197,2.6228935492903567-4.409506560365731,2.6385892409218714-4.4098766324816605,2.6542926826881788-4.409999999999999,2.6699999999999995"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 4.4100,1.6700 L 3.41,1.6700 A 1.0 1.0 -0.0 0 1 4.4100,2.6700 L 4.4100,1.6700"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="5.409999999999999,-1.3699999999999997-5.408026728428272,-1.4327905195293131-5.402114701314478,-1.4953332335643048-5.392287250728689,-1.5573813145857245-5.378583161128631,-1.6186898871648547-5.361056516295154,-1.679016994374948-5.339776485888249,-1.738124552684678-5.314827052466018,-1.7957792915650725-5.286306680043863,-1.8517536741017158-5.2543279255020146,-1.9058267949789962-5.219016994374947,-1.957785252292473-5.180513242775787,-2.00742398974869-5.138968627421411,-2.054547105928689-5.094547105928688,-2.0989686274214114-5.047423989748689,-2.1405132427757896-4.9977852522924735,-2.179016994374948-4.945826794978997,-2.214327925502015-4.8917536741017145,-2.246306680043864-4.835779291565073,-2.2748270524660197-4.7781245526846785,-2.2997764858882515-4.719016994374945,-2.3210565162951533-4.658689887164854,-2.3385831611286307-4.597381314585725,-2.3522872507286885-4.535333233564302,-2.362114701314478-4.472790519529314,-2.3680267284282714-4.409999999999999,-2.3699999999999997-4.347209480470687,-2.3680267284282714-4.284666766435696,-2.362114701314478-4.222618685414275,-2.3522872507286885-4.161310112835144,-2.3385831611286307-4.100983005625053,-2.3210565162951533-4.041875447315322,-2.2997764858882515-3.9842207084349273,-2.2748270524660197-3.9282463258982845,-2.246306680043864-3.8741732050210023,-2.214327925502015-3.822214747707527,-2.179016994374948-3.7725760102513104,-2.1405132427757896-3.725452894071311,-2.0989686274214114-3.6810313725785884,-2.054547105928689-3.6394867572242102,-2.00742398974869-3.6009830056250527,-1.957785252292473-3.565672074497984,-1.905826794978997-3.5336933199561353,-1.8517536741017158-3.5051729475339797,-1.7957792915650725-3.480223514111748,-1.738124552684678-3.4589434837048465,-1.679016994374948-3.441416838871369,-1.6186898871648547-3.4277127492713113,-1.5573813145857245-3.417885298685522,-1.495333233564304-3.4119732715717284,-1.4327905195293131-3.41,-1.3700000000000006-3.4119732715717284,-1.307209480470687-3.417885298685522,-1.2446667664356954-3.4277127492713113,-1.1826186854142757-3.4414168388713686,-1.1213101128351455-3.4589434837048465,-1.0609830056250522-3.480223514111748,-1.0018754473153222-3.5051729475339792,-0.9442207084349277-3.5336933199561367,-0.8882463258982845-3.565672074497984,-0.834173205021004-3.6009830056250527,-0.7822147477075272-3.6394867572242102,-0.7325760102513104-3.6810313725785884,-0.6854528940713123-3.7254528940713114,-0.6410313725785888-3.7725760102513104,-0.5994867572242106-3.822214747707527,-0.5609830056250522-3.8741732050210036,-0.5256720744979844-3.9282463258982845,-0.4936933199561353-3.9842207084349277,-0.46517294753398053-4.041875447315322,-0.44022351411174876-4.100983005625052,-0.41894348370484513-4.161310112835144,-0.4014168388713695-4.222618685414275,-0.3877127492713117-4.284666766435695,-0.3778852986855221-4.347209480470687,-0.37197327157172877-4.409999999999999,-0.37000000000000055-4.472790519529313,-0.37197327157172877-4.535333233564302,-0.3778852986855221-4.597381314585725,-0.3877127492713117-4.658689887164854,-0.4014168388713695-4.719016994374945,-0.41894348370484513-4.778124552684677,-0.44022351411174876-4.835779291565071,-0.46517294753398053-4.891753674101716,-0.4936933199561353-4.945826794978997,-0.5256720744979853-4.9977852522924735,-0.5609830056250522-5.0474239897486886,-0.5994867572242106-5.094547105928688,-0.6410313725785888-5.138968627421411,-0.6854528940713114-5.18051324277579,-0.7325760102513104-5.219016994374947,-0.7822147477075272-5.2543279255020146,-0.8341732050210031-5.286306680043863,-0.8882463258982845-5.314827052466018,-0.9442207084349277-5.339776485888249,-1.0018754473153222-5.361056516295154,-1.0609830056250522-5.378583161128631,-1.1213101128351455-5.392287250728689,-1.1826186854142757-5.402114701314478,-1.2446667664356954-5.408026728428272,-1.307209480470687-5.409999999999999,-1.3699999999999997"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="4.409999999999999,-0.37000000000000055-4.408026728428271,-0.432790519529314-4.402114701314478,-0.4953332335643039-4.392287250728688,-0.5573813145857254-4.378583161128631,-0.6186898871648547-4.361056516295152,-0.6790169943749471-4.339776485888251,-0.738124552684678-4.314827052466019,-0.7957792915650725-4.286306680043864,-0.8517536741017149-4.2543279255020146,-0.9058267949789971-4.219016994374948,-0.957785252292473-4.180513242775789,-1.0074239897486899-4.138968627421411,-1.0545471059286888-4.094547105928688,-1.0989686274214114-4.047423989748689,-1.1405132427757887-3.997785252292472,-1.1790169943749471-3.9458267949789967,-1.214327925502015-3.891753674101715,-1.246306680043864-3.8357792915650717,-1.2748270524660197-3.778124552684677,-1.2997764858882515-3.7190169943749467,-1.3210565162951542-3.6586898871648548,-1.3385831611286307-3.5973813145857236,-1.3522872507286885-3.5353332335643035,-1.362114701314478-3.472790519529313,-1.3680267284282714-3.41,-1.3699999999999997-3.3472094804706867,-1.3680267284282714-3.284666766435696,-1.362114701314478-3.2226186854142753,-1.3522872507286885-3.1613101128351446,-1.3385831611286307-3.1009830056250527,-1.3210565162951542-3.0418754473153222,-1.2997764858882515-2.9842207084349273,-1.2748270524660197-2.9282463258982845,-1.2463066800438631-2.8741732050210023,-1.214327925502015-2.822214747707527,-1.1790169943749471-2.7725760102513104,-1.1405132427757896-2.725452894071311,-1.0989686274214114-2.6810313725785884,-1.0545471059286888-2.6394867572242102,-1.0074239897486899-2.6009830056250527,-0.9577852522924739-2.565672074497984,-0.9058267949789971-2.5336933199561353,-0.8517536741017149-2.5051729475339806,-0.7957792915650734-2.480223514111748,-0.738124552684678-2.4589434837048465,-0.6790169943749471-2.4414168388713686,-0.6186898871648547-2.4277127492713113,-0.5573813145857245-2.417885298685522,-0.4953332335643039-2.4119732715717284,-0.432790519529314-2.4099999999999997,-0.37000000000000055-2.4119732715717284,-0.30720948047068664-2.417885298685522,-0.24466676643569585-2.4277127492713113,-0.18261868541427528-2.4414168388713686,-0.12131011283514548-2.4589434837048465,-6.098300562505221e-2-2.480223514111748,-1.8754473153221873e-3-2.50517294753398,5.577929156507233e-2-2.5336933199561367,0.1117536741017151-2.565672074497984,0.16582679497899644-2.6009830056250527,0.2177852522924728-2.6394867572242102,0.26742398974868964-2.6810313725785884,0.3145471059286882-2.7254528940713114,0.3589686274214112-2.7725760102513104,0.40051324277578937-2.822214747707527,0.43901699437494734-2.8741732050210036,0.4743279255020152-2.9282463258982845,0.5063066800438634-2.9842207084349277,0.5348270524660195-3.0418754473153222,0.5597764858882512-3.1009830056250522,0.5810565162951535-3.1613101128351446,0.598583161128631-3.2226186854142753,0.6122872507286887-3.2846667664356954,0.6221147013144779-3.3472094804706867,0.6280267284282712-3.409999999999999,0.6299999999999999-3.4727905195293127,0.6280267284282712-3.5353332335643035,0.6221147013144779-3.597381314585723,0.6122872507286887-3.6586898871648548,0.598583161128631-3.7190169943749467,0.5810565162951535-3.7781245526846767,0.5597764858882512-3.835779291565071,0.5348270524660199-3.891753674101715,0.5063066800438634-3.9458267949789967,0.47432792550201475-3.997785252292472,0.43901699437494734-4.047423989748689,0.40051324277578937-4.094547105928688,0.3589686274214112-4.138968627421411,0.3145471059286886-4.180513242775789,0.26742398974868964-4.219016994374947,0.21778525229247325-4.2543279255020146,0.16582679497899688-4.286306680043864,0.1117536741017151-4.314827052466019,5.5779291565072775e-2-4.339776485888251,-1.8754473153221873e-3-4.361056516295152,-6.0983005625052655e-2-4.378583161128631,-0.12131011283514548-4.392287250728688,-0.18261868541427528-4.402114701314478,-0.2446667664356954-4.408026728428271,-0.30720948047068664-4.409999999999999,-0.36999999999999966"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="3.41,-1.3699999999999997-3.410123367518339,-1.3542926826881794-3.4104934396342683,-1.338589240921872-3.411110125038029,-1.3228935492903573-3.4119732715717284,-1.307209480470687-3.413082666266872,-1.2915409042721548-3.414438035396919,-1.275891686681486-3.4160390445448194,-1.2602656889089547-3.417885298685522,-1.2446667664356954-3.4199763422834417,-1.2290987680624172-3.4223116594048624,-1.2135655349597694-3.4248906738452263,-1.1980708997205904-3.4277127492713113,-1.1826186854142757-3.430777189378234,-1.1672127046434873-3.4340832380612527,-1.1518567586034574-3.4376300796023234,-1.1365546361440946-3.441416838871369,-1.1213101128351455-3.445442581542202,-1.1061269500346271-3.449706314323057,-1.0910088939607703-3.454206985201669,-1.0759596747676965-3.4589434837048465,-1.0609830056250522-3.4639146411724537,-1.0460825818018509-3.4691192310457737,-1.031262079754709-3.4745559691701318,-1.0165251562207422-3.480223514111748,-1.0018754473153222-3.4861204674887127,-0.98731656763491-3.492245374316018,-0.97285210936522-3.4985967233645545,-0.9584856413948919-3.5051729475339797,-0.9442207084349277-3.5119724242393833,-0.9300608301440847-3.518993475811631,-0.9160095002604538-3.5262343699113066,-0.9020701857394271-3.5336933199561353,-0.8882463258982845-3.541368485561808,-0.8745413315675923-3.5492579729960565,-0.8609585842496288-3.557359835645908,-0.8475014352840513-3.565672074497984,-0.834173205021004-3.5741926386317298,-0.8209771820018683-3.5829194257254384,-0.8079166221478693-3.5918502825749767,-0.794994747956721-3.6009830056250527,-0.7822147477075272-3.6103153415129094,-0.7695797746741166-3.6198449876243095,-0.7570929463470235-3.62956959266167,-0.7447573436642947-3.6394867572242102,-0.7325760102513104-3.649594034399969,-0.7205519516698167-3.6598889303695397,-0.7086881346763483-3.6703689050213897,-0.6969874864902263-3.6810313725785884,-0.6854528940713114-3.6918737022368107,-0.6740872034076859-3.7028932188134522,-0.6628932188134526-3.7140872034076855,-0.6518737022368115-3.725452894071311,-0.6410313725785888-3.736987486490226,-0.6303689050213896-3.7486881346763474,-0.6198889303695405-3.7605519516698163,-0.6095940343999691-3.7725760102513104,-0.5994867572242106-3.7847573436642947,-0.5895695926616704-3.7970929463470227,-0.5798449876243095-3.8095797746741153,-0.570315341512909-3.822214747707527,-0.5609830056250522-3.8349947479567206,-0.5518502825749763-3.8479166221478693,-0.5429194257254379-3.8609771820018675,-0.5341926386317293-3.8741732050210036,-0.5256720744979844-3.887501435284051,-0.5173598356459084-3.9009585842496284,-0.5092579729960565-3.9145413315675928,-0.5013684855618084-3.9282463258982845,-0.4936933199561353-3.942070185739426,-0.4862343699113061-3.9560095002604525,-0.4789934758116323-3.970060830144084,-0.47197242423938457-3.9842207084349273,-0.46517294753398053-3.998485641394891,-0.45859672336455537-4.01285210936522,-0.4522453743160191-4.02731656763491,-0.4461204674887136-4.041875447315322,-0.44022351411174876-4.056525156220743,-0.4345559691701326-4.0712620797547086,-0.4291192310457741-4.0860825818018505,-0.42391464117245503-4.100983005625053,-0.41894348370484513-4.115959674767696,-0.4142069852016701-4.131008893960771,-0.4097063143230568-4.146126950034627,-0.40544258154220136-4.161310112835144,-0.4014168388713695-4.176554636144094,-0.39763007960232377-4.191856758603457,-0.39408323806125045-4.207212704643488,-0.39077718937823436-4.222618685414275,-0.3877127492713117-4.23807089972059,-0.3848906738452267-4.253565534959769,-0.38231165940486234-4.269098768062417,-0.379976342283443-4.284666766435696,-0.3778852986855221-4.300265688908954,-0.3760390445448203-4.315891686681486,-0.3744380353969201-4.331540904272154,-0.3730826662668725-4.347209480470687,-0.37197327157172877-4.362893549290357,-0.37111012503803-4.378589240921872,-0.37049343963426873-4.394292682688178,-0.3701233675183393-4.409999999999999,-0.37000000000000055"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 4.4100,-1.3700 L 3.41,-1.3700 A 1.0 1.0 -0.0 0 0 4.4100,-0.3700 L 4.4100,-1.3700"/></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="-3.309999999999999" x="3.899999999999999">False</text></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="8.905,1.67743831624083-8.903026728428271,1.6146477967115165-8.897114701314477,1.5521050826765257-8.887287250728688,1.4900570016551051-8.87358316112863,1.4287484290759749-8.856056516295153,1.3684213218658825-8.83477648588825,1.309313763556152-8.80982705246602,1.251659024675757-8.781306680043864,1.1956846421391147-8.749327925502014,1.1416115212618334-8.714016994374946,1.0896530639483566-8.67551324277579,1.0400143264921402-8.633968627421412,0.9928912103121412-8.58954710592869,0.9484696888194182-8.54242398974869,0.9069250734650409-8.492785252292473,0.8684213218658825-8.440826794978996,0.8331103907388147-8.386753674101714,0.8011316361969665-8.330779291565072,0.7726112637748104-8.273124552684678,0.7476618303525786-8.214016994374946,0.7263817999456763-8.153689887164854,0.7088551551121989-8.092381314585724,0.6951510655121411-8.030333233564303,0.685323614926352-7.967790519529312,0.6794115878125582-7.904999999999998,0.67743831624083-7.842209480470686,0.6794115878125582-7.779666766435696,0.685323614926352-7.717618685414273,0.6951510655121411-7.656310112835143,0.7088551551121989-7.595983005625053,0.7263817999456763-7.536875447315322,0.7476618303525786-7.479220708434925,0.7726112637748104-7.423246325898283,0.8011316361969665-7.369173205021001,0.8331103907388151-7.317214747707526,0.8684213218658825-7.26757601025131,0.9069250734650409-7.220452894071311,0.9484696888194182-7.1760313725785885,0.9928912103121412-7.13448675722421,1.0400143264921402-7.095983005625051,1.0896530639483566-7.060672074497983,1.141611521261833-7.028693319956134,1.1956846421391147-7.00017294753398,1.251659024675757-6.9752235141117485,1.3093137635561516-6.953943483704846,1.3684213218658825-6.936416838871368,1.4287484290759749-6.922712749271309,1.4900570016551051-6.91288529868552,1.5521050826765257-6.906973271571728,1.6146477967115165-6.904999999999999,1.67743831624083-6.906973271571728,1.7402288357701434-6.91288529868552,1.8027715498051342-6.922712749271309,1.8648196308265548-6.936416838871368,1.9261282034056846-6.953943483704846,1.9864553106157776-6.9752235141117485,2.045562868925508-7.000172947533979,2.1032176078059024-7.028693319956134,2.1591919903425456-7.060672074497983,2.2132651112198265-7.09598300562505,2.265223568533303-7.13448675722421,2.3148623059895197-7.176031372578586,2.3619854221695182-7.220452894071311,2.4064069436622413-7.26757601025131,2.4479515590166194-7.317214747707526,2.486455310615778-7.369173205021001,2.5217662417428452-7.423246325898283,2.5537449962846934-7.479220708434926,2.5822653687068495-7.536875447315322,2.6072148021290813-7.59598300562505,2.6284948325359836-7.656310112835143,2.646021477369461-7.717618685414273,2.659725566969519-7.779666766435693,2.669553017555308-7.842209480470686,2.6754650446691013-7.904999999999998,2.67743831624083-7.967790519529312,2.6754650446691013-8.030333233564303,2.669553017555308-8.092381314585724,2.659725566969519-8.153689887164854,2.646021477369461-8.214016994374946,2.6284948325359836-8.273124552684676,2.6072148021290813-8.330779291565069,2.58226536870685-8.386753674101715,2.5537449962846934-8.440826794978996,2.521766241742845-8.492785252292473,2.486455310615778-8.54242398974869,2.4479515590166194-8.58954710592869,2.4064069436622413-8.633968627421412,2.3619854221695187-8.67551324277579,2.3148623059895197-8.714016994374946,2.2652235685333033-8.749327925502014,2.213265111219827-8.781306680043864,2.159191990342545-8.80982705246602,2.103217607805903-8.83477648588825,2.045562868925508-8.856056516295153,1.9864553106157776-8.87358316112863,1.9261282034056846-8.887287250728688,1.8648196308265548-8.897114701314477,1.8027715498051347-8.903026728428271,1.7402288357701432-8.905,1.6774383162408302"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="7.904999999999998,2.67743831624083-7.90302672842827,2.6146477967115165-7.897114701314477,2.5521050826765257-7.887287250728688,2.490057001655105-7.8735831611286295,2.4287484290759753-7.856056516295151,2.3684213218658825-7.834776485888249,2.309313763556152-7.809827052466018,2.2516590246757575-7.781306680043864,2.1956846421391147-7.749327925502015,2.1416115212618334-7.714016994374947,2.089653063948357-7.675513242775789,2.04001432649214-7.633968627421411,1.9928912103121412-7.589547105928687,1.9484696888194184-7.542423989748688,1.906925073465041-7.492785252292471,1.8684213218658825-7.440826794978996,1.8331103907388149-7.386753674101714,1.8011316361969663-7.330779291565072,1.7726112637748104-7.273124552684676,1.7476618303525786-7.214016994374947,1.7263817999456768-7.1536898871648535,1.7088551551121989-7.092381314585724,1.6951510655121413-7.030333233564304,1.685323614926352-6.967790519529313,1.6794115878125584-6.904999999999999,1.67743831624083-6.842209480470686,1.6794115878125584-6.779666766435695,1.685323614926352-6.7176186854142745,1.6951510655121411-6.656310112835145,1.7088551551121989-6.595983005625052,1.7263817999456768-6.53687544731532,1.7476618303525786-6.4792207084349265,1.7726112637748104-6.423246325898284,1.801131636196967-6.369173205021003,1.833110390738815-6.317214747707527,1.8684213218658825-6.267576010251308,1.9069250734650407-6.220452894071311,1.9484696888194184-6.1760313725785885,1.9928912103121412-6.134486757224209,2.04001432649214-6.095983005625052,2.0896530639483566-6.060672074497985,2.141611521261833-6.028693319956136,2.1956846421391147-6.0001729475339785,2.251659024675757-5.975223514111747,2.309313763556152-5.953943483704846,2.3684213218658825-5.936416838871368,2.4287484290759753-5.9227127492713105,2.4900570016551056-5.912885298685522,2.5521050826765257-5.906973271571728,2.6146477967115165-5.904999999999998,2.67743831624083-5.906973271571728,2.7402288357701434-5.912885298685522,2.802771549805134-5.9227127492713105,2.8648196308265548-5.936416838871368,2.9261282034056846-5.953943483704846,2.986455310615778-5.975223514111747,3.045562868925508-6.0001729475339785,3.1032176078059024-6.028693319956136,3.159191990342545-6.060672074497984,3.2132651112198265-6.095983005625052,3.265223568533303-6.134486757224209,3.3148623059895197-6.176031372578588,3.3619854221695182-6.220452894071311,3.4064069436622413-6.267576010251308,3.4479515590166194-6.317214747707526,3.4864553106157774-6.369173205021003,3.5217662417428452-6.423246325898284,3.5537449962846934-6.479220708434927,3.5822653687068495-6.53687544731532,3.6072148021290813-6.595983005625052,3.6284948325359836-6.656310112835145,3.646021477369461-6.7176186854142745,3.659725566969519-6.779666766435695,3.669553017555308-6.842209480470686,3.6754650446691013-6.904999999999999,3.67743831624083-6.967790519529313,3.6754650446691013-7.030333233564304,3.669553017555308-7.092381314585724,3.659725566969519-7.1536898871648535,3.646021477369461-7.214016994374947,3.6284948325359836-7.273124552684675,3.6072148021290813-7.330779291565071,3.58226536870685-7.386753674101714,3.5537449962846934-7.440826794978996,3.521766241742845-7.492785252292471,3.4864553106157774-7.542423989748687,3.4479515590166194-7.589547105928686,3.4064069436622413-7.633968627421411,3.3619854221695187-7.675513242775789,3.3148623059895197-7.714016994374947,3.2652235685333033-7.749327925502014,3.213265111219827-7.781306680043864,3.159191990342545-7.809827052466018,3.103217607805903-7.834776485888249,3.045562868925508-7.856056516295151,2.9864553106157774-7.8735831611286295,2.9261282034056846-7.887287250728688,2.8648196308265548-7.897114701314477,2.8027715498051347-7.90302672842827,2.7402288357701434-7.904999999999998,2.6774383162408304"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="6.904999999999999,1.67743831624083-6.90611012503803,1.6303318655311871-6.909438035396918,1.5833300029223158-6.914976342283441,1.5365370843032475-6.922712749271309,1.4900570016551056-6.932630079602323,1.4439929523849249-6.944706314323055,1.3984472102016006-6.958914641172453,1.3535208980426807-6.9752235141117485,1.309313763556152-6.993596723364554,1.2659239576357213-7.013993475811629,1.2234478165012832-7.036368485561809,1.1819796478084226-7.060672074497983,1.1416115212618334-7.086850282574976,1.1024330641975513-7.114844987624307,1.0645312625878538-7.144594034399967,1.0279902679106465-7.1760313725785885,0.9928912103121412-7.209087203407686,0.9593120184776414-7.243688134676345,0.9273272466103704-7.279757343664293,0.8970079089025003-7.317214747707526,0.8684213218658825-7.355977182001866,0.8416309548725609-7.3959585842496285,0.8166962892368863-7.437070185739426,0.7936726861521364-7.479220708434925,0.7726112637748108-7.52231656763491,0.7535587837295434-7.566262079754706,0.7365575472866044-7.6109596747676935,0.7216453014424999-7.656310112835143,0.7088551551121989-7.702212704643485,0.6982155056190642-7.748565534959766,0.6897499756456922-7.7952656889089535,0.6834773607856506-7.842209480470686,0.6794115878125582-7.889292682688177,0.6775616837591705-7.936410759078127,0.6779317558750981-7.983459095727845,0.6805209825077019-8.030333233564303,0.685323614926352-8.076929100279408,0.6923289900860561-8.12314324139654,0.7015215543020825-8.16887304996537,0.7128808977830317-8.214016994374946,0.7263817999456763-8.258474843779256,0.7419942854109625-8.30214789063478,0.7596836905568489-8.344939169855914,0.7794107404802144-8.386753674101715,0.8011316361969665-8.427498564715947,0.8247981518867373-8.46708337785213,0.8503577419662682-8.505420225325883,0.8777536577537393-8.54242398974869,0.9069250734650405-8.578012513509773,0.9378072212622204-8.612106781186547,0.970331535054282-8.644631094978608,1.0044258027310562-8.67551324277579,1.0400143264921402-8.704684658487091,1.077018090914946-8.732080574274558,1.1153549383886991-8.757640164354092,1.1549397515248812-8.781306680043864,1.1956846421391147-8.803027575760614,1.2374991463849145-8.82275462568398,1.2802904256060494-8.840444030829866,1.323963472461573-8.856056516295153,1.3684213218658825-8.869557418457797,1.4135652662754574-8.880916761938748,1.4592950748442868-8.890109326154773,1.5055092159614203-8.897114701314477,1.5521050826765261-8.901917333733127,1.5989792205129842-8.90450656036573,1.6460275571627014-8.90487663248166,1.6931456335526511-8.903026728428271,1.7402288357701428-8.898960955455179,1.7871726273318753-8.892688340595138,1.8338727812810616-8.884222810621766,1.880225611597342-8.87358316112863,1.9261282034056848-8.86079301479833,1.9714786414731347-8.845880768954226,2.016176236486121-8.828879532511285,2.06012174860592-8.80982705246602,2.1032176078059015-8.788765630088692,2.145368130501403-8.765742027003943,2.1864797319912013-8.74080736136827,2.226461134238961-8.714016994374946,2.265223568533303-8.685430407338329,2.3026809725765354-8.65511106963046,2.3387501815644813-8.623126297763188,2.373351112833144-8.589547105928688,2.4064069436622417-8.554448048330183,2.437844281840861-8.517907053652976,2.46759332861652-8.480005252043279,2.495588033665853-8.440826794978996,2.5217662417428452-8.400458668432407,2.5460698306790213-8.358990499739546,2.5684448404291977-8.316514358605108,2.5888415928762756-8.273124552684678,2.6072148021290813-8.228917418198147,2.623523675068375-8.18399110603923,2.637732001917773-8.138445363855904,2.6498082366385067-8.092381314585724,2.6597255669695183-8.045901231937583,2.6674619739573875-7.999108313318512,2.67300028084391-7.952106450709641,2.6763281912028-7.904999999999998,2.67743831624083"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 7.9050,1.6774 L 6.9050,1.6774 A 1.0 1.0 -0.0 1 1 7.9050,2.6774 L 7.9050,1.6774"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="8.91987663248166,-1.3774383162408301-8.917903360909932,-1.4402288357701436-8.911991333796138,-1.5027715498051353-8.90216388321035,-1.564819630826555-8.888459793610291,-1.6261282034056852-8.870933148776814,-1.6864553106157785-8.849653118369911,-1.7455628689255085-8.82470368494768,-1.803217607805903-8.796183312525523,-1.8591919903425462-8.764204557983675,-1.9132651112198267-8.728893626856609,-1.9652235685333035-8.69038987525745,-2.0148623059895203-8.648845259903071,-2.0619854221695193-8.604423738410347,-2.106406943662242-8.557300622230349,-2.14795155901662-8.507661884774134,-2.1864553106157785-8.455703427460657,-2.2217662417428454-8.401630306583375,-2.2537449962846945-8.345655924046733,-2.28226536870685-8.288001185166339,-2.307214802129082-8.228893626856607,-2.3284948325359838-8.168566519646514,-2.346021477369461-8.107257947067385,-2.359725566969519-8.045209866045964,-2.3695530175553086-7.982667152010974,-2.375465044669102-7.91987663248166,-2.37743831624083-7.857086112952347,-2.375465044669102-7.794543398917356,-2.3695530175553086-7.7324953178959355,-2.359725566969519-7.6711867453168034,-2.346021477369461-7.610859638106713,-2.3284948325359838-7.55175207979698,-2.307214802129082-7.494097340916587,-2.28226536870685-7.438122958379942,-2.2537449962846945-7.384049837502664,-2.2217662417428454-7.332091380189185,-2.1864553106157785-7.282452642732968,-2.14795155901662-7.235329526552969,-2.106406943662242-7.1909080050602485,-2.0619854221695193-7.14936338970587,-2.0148623059895203-7.110859638106713,-1.9652235685333035-7.075548706979645,-1.9132651112198276-7.043569952437796,-1.8591919903425462-7.0150495800156385,-1.803217607805903-6.9901001465934085,-1.7455628689255085-6.968820116186505,-1.6864553106157785-6.951293471353029,-1.6261282034056852-6.9375893817529715,-1.564819630826555-6.927761931167183,-1.5027715498051344-6.9218499040533885,-1.4402288357701436-6.9198766324816585,-1.377438316240831-6.9218499040533885,-1.3146477967115167-6.927761931167183,-1.2521050826765268-6.9375893817529715,-1.1900570016551053-6.951293471353029,-1.128748429075976-6.968820116186505,-1.0684213218658827-6.9901001465934085,-1.0093137635561527-7.0150495800156385,-0.9516590246757581-7.043569952437797,-0.8956846421391149-7.075548706979645,-0.8416115212618336-7.110859638106713,-0.7896530639483577-7.14936338970587,-0.7400143264921408-7.1909080050602485,-0.6928912103121418-7.23532952655297,-0.6484696888194192-7.282452642732968,-0.6069250734650411-7.332091380189185,-0.5684213218658836-7.384049837502664,-0.5331103907388157-7.438122958379942,-0.5011316361969658-7.494097340916587,-0.472611263774811-7.55175207979698,-0.4476618303525792-7.610859638106712,-0.4263817999456756-7.671186745316806,-0.40885515511219905-7.7324953178959355,-0.3951510655121413-7.794543398917355,-0.3853236149263526-7.857086112952347,-0.37941158781255924-7.91987663248166,-0.37743831624083013-7.982667152010971,-0.37941158781255924-8.045209866045964,-0.3853236149263526-8.107257947067383,-0.3951510655121413-8.168566519646514,-0.40885515511219905-8.228893626856607,-0.4263817999456756-8.288001185166337,-0.4476618303525792-8.345655924046731,-0.4726112637748101-8.401630306583375,-0.5011316361969658-8.455703427460657,-0.5331103907388157-8.507661884774132,-0.5684213218658836-8.557300622230349,-0.6069250734650411-8.604423738410347,-0.6484696888194192-8.648845259903071,-0.6928912103121418-8.69038987525745,-0.7400143264921408-8.728893626856609,-0.7896530639483568-8.764204557983675,-0.8416115212618336-8.796183312525523,-0.8956846421391158-8.82470368494768,-0.9516590246757572-8.849653118369911,-1.0093137635561527-8.870933148776814,-1.0684213218658827-8.888459793610291,-1.128748429075976-8.90216388321035,-1.1900570016551053-8.911991333796138,-1.2521050826765259-8.917903360909932,-1.3146477967115175-8.91987663248166,-1.3774383162408301"/></g><g stroke-opacity="0.2" fill="none" stroke-width="2.0e-2" stroke="#0d0d0d"><polyline points="7.91987663248166,-0.37743831624083013-7.917903360909932,-0.4402288357701436-7.911991333796136,-0.5027715498051353-7.902163883210347,-0.564819630826555-7.888459793610291,-0.6261282034056852-7.870933148776814,-0.6864553106157785-7.849653118369911,-0.7455628689255085-7.824703684947679,-0.803217607805903-7.796183312525522,-0.8591919903425462-7.764204557983673,-0.9132651112198267-7.728893626856606,-0.9652235685333035-7.690389875257449,-1.0148623059895203-7.64884525990307,-1.0619854221695193-7.604423738410349,-1.106406943662242-7.55730062223035,-1.14795155901662-7.507661884774134,-1.1864553106157785-7.455703427460655,-1.2217662417428454-7.401630306583374,-1.2537449962846945-7.345655924046731,-1.2822653687068502-7.288001185166339,-1.307214802129082-7.228893626856607,-1.3284948325359838-7.168566519646513,-1.3460214773694612-7.107257947067383,-1.359725566969519-7.045209866045964,-1.3695530175553086-6.982667152010974,-1.375465044669102-6.9198766324816585,-1.3774383162408301-6.857086112952347,-1.375465044669102-6.794543398917354,-1.3695530175553086-6.732495317895934,-1.359725566969519-6.671186745316805,-1.3460214773694612-6.610859638106711,-1.3284948325359838-6.551752079796982,-1.307214802129082-6.494097340916586,-1.2822653687068502-6.438122958379944,-1.2537449962846945-6.384049837502662,-1.2217662417428454-6.332091380189187,-1.1864553106157785-6.28245264273297,-1.14795155901662-6.235329526552971,-1.106406943662242-6.190908005060247,-1.0619854221695193-6.149363389705871,-1.0148623059895203-6.110859638106711,-0.9652235685333035-6.075548706979644,-0.9132651112198276-6.043569952437795,-0.8591919903425462-6.01504958001564,-0.803217607805903-5.9901001465934085,-0.7455628689255085-5.968820116186507,-0.6864553106157785-5.951293471353029,-0.6261282034056852-5.93758938175297,-0.564819630826555-5.92776193116718,-0.5027715498051353-5.9218499040533885,-0.4402288357701436-5.91987663248166,-0.37743831624083013-5.9218499040533885,-0.3146477967115171-5.92776193116718,-0.2521050826765263-5.93758938175297,-0.19005700165510575-5.951293471353029,-0.12874842907597595-5.968820116186507,-6.842132186588268e-2-5.9901001465934085,-9.313763556152654e-3-6.01504958001564,4.8340975324241864e-2-6.043569952437795,0.10431535786088464-6.075548706979644,0.15838847873816597-6.110859638106711,0.21034693605164234-6.14936338970587,0.25998567350785917-6.190908005060247,0.3071087896878577-6.235329526552971,0.35153031118058076-6.28245264273297,0.3930749265349589-6.332091380189187,0.4315786781341169-6.384049837502662,0.4668896092611847-6.438122958379945,0.4988683638030329-6.494097340916586,0.527388736225189-6.551752079796982,0.5523381696474208-6.610859638106711,0.5736182000543231-6.671186745316805,0.5911448448878005-6.732495317895934,0.6048489344878583-6.794543398917353,0.6146763850736474-6.857086112952347,0.6205884121874408-6.9198766324816585,0.6225616837591694-6.982667152010973,0.6205884121874408-7.045209866045964,0.6146763850736474-7.1072579470673825,0.6048489344878583-7.168566519646513,0.5911448448878005-7.228893626856607,0.5736182000543231-7.288001185166338,0.5523381696474208-7.3456559240467305,0.5273887362251894-7.401630306583374,0.4988683638030329-7.455703427460655,0.4668896092611843-7.507661884774131,0.4315786781341169-7.55730062223035,0.3930749265349589-7.604423738410349,0.35153031118058076-7.64884525990307,0.30710878968785815-7.690389875257449,0.25998567350785917-7.728893626856605,0.21034693605164279-7.764204557983673,0.15838847873816642-7.796183312525522,0.10431535786088464-7.824703684947679,4.834097532424231e-2-7.849653118369911,-9.313763556152654e-3-7.870933148776814,-6.842132186588312e-2-7.888459793610291,-0.12874842907597595-7.902163883210347,-0.19005700165510575-7.911991333796136,-0.25210508267652587-7.917903360909932,-0.3146477967115171-7.91987663248166,-0.37743831624083013"/></g><g stroke-opacity="0.5" fill="none" stroke-width="5.0e-2" stroke="#0d0d0d"><polyline points="6.9198766324816585,-1.3774383162408301-6.872770181772015,-1.3763281912028007-6.825768319163144,-1.3730002808439106-6.778975400544077,-1.3674619739573877-6.732495317895934,-1.359725566969519-6.686431268625753,-1.349808236638507-6.640885526442429,-1.3377320019177739-6.595959214283511,-1.3235236750683756-6.551752079796982,-1.307214802129082-6.508362273876552,-1.2888415928762753-6.4658861327421135,-1.2684448404291984-6.424417964049251,-1.2460698306790223-6.384049837502662,-1.2217662417428463-6.344871380438382,-1.1955880336658544-6.306969578828682,-1.1675933286165212-6.270428584151476,-1.1378442818408616-6.235329526552971,-1.106406943662242-6.201750334718471,-1.0733511128331448-6.1697655628512,-1.0387501815644824-6.139446225143328,-1.002680972576536-6.110859638106711,-0.9652235685333035-6.08406927111339,-0.9264611342389624-6.059134605477714,-0.8864797319912019-6.036111002392965,-0.8453681305014036-6.01504958001564,-0.803217607805903-5.995997099970373,-0.7601217486059206-5.978995863527435,-0.7161762364861217-5.964083617683329,-0.6714786414731342-5.951293471353029,-0.6261282034056852-5.940653821859894,-0.5802256115973434-5.93218829188652,-0.5338727812810613-5.925915677026481,-0.48717262733187594-5.9218499040533885,-0.4402288357701436-5.919999999999999,-0.3931456335526513-5.920370072115927,-0.3460275571627025-5.92295929874853,-0.2989792205129853-5.92776193116718,-0.2521050826765263-5.934767306326886,-0.20550921596142135-5.943959870542911,-0.1592950748442883-5.95531921402386,-0.1135652662754576-5.968820116186507,-6.842132186588312e-2-5.9844326016517915,-2.39634724615736e-2-6.002122006797679,1.970957439395038e-2-6.021849056721044,6.25008536150844e-2-6.043569952437795,0.10431535786088464-6.067236468127568,0.14506024847511823-6.092796058207097,0.18464506161130112-6.12019197399457,0.22298190908505333-6.14936338970587,0.25998567350785917-6.180245537503049,0.29557419726894274-6.212769851295112,0.3296684649457169-6.246864118971887,0.362192778737779-6.28245264273297,0.3930749265349589-6.319456407155776,0.4222463422462597-6.357793254629527,0.44964225803373115-6.397378067765709,0.47520184811326205-6.438122958379945,0.4988683638030329-6.4799374626257435,0.520589259519785-6.522728741846878,0.5403163094431505-6.566401788702401,0.5580057145890369-6.610859638106711,0.5736182000543231-6.656003582516288,0.5871191022169677-6.701733391085117,0.5984784456979164-6.747947532202249,0.6076710099139433-6.794543398917354,0.6146763850736474-6.841417536753815,0.6194790174922975-6.88846587340353,0.6220682441249008-6.93558394979348,0.6224383162408302-6.982667152010973,0.6205884121874408-7.029610943572705,0.6165226392143492-7.07631109752189,0.6102500243543072-7.12266392783817,0.6017844943809352-7.168566519646513,0.5911448448878005-7.213916957713963,0.5783546985574994-7.25861455272695,0.563442452713395-7.30256006484675,0.5464412162704559-7.3456559240467305,0.5273887362251894-7.387806446742234,0.506327313847863-7.428918048232031,0.48330371076311307-7.468899450479789,0.45836904512744026-7.507661884774131,0.4315786781341169-7.545119288817364,0.4029920910974991-7.581188497805309,0.37267275338962946-7.615789429073974,0.34068798152235846-7.64884525990307,0.3071087896878577-7.680282598081689,0.27200973208935286-7.710031644857349,0.23546873741214602-7.738026349906683,0.1975669358024481-7.764204557983674,0.15838847873816553-7.788508146919852,0.1180203521915768-7.810883156670026,7.655218349871662e-2-7.8312799091171055,3.407604236427764e-2-7.849653118369911,-9.313763556152654e-3-7.865961991309204,-5.35208980426809e-2-7.880170318158601,-9.844721020160074e-2-7.892246552879336,-0.1439929523849255-7.902163883210347,-0.19005700165510575-7.909900290198216,-0.2365370843032477-7.915438597084738,-0.28333000292231647-7.91876650744363,-0.33033186553118776-7.91987663248166,-0.37743831624083013"/></g><g fill-opacity="0.3" stroke-opacity="0.5" fill="#0d0d0d" stroke-width="1.0e-2" stroke="#0d0d0d"><path d="M 7.9199,-1.3774 L 6.9199,-1.3774 A 1.0 1.0 -0.0 1 0 7.9199,-0.3774 L 7.9199,-1.3774"/></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.4"><text y="-3.3174383162408296" x="7.394999999999998">True</text></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="0.6"><text y="-4.39487663248166" x="5.499999999999998">Large</text></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="316.4440150447401" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0.0 -4.854876632481659 9.0 8.532314948722489" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}{+  .chart g {+    stroke: #0d0d0d;+  }+  .chart g text {+    fill: #0d0d0d;+  }+}+@media (prefers-color-scheme:dark) {+  .chart g {+    stroke: #f0f0f0;+  }+  .chart g text {+    fill: #f0f0f0;+  }+}</style><g class="chart"><g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.6" fill-opacity="1.0" text-anchor="middle"><text x="0.5" y="-0.0" transform="rotate(-90.0, 0.5, -0.0)">Sweep</text></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="1.5699999999999998" y="1.5099999999999998" transform="rotate(-90.0, 1.5699999999999998, 1.5099999999999998)">True</text></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="1.5699999999999998" y="-1.5099999999999998" transform="rotate(-90.0, 1.5699999999999998, -1.5099999999999998)">False</text></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="5.1499999999999995,1.6599999999999993+5.148026728428272,1.5972094804706858+5.142114701314479,1.534666766435695+5.132287250728689,1.4726186854142749+5.118583161128631,1.4113101128351442+5.101056516295153,1.3509830056250518+5.079776485888251,1.2918754473153213+5.0548270524660195,1.2342207084349264+5.026306680043864,1.178246325898284+4.994327925502016,1.1241732050210027+4.959016994374948,1.072214747707526+4.92051324277579,1.0225760102513095+4.878968627421412,0.9754528940713105+4.834547105928689,0.9310313725785879+4.78742398974869,0.8894867572242102+4.737785252292474,0.8509830056250518+4.685826794978997,0.815672074497984+4.631753674101716,0.7836933199561358+4.575779291565073,0.7551729475339797+4.518124552684678,0.7302235141117479+4.459016994374948,0.7089434837048456+4.398689887164855,0.6914168388713682+4.337381314585725,0.6777127492713104+4.275333233564305,0.6678852986855217+4.212790519529314,0.6619732715717275+4.15,0.6599999999999993+4.087209480470687,0.6619732715717275+4.024666766435696,0.6678852986855213+3.9626186854142755,0.6777127492713104+3.901310112835145,0.6914168388713682+3.8409830056250525,0.7089434837048456+3.7818754473153224,0.7302235141117479+3.7242207084349275,0.7551729475339797+3.6682463258982843,0.7836933199561358+3.6141732050210034,0.8156720744979844+3.5622147477075266,0.8509830056250518+3.5125760102513106,0.8894867572242102+3.4654528940713116,0.9310313725785879+3.421031372578589,0.9754528940713105+3.3794867572242104,1.0225760102513095+3.340983005625053,1.072214747707526+3.3056720744979855,1.1241732050210023+3.2736933199561364,1.178246325898284+3.245172947533981,1.2342207084349264+3.2202235141117486,1.291875447315321+3.1989434837048467,1.3509830056250518+3.181416838871369,1.4113101128351442+3.1677127492713115,1.4726186854142749+3.1578852986855224,1.534666766435695+3.151973271571728,1.5972094804706858+3.15,1.6599999999999993+3.151973271571728,1.7227905195293127+3.1578852986855224,1.7853332335643035+3.1677127492713115,1.847381314585724+3.1814168388713684,1.9086898871648539+3.1989434837048463,1.9690169943749467+3.220223514111748,2.028124552684677+3.2451729475339803,2.0857792915650712+3.2736933199561364,2.1417536741017145+3.305672074497985,2.195826794978996+3.3409830056250525,2.2477852522924717+3.3794867572242104,2.297423989748689+3.421031372578588,2.3445471059286875+3.4654528940713116,2.388968627421411+3.5125760102513106,2.4305132427757887+3.5622147477075266,2.4690169943749467+3.614173205021004,2.5043279255020146+3.6682463258982843,2.5363066800438627+3.724220708434928,2.5648270524660193+3.7818754473153224,2.5897764858882506+3.840983005625052,2.611056516295153+3.9013101128351453,2.6285831611286303+3.9626186854142755,2.642287250728688+4.024666766435696,2.652114701314477+4.087209480470687,2.658026728428271+4.15,2.6599999999999993+4.212790519529312,2.658026728428271+4.275333233564305,2.6521147013144772+4.337381314585725,2.642287250728688+4.398689887164855,2.6285831611286303+4.459016994374948,2.611056516295153+4.518124552684678,2.589776485888251+4.575779291565072,2.5648270524660193+4.6317536741017165,2.5363066800438627+4.685826794978997,2.5043279255020146+4.737785252292474,2.4690169943749467+4.78742398974869,2.4305132427757887+4.834547105928689,2.3889686274214115+4.878968627421412,2.3445471059286884+4.92051324277579,2.297423989748689+4.959016994374948,2.2477852522924726+4.994327925502016,2.1958267949789962+5.026306680043864,2.1417536741017154+5.0548270524660195,2.085779291565072+5.079776485888251,2.028124552684677+5.101056516295153,1.9690169943749471+5.118583161128631,1.9086898871648545+5.132287250728689,1.847381314585724+5.142114701314478,1.785333233564304+5.148026728428272,1.7227905195293125+5.1499999999999995,1.6599999999999993"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="4.15,2.6599999999999993+4.148026728428272,2.597209480470686+4.142114701314478,2.534666766435695+4.132287250728689,2.4726186854142744+4.118583161128631,2.4113101128351446+4.101056516295154,2.350983005625052+4.079776485888252,2.2918754473153213+4.05482705246602,2.2342207084349264+4.026306680043864,2.178246325898284+3.994327925502015,2.1241732050210027+3.9590169943749474,2.072214747707526+3.920513242775789,2.0225760102513095+3.8789686274214112,1.9754528940713107+3.834547105928689,1.9310313725785877+3.78742398974869,1.8894867572242102+3.737785252292473,1.8509830056250518+3.685826794978997,1.8156720744979842+3.6317536741017147,1.7836933199561356+3.575779291565073,1.7551729475339797+3.5181245526846783,1.7302235141117481+3.459016994374947,1.7089434837048456+3.3986898871648545,1.6914168388713682+3.3373813145857247,1.6777127492713109+3.275333233564304,1.6678852986855215+3.212790519529313,1.6619732715717275+3.15,1.6599999999999993+3.0872094804706864,1.6619732715717275+3.0246667664356957,1.6678852986855213+2.9626186854142755,1.6777127492713106+2.901310112835145,1.6914168388713682+2.8409830056250525,1.7089434837048456+2.7818754473153224,1.7302235141117481+2.7242207084349275,1.7551729475339797+2.6682463258982843,1.7836933199561358+2.6141732050210034,1.8156720744979844+2.5622147477075266,1.8509830056250518+2.5125760102513106,1.88948675722421+2.4654528940713116,1.9310313725785877+2.421031372578589,1.9754528940713107+2.3794867572242104,2.0225760102513095+2.340983005625053,2.072214747707526+2.3056720744979855,2.1241732050210023+2.2736933199561364,2.178246325898284+2.245172947533981,2.2342207084349264+2.220223514111749,2.291875447315321+2.1989434837048467,2.350983005625052+2.1814168388713693,2.411310112835144+2.1677127492713115,2.472618685414275+2.1578852986855224,2.5346667664356946+2.1519732715717286,2.597209480470686+2.1500000000000004,2.6599999999999993+2.1519732715717286,2.7227905195293127+2.1578852986855224,2.7853332335643035+2.1677127492713115,2.847381314585724+2.181416838871369,2.908689887164854+2.1989434837048467,2.9690169943749467+2.2202235141117486,3.028124552684677+2.2451729475339803,3.0857792915650717+2.273693319956137,3.1417536741017145+2.305672074497985,3.195826794978996+2.3409830056250525,3.2477852522924717+2.3794867572242104,3.297423989748689+2.421031372578588,3.3445471059286875+2.4654528940713116,3.388968627421411+2.5125760102513106,3.4305132427757887+2.5622147477075266,3.4690169943749467+2.614173205021004,3.5043279255020146+2.6682463258982843,3.5363066800438627+2.724220708434928,3.5648270524660193+2.7818754473153224,3.5897764858882506+2.840983005625052,3.611056516295153+2.9013101128351453,3.6285831611286303+2.9626186854142755,3.642287250728688+3.024666766435695,3.652114701314477+3.0872094804706864,3.658026728428271+3.15,3.6599999999999993+3.2127905195293125,3.658026728428271+3.2753332335643037,3.6521147013144772+3.3373813145857243,3.642287250728688+3.3986898871648545,3.6285831611286303+3.459016994374947,3.611056516295153+3.518124552684677,3.589776485888251+3.5757792915650715,3.5648270524660193+3.6317536741017156,3.5363066800438627+3.685826794978997,3.5043279255020146+3.737785252292473,3.4690169943749467+3.7874239897486888,3.4305132427757887+3.8345471059286877,3.3889686274214115+3.8789686274214112,3.3445471059286884+3.920513242775789,3.297423989748689+3.9590169943749474,3.2477852522924726+3.9943279255020148,3.1958267949789962+4.026306680043864,3.1417536741017154+4.0548270524660195,3.085779291565072+4.079776485888252,3.028124552684677+4.101056516295154,2.9690169943749467+4.118583161128631,2.9086898871648548+4.132287250728689,2.847381314585724+4.142114701314478,2.785333233564304+4.148026728428272,2.7227905195293127+4.15,2.6599999999999997"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="3.15,1.6599999999999993+3.1657073173118206,1.6601233675183389+3.181410759078128,1.6604934396342674+3.1971064507096427,1.6611101250380291+3.212790519529313,1.6619732715717275+3.228459095727845,1.6630826662668712+3.2441083133185145,1.6644380353969193+3.2597343110910453,1.6660390445448194+3.2753332335643037,1.6678852986855213+3.290901231937583,1.6699763422834417+3.306434465040231,1.6723116594048615+3.3219291002794096,1.6748906738452254+3.3373813145857247,1.6777127492713109+3.3527872953565123,1.6807771893782335+3.3681432413965426,1.684083238061252+3.383445363855906,1.6876300796023227+3.3986898871648545,1.6914168388713682+3.413873049965373,1.6954425815422012+3.4289911060392293,1.6997063143230562+3.4440403252323035,1.7042069852016692+3.459016994374947,1.7089434837048456+3.473917418198149,1.713914641172454+3.488737920245291,1.7191192310457737+3.503474843779257,1.724555969170132+3.5181245526846783,1.7302235141117481+3.53268343236509,1.7361204674887125+3.54714789063478,1.7422453743160182+3.5615143586051086,1.748596723364554+3.575779291565073,1.7551729475339797+3.5899391698559153,1.7619724242393837+3.6039904997395467,1.7689934758116315+3.617929814260573,1.7762343699113057+3.631753674101715,1.7836933199561358+3.645458668432408,1.7913684855618082+3.6590414157503712,1.7992579729960558+3.6724985647159487,1.807359835645907+3.685826794978997,1.8156720744979842+3.6990228179981317,1.824192638631729+3.7120833778521307,1.8329194257254375+3.7250052520432786,1.8418502825749759+3.737785252292473,1.8509830056250518+3.750420225325884,1.8603153415129086+3.762907053652977,1.869844987624309+3.775242656335705,1.8795695926616696+3.78742398974869,1.8894867572242102+3.799448048330184,1.8995940343999682+3.811311865323652,1.9098889303695397+3.8230125135097737,1.9203689050213897+3.834547105928689,1.9310313725785877+3.845912796592314,1.9418737022368104+3.857106781186548,1.9528932188134518+3.8681262977631885,1.964087203407685+3.8789686274214112,1.9754528940713107+3.88963109497861,1.986987486490226+3.9001110696304595,1.9986881346763474+3.9104059656000314,2.0105519516698154+3.920513242775789,2.0225760102513095+3.9304304073383296,2.0347573436642943+3.9401550123756905,2.047092946347023+3.9496846584870906,2.0595797746741153+3.9590169943749474,2.072214747707526+3.968149717425023,2.0849947479567206+3.977080574274562,2.097916622147869+3.9858073613682703,2.1109771820018675+3.994327925502015,2.1241732050210027+4.0026401643540925,2.1375014352840505+4.010742027003944,2.150958584249628+4.018631514438192,2.164541331567592+4.026306680043864,2.178246325898284+4.033765630088694,2.192070185739426+4.041006524188369,2.2060095002604525+4.048027575760616,2.2200608301440843+4.05482705246602,2.234220708434927+4.0614032766354455,2.2484856413948906+4.067754625683982,2.2628521093652187+4.073879532511287,2.2773165676349096+4.079776485888252,2.2918754473153213+4.085444030829867,2.3065251562207427+4.090880768954226,2.3212620797547077+4.096085358827546,2.33608258180185+4.101056516295154,2.350983005625052+4.10579301479833,2.365959674767695+4.110293685676943,2.38100889396077+4.114557418457799,2.3961269500346267+4.118583161128631,2.4113101128351446+4.122369920397677,2.4265546361440937+4.125916761938748,2.4418567586034565+4.1292228106217665,2.4572127046434864+4.132287250728689,2.4726186854142744+4.135109326154774,2.48807089972059+4.137688340595139,2.5035655349597685+4.140023657716558,2.5190987680624164+4.142114701314478,2.534666766435695+4.14396095545518,2.550265688908954+4.145561964603081,2.565891686681485+4.146917333733128,2.5815409042721544+4.148026728428272,2.597209480470686+4.14888987496197,2.6128935492903564+4.149506560365732,2.6285892409218707+4.149876632481661,2.6442926826881785+4.15,2.6599999999999993"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 4.15,1.6600 L 3.15,1.6600 A 1.0 1.0 -0.0 0 1 4.15,2.6600 L 4.15,1.6600"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="5.1499999999999995,-1.38+5.148026728428272,-1.4427905195293134+5.142114701314479,-1.505333233564305+5.132287250728689,-1.5673813145857247+5.118583161128631,-1.628689887164855+5.101056516295153,-1.6890169943749482+5.079776485888251,-1.7481245526846783+5.0548270524660195,-1.8057792915650728+5.026306680043864,-1.861753674101716+4.994327925502016,-1.9158267949789964+4.959016994374948,-1.9677852522924733+4.92051324277579,-2.01742398974869+4.878968627421412,-2.064547105928689+4.834547105928689,-2.1089686274214117+4.78742398974869,-2.15051324277579+4.737785252292474,-2.1890169943749482+4.685826794978997,-2.224327925502015+4.631753674101716,-2.2563066800438643+4.575779291565073,-2.28482705246602+4.518124552684678,-2.3097764858882517+4.459016994374948,-2.3310565162951535+4.398689887164855,-2.348583161128631+4.337381314585725,-2.3622872507286887+4.275333233564305,-2.3721147013144783+4.212790519529314,-2.3780267284282717+4.15,-2.38+4.087209480470687,-2.3780267284282717+4.024666766435696,-2.3721147013144783+3.9626186854142755,-2.3622872507286887+3.901310112835145,-2.348583161128631+3.8409830056250525,-2.3310565162951535+3.7818754473153224,-2.3097764858882517+3.7242207084349275,-2.28482705246602+3.6682463258982843,-2.2563066800438643+3.6141732050210034,-2.224327925502015+3.5622147477075266,-2.1890169943749482+3.5125760102513106,-2.15051324277579+3.4654528940713116,-2.1089686274214117+3.421031372578589,-2.064547105928689+3.3794867572242104,-2.01742398974869+3.340983005625053,-1.9677852522924733+3.3056720744979855,-1.9158267949789973+3.2736933199561364,-1.861753674101716+3.245172947533981,-1.8057792915650728+3.2202235141117486,-1.7481245526846783+3.1989434837048467,-1.6890169943749482+3.181416838871369,-1.6286898871648559+3.1677127492713115,-1.5673813145857247+3.1578852986855224,-1.505333233564305+3.151973271571728,-1.4427905195293134+3.15,-1.3800000000000008+3.151973271571728,-1.3172094804706873+3.1578852986855224,-1.2546667664356956+3.1677127492713115,-1.192618685414276+3.1814168388713684,-1.1313101128351457+3.1989434837048463,-1.0709830056250533+3.220223514111748,-1.0118754473153224+3.2451729475339803,-0.9542207084349279+3.2736933199561364,-0.8982463258982847+3.305672074497985,-0.8441732050210033+3.3409830056250525,-0.7922147477075274+3.3794867572242104,-0.7425760102513106+3.421031372578588,-0.6954528940713125+3.4654528940713116,-0.651031372578589+3.5125760102513106,-0.6094867572242109+3.5622147477075266,-0.5709830056250524+3.614173205021004,-0.5356720744979846+3.6682463258982843,-0.5036933199561364+3.724220708434928,-0.47517294753398076+3.7818754473153224,-0.450223514111749+3.840983005625052,-0.42894348370484714+3.9013101128351453,-0.4114168388713697+3.9626186854142755,-0.39771274927131195+4.024666766435696,-0.38788529868552235+4.087209480470687,-0.381973271571729+4.15,-0.3800000000000008+4.212790519529312,-0.381973271571729+4.275333233564305,-0.38788529868552235+4.337381314585725,-0.39771274927131195+4.398689887164855,-0.4114168388713697+4.459016994374948,-0.42894348370484714+4.518124552684678,-0.450223514111749+4.575779291565072,-0.47517294753398076+4.6317536741017165,-0.5036933199561364+4.685826794978997,-0.5356720744979855+4.737785252292474,-0.5709830056250524+4.78742398974869,-0.6094867572242109+4.834547105928689,-0.6510313725785881+4.878968627421412,-0.6954528940713116+4.92051324277579,-0.7425760102513106+4.959016994374948,-0.7922147477075274+4.994327925502016,-0.8441732050210025+5.026306680043864,-0.8982463258982847+5.0548270524660195,-0.9542207084349279+5.079776485888251,-1.0118754473153224+5.101056516295153,-1.0709830056250524+5.118583161128631,-1.1313101128351448+5.132287250728689,-1.192618685414276+5.142114701314478,-1.2546667664356956+5.148026728428272,-1.3172094804706873+5.1499999999999995,-1.38"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="4.15,-0.3800000000000008+4.148026728428272,-0.44279051952931425+4.142114701314478,-0.5053332335643042+4.132287250728689,-0.5673813145857238+4.118583161128631,-0.628689887164855+4.101056516295154,-0.6890169943749473+4.079776485888252,-0.7481245526846783+4.05482705246602,-0.8057792915650728+4.026306680043864,-0.8617536741017151+3.994327925502015,-0.9158267949789973+3.9590169943749474,-0.9677852522924733+3.920513242775789,-1.01742398974869+3.8789686274214112,-1.064547105928689+3.834547105928689,-1.1089686274214117+3.78742398974869,-1.150513242775789+3.737785252292473,-1.1890169943749473+3.685826794978997,-1.2243279255020152+3.6317536741017147,-1.2563066800438643+3.575779291565073,-1.284827052466019+3.5181245526846783,-1.3097764858882517+3.459016994374947,-1.3310565162951544+3.3986898871648545,-1.348583161128631+3.3373813145857247,-1.3622872507286887+3.275333233564304,-1.3721147013144783+3.212790519529313,-1.3780267284282717+3.15,-1.38+3.0872094804706864,-1.3780267284282717+3.0246667664356957,-1.3721147013144783+2.9626186854142755,-1.3622872507286887+2.901310112835145,-1.348583161128631+2.8409830056250525,-1.3310565162951544+2.7818754473153224,-1.3097764858882517+2.7242207084349275,-1.284827052466019+2.6682463258982843,-1.2563066800438634+2.6141732050210034,-1.2243279255020152+2.5622147477075266,-1.1890169943749473+2.5125760102513106,-1.1505132427757898+2.4654528940713116,-1.1089686274214117+2.421031372578589,-1.064547105928689+2.3794867572242104,-1.01742398974869+2.340983005625053,-0.9677852522924741+2.3056720744979855,-0.9158267949789973+2.2736933199561364,-0.8617536741017151+2.245172947533981,-0.8057792915650737+2.220223514111749,-0.7481245526846783+2.1989434837048467,-0.6890169943749473+2.1814168388713693,-0.628689887164855+2.1677127492713115,-0.5673813145857238+2.1578852986855224,-0.505333233564305+2.1519732715717286,-0.44279051952931425+2.1500000000000004,-0.3800000000000008+2.1519732715717286,-0.31720948047068687+2.1578852986855224,-0.2546667664356961+2.1677127492713115,-0.19261868541427551+2.181416838871369,-0.1313101128351457+2.1989434837048467,-7.098300562505289e-2+2.2202235141117486,-1.1875447315322418e-2+2.2451729475339803,4.57792915650721e-2+2.273693319956137,0.10175367410171487+2.305672074497985,0.15582679497899665+2.3409830056250525,0.20778525229247258+2.3794867572242104,0.2574239897486894+2.421031372578588,0.30454710592868794+2.4654528940713116,0.348968627421411+2.5125760102513106,0.39051324277578914+2.5622147477075266,0.4290169943749471+2.614173205021004,0.46432792550201496+2.6682463258982843,0.49630668004386314+2.724220708434928,0.5248270524660192+2.7818754473153224,0.549776485888251+2.840983005625052,0.5710565162951533+2.9013101128351453,0.5885831611286307+2.9626186854142755,0.6022872507286885+3.024666766435695,0.6121147013144776+3.0872094804706864,0.618026728428271+3.15,0.6199999999999997+3.2127905195293125,0.618026728428271+3.2753332335643037,0.6121147013144776+3.3373813145857243,0.6022872507286885+3.3986898871648545,0.5885831611286307+3.459016994374947,0.5710565162951533+3.518124552684677,0.549776485888251+3.5757792915650715,0.5248270524660197+3.6317536741017156,0.49630668004386314+3.685826794978997,0.4643279255020145+3.737785252292473,0.4290169943749471+3.7874239897486888,0.39051324277578914+3.8345471059286877,0.3489686274214119+3.8789686274214112,0.3045471059286884+3.920513242775789,0.2574239897486894+3.9590169943749474,0.20778525229247302+3.9943279255020148,0.1558267949789971+4.026306680043864,0.10175367410171576+4.0548270524660195,4.5779291565072544e-2+4.079776485888252,-1.1875447315322418e-2+4.101056516295154,-7.098300562505289e-2+4.118583161128631,-0.13131011283514482+4.132287250728689,-0.19261868541427551+4.142114701314478,-0.25466676643569564+4.148026728428272,-0.31720948047068687+4.15,-0.3799999999999999"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="3.15,-1.38+3.150123367518339,-1.3642926826881796+3.1504934396342685,-1.3485892409218723+3.15111012503803,-1.3328935492903575+3.151973271571728,-1.3172094804706873+3.1530826662668723,-1.301540904272155+3.1544380353969204,-1.2858916866814862+3.1560390445448205,-1.270265688908955+3.1578852986855224,-1.2546667664356956+3.159976342283442,-1.2390987680624175+3.1623116594048626,-1.2235655349597696+3.164890673845226,-1.2080708997205907+3.1677127492713115,-1.192618685414276+3.170777189378234,-1.1772127046434875+3.174083238061253,-1.1618567586034576+3.177630079602323,-1.1465546361440948+3.1814168388713684,-1.1313101128351457+3.1854425815422016,-1.1161269500346274+3.189706314323057,-1.1010088939607705+3.19420698520167,-1.0859596747676967+3.1989434837048467,-1.0709830056250524+3.203914641172455,-1.056082581801851+3.209119231045775,-1.0412620797547092+3.214555969170133,-1.0265251562207434+3.2202235141117486,-1.0118754473153224+3.226120467488713,-0.9973165676349103+3.232245374316019,-0.9828521093652203+3.2385967233645547,-0.9684856413948921+3.245172947533981,-0.9542207084349279+3.2519724242393844,-0.9400608301440849+3.2589934758116326,-0.926009500260454+3.266234369911307,-0.9120701857394273+3.2736933199561364,-0.8982463258982847+3.2813684855618086,-0.8845413315675925+3.2892579729960567,-0.870958584249629+3.2973598356459077,-0.8575014352840515+3.305672074497985,-0.8441732050210033+3.31419263863173,-0.8309771820018685+3.322919425725438,-0.8179166221478695+3.331850282574977,-0.8049947479567212+3.340983005625053,-0.7922147477075274+3.3503153415129097,-0.779579774674116+3.3598449876243097,-0.7670929463470237+3.3695695926616698,-0.754757343664294+3.3794867572242104,-0.7425760102513106+3.3895940343999693,-0.7305519516698169+3.3998889303695403,-0.7186881346763485+3.410368905021391,-0.7069874864902266+3.421031372578589,-0.6954528940713116+3.431873702236811,-0.6840872034076861+3.442893218813453,-0.6728932188134529+3.4540872034076853,-0.6618737022368117+3.4654528940713116,-0.651031372578589+3.476987486490227,-0.6403689050213899+3.4886881346763485,-0.6298889303695399+3.5005519516698165,-0.6195940343999693+3.5125760102513106,-0.6094867572242109+3.5247573436642945,-0.5995695926616706+3.5370929463470238,-0.5898449876243097+3.5495797746741156,-0.5803153415129092+3.5622147477075266,-0.5709830056250524+3.5749947479567217,-0.5618502825749765+3.5879166221478695,-0.5529194257254382+3.600977182001868,-0.5441926386317295+3.614173205021004,-0.5356720744979846+3.627501435284051,-0.5273598356459086+3.6409585842496286,-0.5192579729960567+3.654541331567593,-0.5113684855618086+3.6682463258982847,-0.5036933199561364+3.6820701857394265,-0.4962343699113063+3.6960095002604527,-0.48899347581163255+3.710060830144085,-0.4819724242393848+3.7242207084349275,-0.47517294753398076+3.738485641394891,-0.4685967233645556+3.7528521093652194,-0.4622453743160193+3.76731656763491,-0.4561204674887138+3.7818754473153224,-0.450223514111749+3.796525156220743,-0.44455596917013285+3.8112620797547088,-0.4391192310457743+3.8260825818018507,-0.43391464117245526+3.8409830056250525,-0.42894348370484714+3.855959674767696,-0.42420698520167033+3.8710088939607705,-0.41970631432305705+3.886126950034627,-0.4154425815422007+3.9013101128351453,-0.4114168388713697+3.916554636144095,-0.407630079602324+3.931856758603457,-0.40408323806125246+3.9472127046434875,-0.4007771893782346+3.9626186854142755,-0.39771274927131195+3.9780708997205907,-0.3948906738452269+3.993565534959769,-0.39231165940486257+4.009098768062417,-0.38997634228344324+4.024666766435696,-0.38788529868552235+4.040265688908955,-0.3860390445448205+4.055891686681486,-0.38443803539692034+4.0715409042721555,-0.3830826662668727+4.087209480470687,-0.381973271571729+4.102893549290358,-0.3811101250380302+4.118589240921872,-0.38049343963426896+4.13429268268818,-0.3801233675183395+4.15,-0.3800000000000008"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 4.15,-1.38 L 3.15,-1.38 A 1.0 1.0 -0.0 0 0 4.15,-0.3800 L 4.15,-1.38"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="3.64" y="-3.3199999999999994">False</text></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="8.59,1.6674383162408297+8.588026728428272,1.6046477967115162+8.58211470131448,1.5421050826765255+8.572287250728689,1.480057001655105+8.558583161128631,1.4187484290759746+8.541056516295154,1.3584213218658823+8.519776485888253,1.2993137635561518+8.494827052466018,1.2416590246757568+8.466306680043862,1.185684642139115+8.434327925502016,1.1316115212618332+8.399016994374946,1.0796530639483564+8.36051324277579,1.03001432649214+8.31896862742141,0.982891210312141+8.274547105928688,0.938469688819418+8.22742398974869,0.8969250734650407+8.177785252292473,0.8584213218658823+8.125826794978996,0.8231103907388144+8.071753674101714,0.7911316361969662+8.015779291565073,0.7626112637748101+7.958124552684678,0.7376618303525784+7.899016994374946,0.7163817999456761+7.838689887164855,0.6988551551121991+7.777381314585725,0.6851510655121409+7.715333233564304,0.6753236149263522+7.652790519529312,0.6694115878125579+7.59,0.6674383162408302+7.527209480470686,0.6694115878125579+7.4646667664356965,0.6753236149263517+7.402618685414275,0.6851510655121409+7.341310112835145,0.6988551551121991+7.280983005625053,0.7163817999456761+7.2218754473153215,0.7376618303525784+7.164220708434927,0.7626112637748101+7.108246325898284,0.7911316361969662+7.054173205021003,0.8231103907388149+7.002214747707526,0.8584213218658823+6.95257601025131,0.8969250734650407+6.905452894071311,0.938469688819418+6.861031372578589,0.982891210312141+6.819486757224211,1.03001432649214+6.780983005625053,1.0796530639483564+6.7456720744979854,1.1316115212618327+6.7136933199561355,1.185684642139115+6.685172947533981,1.2416590246757568+6.660223514111749,1.2993137635561514+6.638943483704845,1.3584213218658823+6.621416838871368,1.4187484290759746+6.607712749271311,1.480057001655105+6.597885298685522,1.5421050826765255+6.591973271571727,1.6046477967115162+6.59,1.6674383162408297+6.591973271571727,1.7302288357701432+6.597885298685522,1.792771549805134+6.607712749271311,1.8548196308265548+6.621416838871368,1.9161282034056843+6.638943483704845,1.976455310615777+6.660223514111749,2.0355628689255076+6.68517294753398,2.0932176078059017+6.7136933199561355,2.149191990342545+6.7456720744979854,2.2032651112198263+6.7809830056250515,2.255223568533302+6.819486757224211,2.3048623059895195+6.861031372578588,2.351985422169518+6.905452894071311,2.3964069436622415+6.95257601025131,2.437951559016619+7.002214747707526,2.476455310615777+7.054173205021003,2.511766241742845+7.108246325898284,2.543744996284693+7.164220708434928,2.5722653687068497+7.2218754473153215,2.597214802129081+7.280983005625052,2.6184948325359834+7.341310112835145,2.636021477369461+7.402618685414275,2.6497255669695186+7.464666766435696,2.6595530175553073+7.527209480470686,2.6654650446691015+7.59,2.6674383162408297+7.652790519529312,2.6654650446691015+7.715333233564303,2.6595530175553077+7.777381314585725,2.6497255669695186+7.838689887164855,2.636021477369461+7.899016994374946,2.6184948325359834+7.958124552684677,2.5972148021290815+8.015779291565071,2.5722653687068497+8.071753674101716,2.543744996284693+8.125826794978996,2.511766241742845+8.177785252292473,2.476455310615777+8.227423989748688,2.437951559016619+8.274547105928688,2.396406943662242+8.31896862742141,2.351985422169519+8.36051324277579,2.3048623059895195+8.399016994374946,2.255223568533303+8.434327925502016,2.2032651112198267+8.466306680043862,2.149191990342546+8.494827052466018,2.0932176078059026+8.519776485888253,2.0355628689255076+8.541056516295154,1.9764553106157774+8.558583161128631,1.916128203405685+8.572287250728689,1.8548196308265548+8.582114701314477,1.7927715498051344+8.588026728428272,1.730228835770143+8.59,1.66743831624083"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="7.59,2.6674383162408297+7.588026728428271,2.6046477967115162+7.582114701314477,2.5421050826765255+7.572287250728689,2.480057001655105+7.55858316112863,2.418748429075975+7.541056516295153,2.3584213218658823+7.519776485888252,2.2993137635561522+7.49482705246602,2.241659024675757+7.466306680043863,2.1856846421391145+7.434327925502014,2.131611521261833+7.399016994374946,2.0796530639483564+7.36051324277579,2.03001432649214+7.318968627421412,1.982891210312141+7.274547105928688,1.9384696888194182+7.22742398974869,1.8969250734650407+7.177785252292472,1.8584213218658825+7.1258267949789955,1.8231103907388146+7.071753674101714,1.791131636196966+7.015779291565072,1.7626112637748101+6.958124552684678,1.7376618303525784+6.899016994374947,1.716381799945676+6.838689887164854,1.6988551551121986+6.777381314585725,1.685151065512141+6.715333233564305,1.675323614926352+6.652790519529313,1.6694115878125582+6.59,1.6674383162408297+6.5272094804706855,1.6694115878125582+6.464666766435695,1.6753236149263517+6.402618685414275,1.6851510655121409+6.341310112835146,1.6988551551121986+6.280983005625052,1.716381799945676+6.221875447315322,1.7376618303525784+6.164220708434927,1.7626112637748101+6.108246325898285,1.7911316361969662+6.054173205021003,1.8231103907388149+6.002214747707527,1.8584213218658825+5.952576010251311,1.8969250734650405+5.905452894071312,1.9384696888194182+5.861031372578588,1.982891210312141+5.81948675722421,2.03001432649214+5.780983005625052,2.0796530639483564+5.7456720744979854,2.131611521261833+5.713693319956136,2.1856846421391145+5.685172947533981,2.241659024675757+5.660223514111749,2.2993137635561514+5.638943483704846,2.3584213218658823+5.621416838871369,2.4187484290759746+5.60771274927131,2.4800570016551053+5.597885298685521,2.542105082676525+5.591973271571728,2.6046477967115162+5.59,2.6674383162408297+5.591973271571728,2.730228835770143+5.597885298685521,2.792771549805134+5.60771274927131,2.8548196308265545+5.621416838871369,2.9161282034056843+5.638943483704846,2.976455310615777+5.660223514111749,3.0355628689255076+5.685172947533981,3.093217607805902+5.713693319956136,3.149191990342545+5.745672074497985,3.2032651112198263+5.780983005625052,3.255223568533302+5.81948675722421,3.3048623059895195+5.861031372578587,3.351985422169518+5.905452894071312,3.3964069436622415+5.952576010251311,3.437951559016619+6.0022147477075265,3.476455310615777+6.054173205021003,3.511766241742845+6.108246325898285,3.543744996284693+6.164220708434927,3.5722653687068497+6.221875447315322,3.597214802129081+6.2809830056250515,3.6184948325359834+6.341310112835146,3.636021477369461+6.402618685414275,3.6497255669695186+6.464666766435695,3.6595530175553073+6.5272094804706855,3.6654650446691015+6.59,3.6674383162408297+6.652790519529313,3.6654650446691015+6.715333233564304,3.6595530175553077+6.777381314585725,3.6497255669695186+6.838689887164854,3.636021477369461+6.899016994374947,3.6184948325359834+6.9581245526846764,3.5972148021290815+7.015779291565072,3.5722653687068497+7.071753674101715,3.543744996284693+7.1258267949789955,3.511766241742845+7.177785252292472,3.476455310615777+7.227423989748688,3.437951559016619+7.274547105928687,3.396406943662242+7.318968627421412,3.351985422169519+7.36051324277579,3.3048623059895195+7.399016994374946,3.255223568533303+7.434327925502013,3.2032651112198267+7.466306680043862,3.149191990342546+7.49482705246602,3.0932176078059026+7.519776485888252,3.0355628689255076+7.541056516295153,2.976455310615777+7.55858316112863,2.9161282034056852+7.572287250728689,2.8548196308265545+7.582114701314477,2.7927715498051344+7.588026728428271,2.730228835770143+7.59,2.66743831624083"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="6.59,1.6674383162408297+6.59111012503803,1.620331865531187+6.594438035396919,1.5733300029223156+6.599976342283441,1.5265370843032473+6.607712749271311,1.4800570016551053+6.617630079602323,1.4339929523849246+6.629706314323057,1.3884472102016003+6.6439146411724535,1.3435208980426805+6.660223514111749,1.2993137635561518+6.678596723364554,1.255923957635721+6.698993475811631,1.213447816501283+6.721368485561809,1.1719796478084223+6.7456720744979854,1.1316115212618332+6.771850282574976,1.092433064197551+6.79984498762431,1.0545312625878536+6.829594034399969,1.0179902679106463+6.861031372578589,0.982891210312141+6.894087203407686,0.9493120184776411+6.928688134676347,0.9173272466103701+6.964757343664295,0.8870079089025+7.002214747707526,0.8584213218658823+7.040977182001867,0.8316309548725598+7.080958584249629,0.8066962892368861+7.122070185739426,0.7836726861521361+7.164220708434927,0.7626112637748106+7.20731656763491,0.7435587837295432+7.251262079754708,0.7265575472866046+7.295959674767696,0.7116453014424997+7.341310112835144,0.6988551551121991+7.387212704643487,0.688215505619064+7.433565534959769,0.6797499756456924+7.480265688908954,0.6734773607856503+7.527209480470686,0.6694115878125579+7.574292682688179,0.6675616837591694+7.621410759078127,0.6679317558750979+7.668459095727845,0.6705209825077021+7.715333233564303,0.6753236149263517+7.761929100279408,0.6823289900860559+7.808143241396542,0.6915215543020823+7.853873049965372,0.7028808977830314+7.899016994374946,0.7163817999456761+7.9434748437792555,0.7319942854109622+7.9871478906347795,0.7496836905568487+8.029939169855915,0.7694107404802146+8.071753674101716,0.7911316361969662+8.112498564715947,0.8147981518867371+8.152083377852131,0.840357741966268+8.190420225325884,0.867753657753739+8.227423989748688,0.8969250734650402+8.263012513509771,0.9278072212622201+8.297106781186548,0.9603315350542818+8.329631094978609,0.994425802731056+8.36051324277579,1.03001432649214+8.38968465848709,1.0670180909149458+8.417080574274562,1.105354938388699+8.442640164354092,1.1449397515248805+8.466306680043862,1.185684642139115+8.488027575760617,1.2274991463849143+8.50775462568398,1.2702904256060483+8.525444030829869,1.3139634724615727+8.541056516295154,1.3584213218658823+8.554557418457799,1.4035652662754563+8.565916761938746,1.4492950748442865+8.575109326154774,1.49550921596142+8.582114701314477,1.542105082676525+8.586917333733128,1.5889792205129845+8.589506560365733,1.6360275571627012+8.58987663248166,1.68314563355265+8.588026728428272,1.7302288357701425+8.583960955455181,1.777172627331875+8.577688340595138,1.8238727812810605+8.569222810621765,1.8702256115973417+8.558583161128631,1.9161282034056846+8.54579301479833,1.9614786414731336+8.530880768954225,2.0061762364861204+8.513879532511288,2.05012174860592+8.494827052466018,2.0932176078059017+8.473765630088694,2.1353681305014027+8.450742027003944,2.1764797319912015+8.425807361368271,2.2164611342389606+8.399016994374946,2.2552235685333026+8.370430407338329,2.292680972576535+8.34011106963046,2.328750181564481+8.308126297763188,2.3633511128331444+8.274547105928688,2.3964069436622415+8.239448048330184,2.4278442818408608+8.202907053652977,2.45759332861652+8.16500525204328,2.485588033665853+8.125826794978996,2.511766241742845+8.085458668432407,2.536069830679021+8.043990499739547,2.5584448404291975+8.001514358605109,2.578841592876275+7.958124552684678,2.597214802129081+7.913917418198149,2.6135236750683752+7.86899110603923,2.6277320019177726+7.823445363855904,2.6398082366385065+7.777381314585725,2.6497255669695186+7.730901231937583,2.6574619739573873+7.684108313318514,2.6630002808439097+7.637106450709643,2.6663281912028+7.59,2.6674383162408297"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 7.59,1.6674 L 6.59,1.6674 A 1.0 1.0 -0.0 1 1 7.59,2.6674 L 7.59,1.6674"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="8.60487663248166,-1.3874383162408304+8.602903360909933,-1.450228835770143+8.596991333796138,-1.5127715498051355+8.58716388321035,-1.5748196308265552+8.573459793610292,-1.6361282034056854+8.555933148776814,-1.6964553106157787+8.534653118369912,-1.7555628689255087+8.509703684947679,-1.8132176078059032+8.481183312525523,-1.8691919903425465+8.449204557983675,-1.923265111219827+8.413893626856607,-1.9752235685333037+8.375389875257449,-2.0248623059895197+8.333845259903072,-2.0719854221695195+8.289423738410349,-2.116406943662242+8.24230062223035,-2.1579515590166203+8.192661884774134,-2.196455310615778+8.140703427460657,-2.2317662417428457+8.086630306583373,-2.263744996284694+8.030655924046734,-2.2922653687068504+7.973001185166338,-2.317214802129082+7.913893626856608,-2.338494832535984+7.853566519646514,-2.3560214773694614+7.792257947067386,-2.369725566969519+7.730209866045965,-2.379553017555309+7.667667152010974,-2.385465044669102+7.604876632481661,-2.3874383162408304+7.542086112952346,-2.385465044669102+7.479543398917356,-2.379553017555309+7.417495317895936,-2.369725566969519+7.356186745316806,-2.3560214773694614+7.2958596381067125,-2.338494832535984+7.236752079796982,-2.317214802129082+7.179097340916588,-2.2922653687068504+7.123122958379945,-2.263744996284694+7.069049837502664,-2.2317662417428457+7.017091380189187,-2.196455310615778+6.967452642732971,-2.1579515590166203+6.920329526552971,-2.116406943662242+6.875908005060249,-2.0719854221695195+6.83436338970587,-2.0248623059895197+6.795859638106713,-1.9752235685333037+6.7605487069796455,-1.9232651112198278+6.728569952437796,-1.8691919903425465+6.70004958001564,-1.8132176078059032+6.675100146593408,-1.7555628689255087+6.653820116186507,-1.6964553106157787+6.63629347135303,-1.6361282034056863+6.622589381752972,-1.5748196308265552+6.612761931167183,-1.5127715498051355+6.606849904053389,-1.450228835770143+6.604876632481661,-1.3874383162408312+6.606849904053389,-1.324647796711517+6.612761931167183,-1.262105082676527+6.622589381752972,-1.2000570016551046+6.63629347135303,-1.1387484290759762+6.653820116186507,-1.0784213218658838+6.675100146593408,-1.0193137635561529+6.70004958001564,-0.9616590246757584+6.728569952437797,-0.9056846421391151+6.7605487069796455,-0.8516115212618338+6.7958596381067125,-0.7996530639483579+6.83436338970587,-0.7500143264921411+6.875908005060249,-0.7028912103121421+6.9203295265529725,-0.6584696888194195+6.967452642732971,-0.6169250734650413+7.017091380189187,-0.5784213218658838+7.069049837502664,-0.543110390738816+7.123122958379945,-0.5111316361969678+7.179097340916588,-0.48261126377481034+7.236752079796982,-0.45766183035257946+7.295859638106712,-0.4363817999456767+7.356186745316807,-0.4188551551121984+7.417495317895936,-0.40515106551214153+7.479543398917355,-0.3953236149263528+7.542086112952346,-0.38941158781255947+7.604876632481661,-0.38743831624083036+7.667667152010973,-0.38941158781255947+7.730209866045965,-0.3953236149263528+7.792257947067385,-0.40515106551214153+7.853566519646515,-0.4188551551121984+7.913893626856607,-0.4363817999456767+7.973001185166337,-0.45766183035257946+8.030655924046732,-0.48261126377480945+8.086630306583373,-0.5111316361969678+8.140703427460657,-0.543110390738816+8.192661884774132,-0.5784213218658838+8.24230062223035,-0.6169250734650413+8.289423738410346,-0.6584696888194186+8.333845259903072,-0.7028912103121421+8.375389875257449,-0.7500143264921411+8.413893626856607,-0.799653063948357+8.449204557983675,-0.8516115212618338+8.481183312525523,-0.9056846421391143+8.509703684947679,-0.9616590246757575+8.534653118369912,-1.0193137635561529+8.555933148776814,-1.078421321865883+8.573459793610292,-1.1387484290759753+8.58716388321035,-1.2000570016551046+8.596991333796138,-1.262105082676526+8.602903360909933,-1.3246477967115178+8.60487663248166,-1.3874383162408304"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="2.0e-2" stroke-opacity="0.2"><polyline points="7.604876632481661,-0.38743831624083036+7.602903360909933,-0.45022883577014383+7.5969913337961374,-0.5127715498051355+7.587163883210349,-0.5748196308265552+7.573459793610292,-0.6361282034056854+7.555933148776814,-0.6964553106157787+7.534653118369911,-0.7555628689255087+7.50970368494768,-0.8132176078059032+7.481183312525523,-0.8691919903425465+7.449204557983675,-0.923265111219826+7.413893626856607,-0.9752235685333037+7.375389875257449,-1.0248623059895206+7.333845259903071,-1.0719854221695195+7.289423738410349,-1.1164069436622421+7.24230062223035,-1.1579515590166203+7.192661884774134,-1.1964553106157787+7.140703427460657,-1.2317662417428457+7.086630306583376,-1.2637449962846947+7.030655924046734,-1.2922653687068504+6.973001185166339,-1.3172148021290822+6.913893626856607,-1.338494832535984+6.853566519646515,-1.3560214773694614+6.792257947067386,-1.3697255669695192+6.730209866045964,-1.3795530175553088+6.667667152010973,-1.3854650446691021+6.604876632481661,-1.3874383162408304+6.542086112952347,-1.3854650446691021+6.4795433989173565,-1.3795530175553088+6.417495317895936,-1.3697255669695192+6.356186745316805,-1.3560214773694614+6.295859638106713,-1.338494832535984+6.236752079796982,-1.3172148021290822+6.179097340916588,-1.2922653687068504+6.123122958379944,-1.2637449962846947+6.069049837502664,-1.2317662417428457+6.0170913801891865,-1.1964553106157787+5.967452642732971,-1.1579515590166203+5.920329526552972,-1.1164069436622421+5.875908005060249,-1.0719854221695195+5.834363389705872,-1.0248623059895206+5.7958596381067125,-0.9752235685333037+5.760548706979645,-0.9232651112198269+5.7285699524377955,-0.8691919903425465+5.700049580015641,-0.8132176078059032+5.675100146593409,-0.7555628689255087+5.653820116186506,-0.6964553106157787+5.636293471353029,-0.6361282034056863+5.622589381752972,-0.5748196308265552+5.612761931167183,-0.5127715498051355+5.606849904053388,-0.45022883577014383+5.604876632481661,-0.38743831624083036+5.606849904053388,-0.32464779671151733+5.6127619311671815,-0.26210508267652655+5.622589381752972,-0.20005700165510554+5.636293471353029,-0.13874842907597618+5.653820116186506,-7.842132186588335e-2+5.675100146593409,-1.9313763556152885e-2+5.700049580015641,3.834097532424163e-2+5.728569952437796,9.431535786088441e-2+5.760548706979645,0.14838847873816574+5.795859638106712,0.2003469360516421+5.834363389705871,0.24998567350785894+5.875908005060249,0.2971087896878575+5.920329526552972,0.34153031118058097+5.967452642732971,0.38307492653495867+6.0170913801891865,0.42157867813411665+6.069049837502664,0.4568896092611845+6.123122958379945,0.48886836380303267+6.179097340916588,0.5173887362251892+6.236752079796982,0.5423381696474205+6.295859638106713,0.5636182000543228+6.356186745316806,0.5811448448878003+6.417495317895936,0.594848934487858+6.479543398917356,0.6046763850736472+6.542086112952347,0.6105884121874405+6.604876632481661,0.6125616837591692+6.6676671520109725,0.6105884121874405+6.730209866045964,0.6046763850736472+6.792257947067384,0.594848934487858+6.853566519646515,0.5811448448878003+6.9138936268566065,0.5636182000543228+6.973001185166338,0.5423381696474205+7.030655924046731,0.5173887362251897+7.086630306583376,0.48886836380303267+7.140703427460657,0.45688960926118405+7.192661884774133,0.42157867813411665+7.24230062223035,0.38307492653495867+7.289423738410349,0.34153031118058186+7.333845259903071,0.2971087896878579+7.375389875257449,0.24998567350785894+7.4138936268566065,0.20034693605164255+7.449204557983675,0.14838847873816619+7.4811833125255225,9.43153578608853e-2+7.50970368494768,3.834097532424208e-2+7.534653118369911,-1.9313763556152885e-2+7.555933148776814,-7.842132186588335e-2+7.573459793610292,-0.1387484290759753+7.587163883210349,-0.20005700165510554+7.5969913337961374,-0.2621050826765261+7.602903360909933,-0.32464779671151733+7.604876632481661,-0.38743831624083036"/></g><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" stroke-opacity="0.5"><polyline points="6.604876632481661,-1.3874383162408304+6.5577701817720175,-1.386328191202801+6.510768319163146,-1.3830002808439108+6.4639754005440775,-1.377461973957388+6.417495317895936,-1.3697255669695192+6.371431268625756,-1.3598082366385071+6.3258855264424305,-1.347732001917774+6.280959214283511,-1.3335236750683759+6.236752079796982,-1.3172148021290822+6.193362273876551,-1.2988415928762755+6.150886132742114,-1.2784448404291986+6.109417964049253,-1.2560698306790226+6.069049837502664,-1.2317662417428465+6.029871380438382,-1.2055880336658547+5.991969578828684,-1.1775933286165214+5.955428584151477,-1.1478442818408618+5.920329526552972,-1.1164069436622421+5.886750334718471,-1.083351112833145+5.8547655628512,-1.0487501815644826+5.824446225143331,-1.0126809725765353+5.7958596381067125,-0.9752235685333037+5.76906927111339,-0.9364611342389626+5.744134605477717,-0.8964797319912021+5.721111002392966,-0.8553681305014038+5.700049580015641,-0.8132176078059032+5.680997099970374,-0.7701217486059209+5.663995863527435,-0.726176236486122+5.6490836176833295,-0.6814786414731344+5.636293471353029,-0.6361282034056854+5.625653821859894,-0.5902256115973437+5.617188291886523,-0.5438727812810615+5.610915677026481,-0.49717262733187617+5.606849904053388,-0.45022883577014383+5.6049999999999995,-0.40314563355265154+5.605370072115928,-0.35602755716270273+5.607959298748533,-0.308979220512986+5.6127619311671815,-0.26210508267652655+5.619767306326886,-0.21550921596142159+5.6289598705429125,-0.16929507484428852+5.6403192140238625,-0.12356526627545783+5.653820116186506,-7.842132186588335e-2+5.669432601651792,-3.396347246157383e-2+5.687122006797679,9.709574393950149e-3+5.706849056721045,5.2500853615084164e-2+5.728569952437796,9.431535786088441e-2+5.752236468127569,0.135060248475118+5.777796058207099,0.1746450616113+5.80519197399457,0.2129819090850531+5.834363389705871,0.24998567350785894+5.86524553750305,0.2855741972689425+5.897769851295113,0.31966846494571666+5.9318641189718875,0.35219277873777877+5.967452642732971,0.38307492653495867+6.004456407155777,0.41224634224625945+6.0427932546295295,0.4396422580337309+6.0823780677657115,0.46520184811326093+6.123122958379945,0.48886836380303267+6.164937462625744,0.5105892595197847+6.2077287418468785,0.5303163094431502+6.251401788702403,0.5480057145890371+6.295859638106713,0.5636182000543228+6.341003582516287,0.577119102216967+6.386733391085117,0.5884784456979162+6.43294753220225,0.5976710099139431+6.479543398917356,0.6046763850736472+6.526417536753815,0.6094790174922973+6.573465873403532,0.6120682441249006+6.620583949793481,0.61243831624083+6.6676671520109725,0.6105884121874405+6.714610943572705,0.606522639214349+6.76131109752189,0.600250024354307+6.807663927838171,0.591784494380935+6.853566519646515,0.5811448448878003+6.898916957713964,0.5683546985574992+6.943614552726951,0.5534424527133948+6.98756006484675,0.5364412162704557+7.030655924046731,0.5173887362251897+7.072806446742233,0.49632731384786277+7.113918048232031,0.47330371076311284+7.153899450479791,0.44836904512744+7.192661884774133,0.42157867813411665+7.230119288817365,0.3929920910974989+7.26618849780531,0.36267275338962923+7.300789429073974,0.33068798152235823+7.333845259903072,0.2971087896878575+7.3652825980816905,0.2620097320893531+7.39503164485735,0.22546873741214624+7.423026349906683,0.18756693580244788+7.449204557983676,0.1483884787381653+7.473508146919851,0.10802035219157702+7.495883156670027,6.655218349871639e-2+7.516279909117106,2.4076042364277406e-2+7.534653118369911,-1.9313763556152885e-2+7.550961991309206,-6.352089804268113e-2+7.565170318158603,-0.10844721020160053+7.577246552879337,-0.15399295238492527+7.587163883210349,-0.20005700165510554+7.594900290198218,-0.24653708430324794+7.6004385970847395,-0.2933300029223167+7.60376650744363,-0.340331865531188+7.604876632481661,-0.38743831624083036"/></g><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-2" fill-opacity="0.3" stroke-opacity="0.5"><path d="M 7.6049,-1.3874 L 6.6049,-1.3874 A 1.0 1.0 -0.0 1 0 7.6049,-0.3874 L 7.6049,-1.3874"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.4" fill-opacity="1.0" text-anchor="middle"><text x="7.08" y="-3.32743831624083">True</text></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="0.6" fill-opacity="1.0" text-anchor="middle"><text x="5.499999999999999" y="-4.374876632481659">Large</text></g></g></g><g class="hud"></g></svg>
other/arrow.svg view
@@ -1,23 +1,58 @@-<svg height="300.0" width="457.74043453182077" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.87 -0.5531722096956032 1.6775 1.0994222096956032"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="1.4445949676731749" x="-0.6945949676731749"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.41499436302142045" x="-0.75">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3248027057497182" x="-0.75">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.23461104847801584" x="-0.75">-0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.14441939120631336" x="-0.75">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="5.4227733934611055e-2" x="-0.75">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.596392333709142e-2" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.12615558060879384" x="-0.75">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.21634723788049615" x="-0.75">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.30653889515219834" x="-0.75">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3967305524239009" x="-0.75">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869222096956032" x="-0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7201161454354009, 0.40191657271702363)"><polyline points="-0.7201161454354009,0.41691657271702365--0.7201161454354009,0.3869165727170236"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.3117249154453213)"><polyline points="-0.7201161454354009,0.32672491544532134--0.7201161454354009,0.2967249154453213"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.2215332581736189)"><polyline points="-0.7201161454354009,0.23653325817361892--0.7201161454354009,0.2065332581736189"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.13134160090191654)"><polyline points="-0.7201161454354009,0.14634160090191656--0.7201161454354009,0.11634160090191654"/></g><g transform="rotate(-90.0, -0.7201161454354009, 4.114994363021418e-2)"><polyline points="-0.7201161454354009,5.614994363021418e-2--0.7201161454354009,2.614994363021418e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -4.904171364148813e-2)"><polyline points="-0.7201161454354009,-3.404171364148813e-2--0.7201161454354009,-6.404171364148813e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.13923337091319066)"><polyline points="-0.7201161454354009,-0.12423337091319066--0.7201161454354009,-0.15423337091319067"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.22942502818489297)"><polyline points="-0.7201161454354009,-0.21442502818489295--0.7201161454354009,-0.24442502818489298"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.3196166854565953)"><polyline points="-0.7201161454354009,-0.30461668545659526--0.7201161454354009,-0.3346166854565953"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.4098083427282976)"><polyline points="-0.7201161454354009,-0.39480834272829757--0.7201161454354009,-0.4248083427282976"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.5)"><polyline points="-0.7201161454354009,-0.485--0.7201161454354009,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="3.8522532471284565e-3" x="-0.7080778540381245"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6945949676731749">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5501354709058575">-0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.40567597413853984">-0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2612164773712222">-0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.11675698060390471">-0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="2.770251616341257e-2">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.1721620129307302">0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3166215096980478">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4610810064653652">0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6055405032326826">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.44081736189402476--0.6945949676731749,0.41081736189402474"/><polyline points="-0.5501354709058575,0.44081736189402476--0.5501354709058575,0.41081736189402474"/><polyline points="-0.40567597413853984,0.44081736189402476--0.40567597413853984,0.41081736189402474"/><polyline points="-0.2612164773712222,0.44081736189402476--0.2612164773712222,0.41081736189402474"/><polyline points="-0.11675698060390471,0.44081736189402476--0.11675698060390471,0.41081736189402474"/><polyline points="2.770251616341257e-2,0.44081736189402476-2.770251616341257e-2,0.41081736189402474"/><polyline points="0.1721620129307302,0.44081736189402476-0.1721620129307302,0.41081736189402474"/><polyline points="0.3166215096980478,0.44081736189402476-0.3166215096980478,0.41081736189402474"/><polyline points="0.4610810064653652,0.44081736189402476-0.4610810064653652,0.41081736189402474"/><polyline points="0.6055405032326826,0.44081736189402476-0.6055405032326826,0.41081736189402474"/><polyline points="0.75,0.44081736189402476-0.75,0.41081736189402474"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908680612e-3" y="0.41093573844419395" width="1.4445949676731749" x="-0.6945949676731749"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-41.70388402745369, -0.6223652192895162, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-40.703991576050946, -0.6223652192895162, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-39.33034350353968, -0.6223652192895162, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-37.32821468040517, -0.6223652192895162, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-34.14934249468909, -0.6223652192895162, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-28.382403784146327, -0.6223652192895162, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-15.274030281041822, -0.6223652192895162, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(24.91711526233156, -0.6223652192895162, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(85.25243231067932, -0.6223652192895162, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(107.439663564573, -0.6223652192895162, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.6223652192895162, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-46.89925433618114, -0.47790572252219865, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-45.41219274140233, -0.47790572252219865, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-43.26655332833368, -0.47790572252219865, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-39.913529548149384, -0.47790572252219865, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-33.99914492987854, -0.47790572252219865, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-21.321176713227626, -0.47790572252219865, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(13.364611169993305, -0.47790572252219865, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(70.26081916410517, -0.47790572252219865, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(96.08437785000453, -0.47790572252219865, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(106.05509143504601, -0.47790572252219865, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.47790572252219865, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-53.3543508353797, -0.33344622575488114, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-51.23448009554123, -0.33344622575488114, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-48.01278750418334, -0.33344622575488114, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-42.58049078334366, -0.33344622575488114, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-31.827446576673108, -0.33344622575488114, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-5.440332031005506, -0.33344622575488114, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(47.1210963966615, -0.33344622575488114, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(80.53767779197439, -0.33344622575488114, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(93.73139699916045, -0.33344622575488114, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(100.06068979532297, -0.33344622575488114, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.33344622575488114, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-61.480951599569366, -0.18898672898756352, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-58.67008724249424, -0.18898672898756352, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-54.17002461487118, -0.18898672898756352, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-45.97102193107917, -0.18898672898756352, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-27.930948956080037, -0.18898672898756352, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(14.445942279113961, -0.18898672898756352, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(58.95370855020484, -0.18898672898756352, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(78.38768602098031, -0.18898672898756352, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(87.0721562906961, -0.18898672898756352, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(91.775265785145, -0.18898672898756352, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.18898672898756352, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-71.63155263230772, -4.452723222024613e-2, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-68.30375886013567, -4.452723222024613e-2, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-62.713434447769245, -4.452723222024613e-2, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-51.74335201662478, -4.452723222024613e-2, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-25.46334506187161, -4.452723222024613e-2, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(25.352317626939044, -4.452723222024613e-2, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(58.53902007564373, -4.452723222024613e-2, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(72.03510627877053, -4.452723222024613e-2, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(78.57121322367863, -4.452723222024613e-2, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(82.33198654554482, -4.452723222024613e-2, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-4.452723222024613e-2, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-83.72582919707884, 9.993226454707138e-2, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-80.37960270065743, 9.993226454707138e-2, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-74.55784459620769, 9.993226454707138e-2, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-62.392645475723924, 9.993226454707138e-2, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-30.325850500388558, 9.993226454707138e-2, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(25.463345061871618, 9.993226454707138e-2, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(53.34825221466397, 9.993226454707138e-2, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(64.18052078566551, 9.993226454707138e-2, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(69.52530867630297, 9.993226454707138e-2, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(72.65691141186669, 9.993226454707138e-2, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(9.993226454707138e-2, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-96.84875031477206, 0.244391761314389, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-94.10747809603637, 0.244391761314389, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-89.31668823842175, 0.244391761314389, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-79.0898362236076, 0.244391761314389, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-48.89810671661513, 0.244391761314389, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(16.431113233075703, 0.244391761314389, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(45.97102193107918, 0.244391761314389, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(56.03475263569897, 0.244391761314389, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(60.77115498628979, 0.244391761314389, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(63.488583985830445, 0.244391761314389, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.244391761314389, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-109.476575498932, 0.3888512580817063, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-107.65012421993012, 0.3888512580817063, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-104.57421619803874, 0.3888512580817063, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-98.3658861240326, 0.3888512580817063, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-80.5376777919744, 0.3888512580817063, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-10.304846468766057, 0.3888512580817063, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(36.3843518158359, 0.3888512580817063, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(48.01278750418334, 0.3888512580817063, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(52.73359809902285, 0.3888512580817063, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(55.2568198416964, 0.3888512580817063, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3888512580817063, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-120.39004059367852, 0.5333107548490243, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-119.3548748641938, 0.5333107548490243, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-117.72207677286723, 0.5333107548490243, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-114.77180709318333, 0.5333107548490243, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-107.91023110297346, 0.5333107548490243, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-78.88016563239884, 0.5333107548490243, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(18.07717429682483, 0.5333107548490243, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(39.57646251047537, 0.5333107548490243, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(45.412192741402315, 0.5333107548490243, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(48.061152646549644, 0.5333107548490243, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5333107548490243, -0.4549041713641486) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-129.20442853819998, 0.6777702516163411, 0.3568207440811725)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 0.3568207440811725) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-128.6756131139764, 0.6777702516163411, 0.2666290868094702)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 0.2666290868094702) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-127.8990823601365, 0.6777702516163411, 0.17643742953776775)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 0.17643742953776775) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-126.64820118726841, 0.6777702516163411, 8.624577226606533e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, 8.624577226606533e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-124.30095672615316, 0.6777702516163411, -3.945885005637084e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -3.945885005637084e-3) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-118.3399495893263, 0.6777702516163411, -9.413754227733939e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -9.413754227733939e-2) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(-81.6026974133102, 0.6777702516163411, -0.1843291995490418)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.1843291995490418) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(25.916669828467207, 0.6777702516163411, -0.2745208568207441)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.2745208568207441) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(38.15385704023621, 0.6777702516163411, -0.36471251409244654)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.36471251409244654) scale(5.0e-2)"/></g></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-2" stroke="#0d0d0d"><g transform="rotate(41.70388402745369, 0.6777702516163411, -0.4549041713641486)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6777702516163411, -0.4549041713641486) scale(5.0e-2)"/></g></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="437.95328496377425" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7326385238427425 -0.5130334454148697 1.4754917437632011 1.0107185819272355" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}{+  .arrow g {+    fill: #0d0d0d;+    stroke: #0d0d0d;+  }+}+@media (prefers-color-scheme:dark) {+  .arrow g {+    fill: #f0f0f0;+    stroke: #f0f0f0;+  }+}</style><g class="chart"><g class="arrow"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-41.70388402745369, -0.5098040106756523, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-40.703991576050946, -0.5098040106756523, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-39.33034350353967, -0.5098040106756523, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-37.32821468040517, -0.5098040106756523, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-34.14934249468909, -0.5098040106756523, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-28.38240378414633, -0.5098040106756523, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-15.274030281041826, -0.5098040106756523, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(24.917115262331563, -0.5098040106756523, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(85.25243231067934, -0.5098040106756523, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(107.43966356457298, -0.5098040106756523, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.5098040106756523, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-46.89925433618114, -0.38295264555199554, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-45.41219274140232, -0.38295264555199554, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-43.26655332833368, -0.38295264555199554, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-39.913529548149384, -0.38295264555199554, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-33.99914492987854, -0.38295264555199554, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-21.321176713227626, -0.38295264555199554, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(13.364611169993305, -0.38295264555199554, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(70.26081916410517, -0.38295264555199554, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(96.08437785000453, -0.38295264555199554, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(106.05509143504601, -0.38295264555199554, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.38295264555199554, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-53.3543508353797, -0.2561012804283387, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-51.23448009554123, -0.2561012804283387, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-48.012787504183336, -0.2561012804283387, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-42.58049078334366, -0.2561012804283387, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-31.827446576673104, -0.2561012804283387, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-5.440332031005506, -0.2561012804283387, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(47.1210963966615, -0.2561012804283387, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(80.53767779197439, -0.2561012804283387, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(93.73139699916044, -0.2561012804283387, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(100.06068979532297, -0.2561012804283387, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.2561012804283387, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-61.48095159956936, -0.12924991530468188, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-58.67008724249424, -0.12924991530468188, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-54.17002461487118, -0.12924991530468188, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-45.97102193107917, -0.12924991530468188, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-27.930948956080037, -0.12924991530468188, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(14.445942279113961, -0.12924991530468188, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(58.95370855020484, -0.12924991530468188, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(78.38768602098031, -0.12924991530468188, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(87.0721562906961, -0.12924991530468188, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(91.775265785145, -0.12924991530468188, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-0.12924991530468188, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-71.63155263230772, -2.398550181025083e-3, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-68.30375886013567, -2.398550181025083e-3, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-62.713434447769245, -2.398550181025083e-3, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-51.74335201662478, -2.398550181025083e-3, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-25.463345061871607, -2.398550181025083e-3, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(25.352317626939044, -2.398550181025083e-3, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(58.539020075643705, -2.398550181025083e-3, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(72.03510627877053, -2.398550181025083e-3, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(78.57121322367863, -2.398550181025083e-3, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(82.33198654554482, -2.398550181025083e-3, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(-2.398550181025083e-3, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-83.72582919707884, 0.12445281494263172, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-80.37960270065743, 0.12445281494263172, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-74.55784459620769, 0.12445281494263172, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-62.392645475723924, 0.12445281494263172, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-30.325850500388558, 0.12445281494263172, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(25.463345061871614, 0.12445281494263172, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(53.34825221466397, 0.12445281494263172, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(64.18052078566551, 0.12445281494263172, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(69.52530867630297, 0.12445281494263172, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(72.65691141186667, 0.12445281494263172, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.12445281494263172, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-96.84875031477206, 0.25130418006628874, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-94.10747809603637, 0.25130418006628874, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-89.31668823842175, 0.25130418006628874, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-79.0898362236076, 0.25130418006628874, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-48.89810671661513, 0.25130418006628874, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(16.431113233075703, 0.25130418006628874, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(45.97102193107918, 0.25130418006628874, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(56.03475263569897, 0.25130418006628874, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(60.77115498628979, 0.25130418006628874, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(63.48858398583044, 0.25130418006628874, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.25130418006628874, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-109.476575498932, 0.3781555451899452, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-107.65012421993012, 0.3781555451899452, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-104.57421619803874, 0.3781555451899452, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-98.3658861240326, 0.3781555451899452, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-80.5376777919744, 0.3781555451899452, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-10.304846468766057, 0.3781555451899452, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(36.3843518158359, 0.3781555451899452, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(48.012787504183336, 0.3781555451899452, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(52.73359809902285, 0.3781555451899452, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(55.2568198416964, 0.3781555451899452, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.3781555451899452, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-120.39004059367852, 0.5050069103136021, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-119.3548748641938, 0.5050069103136021, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-117.72207677286721, 0.5050069103136021, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-114.77180709318333, 0.5050069103136021, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-107.91023110297346, 0.5050069103136021, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-78.88016563239884, 0.5050069103136021, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(18.07717429682483, 0.5050069103136021, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(39.57646251047537, 0.5050069103136021, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(45.412192741402315, 0.5050069103136021, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(48.061152646549644, 0.5050069103136021, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.5050069103136021, -0.4280649927055412) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-129.20442853819998, 0.6318582754372586, 0.33388258313757)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 0.33388258313757) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-128.6756131139764, 0.6318582754372586, 0.2492217413772243)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 0.2492217413772243) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-127.8990823601365, 0.6318582754372586, 0.1645608996168786)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 0.1645608996168786) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-126.64820118726841, 0.6318582754372586, 7.990005785653287e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, 7.990005785653287e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-124.30095672615316, 0.6318582754372586, -4.7607839038127375e-3)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -4.7607839038127375e-3) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-118.3399495893263, 0.6318582754372586, -8.942162566415846e-2)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -8.942162566415846e-2) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(-81.6026974133102, 0.6318582754372586, -0.17408246742450428)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.17408246742450428) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(25.916669828467207, 0.6318582754372586, -0.2587433091848499)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.2587433091848499) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(38.15385704023621, 0.6318582754372586, -0.3434041509451956)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.3434041509451956) scale(5.0e-2)"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><g transform="rotate(41.70388402745369, 0.6318582754372586, -0.4280649927055412)"><path d="M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" transform="translate(0.6318582754372586, -0.4280649927055412) scale(5.0e-2)"/></g></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5816853993455909" width="1.285375238178084" y="-0.5" height="0.9058421129540768"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6070556723703223, 0.3762130040177428)"><polyline points="-0.6070556723703223,0.39121300401774284+-0.6070556723703223,0.3612130040177428"/></g><g transform="rotate(-90.0, -0.6070556723703223, 0.29155216225739716)"><polyline points="-0.6070556723703223,0.3065521622573972+-0.6070556723703223,0.27655216225739715"/></g><g transform="rotate(-90.0, -0.6070556723703223, 0.20689132049705145)"><polyline points="-0.6070556723703223,0.22189132049705146+-0.6070556723703223,0.19189132049705143"/></g><g transform="rotate(-90.0, -0.6070556723703223, 0.12223047873670573)"><polyline points="-0.6070556723703223,0.13723047873670574+-0.6070556723703223,0.10723047873670573"/></g><g transform="rotate(-90.0, -0.6070556723703223, 3.7569636976360066e-2)"><polyline points="-0.6070556723703223,5.2569636976360065e-2+-0.6070556723703223,2.2569636976360066e-2"/></g><g transform="rotate(-90.0, -0.6070556723703223, -4.709120478398565e-2)"><polyline points="-0.6070556723703223,-3.209120478398565e-2+-0.6070556723703223,-6.209120478398565e-2"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.13175204654433137)"><polyline points="-0.6070556723703223,-0.11675204654433137+-0.6070556723703223,-0.14675204654433138"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.21641288830467698)"><polyline points="-0.6070556723703223,-0.20141288830467696+-0.6070556723703223,-0.231412888304677"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.3010737300650228)"><polyline points="-0.6070556723703223,-0.2860737300650228+-0.6070556723703223,-0.3160737300650228"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.3857345718253685)"><polyline points="-0.6070556723703223,-0.3707345718253685+-0.6070556723703223,-0.40073457182536854"/></g><g transform="rotate(-90.0, -0.6070556723703223, -0.47039541358571413)"><polyline points="-0.6070556723703223,-0.4553954135857141+-0.6070556723703223,-0.48539541358571414"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.228378837455226e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.3878538697597904">-0.50</text><text x="-0.6375" y="0.3031930279994447">-0.40</text><text x="-0.6375" y="0.21853218623909898">-0.30</text><text x="-0.6375" y="0.13387134447875332">-0.20</text><text x="-0.6375" y="4.92105027184076e-2">-0.10</text><text x="-0.6375" y="-3.545033904193806e-2"> 0.00</text><text x="-0.6375" y="-0.12011118080228378"> 0.10</text><text x="-0.6375" y="-0.2047720225626295"> 0.20</text><text x="-0.6375" y="-0.2894328643229752"> 0.30</text><text x="-0.6375" y="-0.37409370608332093"> 0.40</text><text x="-0.6375" y="-0.45875454784366665"> 0.50</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5935248600904656" width="3.3827030699641325e-3" y="-0.472088630420921" height="0.8499948512738706"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5732296932374806,0.4462403654821805+-0.5732296932374806,0.41624036548218046"/><polyline points="-0.44637832811382394,0.4462403654821805+-0.44637832811382394,0.41624036548218046"/><polyline points="-0.31952696299016703,0.4462403654821805+-0.31952696299016703,0.41624036548218046"/><polyline points="-0.19267559786651023,0.4462403654821805+-0.19267559786651023,0.41624036548218046"/><polyline points="-6.582423274285343e-2,0.4462403654821805+-6.582423274285343e-2,0.41624036548218046"/><polyline points="6.102713238080337e-2,0.4462403654821805+6.102713238080337e-2,0.41624036548218046"/><polyline points="0.18787849750446006,0.4462403654821805+0.18787849750446006,0.41624036548218046"/><polyline points="0.31472986262811686,0.4462403654821805+0.31472986262811686,0.41624036548218046"/><polyline points="0.4415812277517739,0.4462403654821805+0.4415812277517739,0.41624036548218046"/><polyline points="0.5684325928754306,0.4462403654821805+0.5684325928754306,0.41624036548218046"/><polyline points="0.6952839579990873,0.4462403654821805+0.6952839579990873,0.41624036548218046"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.228378837455226e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5732296932374806" y="0.485">-0.50</text><text x="-0.44637832811382394" y="0.485">-0.40</text><text x="-0.31952696299016703" y="0.485">-0.30</text><text x="-0.19267559786651023" y="0.485">-0.20</text><text x="-6.582423274285343e-2" y="0.485">-0.10</text><text x="6.102713238080337e-2" y="0.485"> 0.00</text><text x="0.18787849750446006" y="0.485"> 0.10</text><text x="0.31472986262811686" y="0.485"> 0.20</text><text x="0.4415812277517739" y="0.485"> 0.30</text><text x="0.5684325928754306" y="0.485"> 0.40</text><text x="0.6952839579990873" y="0.485"> 0.50</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5749210447724628" width="1.271896354306532" y="0.41430819713011136" height="3.386433670413802e-3"/></g></g></g></g></svg>
other/bar.svg view
@@ -1,29 +1,53 @@-<svg height="300.0" width="398.2301616785188" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8200000000000001 -0.5531722096956032 1.59 1.1977997798797322"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="0.9952977709753474" x="-0.7118270128238589"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,0.40191657271702363-0.2834707581514886,0.40191657271702363"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,0.28917700112739575-0.2834707581514886,0.28917700112739575"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,0.17643742953776775-0.2834707581514886,0.17643742953776775"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,6.369785794813976e-2-0.2834707581514886,6.369785794813976e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-4.904171364148824e-2-0.2834707581514886,-4.904171364148824e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.16178128523111612-0.2834707581514886,-0.16178128523111612"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.2745208568207441-0.2834707581514886,-0.2745208568207441"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.387260428410372-0.2834707581514886,-0.387260428410372"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.7118270128238589,-0.5-0.2834707581514886,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4149943630214205" x="-0.75">-4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.30225479143179257" x="-0.75">-2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.18951521984216457" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="7.677564825253663e-2" x="-0.75">2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.596392333709142e-2" x="-0.75">4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1487034949267193" x="-0.75">6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.2614430665163472" x="-0.75">8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3741826381059751" x="-0.75">10</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869222096956032" x="-0.75">12</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7294106067777567, 0.40191657271702363)"><polyline points="-0.7294106067777567,0.41691657271702365--0.7294106067777567,0.3869165727170236"/></g><g transform="rotate(-90.0, -0.7294106067777567, 0.28917700112739575)"><polyline points="-0.7294106067777567,0.30417700112739576--0.7294106067777567,0.27417700112739574"/></g><g transform="rotate(-90.0, -0.7294106067777567, 0.17643742953776775)"><polyline points="-0.7294106067777567,0.19143742953776777--0.7294106067777567,0.16143742953776774"/></g><g transform="rotate(-90.0, -0.7294106067777567, 6.369785794813976e-2)"><polyline points="-0.7294106067777567,7.869785794813976e-2--0.7294106067777567,4.869785794813976e-2"/></g><g transform="rotate(-90.0, -0.7294106067777567, -4.904171364148824e-2)"><polyline points="-0.7294106067777567,-3.404171364148824e-2--0.7294106067777567,-6.404171364148824e-2"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.16178128523111612)"><polyline points="-0.7294106067777567,-0.1467812852311161--0.7294106067777567,-0.17678128523111614"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.2745208568207441)"><polyline points="-0.7294106067777567,-0.2595208568207441--0.7294106067777567,-0.28952085682074413"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.387260428410372)"><polyline points="-0.7294106067777567,-0.372260428410372--0.7294106067777567,-0.402260428410372"/></g><g transform="rotate(-90.0, -0.7294106067777567, -0.5)"><polyline points="-0.7294106067777567,-0.485--0.7294106067777567,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="2.6541273892675132e-3" x="-0.7211164586862954"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6620621242750915" transform="rotate(-45.0, -0.6620621242750915, 0.5)">row 1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5625323471775566" transform="rotate(-45.0, -0.5625323471775566, 0.5)">row 2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.46300257008002194" transform="rotate(-45.0, -0.46300257008002194, 0.5)">row 3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.3634727929824872" transform="rotate(-45.0, -0.3634727929824872, 0.5)">row 4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2639430158849524" transform="rotate(-45.0, -0.2639430158849524, 0.5)">row 5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.16441323878741765" transform="rotate(-45.0, -0.16441323878741765, 0.5)">row 6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-6.48834616898828e-2" transform="rotate(-45.0, -6.48834616898828e-2, 0.5)">row 7</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="3.464631540765173e-2" transform="rotate(-45.0, 3.464631540765173e-2, 0.5)">row 8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.13417609250518647" transform="rotate(-45.0, 0.13417609250518647, 0.5)">row 9</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.23370586960272122" transform="rotate(-45.0, 0.23370586960272122, 0.5)">row 10</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6620621242750915,0.4408173618940248--0.6620621242750915,0.4108173618940248"/><polyline points="-0.5625323471775566,0.4408173618940248--0.5625323471775566,0.4108173618940248"/><polyline points="-0.46300257008002194,0.4408173618940248--0.46300257008002194,0.4108173618940248"/><polyline points="-0.3634727929824872,0.4408173618940248--0.3634727929824872,0.4108173618940248"/><polyline points="-0.2639430158849524,0.4408173618940248--0.2639430158849524,0.4108173618940248"/><polyline points="-0.16441323878741765,0.4408173618940248--0.16441323878741765,0.4108173618940248"/><polyline points="-6.48834616898828e-2,0.4408173618940248--6.48834616898828e-2,0.4108173618940248"/><polyline points="3.464631540765173e-2,0.4408173618940248-3.464631540765173e-2,0.4108173618940248"/><polyline points="0.13417609250518647,0.4408173618940248-0.13417609250518647,0.4108173618940248"/><polyline points="0.23370586960272122,0.4408173618940248-0.23370586960272122,0.4108173618940248"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908681167e-3" y="0.4109357384441939" width="0.9952977709753474" x="-0.7118270128238589"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="2.0e-3" stroke="#b05929"><rect height="5.6369785794814e-2" y="0.12006764374295376" width="3.981191083901392e-2" x="-0.7018740351141054"/><rect height="0.112739571589628" y="6.369785794813976e-2" width="3.981191083901381e-2" x="-0.6023442580165705"/><rect height="0.16910935738444194" y="7.328072153325815e-3" width="3.981191083901392e-2" x="-0.502814480919036"/><rect height="0.2818489289740699" y="-0.10541149943630213" width="3.9811910839013975e-2" x="-0.4032847038215012"/><rect height="0.4509582863585119" y="-0.2745208568207441" width="3.9811910839013975e-2" x="-0.3037549267239665"/><rect height="0.0" y="0.17643742953776775" width="3.981191083901392e-2" x="-0.20422514962643168"/><rect height="0.112739571589628" y="0.17643742953776775" width="3.981191083901425e-2" x="-0.10469537252889705"/><rect height="0.6200676437429539" y="-0.4436302142051861" width="3.98119108390137e-2" x="-5.165595431362191e-3"/><rect height="0.112739571589628" y="6.369785794813976e-2" width="3.981191083901414e-2" x="9.436418166617233e-2"/><rect height="5.6369785794814e-2" y="0.12006764374295376" width="3.981191083901403e-2" x="0.19389395876370719"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="2.0e-3" stroke="#a6cfe3"><rect height="5.6369785794814e-2" y="0.12006764374295376" width="3.981191083901392e-2" x="-0.6620621242750915"/><rect height="0.112739571589628" y="6.369785794813976e-2" width="3.981191083901392e-2" x="-0.5625323471775567"/><rect height="0.16910935738444194" y="7.328072153325815e-3" width="3.981191083901392e-2" x="-0.4630025700800221"/><rect height="0.225479143179256" y="-4.904171364148824e-2" width="3.981191083901375e-2" x="-0.36347279298248725"/><rect height="0.2818489289740699" y="-0.10541149943630213" width="3.981191083901381e-2" x="-0.2639430158849525"/><rect height="0.3382187147688839" y="-0.16178128523111612" width="3.981191083901381e-2" x="-0.16441323878741776"/><rect height="0.3945885005636979" y="-0.21815107102593012" width="3.981191083901359e-2" x="-6.48834616898828e-2"/><rect height="0.4509582863585119" y="-0.2745208568207441" width="3.981191083901403e-2" x="3.464631540765151e-2"/><rect height="0.5073280721533258" y="-0.330890642615558" width="3.981191083901392e-2" x="0.13417609250518647"/><rect height="0.5636978579481398" y="-0.387260428410372" width="3.981191083901381e-2" x="0.23370586960272122"/></g><g></g><g text-anchor="middle" fill-opacity="1.0" fill="#b05929" stroke-width="0.0" stroke="none" font-size="4.0e-2"><text y="9.075535512965055e-2" x="-0.6819680796945985">1</text><text y="3.43855693348365e-2" x="-0.5824383025970638">2</text><text y="-2.19842164599775e-2" x="-0.482908525499529">3</text><text y="-0.1347237880496054" x="-0.3833787484019942">5</text><text y="-0.30383314543404727" x="-0.28384897130445946">8</text><text y="0.1471251409244645" x="-0.18431919420692466">0</text><text y="0.3624577226606539" x="-8.478941710938992e-2">-2</text><text y="-0.47294250281848926" x="1.4740359988144824e-2">11</text><text y="3.43855693348365e-2" x="0.11427013708567912">2</text><text y="9.075535512965055e-2" x="0.21379991418321442">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#a6cfe3" stroke-width="0.0" stroke="none" font-size="4.0e-2"><text y="9.075535512965055e-2" x="-0.6421561688555846">1</text><text y="3.43855693348365e-2" x="-0.5426263917580497">2</text><text y="-2.19842164599775e-2" x="-0.4430966146605151">3</text><text y="-7.835400225479139e-2" x="-0.34356683756298034">4</text><text y="-0.1347237880496054" x="-0.2440370604654456">5</text><text y="-0.19109357384441938" x="-0.14450728336791085">6</text><text y="-0.24746335963923338" x="-4.497750627037611e-2">7</text><text y="-0.30383314543404727" x="5.455227082715863e-2">8</text><text y="-0.3602029312288614" x="0.15408204792469338">9</text><text y="-0.41657271702367527" x="0.2536118250222281">10</text></g><g></g><g fill-opacity="0.0" stroke-opacity="1.0" fill="#0d0d0d" stroke-width="4.0e-3" stroke="#0d0d0d"><rect height="0.24820744081172497" y="-0.1388601712811144" width="0.3187606994510377" x="0.424603982075793"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="5.0542308989460605e-2" x="0.45114525596846855">column 2</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="8.0e-4" stroke="#a6cfe3"><rect height="4.3291995490417234e-2" y="2.0237912146168657e-2" width="3.1849528671210825e-2" x="0.6847084662240173"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-6.273841254379753e-2" x="0.45114525596846855">column 1</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="8.0e-4" stroke="#b05929"><rect height="4.329199549041718e-2" y="-9.304280938708964e-2" width="3.1849528671210825e-2" x="0.6847084662240173"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="460.1715110159581" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7238932594876959 -0.4916435603742647 1.4738932594876957 0.9608764716227184" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="barchart"><g fill="rgb(2%, 29%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="-0.6024960664610737" width="4.259550632513054e-2" y="7.162298599341055e-2" height="4.961684064479793e-2"/><rect x="-0.49600730064824716" width="4.259550632513054e-2" y="2.200614534861267e-2" height="9.923368128959581e-2"/><rect x="-0.38951853483542087" width="4.2595506325130594e-2" y="-2.761069529618526e-2" height="0.14885052193439374"/><rect x="-0.28302976902259436" width="4.259550632513054e-2" y="-0.12684437658578107" height="0.24808420322398955"/><rect x="-0.17654100320976795" width="4.259550632513065e-2" y="-0.2756948985201749" height="0.3969347251583834"/><rect x="-7.005223739694144e-2" width="4.259550632513054e-2" y="0.12123982663820848" height="0.0"/><rect x="3.643652841588507e-2" width="4.259550632513054e-2" y="0.12123982663820848" height="9.923368128959584e-2"/><rect x="0.14292529422871136" width="4.259550632513043e-2" y="-0.42454542045456867" height="0.5457852470927771"/><rect x="0.2494140600415381" width="4.259550632513065e-2" y="2.200614534861267e-2" height="9.923368128959581e-2"/><rect x="0.3559028258543645" width="4.259550632513065e-2" y="7.162298599341055e-2" height="4.961684064479793e-2"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="-0.5599005601359431" width="4.259550632513065e-2" y="7.162298599341055e-2" height="4.961684064479793e-2"/><rect x="-0.4534117943231166" width="4.2595506325130594e-2" y="2.200614534861267e-2" height="9.923368128959581e-2"/><rect x="-0.3469230285102903" width="4.259550632513065e-2" y="-2.761069529618526e-2" height="0.14885052193439374"/><rect x="-0.24043426269746382" width="4.259550632513054e-2" y="-7.722753594098325e-2" height="0.19846736257919173"/><rect x="-0.1339454968846373" width="4.259550632513054e-2" y="-0.12684437658578107" height="0.24808420322398955"/><rect x="-2.7456731071810903e-2" width="4.259550632513054e-2" y="-0.17646121723057906" height="0.29770104386878754"/><rect x="7.903203474101561e-2" width="4.259550632513043e-2" y="-0.22607805787537694" height="0.3473178845135854"/><rect x="0.1855208005538418" width="4.259550632513087e-2" y="-0.2756948985201749" height="0.3969347251583834"/><rect x="0.29200956636666875" width="4.259550632513054e-2" y="-0.3253117391649728" height="0.4465515658031813"/><rect x="0.39849833217949515" width="4.259550632513065e-2" y="-0.3749285798097708" height="0.49616840644797927"/></g><g fill="rgb(2%, 29%, 48%)" stroke="none" stroke-width="0.0" font-size="2.555730379507835e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5811983132985085" y="4.5822228858115654e-2">1.0</text><text x="-0.47470954748568195" y="-3.7946117866822227e-3">2.0</text><text x="-0.36822078167285555" y="-5.3411452431480155e-2">3.0</text><text x="-0.26173201586002903" y="-0.15264513372107602">5.0</text><text x="-0.15524325004720263" y="-0.30149565565546976">8.0</text><text x="-4.8754484234376116e-2" y="9.543906950291359e-2">0.0</text><text x="5.7734281578450286e-2" y="0.2849754007660416">-2.0</text><text x="0.1642230473912767" y="-0.4503461775898634">11</text><text x="0.2707118132041032" y="-3.7946117866822227e-3">2.0</text><text x="0.3772005790169298" y="4.5822228858115654e-2">1.0</text></g><g fill="rgb(66%, 7%, 55%)" stroke="none" stroke-width="0.0" font-size="2.555730379507835e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5386028069733778" y="4.5822228858115654e-2">1.0</text><text x="-0.43211404116055135" y="-3.7946117866822227e-3">2.0</text><text x="-0.32562527534772495" y="-5.3411452431480155e-2">3.0</text><text x="-0.2191365095348985" y="-0.10302829307627814">4.0</text><text x="-0.11264774372207198" y="-0.15264513372107602">5.0</text><text x="-6.158977909245578e-3" y="-0.202261974365874">6.0</text><text x="0.10032978790358071" y="-0.2518788150106719">7.0</text><text x="0.20681855371640745" y="-0.30149565565546976">8.0</text><text x="0.31330731952923385" y="-0.35111249630026764">9.0</text><text x="0.4197960853420605" y="-0.4007293369450655">10</text></g></g></g><g class="hud"><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6344426962049217, 0.31970718921740016)"><polyline points="-0.6344426962049217,0.33470718921740017+-0.6344426962049217,0.30470718921740014"/></g><g transform="rotate(-90.0, -0.6344426962049217, 0.22047350792780432)"><polyline points="-0.6344426962049217,0.2354735079278043+-0.6344426962049217,0.20547350792780433"/></g><g transform="rotate(-90.0, -0.6344426962049217, 0.12123982663820848)"><polyline points="-0.6344426962049217,0.1362398266382085+-0.6344426962049217,0.10623982663820848"/></g><g transform="rotate(-90.0, -0.6344426962049217, 2.200614534861267e-2)"><polyline points="-0.6344426962049217,3.700614534861267e-2+-0.6344426962049217,7.006145348612672e-3"/></g><g transform="rotate(-90.0, -0.6344426962049217, -7.722753594098325e-2)"><polyline points="-0.6344426962049217,-6.222753594098325e-2+-0.6344426962049217,-9.222753594098325e-2"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.17646121723057906)"><polyline points="-0.6344426962049217,-0.16146121723057905+-0.6344426962049217,-0.19146121723057907"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.2756948985201749)"><polyline points="-0.6344426962049217,-0.2606948985201749+-0.6344426962049217,-0.29069489852017494"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.3749285798097708)"><polyline points="-0.6344426962049217,-0.3599285798097708+-0.6344426962049217,-0.3899285798097708"/></g><g transform="rotate(-90.0, -0.6344426962049217, -0.47416226109936654)"><polyline points="-0.6344426962049217,-0.45916226109936653+-0.6344426962049217,-0.48916226109936656"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.549625527094216e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.3306228941592557">-4.0</text><text x="-0.66" y="0.23138921286965985">-2.0</text><text x="-0.66" y="0.132155531580064"> 0.0</text><text x="-0.66" y="3.2921850290468235e-2"> 2.0</text><text x="-0.66" y="-6.631183099912769e-2"> 4.0</text><text x="-0.66" y="-0.1655455122887235"> 6.0</text><text x="-0.66" y="-0.26477919357831936"> 8.0</text><text x="-0.66" y="-0.3640128748679152">10.0</text><text x="-0.66" y="-0.463246556157511">12.0</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.6131449430423563,0.31970718921740016+0.45174271508590846,0.31970718921740016"/><polyline points="-0.6131449430423563,0.22047350792780432+0.45174271508590846,0.22047350792780432"/><polyline points="-0.6131449430423563,0.12123982663820848+0.45174271508590846,0.12123982663820848"/><polyline points="-0.6131449430423563,2.200614534861267e-2+0.45174271508590846,2.200614534861267e-2"/><polyline points="-0.6131449430423563,-7.722753594098325e-2+0.45174271508590846,-7.722753594098325e-2"/><polyline points="-0.6131449430423563,-0.17646121723057906+0.45174271508590846,-0.17646121723057906"/><polyline points="-0.6131449430423563,-0.2756948985201749+0.45174271508590846,-0.2756948985201749"/><polyline points="-0.6131449430423563,-0.3749285798097708+0.45174271508590846,-0.3749285798097708"/><polyline points="-0.6131449430423563,-0.47416226109936654+0.45174271508590846,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6230838945182201" width="2.839700421675362e-3" y="-0.47575" height="0.7970449281180336"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5599005601359431,0.3585232727269032+-0.5599005601359431,0.3285232727269032"/><polyline points="-0.45341179432311657,0.3585232727269032+-0.45341179432311657,0.3285232727269032"/><polyline points="-0.34692302851029017,0.3585232727269032+-0.34692302851029017,0.3285232727269032"/><polyline points="-0.24043426269746365,0.3585232727269032+-0.24043426269746365,0.3285232727269032"/><polyline points="-0.1339454968846372,0.3585232727269032+-0.1339454968846372,0.3285232727269032"/><polyline points="-2.745673107181068e-2,0.3585232727269032+-2.745673107181068e-2,0.3285232727269032"/><polyline points="7.903203474101572e-2,0.3585232727269032+7.903203474101572e-2,0.3285232727269032"/><polyline points="0.18552080055384212,0.3585232727269032+0.18552080055384212,0.3285232727269032"/><polyline points="0.29200956636666875,0.3585232727269032+0.29200956636666875,0.3285232727269032"/><polyline points="0.39849833217949515,0.3585232727269032+0.39849833217949515,0.3285232727269032"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.549625527094216e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.5599005601359431" y="0.39393398282201786" transform="rotate(-45.0, -0.5599005601359431, 0.39393398282201786)">row 1</text><text x="-0.45341179432311657" y="0.39393398282201786" transform="rotate(-45.0, -0.45341179432311657, 0.39393398282201786)">row 2</text><text x="-0.34692302851029017" y="0.39393398282201786" transform="rotate(-45.0, -0.34692302851029017, 0.39393398282201786)">row 3</text><text x="-0.24043426269746365" y="0.39393398282201786" transform="rotate(-45.0, -0.24043426269746365, 0.39393398282201786)">row 4</text><text x="-0.1339454968846372" y="0.39393398282201786" transform="rotate(-45.0, -0.1339454968846372, 0.39393398282201786)">row 5</text><text x="-2.745673107181068e-2" y="0.39393398282201786" transform="rotate(-45.0, -2.745673107181068e-2, 0.39393398282201786)">row 6</text><text x="7.903203474101572e-2" y="0.39393398282201786" transform="rotate(-45.0, 7.903203474101572e-2, 0.39393398282201786)">row 7</text><text x="0.18552080055384212" y="0.39393398282201786" transform="rotate(-45.0, 0.18552080055384212, 0.39393398282201786)">row 8</text><text x="0.29200956636666875" y="0.39393398282201786" transform="rotate(-45.0, 0.29200956636666875, 0.39393398282201786)">row 9</text><text x="0.39849833217949515" y="0.39393398282201786" transform="rotate(-45.0, 0.39849833217949515, 0.39393398282201786)">row 10</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.614564793253194" width="1.06772735854994" y="0.3276458837205678" height="3.1754778012670903e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.5067619107558688" width="0.2396884637170369" y="-0.13892468119271362" height="0.1806052999470643"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.1946629743847946e-2" fill-opacity="1.0" text-anchor="start"><text x="0.5245100383913396" y="4.98641019168411e-4">column 2</text></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(66%, 7%, 55%)" stroke-width="1.25e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="0.6750141607401346" width="5.324438290641331e-2" y="-3.820249468377396e-2" height="5.954020877375754e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.1946629743847946e-2" fill-opacity="1.0" text-anchor="start"><text x="0.5245100383913396" y="-7.988064082540414e-2">column 1</text></g><g fill="rgb(2%, 29%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.25e-3" fill-opacity="0.7" stroke-opacity="1.0"><rect x="0.6750141607401346" width="5.324438290641331e-2" y="-0.11858177652834667" height="5.95402087737576e-2"/></g></g></g></g></svg>
− other/compound.svg
@@ -1,5 +0,0 @@-<svg height="300.0" width="430.60959792477314" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8300000000000001 -0.594 1.6600000000000001 1.1564999999999999"><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.75">0,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.75">0,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.75">0,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.75">0,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.75">0,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.75">0,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.44999999999999996">1,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.44999999999999996">1,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.44999999999999996">1,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.44999999999999996">1,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.44999999999999996">1,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.44999999999999996">1,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.1499999999999999">2,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.1499999999999999">2,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.1499999999999999">2,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.1499999999999999">2,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.1499999999999999">2,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.1499999999999999">2,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.15000000000000013">3,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.15000000000000013">3,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.15000000000000013">3,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.15000000000000013">3,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.15000000000000013">3,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.15000000000000013">3,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.4500000000000002">4,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.4500000000000002">4,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.4500000000000002">4,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.4500000000000002">4,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.4500000000000002">4,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.4500000000000002">4,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.75">5,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.75">5,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.75">5,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.75">5,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.75">5,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.75">5,5</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846135" width="1.0000000000000009e-2" x="0.745"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.75,0.3076923076923077--0.44999999999999996,0.3076923076923077--0.1499999999999999,-0.46153846153846134"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.75,0.5-8.999999999999975e-2,-7.692307692307687e-2"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.6,-0.26923076923076916--0.6,0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="5.0e-3" stroke="#b05929"><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.75" cy="0.3076923076923077"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.44999999999999996" cy="0.3076923076923077"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.1499999999999999" cy="-0.46153846153846134"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-3" stroke="#a6cfe3"><rect height="8.000000000000002e-2" y="0.46" width="8.000000000000007e-2" x="-0.79"/><rect height="8.000000000000002e-2" y="-0.11692307692307688" width="8.000000000000002e-2" x="4.9999999999999746e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="5.0e-3" stroke="#1f78b5"><circle r="4.0e-2" cx="-0.6" cy="-0.26923076923076916"/><circle r="4.0e-2" cx="-0.6" cy="0.5"/></g></svg>
other/cubic.svg view
@@ -1,101 +1,126 @@-<svg height="300.0" width="300.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.5365 -0.5365 1.073 1.073"><g fill-opacity="0.1" stroke-opacity="0.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#000000"><path d="M -0.5,0.5 C 0.5,0.5 -0.5,-0.5 0.5,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="-0.5,0.5--0.470596,0.499702--0.442368,0.498816--0.415292,0.497354--0.389344,0.495328--0.36450000000000005,0.49275--0.34073600000000004,0.48963199999999996--0.318028,0.4859859999999999--0.29635199999999995,0.481824--0.275684,0.477158--0.256,0.472--0.237276,0.46636199999999994--0.21948800000000002,0.460256--0.20261199999999996,0.453694--0.1866239999999999,0.446688--0.17150000000000004,0.43925000000000003--0.15721600000000008,0.431392--0.14374799999999993,0.423126--0.13107199999999997,0.41446399999999994--0.11916399999999994,0.405418--0.10799999999999987,0.39599999999999996--9.755599999999992e-2,0.38622199999999995--8.780799999999994e-2,0.376096--7.873200000000002e-2,0.365634--7.030399999999992e-2,0.35484799999999994--6.2499999999999944e-2,0.34375--5.529600000000001e-2,0.332352--4.866799999999999e-2,0.32066599999999995--4.259199999999991e-2,0.3087039999999999--3.7043999999999966e-2,0.296478--3.2000000000000084e-2,0.28400000000000003--2.743600000000007e-2,0.271282--2.3328000000000015e-2,0.258336--1.9652000000000003e-2,0.245174--1.638400000000012e-2,0.23180799999999996--1.3500000000000012e-2,0.21824999999999994--1.097599999999993e-2,0.20451200000000003--8.787999999999907e-3,0.19060599999999994--6.911999999999974e-3,0.17654399999999998--5.323999999999995e-3,0.16233799999999998--3.9999999999998925e-3,0.14799999999999996--2.915999999999974e-3,0.13354199999999994--2.0479999999998832e-3,0.11897600000000003--1.3719999999999288e-3,0.10431399999999996--8.639999999999204e-4,8.956799999999998e-2--4.999999999998894e-4,7.474999999999993e-2--2.5599999999992296e-4,5.9871999999999925e-2--1.0799999999988596e-4,4.494599999999993e-2--3.199999999992098e-5,2.998400000000001e-2--4.000000000004e-6,1.4997999999999956e-2-0.0,-0.0-4.000000000115023e-6,-1.4997999999999956e-2-3.2000000000032e-5,-2.998400000000001e-2-1.0799999999999699e-4,-4.494600000000004e-2-2.5599999999992296e-4,-5.9872000000000036e-2-5.00000000000056e-4,-7.47500000000001e-2-8.639999999999759e-4,-8.956800000000009e-2-1.3720000000000399e-3,-0.10431400000000013-2.0480000000000498e-3,-0.11897600000000008-2.9160000000000297e-3,-0.13354199999999994-4.0000000000000036e-3,-0.14800000000000002-5.323999999999995e-3,-0.16233799999999998-6.912000000000029e-3,-0.17654400000000015-8.788000000000018e-3,-0.19060600000000005-1.0976000000000097e-2,-0.20451200000000003-1.3500000000000068e-2,-0.21825000000000006-1.6383999999999954e-2,-0.23180800000000001-1.9652000000000114e-2,-0.245174-2.3328000000000015e-2,-0.2583360000000001-2.7436000000000016e-2,-0.271282-3.200000000000003e-2,-0.28400000000000003-3.704400000000019e-2,-0.296478-4.2592000000000074e-2,-0.308704-4.8667999999999934e-2,-0.3206659999999999-5.529600000000001e-2,-0.332352-6.25e-2,-0.34375-7.030400000000003e-2,-0.35484800000000016-7.873200000000002e-2,-0.3656340000000001-8.7808e-2,-0.376096-9.755600000000009e-2,-0.3862220000000002-0.1080000000000001,-0.39600000000000013-0.11916400000000016,-0.40541800000000006-0.13107200000000008,-0.41446400000000005-0.1437480000000002,-0.4231260000000001-0.15721600000000002,-0.4313919999999999-0.1715000000000001,-0.4392499999999999-0.186624,-0.446688-0.20261200000000001,-0.45369400000000015-0.21948800000000002,-0.460256-0.23727600000000004,-0.46636200000000017-0.2560000000000002,-0.4720000000000001-0.27568400000000004,-0.4771580000000001-0.29635200000000006,-0.48182400000000003-0.3180280000000001,-0.48598600000000003-0.34073600000000015,-0.48963200000000007-0.36450000000000016,-0.4927499999999999-0.38934400000000013,-0.4953280000000001-0.415292,-0.4973540000000001-0.4423679999999999,-0.4988159999999999-0.470596,-0.4997020000000001-0.5,-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0000000000000027e-2" y="0.485" width="3.0000000000000027e-2" x="-0.515"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="0.485"/><rect height="3.0000000000000027e-2" y="0.485" width="3.0000000000000027e-2" x="0.485"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="-0.515"/><rect height="3.0000000000000027e-2" y="-0.41100000000000014" width="3.0e-2" x="9.30000000000001e-2"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="1.0" y="-0.5" width="1.0" x="-0.5"/></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="459.6022970724569" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.75 -0.4791073779795686 1.5 0.9791073779795686" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="cubic"><g fill="rgb(96%, 60%, 92%)" stroke="rgb(0%, 0%, 0%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M -0.7335,0.4835 C 0.2768,0.4835 -0.7335,-0.3675 0.2768,-0.3675"/></g><g fill="none" stroke="rgb(53%, 51%, 28%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="-0.7335,0.48350000000000004+-0.7037922810442679,0.48324640351689035+-0.6752727091940977,0.48249242202683945+-0.6479170365493757,0.48124826746876453+-0.6217010152099887,0.47952415178158264+-0.596600397275823,0.4773302869042111+-0.572590934846765,0.4746768847755669+-0.5496483800227016,0.47157415733456737+-0.5277484849035188,0.4680323165201296+-0.5068670015891032,0.46406157427117084+-0.4869796821793416,0.4596721425266081+-0.4680622787741203,0.4548742332253587+-0.45009054347332583,0.44967805830633967+-0.43304022837684447,0.44409382970846834+-0.416887085584563,0.43813175937066173+-0.4016068671963679,0.4318020592318372+-0.38717532531214544,0.42511494123091165+-0.3735682120317821,0.41808061730680246+-0.3607612794551645,0.4107092993984267+-0.3487302796821793,0.40301119944470154+-0.3374509648127127,0.3949965293845442+-0.32689908694665154,0.3866755011568719+-0.31705039818388203,0.3780583267006016+-0.30788065062429065,0.36915521795465067+-0.29936559636776394,0.3599763868579362+-0.29148098751418844,0.3505320453493753+-0.2842025761634508,0.3408324053678853+-0.27750611441543704,0.3308876788523832+-0.27136735437003406,0.3207080777417862+-0.2657620481271283,0.3103038139750116+-0.26066594778660623,0.29968509949097644+-0.2560548054483543,0.28886214622859796+-0.25190437321225895,0.27784516612679316+-0.24819040317820668,0.2666443711244795+-0.24488864744608413,0.2552699731605738+-0.2419748581157775,0.24373218417399353+-0.23942478728717376,0.2320412161036558+-0.2372141870601589,0.22020728088847757+-0.23531880953461987,0.2082405904673763+-0.23371440681044275,0.19615135677926887+-0.2323767309875142,0.18394979176307263+-0.23128153416572073,0.17164610735770486+-0.23040456844494883,0.1592505155020824+-0.22972158592508507,0.14677322813512272+-0.22920833870601587,0.13422445719574272+-0.22884057888762754,0.12161441462285977+-0.22859405856980708,0.10895331235539096+-0.22844452985244046,9.625136233225362e-2+-0.22836774483541422,8.351877649236472e-2+-0.22833945561861524,7.076576677464141e-2+-0.22833541430192972,5.800254511800096e-2+-0.22833137298524409,4.523932346136056e-2+-0.228303083768445,3.248631374363725e-2+-0.22822629875141887,1.975372790374824e-2+-0.22807677003405225,7.051777880610843e-3+-0.22783024971623156,-5.609324386857961e-3+-0.22746248989784346,-1.82193669597408e-2+-0.22694924267877403,-3.0768137899120584e-2+-0.22626626015891027,-4.324542526608055e-2+-0.2253892944381385,-5.5641017121702885e-2+-0.2242940976163451,-6.794470152707077e-2+-0.22295642179341657,-8.014626654326684e-2+-0.22135201906923951,-9.223550023137439e-2+-0.21945664154370037,-0.10420219065247571+-0.21724604131668557,-0.11603612586765388+-0.21469597048808176,-0.12772709393799175+-0.21178218115777536,-0.13926488292457195+-0.2084804254256527,-0.15063928088847756+-0.20476645539160043,-0.1618400758907914+-0.20061602315550509,-0.17285705599259582+-0.1960048808172533,-0.18368000925497452+-0.190908780476731,-0.1942987237390097+-0.18530347423382532,-0.2047029875057843+-0.1791647141884224,-0.2148825886163812+-0.17246825244040864,-0.22482731513188337+-0.16518984108967094,-0.2345269551133734+-0.15730523223609538,-0.24397129662193429+-0.14879017797956873,-0.25315012771864875+-0.1396204304199773,-0.26205323646459966+-0.12977174165720762,-0.27067041092086996+-0.11921986379114635,-0.2789914391485424+-0.1079405489216797,-0.28700610920869973+-9.590954914869476e-2,-0.2947042091624248+-8.310261657207729e-2,-0.30207552707080054+-6.949550329171417e-2,-0.3091098509949096+-5.506396140749159e-2,-0.3157969689958351+-3.9783743019296436e-2,-0.3221266691346598+-2.363060022701491e-2,-0.3280887394724664+-6.5802851305335475e-3,-0.33367296807033775+1.1391450170261108e-2,-0.3388691429893568+3.030885357548241e-2,-0.34366705229060623+5.019617298524415e-2,-0.34805648403516876+7.107765629965945e-2,-0.35202722628412764+9.297755141884234e-2,-0.3555690670985654+0.11592010624290572,-0.358671794539565+0.1399295686719635,-0.36132519666820917+0.16503018660612934,-0.3635190615455808+0.1912462079455164,-0.3652431772327627+0.2186018805902381,-0.3664873317908375+0.2471214524404084,-0.3672413132808884+0.2768291713961406,-0.3674949097639981"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.7485" width="3.0000000000000027e-2" y="0.4685" height="3.0000000000000027e-2"/><rect x="0.2618291713961406" width="3.0000000000000027e-2" y="-0.38249490976399814" height="3.0000000000000027e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.48350000000000004" cx="0.2768291713961406" r="1.5e-2"/><circle cy="-0.3674949097639981" cx="-0.7335" r="1.5e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7335" width="1.0103291713961406" y="-0.3674949097639981" height="0.8509949097639982"/></g></g></g><g class="hud"><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.33845925085130535" width="0.40817298524404055" y="-0.2852320684868117" height="0.3879118463674226"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="6.863998149005096e-2">Bounding Box</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.5e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.6617645856980703" width="3.367763904653831e-2" y="3.672767237390101e-2" height="4.254974548819995e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="5.603887089311033e-4">Path Control Point</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.0077047663118899e-2" cx="0.6786034052213392" r="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="-6.751920407218881e-2">Path Endpoints</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.6536034052213392" width="5.0000000000000044e-2" y="-0.10315664044423875" height="4.9999999999999996e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="-0.13559879685330856">Path Chord</text></g><g fill="none" stroke="rgb(53%, 51%, 28%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.6617645856980703,-0.14623623322535861+0.7291198637911465,-0.14623623322535861"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.3677639046538026e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3552980703745743" y="-0.20367838963442852">Path Fill</text></g><g fill="rgb(96%, 60%, 92%)" stroke="rgb(0%, 0%, 0%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M 0.6618,-0.2001 Q 0.7291,-0.1576 0.6954,-0.2427"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.3884222474460834e-2" fill-opacity="1.0" text-anchor="middle"><text x="2.6931895573211184e-3" y="-0.43599999999999994">CubicPosition (Point 0 0) (Point 1 1) (Point 1 0) (Point 0 1)</text></g></g></g></svg>
+ other/date.svg view
@@ -0,0 +1,53 @@+<svg xmlns="http://www.w3.org/2000/svg" width="452.11491477002767" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7364320837415482 -0.49842240815450595 1.4853940957293088 0.9856304540306093" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"></g><g class="hud"><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5794598442049582,0.3585232727269032+-0.5794598442049582,0.3285232727269032"/><polyline points="-0.23948704784224933,0.3585232727269032+-0.23948704784224933,0.3285232727269032"/><polyline points="0.18207921964750973,0.3585232727269032+0.18207921964750973,0.3285232727269032"/><polyline points="0.5628487515737435,0.3585232727269032+0.5628487515737435,0.3285232727269032"/><polyline points="0.7396346056823522,0.3585232727269032+0.7396346056823522,0.3285232727269032"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.396981499624369e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.5794598442049582" y="0.39393398282201786" transform="rotate(-45.0, -0.5794598442049582, 0.39393398282201786)">06 Dec</text><text x="-0.23948704784224933" y="0.39393398282201786" transform="rotate(-45.0, -0.23948704784224933, 0.39393398282201786)">31 Dec</text><text x="0.18207921964750973" y="0.39393398282201786" transform="rotate(-45.0, 0.18207921964750973, 0.39393398282201786)">31 Jan</text><text x="0.5628487515737435" y="0.39393398282201786" transform="rotate(-45.0, 0.5628487515737435, 0.39393398282201786)">28 Feb</text><text x="0.7396346056823522" y="0.39393398282201786" transform="rotate(-45.0, 0.7396346056823522, 0.39393398282201786)">13 Mar</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5794598442049582,0.31970718921740016+-0.5794598442049582,-0.47416226109936654"/><polyline points="-0.23948704784224933,0.31970718921740016+-0.23948704784224933,-0.47416226109936654"/><polyline points="0.18207921964750973,0.31970718921740016+0.18207921964750973,-0.47416226109936654"/><polyline points="0.5628487515737435,0.31970718921740016+0.5628487515737435,-0.47416226109936654"/><polyline points="0.7396346056823522,0.31970718921740016+0.7396346056823522,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.581218636804808" width="1.32261203508701" y="0.3276458837205678" height="3.1754778012670903e-3"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6058417332027045, 0.31970718921740016)"><polyline points="-0.6058417332027045,0.33470718921740017+-0.6058417332027045,0.30470718921740014"/></g><g transform="rotate(-90.0, -0.6058417332027045, 0.22047350792780432)"><polyline points="-0.6058417332027045,0.2354735079278043+-0.6058417332027045,0.20547350792780433"/></g><g transform="rotate(-90.0, -0.6058417332027045, 0.12123982663820848)"><polyline points="-0.6058417332027045,0.1362398266382085+-0.6058417332027045,0.10623982663820848"/></g><g transform="rotate(-90.0, -0.6058417332027045, 2.200614534861267e-2)"><polyline points="-0.6058417332027045,3.700614534861267e-2+-0.6058417332027045,7.006145348612672e-3"/></g><g transform="rotate(-90.0, -0.6058417332027045, -7.722753594098325e-2)"><polyline points="-0.6058417332027045,-6.222753594098325e-2+-0.6058417332027045,-9.222753594098325e-2"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.17646121723057906)"><polyline points="-0.6058417332027045,-0.16146121723057905+-0.6058417332027045,-0.19146121723057907"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.2756948985201749)"><polyline points="-0.6058417332027045,-0.2606948985201749+-0.6058417332027045,-0.29069489852017494"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.3749285798097708)"><polyline points="-0.6058417332027045,-0.3599285798097708+-0.6058417332027045,-0.3899285798097708"/></g><g transform="rotate(-90.0, -0.6058417332027045, -0.47416226109936654)"><polyline points="-0.6058417332027045,-0.45916226109936653+-0.6058417332027045,-0.48916226109936656"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.396981499624369e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.3306228941592557">00:00</text><text x="-0.6375" y="0.23138921286965985">03:00</text><text x="-0.6375" y="0.132155531580064">06:00</text><text x="-0.6375" y="3.2921850290468235e-2">09:00</text><text x="-0.6375" y="-6.631183099912769e-2">12:00</text><text x="-0.6375" y="-0.1655455122887235">15:00</text><text x="-0.6375" y="-0.26477919357831936">18:00</text><text x="-0.6375" y="-0.3640128748679152">21:00</text><text x="-0.6375" y="-0.463246556157511">00:00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5794598442049582,0.31970718921740016+0.7396346056823524,0.31970718921740016"/><polyline points="-0.5794598442049582,0.22047350792780432+0.7396346056823524,0.22047350792780432"/><polyline points="-0.5794598442049582,0.12123982663820848+0.7396346056823524,0.12123982663820848"/><polyline points="-0.5794598442049582,2.200614534861267e-2+0.7396346056823524,2.200614534861267e-2"/><polyline points="-0.5794598442049582,-7.722753594098325e-2+0.7396346056823524,-7.722753594098325e-2"/><polyline points="-0.5794598442049582,-0.17646121723057906+0.7396346056823524,-0.17646121723057906"/><polyline points="-0.5794598442049582,-0.2756948985201749+0.7396346056823524,-0.2756948985201749"/><polyline points="-0.5794598442049582,-0.3749285798097708+0.7396346056823524,-0.3749285798097708"/><polyline points="-0.5794598442049582,-0.47416226109936654+0.7396346056823524,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5917713924039065" width="3.51758519969958e-3" y="-0.47575" height="0.7970449281180336"/></g></g></g></g></svg>
+ other/debug.svg view
@@ -0,0 +1,68 @@+<svg xmlns="http://www.w3.org/2000/svg" width="450.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.75 -0.5 1.5 1.0" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="chart"><g class="line"><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5894546169989507,0.18728082191780815+-0.19622271773347333,0.18728082191780815+0.1970091815320042,-0.35335844748858447"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5894546169989507,0.32244063926940636+0.511594700944386,-8.303881278538816e-2"/></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.39283866736621204,-0.21819863013698648+-0.39283866736621204,0.32244063926940636"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5953530954879329" width="1.1855941762854143" y="-0.3584269406392694" height="0.6859360730593607"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6189470094438615, 0.32244063926940636)"><polyline points="-0.6189470094438615,0.3374406392694064+-0.6189470094438615,0.30744063926940635"/></g><g transform="rotate(-90.0, -0.6189470094438615, 0.25486073059360725)"><polyline points="-0.6189470094438615,0.26986073059360727+-0.6189470094438615,0.23986073059360724"/></g><g transform="rotate(-90.0, -0.6189470094438615, 0.18728082191780815)"><polyline points="-0.6189470094438615,0.20228082191780816+-0.6189470094438615,0.17228082191780814"/></g><g transform="rotate(-90.0, -0.6189470094438615, 0.11970091324200904)"><polyline points="-0.6189470094438615,0.13470091324200906+-0.6189470094438615,0.10470091324200904"/></g><g transform="rotate(-90.0, -0.6189470094438615, 5.212100456620994e-2)"><polyline points="-0.6189470094438615,6.712100456620994e-2+-0.6189470094438615,3.712100456620994e-2"/></g><g transform="rotate(-90.0, -0.6189470094438615, -1.5458904109589167e-2)"><polyline points="-0.6189470094438615,-4.5890410958916716e-4+-0.6189470094438615,-3.0458904109589166e-2"/></g><g transform="rotate(-90.0, -0.6189470094438615, -8.303881278538816e-2)"><polyline points="-0.6189470094438615,-6.803881278538816e-2+-0.6189470094438615,-9.803881278538816e-2"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.15061872146118727)"><polyline points="-0.6189470094438615,-0.13561872146118725+-0.6189470094438615,-0.16561872146118728"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.21819863013698648)"><polyline points="-0.6189470094438615,-0.20319863013698647+-0.6189470094438615,-0.2331986301369865"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.2857785388127855)"><polyline points="-0.6189470094438615,-0.27077853881278546+-0.6189470094438615,-0.3007785388127855"/></g><g transform="rotate(-90.0, -0.6189470094438615, -0.35335844748858447)"><polyline points="-0.6189470094438615,-0.33835844748858446+-0.6189470094438615,-0.3683584474885845"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.647259706190976" y="0.33173287671232876">0.00</text><text x="-0.647259706190976" y="0.26415296803652966">0.50</text><text x="-0.647259706190976" y="0.1965730593607305">1.00</text><text x="-0.647259706190976" y="0.12899315068493145">1.50</text><text x="-0.647259706190976" y="6.1413242009132396e-2">2.00</text><text x="-0.647259706190976" y="-6.166666666666654e-3">2.50</text><text x="-0.647259706190976" y="-7.374657534246587e-2">3.00</text><text x="-0.647259706190976" y="-0.14132648401826486">3.50</text><text x="-0.647259706190976" y="-0.20890639269406397">4.00</text><text x="-0.647259706190976" y="-0.2764863013698632">4.50</text><text x="-0.647259706190976" y="-0.3440662100456622">5.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5894546169989507,0.32244063926940636+0.5902410807974814,0.32244063926940636"/><polyline points="-0.5894546169989507,0.25486073059360725+0.5902410807974814,0.25486073059360725"/><polyline points="-0.5894546169989507,0.18728082191780815+0.5902410807974814,0.18728082191780815"/><polyline points="-0.5894546169989507,0.11970091324200904+0.5902410807974814,0.11970091324200904"/><polyline points="-0.5894546169989507,5.212100456620994e-2+0.5902410807974814,5.212100456620994e-2"/><polyline points="-0.5894546169989507,-1.5458904109589167e-2+0.5902410807974814,-1.5458904109589167e-2"/><polyline points="-0.5894546169989507,-8.303881278538816e-2+0.5902410807974814,-8.303881278538816e-2"/><polyline points="-0.5894546169989507,-0.15061872146118727+0.5902410807974814,-0.15061872146118727"/><polyline points="-0.5894546169989507,-0.21819863013698648+0.5902410807974814,-0.21819863013698648"/><polyline points="-0.5894546169989507,-0.2857785388127855+0.5902410807974814,-0.2857785388127855"/><polyline points="-0.5894546169989507,-0.35335844748858447+0.5902410807974814,-0.35335844748858447"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6063635886673662" width="3.1458551941236923e-3" y="-0.3547100456621005" height="0.6785022831050228"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5894546169989507,0.362783105022831+-0.5894546169989507,0.332783105022831"/><polyline points="-0.39283866736621204,0.362783105022831+-0.39283866736621204,0.332783105022831"/><polyline points="-0.19622271773347333,0.362783105022831+-0.19622271773347333,0.332783105022831"/><polyline points="3.932318992654338e-4,0.362783105022831+3.932318992654338e-4,0.332783105022831"/><polyline points="0.1970091815320042,0.362783105022831+0.1970091815320042,0.332783105022831"/><polyline points="0.39362513116474274,0.362783105022831+0.39362513116474274,0.332783105022831"/><polyline points="0.5902410807974814,0.362783105022831+0.5902410807974814,0.332783105022831"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5894546169989507" y="0.39069634703196343">0.00</text><text x="-0.39283866736621204" y="0.39069634703196343">0.50</text><text x="-0.19622271773347333" y="0.39069634703196343">1.00</text><text x="3.932318992654338e-4" y="0.39069634703196343">1.50</text><text x="0.1970091815320042" y="0.39069634703196343">2.00</text><text x="0.39362513116474274" y="0.39069634703196343">2.50</text><text x="0.5902410807974814" y="0.39069634703196343">3.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5894546169989507,0.32244063926940636+-0.5894546169989507,-0.35335844748858447"/><polyline points="-0.39283866736621204,0.32244063926940636+-0.39283866736621204,-0.35335844748858447"/><polyline points="-0.19622271773347333,0.32244063926940636+-0.19622271773347333,-0.35335844748858447"/><polyline points="3.932318992654338e-4,0.32244063926940636+3.932318992654338e-4,-0.35335844748858447"/><polyline points="0.1970091815320042,0.32244063926940636+0.1970091815320042,-0.35335844748858447"/><polyline points="0.39362513116474274,0.32244063926940636+0.39362513116474274,-0.35335844748858447"/><polyline points="0.5902410807974814,0.32244063926940636+0.5902410807974814,-0.35335844748858447"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5910275445960127" width="1.1828415529905558" y="0.33426712328767116" height="2.7031963470319775e-3"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="7.864637985309549e-2" fill-opacity="1.0" text-anchor="middle"><text x="-4.620474816369369e-2" y="-0.4184041095890413">Line Chart</text></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.718782791185729e-2" fill-opacity="1.0" text-anchor="end"><text x="0.6256319517313744" y="0.46030365296803655">Made with love and chart-svg</text></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(99%, 99%, 99%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.33464034627492123" width="0.3794687827911858" y="7.746347031963463e-2" height="0.1790867579908676"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.22951826484018256">palette1 2</text></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="0.5705794858342077,0.2210707762557077+0.6885490556138509,0.2210707762557077"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.1754543378995433">palette1 1</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="0.5705794858342077,0.16700684931506843+0.6885490556138509,0.16700684931506843"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.12139041095890407">palette1 0</text></g><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="0.5705794858342077,0.11294292237442916+0.6885490556138509,0.11294292237442916"/></g></g></g><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.7495" width="1.499" y="-0.49950000000000006" height="0.9990000000000001"/></g></g></g><g class="glyphize"><g class="chart"><g class="line"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.18728082191780815" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.18728082191780815" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.1970091815320042" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="0.511594700944386" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.21819863013698648" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.32244063926940636" cx="-0.39283866736621204" r="5.0e-3"/></g></g><g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.5458904109589056e-2" cx="3.932318992654338e-4" r="5.0e-3"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.5458904109589056e-2" cx="-2.5560073452257637e-3" r="5.0e-3"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="0.25486073059360725" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="0.18728082191780815" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="0.11970091324200904" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="5.212100456620994e-2" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-1.5458904109589167e-2" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.15061872146118727" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.21819863013698648" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.2857785388127855" cx="-0.6189470094438615" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.6189470094438615" r="5.0e-3"/></g></g><g class="ticktext"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.33173287671232876" cx="-0.647259706190976" r="5.0e-3"/><circle cy="0.26415296803652966" cx="-0.647259706190976" r="5.0e-3"/><circle cy="0.1965730593607305" cx="-0.647259706190976" r="5.0e-3"/><circle cy="0.12899315068493145" cx="-0.647259706190976" r="5.0e-3"/><circle cy="6.1413242009132396e-2" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-6.166666666666654e-3" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-7.374657534246587e-2" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.14132648401826486" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.20890639269406397" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.2764863013698632" cx="-0.647259706190976" r="5.0e-3"/><circle cy="-0.3440662100456622" cx="-0.647259706190976" r="5.0e-3"/></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.5902410807974814" r="5.0e-3"/><circle cy="0.25486073059360725" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.25486073059360725" cx="0.5902410807974814" r="5.0e-3"/><circle cy="0.18728082191780815" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.18728082191780815" cx="0.5902410807974814" r="5.0e-3"/><circle cy="0.11970091324200904" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.11970091324200904" cx="0.5902410807974814" r="5.0e-3"/><circle cy="5.212100456620994e-2" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="5.212100456620994e-2" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-1.5458904109589167e-2" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-1.5458904109589167e-2" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-8.303881278538816e-2" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.15061872146118727" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.15061872146118727" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.21819863013698648" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.21819863013698648" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.2857785388127855" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.2857785388127855" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.5902410807974814" r="5.0e-3"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-1.5458904109589167e-2" cx="-0.6047906610703043" r="5.0e-3"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.347783105022831" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.347783105022831" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.347783105022831" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="0.347783105022831" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="0.347783105022831" cx="0.1970091815320042" r="5.0e-3"/><circle cy="0.347783105022831" cx="0.39362513116474274" r="5.0e-3"/><circle cy="0.347783105022831" cx="0.5902410807974814" r="5.0e-3"/></g></g><g class="ticktext"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.39069634703196343" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.39069634703196343" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.39069634703196343" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="0.39069634703196343" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="0.39069634703196343" cx="0.1970091815320042" r="5.0e-3"/><circle cy="0.39069634703196343" cx="0.39362513116474274" r="5.0e-3"/><circle cy="0.39069634703196343" cx="0.5902410807974814" r="5.0e-3"/></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.32244063926940636" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.5894546169989507" r="5.0e-3"/><circle cy="0.32244063926940636" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.39283866736621204" r="5.0e-3"/><circle cy="0.32244063926940636" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="-0.19622271773347333" r="5.0e-3"/><circle cy="0.32244063926940636" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="3.932318992654338e-4" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.1970091815320042" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.1970091815320042" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.39362513116474274" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.39362513116474274" r="5.0e-3"/><circle cy="0.32244063926940636" cx="0.5902410807974814" r="5.0e-3"/><circle cy="-0.35335844748858447" cx="0.5902410807974814" r="5.0e-3"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.33561872146118715" cx="3.9323189926521174e-4" r="5.0e-3"/></g></g></g><g class="title"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.4184041095890413" cx="-4.620474816369369e-2" r="5.0e-3"/></g></g><g class="title"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.46030365296803655" cx="0.6256319517313744" r="5.0e-3"/></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5243747376705139" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5243747376705139" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5243747376705139" r="5.0e-3"/></g></g><g class="legendContent"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.22951826484018256" cx="0.3543019412381947" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.2210707762557077" cx="0.5705794858342077" r="5.0e-3"/><circle cy="0.2210707762557077" cx="0.6885490556138509" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.1754543378995433" cx="0.3543019412381947" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.16700684931506843" cx="0.5705794858342077" r="5.0e-3"/><circle cy="0.16700684931506843" cx="0.6885490556138509" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.12139041095890407" cx="0.3543019412381947" r="5.0e-3"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.11294292237442916" cx="0.5705794858342077" r="5.0e-3"/><circle cy="0.11294292237442916" cx="0.6885490556138509" r="5.0e-3"/></g></g></g><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.0" cx="0.0" r="5.0e-3"/></g></g></g></g><g class="rectangularize"><g class="chart"><g class="line"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5969496169989507" width="0.8014537985309547" y="-0.3608509474885845" height="0.5556242694063926"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5969496169989507" width="1.1160393179433363" y="-9.053131278538817e-2" height="0.42046445205479455"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.40033366736621206" width="1.4990000000000003e-2" y="-0.2256911301369866" height="0.555624269406393"/></g></g><g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5894546169989507" width="1.1796956977964321" y="-0.35335844748858447" height="0.6757990867579908"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5953530954879329" width="1.1855941762854143" y="-0.3584269406392694" height="0.6859360730593607"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.6359356761105283" width="3.3977333333333415e-2" y="-0.35735444748858447" height="0.6837910867579908"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.647259706190976" y="0.33173287671232876">0.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="0.3002546631761273" height="4.3294832109129044e-2"/></g><text x="-0.647259706190976" y="0.26415296803652966">0.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="0.23267475450032818" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="0.1965730593607305">1.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="0.16509484582452902" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="0.12899315068493145">1.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="9.751493714872997e-2" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="6.1413242009132396e-2">2.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="2.993502847293093e-2" height="4.329483210912906e-2"/></g><text x="-0.647259706190976" y="-6.166666666666654e-3">2.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-3.7644880202868124e-2" height="4.3294832109129065e-2"/></g><text x="-0.647259706190976" y="-7.374657534246587e-2">3.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.10522478887866735" height="4.329483210912908e-2"/></g><text x="-0.647259706190976" y="-0.14132648401826486">3.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.17280469755446634" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="-0.20890639269406397">4.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.24038460623026545" height="4.329483210912907e-2"/></g><text x="-0.647259706190976" y="-0.2764863013698632">4.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.30796451490606463" height="4.3294832109129044e-2"/></g><text x="-0.647259706190976" y="-0.3440662100456622">5.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7180611096537252" width="7.082106505771246e-2" y="-0.37554442358186363" height="4.3294832109129044e-2"/></g></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.591952950332284" width="1.1846923644630987" y="-0.3558559474885844" height="0.6807940867579907"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.6063635886673662" width="3.1458551941236923e-3" y="-0.3547100456621005" height="0.6785022831050228"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.593451950332284" width="1.1876903644630987" y="0.33080010502283097" height="3.396600000000005e-2"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5894546169989507" y="0.39069634703196343">0.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.6248651495278069" width="7.082106505771235e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="-0.39283866736621204" y="0.39069634703196343">0.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.42824919989506827" width="7.082106505771246e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="-0.19622271773347333" y="0.39069634703196343">1.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.2316332502623296" width="7.082106505771252e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="3.932318992654338e-4" y="0.39069634703196343">1.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-3.501730062959081e-2" width="7.082106505771249e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="0.1970091815320042" y="0.39069634703196343">2.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.16159864900314794" width="7.082106505771252e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="0.39362513116474274" y="0.39069634703196343">2.50</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.3582145986358865" width="7.082106505771246e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g><text x="0.5902410807974814" y="0.39069634703196343">3.00</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5548305482686252" width="7.082106505771235e-2" y="0.359218133495762" height="4.3294832109129044e-2"/></g></g></g><g class="ticklines"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.591952950332284" width="1.1846923644630987" y="-0.3558559474885844" height="0.6807940867579907"/></g></g></g><g class="axisbar"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5910275445960127" width="1.1828415529905558" y="0.33426712328767116" height="2.7031963470319775e-3"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="7.864637985309549e-2" fill-opacity="1.0" text-anchor="middle"><text x="-4.620474816369369e-2" y="-0.4184041095890413">Line Chart</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="7.864637985309549e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.2231984260230851" width="0.3539873557187828" y="-0.48136053666144424" height="8.658966421825814e-2"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.718782791185729e-2" fill-opacity="1.0" text-anchor="end"><text x="0.6256319517313744" y="0.46030365296803655">Made with love and chart-svg</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.7187827911857296e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="3.104172612801656e-2" width="0.5946138195173137" y="0.42252979672459473" height="5.195379853095494e-2"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.3307080272822662" width="0.3873334207764956" y="7.408447488584469e-2" height="0.18584474885844748"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.33464034627492123" width="0.3794687827911858" y="7.746347031963463e-2" height="0.1790867579908676"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.3333911796082545" width="0.3819671161245193" y="7.621472031963467e-2" height="0.18158425799086753"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.22951826484018256">palette1 2</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.35428227964323145" width="0.17699367785939135" y="0.19804005130398109" height="4.329483210912907e-2"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5630844858342079" width="0.13295956977964285" y="0.2135782762557077" height="1.4985000000000026e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.1754543378995433">palette1 1</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.35428227964323145" width="0.17699367785939135" y="0.1439761243633418" height="4.329483210912907e-2"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5630844858342079" width="0.13295956977964285" y="0.15951434931506842" height="1.4985000000000026e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.932318992654774e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3543019412381947" y="0.12139041095890407">palette1 0</text><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="3.9323189926547745e-5" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.35428227964323145" width="0.17699367785939135" y="8.99121974227026e-2" height="4.329483210912907e-2"/></g></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.5630844858342079" width="0.13295956977964285" y="0.10545042237442914" height="1.4985000000000026e-2"/></g></g></g><g class="frame"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(5%, 5%, 5%)" stroke-width="1.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.7495" width="1.499" y="-0.49950000000000006" height="0.9990000000000001"/></g></g></g></g></g><g class="hud"></g></svg>
other/ellipse.svg view
@@ -1,233 +1,261 @@-<svg height="300.0" width="261.40560441808134" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-1.65753 -1.53175 3.19503 3.6667500000000004"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.5" y="-1.5" width="3.0" x="-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,2.0-1.5,2.0"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,1.5-1.5,1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,0.9999999999999998-1.5,0.9999999999999998"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,0.4999999999999998-1.5,0.4999999999999998"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-0.0-1.5,-0.0"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-0.49999999999999956-1.5,-0.49999999999999956"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-1.0-1.5,-1.0"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,-1.5-1.5,-1.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.0145" x="-1.5575299999999999">-2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="1.5145" x="-1.5575299999999999">-1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="1.0145" x="-1.5575299999999999">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5144999999999997" x="-1.5575299999999999">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="1.4499999999999957e-2" x="-1.5575299999999999">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4854999999999996" x="-1.5575299999999999">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.9855" x="-1.5575299999999999">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-1.4855" x="-1.5575299999999999">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -1.5265, 2.0)"><polyline points="-1.5265,2.015--1.5265,1.985"/></g><g transform="rotate(-90.0, -1.5265, 1.5)"><polyline points="-1.5265,1.515--1.5265,1.485"/></g><g transform="rotate(-90.0, -1.5265, 0.9999999999999998)"><polyline points="-1.5265,1.0149999999999997--1.5265,0.9849999999999998"/></g><g transform="rotate(-90.0, -1.5265, 0.4999999999999998)"><polyline points="-1.5265,0.5149999999999998--1.5265,0.48499999999999976"/></g><g transform="rotate(-90.0, -1.5265, -0.0)"><polyline points="-1.5265,1.5e-2--1.5265,-1.5e-2"/></g><g transform="rotate(-90.0, -1.5265, -0.49999999999999956)"><polyline points="-1.5265,-0.48499999999999954--1.5265,-0.5149999999999996"/></g><g transform="rotate(-90.0, -1.5265, -1.0)"><polyline points="-1.5265,-0.985--1.5265,-1.015"/></g><g transform="rotate(-90.0, -1.5265, -1.5)"><polyline points="-1.5265,-1.485--1.5265,-1.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.5" y="-1.5" width="4.0000000000000036e-3" x="-1.514"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.5,2.0--1.5,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.0,2.0--1.0,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5,2.0--0.5,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.220446049250313e-16,2.0-2.220446049250313e-16,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.5,2.0-0.5,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="1.0,2.0-1.0,-1.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="1.5,2.0-1.5,-1.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="-1.5">-1.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="-1.0">-1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="-0.5">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="2.220446049250313e-16">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="0.5">0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="1.0">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.10875" x="1.5">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-1.5,2.0415--1.5,2.0115"/><polyline points="-1.0,2.0415--1.0,2.0115"/><polyline points="-0.5,2.0415--0.5,2.0115"/><polyline points="2.220446049250313e-16,2.0415-2.220446049250313e-16,2.0115"/><polyline points="0.5,2.0415-0.5,2.0115"/><polyline points="1.0,2.0415-1.0,2.0115"/><polyline points="1.5,2.0415-1.5,2.0115"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="4.0000000000000036e-3" y="2.01" width="3.0" x="-1.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="1.0,-0.0-0.9940146461148016,6.427210796446392e-2-0.9854684971040975,0.12920580153034256-0.9743808284486222,0.19465462547461154-0.9607766479200981,0.2604709627192794-0.9446866391772537,0.3265063672755135-0.9261470925601185,0.3926118990573495-0.9051998232386831,0.45863845980980367-0.8818920769005372,0.5244371293937398-0.8562764231902009,0.5898595016689936-0.8284106371404976,0.6547580192182041-0.7983575688633873,0.718986306156377-0.7661850017941774,0.7823994982755582-0.731965499808827,0.8448545697799767-0.6957762435591621,0.9062106558747356-0.6576988563951605,0.9663293704804432-0.6178192202669006,1.0250751183572173-0.5762272820214287,1.0823154009340614-0.533016850531415,1.1379211151538344-0.48828538511317676,1.1917668446597856-0.4421337757112749,1.2437311426668827-0.39466611534547713,1.2936968058799507-0.3459894653333131,1.3415511388407824-0.2962136138177678,1.3871862081080222-0.2454508281447203,1.430499085696519-0.19381560164866296,1.4713920812270747-0.14142439541777652,1.509772962263005-8.839537562083555e-2,1.545555162336529-3.484814698836969e-2,1.5786579761958064--1.9096516950796172e-2,1.6090067418322525--7.331694626916585e-2,1.6365330088775658--0.12769084906199346,1.6611746929906617--0.18209558727154862,1.6828762158863042--0.2364084532921109,1.7015886306895947--0.2905069467318284,1.7172697323335975--0.3442690507072199,1.7298841527510982--0.39757350704712957,1.7394034406457946--0.4503000897854581,1.7458061256630064--0.5023298763257824,1.7490777668151547--0.5535455156662832,1.7492109850528088--0.6038314930800136,1.7462054799078195--0.6530743906535195,1.7400680301710143--0.7011631430961871,1.7308124786029173--0.7479892882433502,1.7184597007119844--0.7934472116881531,1.7030375576707695--0.8374343849904167,1.6845808334762182--0.8798515969252383,1.6631311564958182--0.9206031772497455,1.6387369055765684--0.9595972124833211,1.6114531009285114--0.9967457532146013,1.5813412800289606--1.0319650124676871,1.5484693588272997--1.0651755546801553,1.5129114785634061--1.0963024748666366,1.4747478385451962--1.1252755675638715,1.4340645152624427--1.1520294851761868,1.39095326824487--1.176503885364259,1.3455113331023756--1.1986435671447302,1.297841202214192--1.2183985953937095,1.2480503935616252--1.2357244134733536,1.1962512082257508--1.250581943727494,1.1425604770970392--1.262937675619652,1.0870992973681812--1.2727637413146469,1.0299927594044442--1.2800379785333331,0.9713696646076038--1.2847439805386887,0.9113622349097761--1.2868711331405236,0.8501058145524012--1.2864146386353401,0.7877385648229778--1.2833755266273537,0.7244011524380727--1.277760651706261,0.6602364322754444--1.2695826779870025,0.5953891251708501--1.2588600505463818,0.5300054915062731--1.2456169538209676,0.4642330013257634--1.2298832570601115,0.3982200017229365--1.2116944469571096,0.3321153822503289--1.1910915476104509,0.26606823910524224--1.1681210279956875,0.20022753884954092--1.142834697156606,0.134741782421806--1.1152895873521018,6.975867019969728e-2--1.0855478254223112,5.42476886794363e-3--1.0536764926641298,-5.81148191566605e-2--1.0197474735321572,-0.12071678299768429--0.9838372935063279,-0.18223992655072063--0.9460269464918963,-0.24254548694528744--0.9064017121410812,-0.3014974475186629--0.8650509635083893,-0.3589628445957551--0.8220679654734303,-0.41481206738311327--0.7775496643859012,-0.4689191503006187--0.7315964694071552,-0.5211620570915811--0.6843120260415458,-0.5714229560703967--0.6358029823683445,-0.6195884858869647--0.5861787485014645,-0.6655500112084738--0.5355512498195376,-0.7092038677418304--0.48403467452291715,-0.7504515960441251--0.4317452160869837,-0.7892001635937813--0.37880081119262377,-0.8253621746215027--0.3253208737250024,-0.8588560672277716--0.2714260254405454,-0.8896062973422842--0.2172378239096271,-0.9175435091104465--0.162878488348571,-0.9426046913225816--0.10847062395932561,-0.9647333195330816--5.4136945398582714e-2,-0.98387948354892-2.220446049250313e-16,-1.0"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="0.6086376856300113,-0.9414395063606076-0.5527795469220069,-0.9702714111607404-0.4941819474107332,-0.9938628196756247-0.43307614505076697,-1.01212062739374-0.3697032965274347,-1.0249727790892234-0.3043135055215591,-1.0323685531909215-0.23716483566448598,-1.034278761957263-0.16852229207883185,-1.0306958666669384-9.865677552433416e-2,-1.0216340073707895-2.784401327631536e-2,-1.0071289470874882--4.363652904390536e-2,-0.9872379306632411--0.11550275039214353,-0.9620394588525345--0.18747102762529155,-0.931632978511518--0.25925733483228797,-0.896138490126698--0.3305783642546314,-0.8556960742278399--0.4011526443726703,-0.8104653385541138--0.4707016507451012,-0.7606247881552686--0.5389509052176902,-0.7063711209137438--0.6056310591631523,-0.647918451268001--0.6704789564771294,-0.5854974652006466--0.73323867213511,-0.5193545098262526--0.7936625222115783,-0.44975062117184006--0.8515120413753138,-0.3769604939869362--0.9065589240031089,-0.3012713976488932--0.9585859251977599,-0.222982042441898--1.0073877181544273,-0.14240140068395002--1.0527717044917297,-5.984748735427292e-2--1.0945587743495653,2.4353894966515188e-2--1.132584013253901,0.10987044189034756--1.1666973529588605,0.19636465867530917--1.1967641636975312,0.2834951921631992--1.2226657855041465,0.3709181779444952--1.2442999965107613,0.4582885974340818--1.261581416370263,0.5452616395019807--1.2744418432135962,0.6314940612853532--1.2828305228113805,0.7166455428112668--1.2867143488776662,0.8003800300841508--1.2860779937253213,0.8823670613373866--1.280923968757409,0.9622830712149293--1.2712726145558277,1.0398126677359452--1.2571620206063265,1.1146498770028685--1.2386478749767074,1.1864993507405917--1.2158032445414615,1.2550775319011742--1.188718286620198,1.3201137737339654--1.1574998931678915,1.3813514079046847--1.1222712689211713,1.438548757448074--1.0831714451655121,1.4914800905564687--1.0403547310422663,1.5399365114401158--0.993990104560983,1.5837267847434204--0.944260545720401,1.6226780902635274--0.891362314369989,1.656636704992708--0.8355041756619843,1.6854686097928409--0.7769065761507113,1.7090600183077247--0.7158007737907442,1.7273178260258404--0.6524279252674126,1.7401699777213235--0.5870381342615362,1.7475657518230217--0.5198894644044634,1.7494759605893633--0.4512469208188099,1.7458930652990385--0.38138140426431133,1.7368312060028896--0.3105686420162932,1.7223261457195886--0.23908809969607225,1.702435129295342--0.16722187834783409,1.6772366574846351--9.52536011146865e-2,1.6468301771436185--2.3467293907689424e-2,1.611335688758798-4.7853735514653994e-2,1.57089327285994-0.11842801563269267,1.5256625371862147-0.18797702200512378,1.475821986787368-0.25622627647771257,1.4215683195458442-0.32290643042317524,1.363115649900101-0.38775432773715246,1.3006946638327468-0.45051404339513246,1.234551708458353-0.5109378934716009,1.1649478198039402-0.5687874126353369,1.0921576926190362-0.6238342952631308,1.0164685962809936-0.6758612964577821,0.9381792410739984-0.7246630894144497,0.8575985993160504-0.7700470757517519,0.7750446859863742-0.8118341456095877,0.6908433036655852-0.8498593845139233,0.6053267567417535-0.8839727242188831,0.5188325399567908-0.9140395349575536,0.431702006468901-0.9399411567641689,0.34427902068760585-0.9615753677707835,0.25690860119802017-0.9788567876302863,0.16993555913011882-0.9917172144736188,8.370313734674673e-2-1.0001058940714032,-1.4483441791663942e-3-1.0039897201376888,-8.518283145204997e-2-1.0033533649853439,-0.16716986270528666-0.998199340017432,-0.24708587258282888-0.9885479858158499,-0.3246154691038452-0.9744373918663491,-0.39945267837076814-0.95592324623673,-0.47130215210849125-0.9330786158014837,-0.5398803332690743-0.9059936578802201,-0.604916575101865-0.8747752644279139,-0.6661542092725852-0.8395466401811942,-0.723351558815974-0.8004468164255343,-0.7762828919243687-0.7576301023022891,-0.8247393128080156-0.7112654758210062,-0.86852958611132-0.6615359169804229,-0.907480891631427-0.6086376856300113,-0.9414395063606076"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0000000000000027e-2" y="0.34259859931604997" width="3.0000000000000027e-2" x="-0.1563623143699885"/><rect height="3.0e-2" y="-1.5e-2" width="2.9999999999999916e-2" x="0.985"/><rect height="2.9999999999999916e-2" y="-1.015" width="3.0e-2" x="-1.4999999999999777e-2"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="2.749539690023556" y="-1.0" width="2.287006238108949" x="-1.2870062381089489"/></g><g stroke-dasharray="3.0e-2 1.0e-2" stroke-opacity="1.0" stroke-linecap="round" fill="none" stroke-width="5.0e-3" stroke="#e63305"><polyline points="0.6086376856300113,-0.9414395063606076--0.891362314369989,1.656636704992708"/></g><g stroke-dasharray="3.0e-2 1.0e-2" stroke-opacity="1.0" stroke-linecap="round" fill="none" stroke-width="5.0e-3" stroke="#e6e605"><polyline points="-1.0073877181544273,-0.14240140068395002-0.7246630894144497,0.8575985993160504"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="458.15392152217606" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7080296806108183 -0.46949693515431773 1.4696780298956873 0.9623477793311109" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="ellipse"><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.223887331075026,-3.2338301402926595e-2+0.22211215024874542,-1.8050870674847785e-2+0.2195774697347237,-3.6163721322803877e-3+0.21628900639857507,1.0932637818583113e-2+0.2122541772314619,2.556334449587111e-2+0.20748208262138101,4.024274895417046e-2+0.20198348582762138,5.4937742412265844e-2+0.19577078870468267,6.961518092860564e-2+0.1888580037304135,8.424196015607399e-2+0.1812607224014553,9.878509000745644e-2+0.1729960800672744,0.11321176906319891+0.1640827172821009,0.12748945855363364+0.15454073776193988,0.1415859557488101+0.14439166304148265,0.15546946659040178+0.13365838393318807,0.16910867740187208+0.12236510889801455,0.18247282551515775+0.11053730944425211,0.1955317686545776+9.820166267760311e-2,0.2082560529214712+8.538599113208833e-2,0.2206169792262318+7.21192000174895e-2,0.23258666801790007+5.843121202485968e-2,0.24413812216532182+4.435289983714863e-2,0.2552452878480457+2.9916016497160913e-2,0.2658831133196224+1.5153123789899303e-2,0.27602760541076804+9.751880082431441e-5,0.28565588364495254+-1.5216841184325536e-2,0.29474623184435317+-3.075541526876946e-2,0.30327814710978496+-4.6483156850226526e-2,0.3112323860641286+-6.236459266705857e-2,0.3185910082549615+-7.836390280672456e-2,0.3253374166184956+-9.444500149609109e-2,0.3314563949135587+-0.11057161849138003,0.33693414204118854+-0.12670738088418354,0.34175830317243294+-0.14281589513903287,0.345917997614148+-0.1588608291774915,0.34940384334994556+-0.1748059943236358,0.352207978200938+-0.19061542692609418,0.3543240775585523+-0.20625346947255635,0.3557473686494201+-0.22168485101379692,0.3564746413001677+-0.23687476671582108,0.3565042551778276+-0.25178895636070997,0.3558361434895403+-0.26639378161910443,0.35447181313320353+-0.28065630192004676,0.3524143412987266+-0.29454434874705726,0.3496683685275576+-0.30802659819287415,0.3462400882461376+-0.3210726416092128,0.3421372327968856+-0.3336530541921973,0.33736905599822564+-0.34573946134877126,0.3319463122729871+-0.3573046026944027,0.32588123239225436+-0.36832239353773844,0.31918749588937634+-0.3787679837135318,0.3118802002063522+-0.38861781363114806,0.3039758266421836+-0.39784966741223304,0.295492203179997+-0.4064427229976957,0.28644846427677406+-0.4143775991109887,0.2768650077063871+-0.4216363989717655,0.26676344855327505+-0.42820275066131774,0.25616657046052704+-0.43406184404875114,0.24509827424233083+-0.43920046419461517,0.2335835239766882+-0.4436070211566446,0.22164829069998443+-0.44727157613038804,0.2093194938304045+-0.4501858638657654,0.1966249404523141+-0.45234331130899175,0.18359326259854658+-0.4537390524278258,0.170253852672054+-0.4543699391867002,0.15663679715257472+-0.454234548646985,0.14277280873783976+-0.4533331861763652,0.1286931570723705+-0.45166788476009717,0.11442959822010795+-0.4492424004156956,0.10001430303994024+-0.44606220372139327,8.547978462568168e-2+-0.4421344674774816,7.085882497415069e-2+-0.4374680505283599,5.61844010467521e-2+-0.432073477781784,4.1489610391323595e-2+-0.4259629164703771,2.6807596492002483e-2+-0.4191501487089479,1.2171474015490069e-2+-0.4116505404095079,-2.385745877692913e-3+-0.40348100662410136,-1.6831229988493956e-2+-0.39465997339361436,-3.113239713323246e-2+-0.38520733618861325,-4.525699162909269e-2+-0.37514441503594353,-5.9173156045464914e-2+-0.3644939064323047,-7.284950305704352e-2+-0.3532798321532531,-8.62551862366232e-2+-0.3415274850730936,-9.935996962792293e-2+-0.3292633721178644,-0.11213429594151525+-0.31651515448007367,-0.12454935322005667+-0.303311585230043,-0.13657713982244568+-0.2896824444645611,-0.14819052758035212+-0.27565847213912414,-0.15936332298466382+-0.2612712987352564,-0.17007032626384544+-0.2465533739192841,-0.18028738822096946+-0.2315378933534744,-0.18999146470121597+-0.2162587238246108,-0.19916066856699688+-0.20075032685887717,-0.20777431906347799+-0.18504768099532748,-0.215812988463154+-0.16918620289326092,-0.22325854588427274+-0.15320166745142966,-0.23009419818427979+-0.13713012711925537,-0.23630452783604672+-0.12100783058204267,-0.2418755277014566+-0.10487114100358713,-0.24679463262391754+-8.875645401058674e-2,-0.2510507477685455+-7.27001156038285e-2,-0.2546342736461006"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.10781418152970379,-0.24161651177749155+9.12473587940632e-2,-0.24802572808665968+7.386804637350497e-2,-0.2532700031790618+5.574483247429951e-2,-0.25732864029678915+3.694924114199871e-2,-0.26018562185335337+1.7555449988702065e-2,-0.26182967264778134+-2.3600025520886803e-3,-0.2622543043626825+-2.2718519287699745e-2,-0.2614578411706743+-4.343975445349735e-2,-0.25944342634810613+-6.444193080091404e-2,-0.2562190098699838+-8.564216233488803e-2,-0.2517973170350509+-0.10695678142701942,-0.24619579824484772+-0.12830166901347467,-0.2394365601349484+-0.14959258657450153,-0.23154627833017072+-0.17074550858538184,-0.22255609216807126+-0.1916769541267892,-0.21250148180620654+-0.21230431634583985,-0.20142212819816008+-0.23254618846760045,-0.18936175649094789+-0.252322685070438,-0.17636796346183847+-0.271555757357283,-0.16249202967561827+-0.29016950117857426,-0.1477887171036305+-0.30809045659126,-0.13231605300329208+-0.32524789777163166,-0.11613510091101964+-0.34157411213783995,-9.930971965234714e-2+-0.3570046675805192,-8.1906311320317e-2+-0.37147866674688734,-6.399355921675498e-2+-0.38493898737477605,-4.564215679065575e-2+-0.39733250772810225,-2.6924528643436973e-2+-0.4086103162440926,-7.914544702124549e-3+-0.41872790456487485,1.1312771311500325e-2+-0.4276453431916336,3.068153796525719e-2+-0.435327439068099,5.0115315585911646e-2+-0.4417438744714624,6.953740793164315e-2+-0.4468693266625773,8.88711648770733e-2+-0.4506835678232417,0.10804028491629158+-0.4531715448861555,0.12696911629004115+-0.45432343894249994,0.14558295554865047+-0.4541347039926851,0.1638083423724201+-0.4526060848873329,0.1815733494859435+-0.4497436143876927,0.19880786652220378+-0.44555858935708803,0.2154438767161604+-0.4400675261773588,0.2314157253358478+-0.4332920955662472,0.24666037879160813+-0.42525903705297546,0.2611176734008706+-0.41600005344954,0.27473055282672243+-0.4055516857341965,0.2874452932532029+-0.39395516884091236,0.29921171540866065+-0.3812562689239204,0.3099833826004156+-0.36750510273961795,0.31971778397916795+-0.35275593985862375,0.328376502309901+-0.33706698848857775,0.3359253655871556+-0.3205001657529374,0.34233458189632376+-0.30312085333237876,0.34757885698872576+-0.28499763943317347,0.3516374941064532+-0.2662020481008727,0.3544944756630174+-0.24680825694757613,0.3561385264574453+-0.22689280440678533,0.3565631581723465+-0.20653428767117443,0.3557666949803383+-0.1858130525053766,0.35375228015777005+-0.16481087615796003,0.35052786367964783+-0.14361064462398615,0.34610617084471496+-0.12229602553185459,0.34050465205451175+-0.1009511379453995,0.33374541394461243+-7.966022038437237e-2,0.32585513213983475+-5.8507298373492056e-2,0.3168649459777353+-3.7575852832084644e-2,0.30681033561587057+-1.694849061303394e-2,0.295730982007824+3.2933815087263785e-3,0.2836706103006118+2.3069878111564135e-2,0.2706768172715023+4.2302950398409145e-2,0.2568008834852822+6.0916694219700473e-2,0.24209757091329454+7.883764963238604e-2,0.2266249068129561+9.599509081275781e-2,0.21044395472068356+0.11232130517896577,0.19361857346201117+0.12775186062164534,0.17621516512998092+0.14222585978801328,0.158302413026419+0.155686180415902,0.1399510106003199+0.1680797007692283,0.12123338245310095+0.17935750928521854,0.1022233985117888+0.1894750976060009,8.299608249816365e-2+0.19839253623275965,6.362731584440678e-2+0.20607463210922505,4.419353822375255e-2+0.2124910675125884,2.4771445878021103e-2+0.21761651970370344,5.4376889325906674e-3+0.22143076086436775,-1.37314311066275e-2+0.22391873792728167,-3.266026248037712e-2+0.2250706319836261,-5.127410173898639e-2+0.22488189703381123,-6.949948856275578e-2+0.22335327792845894,-8.726449567627947e-2+0.22049080742881888,-0.10449901271253981+0.21630578239821419,-0.12113502290649636+0.21081471921848483,-0.13710687152618373+0.20403928860737341,-0.15235152498194382+0.19600623009410156,-0.16680881959120653+0.1867472464906661,-0.1804216990170585+0.17629887877532258,-0.19313643944353887+0.16470236188203846,-0.2049028615989965+0.15200346196504644,-0.21567452879075155+0.13825229578074394,-0.22540893016950392+0.12350313289974968,-0.23406764850023698+0.10781418152970379,-0.24161651177749144"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="4.7154426904832014e-2" cx="-0.11462640347943698" r="1.5e-2"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.20888733107502566" width="3.0000000000000027e-2" y="-4.7338301402926594e-2" height="3.0e-2"/><rect x="-8.77001156038285e-2" width="3.0e-2" y="-0.2696342736461005" height="3.0000000000000027e-2"/></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.0e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="-0.4544100096243192" width="0.6782973406993452" y="-0.2546342736461006" height="0.6112115986149814"/></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.10781418152970379,-0.24161651177749155+-0.33706698848857775,0.3359253655871556"/></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="-0.37147866674688734,-6.399355921675498e-2+0.14222585978801328,0.158302413026419"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5175812856221098" width="0.8897623400365626" y="-0.3657822597676875" height="0.7780359028511088"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.5332829739756962, 0.4122536430834213)"><polyline points="-0.5332829739756962,0.4272536430834213+-0.5332829739756962,0.39725364308342126"/></g><g transform="rotate(-90.0, -0.5332829739756962, 0.30110565696183433)"><polyline points="-0.5332829739756962,0.31610565696183435+-0.5332829739756962,0.2861056569618343"/></g><g transform="rotate(-90.0, -0.5332829739756962, 0.1899576708402474)"><polyline points="-0.5332829739756962,0.2049576708402474+-0.5332829739756962,0.17495767084024738"/></g><g transform="rotate(-90.0, -0.5332829739756962, 7.880968471866046e-2)"><polyline points="-0.5332829739756962,9.380968471866045e-2+-0.5332829739756962,6.380968471866046e-2"/></g><g transform="rotate(-90.0, -0.5332829739756962, -3.2338301402926595e-2)"><polyline points="-0.5332829739756962,-1.7338301402926595e-2+-0.5332829739756962,-4.7338301402926594e-2"/></g><g transform="rotate(-90.0, -0.5332829739756962, -0.14348628752451342)"><polyline points="-0.5332829739756962,-0.1284862875245134+-0.5332829739756962,-0.15848628752451344"/></g><g transform="rotate(-90.0, -0.5332829739756962, -0.2546342736461005)"><polyline points="-0.5332829739756962,-0.23963427364610046+-0.5332829739756962,-0.2696342736461005"/></g><g transform="rotate(-90.0, -0.5332829739756962, -0.3657822597676875)"><polyline points="-0.5332829739756962,-0.3507822597676875+-0.5332829739756962,-0.38078225976768754"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.552125" y="0.4229516367476241">-2.00</text><text x="-0.552125" y="0.3118036506260371">-1.50</text><text x="-0.552125" y="0.20065566450445016">-1.00</text><text x="-0.552125" y="8.950767838286317e-2">-0.50</text><text x="-0.552125" y="-2.164030773872372e-2"> 0.00</text><text x="-0.552125" y="-0.13278829386031066"> 0.50</text><text x="-0.552125" y="-0.24393627998189782"> 1.00</text><text x="-0.552125" y="-0.35508426610348465"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5175812856221098,0.4122536430834213+0.3721810544144528,0.4122536430834213"/><polyline points="-0.5175812856221098,0.30110565696183433+0.3721810544144528,0.30110565696183433"/><polyline points="-0.5175812856221098,0.1899576708402474+0.3721810544144528,0.1899576708402474"/><polyline points="-0.5175812856221098,7.880968471866046e-2+0.3721810544144528,7.880968471866046e-2"/><polyline points="-0.5175812856221098,-3.2338301402926595e-2+0.3721810544144528,-3.2338301402926595e-2"/><polyline points="-0.5175812856221098,-0.14348628752451342+0.3721810544144528,-0.14348628752451342"/><polyline points="-0.5175812856221098,-0.2546342736461005+0.3721810544144528,-0.2546342736461005"/><polyline points="-0.5175812856221098,-0.3657822597676875+0.3721810544144528,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5249087401871169" width="2.093558447144872e-3" y="-0.3673383315733896" height="0.7811480464625131"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5175812856221098,0.4505947201689546+-0.5175812856221098,0.42059472016895455"/><polyline points="-0.3692875622826828,0.4505947201689546+-0.3692875622826828,0.42059472016895455"/><polyline points="-0.22099383894325564,0.4505947201689546+-0.22099383894325564,0.42059472016895455"/><polyline points="-7.27001156038285e-2,0.4505947201689546+-7.27001156038285e-2,0.42059472016895455"/><polyline points="7.559360773559864e-2,0.4505947201689546+7.559360773559864e-2,0.42059472016895455"/><polyline points="0.22388733107502568,0.4505947201689546+0.22388733107502568,0.42059472016895455"/><polyline points="0.3721810544144528,0.4505947201689546+0.3721810544144528,0.42059472016895455"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5175812856221098" y="0.485">-1.50</text><text x="-0.3692875622826828" y="0.485">-1.00</text><text x="-0.22099383894325564" y="0.485">-0.50</text><text x="-7.27001156038285e-2" y="0.485"> 0.00</text><text x="7.559360773559864e-2" y="0.485"> 0.50</text><text x="0.22388733107502568" y="0.485"> 1.00</text><text x="0.3721810544144528" y="0.485"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5175812856221098,0.4122536430834213+-0.5175812856221098,-0.3657822597676875"/><polyline points="-0.3692875622826828,0.4122536430834213+-0.3692875622826828,-0.3657822597676875"/><polyline points="-0.22099383894325564,0.4122536430834213+-0.22099383894325564,-0.3657822597676875"/><polyline points="-7.27001156038285e-2,0.4122536430834213+-7.27001156038285e-2,-0.3657822597676875"/><polyline points="7.559360773559864e-2,0.4122536430834213+7.559360773559864e-2,-0.3657822597676875"/><polyline points="0.22388733107502568,0.4122536430834213+0.22388733107502568,-0.3657822597676875"/><polyline points="0.3721810544144528,0.4122536430834213+0.3721810544144528,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5186280648456822" width="0.8918558984837076" y="0.4200340021119324" height="3.1121436114043832e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.4408759409613934" width="0.2211321109796751" y="-0.35907170010559686" height="0.45515100316789886"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="6.495786694825767e-2">Bounding Box</text></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.5e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="0.621445357027637" width="1.308474029465545e-2" y="4.55069693769799e-2" height="1.945089757127777e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="2.714994720168895e-3">Endpoints</text></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.6154877271749648" width="2.499999999999991e-2" y="-1.9510454065469907e-2" height="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-5.952787750791977e-2">Centroid</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-6.925332629355863e-2" cx="0.6279877271749648" r="1.25e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.12177074973600843">Arc</text></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.1314961985216474+0.6476148376169477,-0.1314961985216474"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.1840136219640971">Full Ellipse</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.19373907074973606+0.6476148376169477,-0.19373907074973606"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.24625649419218587">Minor Axis</text></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.25598194297782484+0.6476148376169477,-0.25598194297782484"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.6169480589310668e-2" fill-opacity="1.0" text-anchor="start"><text x="0.4539606812560488" y="-0.30849936642027465">Major Axis</text></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.621445357027637,-0.3182248152059134+0.6476148376169477,-0.3182248152059134"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.1871168942897066e-2" fill-opacity="1.0" text-anchor="middle"><text x="2.680933433702537e-2" y="-0.43600000000000005">ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)</text></g></g></g></svg>
+ other/ellipse2.svg view
@@ -0,0 +1,261 @@+<svg xmlns="http://www.w3.org/2000/svg" width="597.6099976648998" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.9544783312696444 -0.48029831412515483 1.9435885322411657 0.975680731498238" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="ellipse"><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.3471595667841385,-3.2338301402926595e-2+0.34439768046583885,-1.8050870674847785e-2+0.3404541388675415,-3.6163721322803877e-3+0.3353378364819595,1.0932637818583113e-2+0.3290603129145857,2.556334449587111e-2+0.3216357268565957,4.024274895417046e-2+0.31308082415051475,5.4937742412265844e-2+0.3034149000206692,6.961518092860564e-2+0.2926597555536212,8.424196015607399e-2+0.28083964852672905,9.878509000745644e-2+0.2679812386957485,0.11321176906319891+0.25411352766487183,0.12748945855363364+0.23926779347482552,0.1415859557488101+0.22347752005656019,0.15546946659040178+0.20677832170965083,0.16910867740187208+0.18920786277573298,0.18247282551515775+0.1708057726881651,0.1955317686545776+0.1516135565894987,0.2082560529214712+0.1316745017183728,0.2206169792262318+0.11103357977695993,0.23258666801790007+8.973734549917989e-2,0.24413812216532182+6.78338316484478e-2,0.2552452878480457+4.537244068179125e-2,0.2658831133196224+2.2403833324679656e-2,0.27602760541076804+-1.0201856921179253e-3,0.28565588364495254+-2.4846784475928807e-2,0.29474623184435317+-4.9022223132299425e-2,0.30327814710978496+-7.349197497306958e-2,0.3112323860641286+-9.820084949903274e-2,0.3185910082549615+-0.12309311687979396,0.3253374166184956+-0.14811263365006366,0.3314563949135587+-0.17320296933888957,0.33693414204118854+-0.1983075337462198,0.34175830317243294+-0.22336970457972305,0.345917997614148+-0.24833295516399645,0.34940384334994556+-0.2731409819341122,0.352207978200938+-0.2977378314259447,0.3543240775585523+-0.32206802647686594,0.3557473686494201+-0.346076691352158,0.3564746413001677+-0.3697096755149301,0.3565042551778276+-0.3929136757603872,0.3558361434895403+-0.4156363564389704,0.35447181313320353+-0.43782646749722137,0.3524143412987266+-0.4594339600701289,0.3496683685275576+-0.48041009936424467,0.3462400882461376+-0.5007075745769665,0.3421372327968856+-0.5202806056040705,0.33736905599822564+-0.5390850462948154,0.3319463122729871+-0.5570784840217349,0.32588123239225436+-0.5742203353405408,0.31918749588937634+-0.590471937524379,0.3118802002063522+-0.6057966357659896,0.3039758266421836+-0.6201598658510872,0.295492203179997+-0.633529232116497,0.28644846427677406+-0.6458745805172142,0.2768650077063871+-0.657168066637589,0.26676344855327505+-0.6673842184932376,0.25616657046052704+-0.6764999939820354,0.24509827424233083+-0.6844948328546122,0.2335835239766882+-0.691350703087132,0.22164829069998443+-0.6970521415517674,0.2093194938304045+-0.701586288893135,0.1966249404523141+-0.7049429185320335,0.18359326259854658+-0.7071144597310632,0.170253852672054+-0.7080960146701072,0.15663679715257472+-0.7078853694931591,0.14277280873783976+-0.7064829993015829,0.1286931570723705+-0.7038920670825409,0.11442959822010795+-0.7001184165750101,0.10001430303994024+-0.6951705590894723,8.547978462568168e-2+-0.6890596543110119,7.085882497415069e-2+-0.6817994851291126,5.61844010467521e-2+-0.6734064265509295,4.1489610391323595e-2+-0.6638994087681459,2.6807596492002483e-2+-0.6532998744607208,1.2171474015490069e-2+-0.6416317304338225,-2.385745877692913e-3+-0.6289212936970329,-1.6831229988493956e-2+-0.6151972321074346,-3.113239713323246e-2+-0.6004904997104632,-4.525699162909269e-2+-0.5848342669243538,-5.9173156045464914e-2+-0.5682638457256555,-7.284950305704352e-2+-0.5508166100045472,-8.62551862366232e-2+-0.5325319112695963,-9.935996962792293e-2+-0.5134509898920827,-0.11213429594151525+-0.49361688209006677,-0.12454935322005667+-0.4730743228620086,-0.13657713982244568+-0.4518696450888526,-0.14819052758035212+-0.4300506750321561,-0.15936332298466382+-0.40766662446396545,-0.17007032626384544+-0.38476797967172366,-0.18028738822096946+-0.361406387588569,-0.18999146470121597+-0.3376345393058412,-0.19916066856699688+-0.3135060512305369,-0.20777431906347799+-0.28907534415574787,-0.215812988463154+-0.2643975205168486,-0.22325854588427274+-0.23952824011026097,-0.23009419818427979+-0.21452359455511694,-0.23630452783604672+-0.18943998078096735,-0.2418755277014566+-0.16433397382686732,-0.24679463262391754+-0.13926219923875294,-0.2510507477685455+-0.11428120535289066,-0.2546342736461006"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.16656903825591596,-0.24161651177749155+0.1407938156003571,-0.24802572808665968+0.11375449403649895,-0.2532700031790618+8.555778541346293e-2,-0.25732864029678915+5.63149692583339e-2,-0.26018562185335337+2.614145360670339e-2,-0.26182967264778134+-4.843680460118738e-3,-0.2622543043626825+-3.6518148773732606e-2,-0.2614578411706743+-6.875694667839238e-2,-0.25944342634810613+-0.10143284236727412,-0.2562190098699838+-0.13441687900829014,-0.2517973170350509+-0.16757888367779195,-0.24619579824484772+-0.2007879810936275,-0.2394365601349484+-0.23391311012008986,-0.23154627833017072+-0.26682354100634387,-0.22255609216807126+-0.2993893913170266,-0.21250148180620654+-0.3314821385188843,-0.20142212819816008+-0.3629751272004923,-0.18936175649094789+-0.3937440689233023,-0.17636796346183847+-0.42366753273132673,-0.16249202967561827+-0.45262742438364556,-0.1477887171036305+-0.48050945241842324,-0.13231605300329208+-0.5072035792090932,-0.11613510091101964+-0.5326044552325992,-9.930971965234714e-2+-0.5566118348358332,-8.1906311320317e-2+-0.5791309718594293,-6.399355921675498e-2+-0.6000729935575706,-4.564215679065575e-2+-0.6193552513381141,-2.6924528643436973e-2+-0.6369016469388257,-7.914544702124549e-3+-0.652642932752455,1.1312771311500325e-2+-0.6665169851154051,3.068153796525719e-2+-0.678469049481451,5.0115315585911646e-2+-0.6884519565129188,6.953740793164315e-2+-0.6964263082365114,8.88711648770733e-2+-0.7023606335291108,0.10804028491629158+-0.7062315123199225,0.12696911629004115+-0.7080236680187952,0.14558295554865047+-0.707730027805944,0.1638083423724201+-0.705351750545137,0.1815733494859435+-0.7008982222101914,0.19880786652220378+-0.6943870188428215,0.2154438767161604+-0.6858438371880327,0.2314157253358478+-0.6753023932808077,0.24666037879160813+-0.6628042893843209,0.2611176734008706+-0.648398849804811,0.27473055282672243+-0.6321429262310793,0.2874452932532029+-0.6141006733668462,0.29921171540866065+-0.5943432957414451,0.3099833826004156+-0.572948766698077,0.31971778397916795+-0.5500015206686448,0.328376502309901+-0.5255921199496276,0.3359253655871556+-0.49981689729406864,0.34233458189632376+-0.47277757573021034,0.34757885698872576+-0.4445808671071745,0.3516374941064532+-0.4153380509520453,0.3544944756630174+-0.38516453530041506,0.3561385264574453+-0.35417940123359265,0.3565631581723465+-0.32250493291997895,0.3557666949803383+-0.29026613501531906,0.35375228015777005+-0.25759023932643754,0.35052786367964783+-0.22460620268542153,0.34610617084471496+-0.1914441980159195,0.34050465205451175+-0.15823510060008417,0.33374541394461243+-0.12510997157362158,0.32585513213983475+-9.219954068736758e-2,0.3168649459777353+-5.963369037668487e-2,0.30681033561587057+-2.7540943174827026e-2,0.295730982007824+3.952045506780855e-3,0.2836706103006118+3.472098722959105e-2,0.2706768172715023+6.46444510376154e-2,0.2568008834852822+9.360434268993423e-2,0.24209757091329454+0.1214863707247118,0.2266249068129561+0.14818049751538176,0.21044395472068356+0.17358137353888758,0.19361857346201117+0.19758875314212188,0.17621516512998092+0.22010789016571786,0.158302413026419+0.24104991186385893,0.1399510106003199+0.26033216964440276,0.12123338245310095+0.2778785652451141,0.1022233985117888+0.29361985105874355,8.299608249816365e-2+0.3074939034216937,6.362731584440678e-2+0.3194459677877395,4.419353822375255e-2+0.32942887481920713,2.4771445878021103e-2+0.3374032265428002,5.4376889325906674e-3+0.3433375518353994,-1.37314311066275e-2+0.3472084306262111,-3.266026248037712e-2+0.3490005863250838,-5.127410173898639e-2+0.3487069461122325,-6.949948856275578e-2+0.34632866885142555,-8.726449567627947e-2+0.34187514051647994,-0.10449901271253981+0.33536393714911017,-0.12113502290649636+0.3268207554943212,-0.13710687152618373+0.31627931158709655,-0.15235152498194382+0.30378120769060946,-0.16680881959120653+0.28937576811109955,-0.1804216990170585+0.2731198445373677,-0.19313643944353887+0.25507759167313493,-0.2049028615989965+0.23532021404773373,-0.21567452879075155+0.21392568500436537,-0.22540893016950392+0.19097843897493316,-0.23406764850023698+0.16656903825591618,-0.24161651177749144"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="4.7154426904832014e-2" cx="-0.17951154084685572" r="1.5e-2"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.33215956678413805" width="3.0000000000000027e-2" y="-4.7338301402926594e-2" height="3.0e-2"/><rect x="-0.12928120535289067" width="3.0000000000000013e-2" y="-0.2696342736461005" height="3.0000000000000027e-2"/></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.0e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="-0.7081583576110569" width="1.0553179243951956" y="-0.2546342736461006" height="0.6112115986149814"/></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.16656903825591596,-0.24161651177749155+-0.5255921199496276,0.3359253655871556"/></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="-0.5791309718594293,-6.399355921675498e-2+0.22010789016571786,0.158302413026419"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.806442363558434" width="1.3843223164110867" y="-0.3657822597676875" height="0.7780359028511088"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.8272071983046003, 0.4122536430834213)"><polyline points="-0.8272071983046003,0.4272536430834213+-0.8272071983046003,0.39725364308342126"/></g><g transform="rotate(-90.0, -0.8272071983046003, 0.30110565696183433)"><polyline points="-0.8272071983046003,0.31610565696183435+-0.8272071983046003,0.2861056569618343"/></g><g transform="rotate(-90.0, -0.8272071983046003, 0.1899576708402474)"><polyline points="-0.8272071983046003,0.2049576708402474+-0.8272071983046003,0.17495767084024738"/></g><g transform="rotate(-90.0, -0.8272071983046003, 7.880968471866046e-2)"><polyline points="-0.8272071983046003,9.380968471866045e-2+-0.8272071983046003,6.380968471866046e-2"/></g><g transform="rotate(-90.0, -0.8272071983046003, -3.2338301402926595e-2)"><polyline points="-0.8272071983046003,-1.7338301402926595e-2+-0.8272071983046003,-4.7338301402926594e-2"/></g><g transform="rotate(-90.0, -0.8272071983046003, -0.14348628752451342)"><polyline points="-0.8272071983046003,-0.1284862875245134+-0.8272071983046003,-0.15848628752451344"/></g><g transform="rotate(-90.0, -0.8272071983046003, -0.2546342736461005)"><polyline points="-0.8272071983046003,-0.23963427364610046+-0.8272071983046003,-0.2696342736461005"/></g><g transform="rotate(-90.0, -0.8272071983046003, -0.3657822597676875)"><polyline points="-0.8272071983046003,-0.3507822597676875+-0.8272071983046003,-0.38078225976768754"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.8521249999999998" y="0.4229516367476241">-2.00</text><text x="-0.8521249999999998" y="0.3118036506260371">-1.50</text><text x="-0.8521249999999998" y="0.20065566450445016">-1.00</text><text x="-0.8521249999999998" y="8.950767838286317e-2">-0.50</text><text x="-0.8521249999999998" y="-2.164030773872372e-2"> 0.00</text><text x="-0.8521249999999998" y="-0.13278829386031066"> 0.50</text><text x="-0.8521249999999998" y="-0.24393627998189782"> 1.00</text><text x="-0.8521249999999998" y="-0.35508426610348465"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.806442363558434,0.4122536430834213+0.5778799528526526,0.4122536430834213"/><polyline points="-0.806442363558434,0.30110565696183433+0.5778799528526526,0.30110565696183433"/><polyline points="-0.806442363558434,0.1899576708402474+0.5778799528526526,0.1899576708402474"/><polyline points="-0.806442363558434,7.880968471866046e-2+0.5778799528526526,7.880968471866046e-2"/><polyline points="-0.806442363558434,-3.2338301402926595e-2+0.5778799528526526,-3.2338301402926595e-2"/><polyline points="-0.806442363558434,-0.14348628752451342+0.5778799528526526,-0.14348628752451342"/><polyline points="-0.806442363558434,-0.2546342736461005+0.5778799528526526,-0.2546342736461005"/><polyline points="-0.806442363558434,-0.3657822597676875+0.5778799528526526,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.8161326197733116" width="2.768644632822115e-3" y="-0.3673383315733896" height="0.7811480464625131"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.806442363558434,0.4505947201689546+-0.806442363558434,0.42059472016895455"/><polyline points="-0.5757219774899196,0.4505947201689546+-0.5757219774899196,0.42059472016895455"/><polyline points="-0.3450015914214052,0.4505947201689546+-0.3450015914214052,0.42059472016895455"/><polyline points="-0.11428120535289066,0.4505947201689546+-0.11428120535289066,0.42059472016895455"/><polyline points="0.11643918071562376,0.4505947201689546+0.11643918071562376,0.42059472016895455"/><polyline points="0.34715956678413806,0.4505947201689546+0.34715956678413806,0.42059472016895455"/><polyline points="0.5778799528526526,0.4505947201689546+0.5778799528526526,0.42059472016895455"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.806442363558434" y="0.485">-1.50</text><text x="-0.5757219774899196" y="0.485">-1.00</text><text x="-0.3450015914214052" y="0.485">-0.50</text><text x="-0.11428120535289066" y="0.485"> 0.00</text><text x="0.11643918071562376" y="0.485"> 0.50</text><text x="0.34715956678413806" y="0.485"> 1.00</text><text x="0.5778799528526526" y="0.485"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.806442363558434,0.4122536430834213+-0.806442363558434,-0.3657822597676875"/><polyline points="-0.5757219774899196,0.4122536430834213+-0.5757219774899196,-0.3657822597676875"/><polyline points="-0.3450015914214052,0.4122536430834213+-0.3450015914214052,-0.3657822597676875"/><polyline points="-0.11428120535289066,0.4122536430834213+-0.11428120535289066,-0.3657822597676875"/><polyline points="0.11643918071562376,0.4122536430834213+0.11643918071562376,-0.3657822597676875"/><polyline points="0.34715956678413806,0.4122536430834213+0.34715956678413806,-0.3657822597676875"/><polyline points="0.5778799528526526,0.4122536430834213+0.5778799528526526,-0.3657822597676875"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.8078266858748452" width="1.387090961043909" y="0.4200340021119324" height="3.1121436114043832e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.6687261048671302" width="0.2924380893418421" y="-0.35907170010559686" height="0.45515100316789886"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="6.495786694825767e-2">Bounding Box</text></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="2.5e-3" fill-opacity="5.0e-3" stroke-opacity="1.0"><rect x="0.907521704448043" width="1.7304028955138273e-2" y="4.55069693769799e-2" height="1.945089757127777e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="2.714994720168895e-3">Endpoints</text></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.9036737189256121" width="2.499999999999991e-2" y="-1.9510454065469907e-2" height="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-5.952787750791977e-2">Centroid</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-6.925332629355863e-2" cx="0.9161737189256121" r="1.25e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.12177074973600843">Arc</text></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.1314961985216474+0.9421297623583198,-0.1314961985216474"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.1840136219640971">Full Ellipse</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.19373907074973606+0.9421297623583198,-0.19373907074973606"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.24625649419218587">Minor Axis</text></g><g fill="none" stroke="rgb(73%, 34%, 1%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.25598194297782484+0.9421297623583198,-0.25598194297782484"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="3.460805791027717e-2" fill-opacity="1.0" text-anchor="start"><text x="0.686030133822269" y="-0.30849936642027465">Major Axis</text></g><g fill="none" stroke="rgb(21%, 29%, 7%)" stroke-dasharray="3.0e-2 1.0e-2" stroke-linecap="round" stroke-width="5.0e-3" stroke-opacity="1.0"><polyline points="0.907521704448043,-0.3182248152059134+0.9421297623583198,-0.3182248152059134"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.537289265644347e-2" fill-opacity="1.0" text-anchor="middle"><text x="1.7315934850938408e-2" y="-0.43600000000000005">ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)</text></g></g></g></svg>
− other/glines.svg
@@ -1,5 +0,0 @@-<svg height="300.0" width="425.764192139738" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8125 -0.5825 1.6249999999999998 1.145"><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.75,0.30000000000000004--0.2142857142857144,0.30000000000000004-0.3214285714285712,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.75,0.5-0.7499999999999998,-0.10000000000000009"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.4821428571428572,-0.30000000000000004--0.4821428571428572,0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#b05929" stroke-width="5.0e-3" stroke="#b05929"><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.75" cy="0.30000000000000004"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="-0.2142857142857144" cy="0.30000000000000004"/><ellipse ry="6.0e-2" rx="4.0e-2" cx="0.3214285714285712" cy="-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="5.0e-3" stroke="#a6cfe3"><rect height="8.000000000000002e-2" y="0.46" width="8.000000000000007e-2" x="-0.79"/><rect height="8.000000000000002e-2" y="-0.1400000000000001" width="8.000000000000007e-2" x="0.7099999999999997"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="5.0e-3" stroke="#1f78b5"><circle r="4.0e-2" cx="-0.4821428571428572" cy="-0.30000000000000004"/><circle r="4.0e-2" cx="-0.4821428571428572" cy="0.5"/></g></svg>
other/glyphs.svg view
@@ -1,3 +1,27 @@-<svg height="50.0" width="401.25" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8250000000000001 -0.15 1.605 0.2"><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><circle r="5.0e-2" cx="-0.75" cy="-2.5e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><rect height="0.1" y="-7.500000000000001e-2" width="0.10000000000000009" x="-0.6125"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><rect height="7.500000000000001e-2" y="-6.25e-2" width="9.999999999999998e-2" x="-0.42500000000000004"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><rect height="7.500000000000001e-2" y="-6.25e-2" width="9.999999999999998e-2" ry="1.0e-2" x="-0.2375" rx="1.0e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="0.0" stroke="#1f78b5"><ellipse ry="3.7500000000000006e-2" rx="5.0e-2" cx="-1.1102230246251565e-16" cy="-2.5e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="0.18749999999999978,2.5e-2-0.18749999999999978,-7.500000000000001e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="0.325,-2.5e-2-0.425,-2.5e-2"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><polygon points="0.0,-0.0 0.1,-0.1 0.1,-0.0" transform="translate(0.5625, -2.5e-2)"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#1f78b5"><path d="M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z" transform="translate(0.7499999999999998, -2.5e-2) scale(0.1)"/></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="600.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.75 -0.5 1.5 1.0" height="400.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="glyphs"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-0.0" cx="-0.695" r="5.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.57125" width="0.10000000000000003" y="-5.0e-2" height="0.1"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.39749999999999996" width="9.999999999999998e-2" y="-3.7500000000000006e-2" height="7.500000000000001e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.22374999999999995" ry="1.0e-2" width="9.999999999999999e-2" y="-3.7500000000000006e-2" height="7.500000000000001e-2" rx="1.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><ellipse cy="-0.0" ry="3.7500000000000006e-2" cx="0.0" rx="5.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><polyline points="0.17374999999999996,5.0e-2+0.17374999999999996,-5.0e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><polyline points="0.29750000000000004,-0.0+0.3975,-0.0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="1.0"><polygon transform="translate(0.5212499999999999, -0.0)" points="0.0,-7.071067811865477e-2 -5.000000000000002e-2,4.330127018922193e-2 5.000000000000002e-2,4.330127018922193e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="9.999999999999999e-2" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0,0.5 A 1.0 1.0 -0.0 0 1 -0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0.5,-0.3660 L 0.5,-0.3660 Z" transform="translate(0.695, -0.0) scale(0.1)"/></g></g></g><g class="hud"></g></svg>
+ other/gradient.svg view
@@ -0,0 +1,25 @@+<svg xmlns="http://www.w3.org/2000/svg" width="600.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-3.0 -0.5 6.0 1.0" height="100.0"><style>svg { shape-rendering: crispEdges; }svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="gradient"><g fill="rgb(60%, 26%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.9012903225806452" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 26%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.8432645161290324" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 26%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7852387096774196" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7272129032258063" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.6691870967741935" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.611161290322581" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.553135483870968" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 26%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.495109677419355" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 27%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.4370838709677423" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 27%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.379058064516129" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 27%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.321032258064516" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(61%, 28%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.2630064516129034" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 28%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.2049806451612906" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(60%, 29%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1469548387096773" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(59%, 29%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.088929032258065" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(59%, 30%, 5%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.0309032258064517" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 31%, 0%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9728774193548388" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 31%, -4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9148516129032258" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(57%, 32%, -7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.856825806451613" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(56%, 33%, -10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.7988" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(55%, 33%, -13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.740774193548387" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(54%, 34%, -15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.6827483870967743" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(53%, 35%, -17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.6247225806451613" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(52%, 36%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5666967741935482" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(51%, 36%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5086709677419357" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(49%, 37%, -19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.4506451612903228" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(48%, 38%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3926193548387096" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(47%, 38%, -18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3345935483870965" width="5.8025806451612594e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(45%, 39%, -16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.276567741935484" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(43%, 40%, -15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.2185419354838711" width="5.8025806451612594e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(42%, 40%, -13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1605161290322585" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(40%, 41%, -10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1024903225806455" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(38%, 42%, -7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.0444645161290322" width="5.802580645161304e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(36%, 42%, -3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.9864387096774192" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(34%, 43%, 2%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.9284129032258064" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(32%, 43%, 6%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.8703870967741936" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(30%, 44%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.8123612903225803" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(28%, 44%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.7543354838709679" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(25%, 45%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.6963096774193547" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(22%, 45%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.6382838709677419" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(19%, 46%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.5802580645161286" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(16%, 46%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.5222322580645162" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(11%, 46%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.46420645161290297" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(5%, 46%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4061806451612906" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-5%, 47%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.34815483870967734" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-14%, 47%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2901290322580641" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-23%, 47%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2321032258064517" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-30%, 47%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17407741935483845" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-37%, 47%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11605161290322563" width="5.802580645161237e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-43%, 47%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.802580645161326e-2" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-48%, 47%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.0" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-52%, 47%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.8025806451612816e-2" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-56%, 47%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11605161290322608" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-58%, 47%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1740774193548389" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-60%, 47%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2321032258064517" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-60%, 46%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.29012903225806497" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-60%, 46%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3481548387096778" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-59%, 46%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4061806451612906" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-57%, 46%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.46420645161290297" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-54%, 45%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5222322580645167" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-50%, 45%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5802580645161286" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-46%, 44%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.6382838709677419" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-41%, 44%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.6963096774193547" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-35%, 44%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.7543354838709679" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-28%, 43%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.8123612903225808" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-20%, 43%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.8703870967741936" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-12%, 42%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.9284129032258068" width="5.802580645161326e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(-4%, 41%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.9864387096774201" width="5.8025806451611484e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(6%, 41%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.0444645161290316" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(11%, 40%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.1024903225806453" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(15%, 40%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.160516129032258" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(19%, 39%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.218541935483871" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(21%, 38%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.2765677419354837" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(24%, 38%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3345935483870974" width="5.802580645161104e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(26%, 37%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3926193548387085" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(29%, 37%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.4506451612903222" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(31%, 36%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.5086709677419359" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(33%, 35%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.5666967741935487" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(35%, 35%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.6247225806451606" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(36%, 34%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.6827483870967743" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(38%, 34%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.740774193548388" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(40%, 33%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.7988000000000008" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(41%, 32%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.8568258064516128" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(43%, 32%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.9148516129032256" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(44%, 31%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.9728774193548393" width="5.802580645161104e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(46%, 31%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0309032258064503" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(47%, 30%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.088929032258064" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(48%, 30%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.1469548387096777" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(49%, 29%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.2049806451612906" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(51%, 29%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.2630064516129025" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(52%, 28%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.321032258064516" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(53%, 28%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.37905806451613" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(54%, 28%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.4370838709677427" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(55%, 27%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.4951096774193546" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(56%, 27%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.5531354838709674" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(56%, 27%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.611161290322581" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(57%, 26%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.669187096774193" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 26%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.727212903225807" width="5.8025806451612816e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(58%, 26%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7852387096774196" width="5.802580645161193e-2" y="-0.3401639344262295" height="0.680327868852459"/></g><g fill="rgb(59%, 26%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.8432645161290315" width="5.8025806451613704e-2" y="-0.3401639344262295" height="0.680327868852459"/></g></g><g class="border"><g fill="rgb(0%, 0%, 0%)" stroke="rgb(94%, 94%, 94%)" stroke-width="2.0e-2" fill-opacity="0.0" stroke-opacity="1.0"><rect x="-0.970320430107527" width="0.2321032258064517" y="-0.40819672131147533" height="0.8163934426229508"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(0%, 0%, 0%)" stroke="rgb(99%, 99%, 99%)" stroke-width="4.0e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="-2.998" width="5.996" y="-0.498" height="0.996"/></g></g></g></svg>
other/hudoptions.svg view
@@ -1,45 +1,69 @@-<svg height="300.0" width="457.74043453182077" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.87 -0.5531722096956032 1.6775 1.0994222096956032"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="1.4445949676731749" x="-0.6945949676731749"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.40191657271702363-0.75,0.40191657271702363"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.3117249154453213-0.75,0.3117249154453213"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.2215332581736189-0.75,0.2215332581736189"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.13134160090191654-0.75,0.13134160090191654"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,4.114994363021418e-2-0.75,4.114994363021418e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-4.904171364148813e-2-0.75,-4.904171364148813e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.13923337091319066-0.75,-0.13923337091319066"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.22942502818489297-0.75,-0.22942502818489297"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.3196166854565953-0.75,-0.3196166854565953"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.4098083427282976-0.75,-0.4098083427282976"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.5-0.75,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.41499436302142045" x="-0.75">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3248027057497182" x="-0.75">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.23461104847801584" x="-0.75">-0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.14441939120631336" x="-0.75">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="5.4227733934611055e-2" x="-0.75">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.596392333709142e-2" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.12615558060879384" x="-0.75">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.21634723788049615" x="-0.75">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.30653889515219834" x="-0.75">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3967305524239009" x="-0.75">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869222096956032" x="-0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7201161454354009, 0.40191657271702363)"><polyline points="-0.7201161454354009,0.41691657271702365--0.7201161454354009,0.3869165727170236"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.3117249154453213)"><polyline points="-0.7201161454354009,0.32672491544532134--0.7201161454354009,0.2967249154453213"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.2215332581736189)"><polyline points="-0.7201161454354009,0.23653325817361892--0.7201161454354009,0.2065332581736189"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.13134160090191654)"><polyline points="-0.7201161454354009,0.14634160090191656--0.7201161454354009,0.11634160090191654"/></g><g transform="rotate(-90.0, -0.7201161454354009, 4.114994363021418e-2)"><polyline points="-0.7201161454354009,5.614994363021418e-2--0.7201161454354009,2.614994363021418e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -4.904171364148813e-2)"><polyline points="-0.7201161454354009,-3.404171364148813e-2--0.7201161454354009,-6.404171364148813e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.13923337091319066)"><polyline points="-0.7201161454354009,-0.12423337091319066--0.7201161454354009,-0.15423337091319067"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.22942502818489297)"><polyline points="-0.7201161454354009,-0.21442502818489295--0.7201161454354009,-0.24442502818489298"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.3196166854565953)"><polyline points="-0.7201161454354009,-0.30461668545659526--0.7201161454354009,-0.3346166854565953"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.4098083427282976)"><polyline points="-0.7201161454354009,-0.39480834272829757--0.7201161454354009,-0.4248083427282976"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.5)"><polyline points="-0.7201161454354009,-0.485--0.7201161454354009,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="3.8522532471284565e-3" x="-0.7080778540381245"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.40191657271702363--0.6945949676731749,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5501354709058575,0.40191657271702363--0.5501354709058575,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.40567597413853984,0.40191657271702363--0.40567597413853984,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.2612164773712222,0.40191657271702363--0.2612164773712222,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.11675698060390471,0.40191657271702363--0.11675698060390471,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.770251616341257e-2,0.40191657271702363-2.770251616341257e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1721620129307302,0.40191657271702363-0.1721620129307302,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3166215096980478,0.40191657271702363-0.3166215096980478,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4610810064653652,0.40191657271702363-0.4610810064653652,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.6055405032326826,0.40191657271702363-0.6055405032326826,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.75,0.40191657271702363-0.75,-0.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6945949676731749">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5501354709058575">-0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.40567597413853984">-0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2612164773712222">-0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.11675698060390471">-0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="2.770251616341257e-2">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.1721620129307302">0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3166215096980478">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4610810064653652">0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6055405032326826">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.44081736189402476--0.6945949676731749,0.41081736189402474"/><polyline points="-0.5501354709058575,0.44081736189402476--0.5501354709058575,0.41081736189402474"/><polyline points="-0.40567597413853984,0.44081736189402476--0.40567597413853984,0.41081736189402474"/><polyline points="-0.2612164773712222,0.44081736189402476--0.2612164773712222,0.41081736189402474"/><polyline points="-0.11675698060390471,0.44081736189402476--0.11675698060390471,0.41081736189402474"/><polyline points="2.770251616341257e-2,0.44081736189402476-2.770251616341257e-2,0.41081736189402474"/><polyline points="0.1721620129307302,0.44081736189402476-0.1721620129307302,0.41081736189402474"/><polyline points="0.3166215096980478,0.44081736189402476-0.3166215096980478,0.41081736189402474"/><polyline points="0.4610810064653652,0.44081736189402476-0.4610810064653652,0.41081736189402474"/><polyline points="0.6055405032326826,0.44081736189402476-0.6055405032326826,0.41081736189402474"/><polyline points="0.75,0.44081736189402476-0.75,0.41081736189402474"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908680612e-3" y="0.41093573844419395" width="1.4445949676731749" x="-0.6945949676731749"/></g><g></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="445.31471568510756" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7331572863520408 -0.49594877991132563 1.4750353555484697 0.9937030847582644" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"></g><g class="hud"><g class="frame"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5813810586734693" width="1.2754304846938778" y="-0.47399600638977646" height="0.8769968051118211"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6068896683673468, 0.4030007987220447)"><polyline points="-0.6068896683673468,0.4180007987220447+-0.6068896683673468,0.3880007987220447"/></g><g transform="rotate(-90.0, -0.6068896683673468, 0.3153011182108626)"><polyline points="-0.6068896683673468,0.3303011182108626+-0.6068896683673468,0.3003011182108626"/></g><g transform="rotate(-90.0, -0.6068896683673468, 0.22760143769968044)"><polyline points="-0.6068896683673468,0.24260143769968046+-0.6068896683673468,0.21260143769968043"/></g><g transform="rotate(-90.0, -0.6068896683673468, 0.1399017571884983)"><polyline points="-0.6068896683673468,0.1549017571884983+-0.6068896683673468,0.12490175718849829"/></g><g transform="rotate(-90.0, -0.6068896683673468, 5.220207667731619e-2)"><polyline points="-0.6068896683673468,6.720207667731619e-2+-0.6068896683673468,3.720207667731619e-2"/></g><g transform="rotate(-90.0, -0.6068896683673468, -3.549760383386591e-2)"><polyline points="-0.6068896683673468,-2.049760383386591e-2+-0.6068896683673468,-5.049760383386591e-2"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.12319728434504806)"><polyline points="-0.6068896683673468,-0.10819728434504806+-0.6068896683673468,-0.13819728434504808"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.21089696485623022)"><polyline points="-0.6068896683673468,-0.1958969648562302+-0.6068896683673468,-0.22589696485623023"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.29859664536741226)"><polyline points="-0.6068896683673468,-0.28359664536741225+-0.6068896683673468,-0.3135966453674123"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.3862963258785943)"><polyline points="-0.6068896683673468,-0.3712963258785943+-0.6068896683673468,-0.4012963258785943"/></g><g transform="rotate(-90.0, -0.6068896683673468, -0.47399600638977646)"><polyline points="-0.6068896683673468,-0.45899600638977645+-0.6068896683673468,-0.48899600638977647"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.251434948979592e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4150595047923323">-0.50</text><text x="-0.6375" y="0.3273598242811501">-0.40</text><text x="-0.6375" y="0.23966014376996794">-0.30</text><text x="-0.6375" y="0.15196046325878587">-0.20</text><text x="-0.6375" y="6.426078274760372e-2">-0.10</text><text x="-0.6375" y="-2.3438897763578326e-2"> 0.00</text><text x="-0.6375" y="-0.11113857827476048"> 0.10</text><text x="-0.6375" y="-0.19883825878594263"> 0.20</text><text x="-0.6375" y="-0.2865379392971247"> 0.30</text><text x="-0.6375" y="-0.37423761980830683"> 0.40</text><text x="-0.6375" y="-0.4619373003194889"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5813810586734693,0.4030007987220447+0.6940494260204084,0.4030007987220447"/><polyline points="-0.5813810586734693,0.3153011182108626+0.6940494260204084,0.3153011182108626"/><polyline points="-0.5813810586734693,0.22760143769968044+0.6940494260204084,0.22760143769968044"/><polyline points="-0.5813810586734693,0.1399017571884983+0.6940494260204084,0.1399017571884983"/><polyline points="-0.5813810586734693,5.220207667731619e-2+0.6940494260204084,5.220207667731619e-2"/><polyline points="-0.5813810586734693,-3.549760383386591e-2+0.6940494260204084,-3.549760383386591e-2"/><polyline points="-0.5813810586734693,-0.12319728434504806+0.6940494260204084,-0.12319728434504806"/><polyline points="-0.5813810586734693,-0.21089696485623022+0.6940494260204084,-0.21089696485623022"/><polyline points="-0.5813810586734693,-0.29859664536741226+0.6940494260204084,-0.29859664536741226"/><polyline points="-0.5813810586734693,-0.3862963258785943+0.6940494260204084,-0.3862963258785943"/><polyline points="-0.5813810586734693,-0.47399600638977646+0.6940494260204084,-0.47399600638977646"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5932850765306121" width="3.40114795918367e-3" y="-0.47575" height="0.8805047923322683"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5813810586734693,0.44431070287539937+-0.5813810586734693,0.41431070287539934"/><polyline points="-0.4538380102040816,0.44431070287539937+-0.4538380102040816,0.41431070287539934"/><polyline points="-0.32629496173469374,0.44431070287539937+-0.32629496173469374,0.41431070287539934"/><polyline points="-0.198751913265306,0.44431070287539937+-0.198751913265306,0.41431070287539934"/><polyline points="-7.120886479591826e-2,0.44431070287539937+-7.120886479591826e-2,0.41431070287539934"/><polyline points="5.633418367346954e-2,0.44431070287539937+5.633418367346954e-2,0.41431070287539934"/><polyline points="0.18387723214285745,0.44431070287539937+0.18387723214285745,0.41431070287539934"/><polyline points="0.311420280612245,0.44431070287539937+0.311420280612245,0.41431070287539934"/><polyline points="0.43896332908163305,0.44431070287539937+0.43896332908163305,0.41431070287539934"/><polyline points="0.5665063775510206,0.44431070287539937+0.5665063775510206,0.41431070287539934"/><polyline points="0.6940494260204084,0.44431070287539937+0.6940494260204084,0.41431070287539934"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.251434948979592e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5813810586734693" y="0.485">-0.50</text><text x="-0.4538380102040816" y="0.485">-0.40</text><text x="-0.32629496173469374" y="0.485">-0.30</text><text x="-0.198751913265306" y="0.485">-0.20</text><text x="-7.120886479591826e-2" y="0.485">-0.10</text><text x="5.633418367346954e-2" y="0.485"> 0.00</text><text x="0.18387723214285745" y="0.485"> 0.10</text><text x="0.311420280612245" y="0.485"> 0.20</text><text x="0.43896332908163305" y="0.485"> 0.30</text><text x="0.5665063775510206" y="0.485"> 0.40</text><text x="0.6940494260204084" y="0.485"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5813810586734693,0.4030007987220447+-0.5813810586734693,-0.47399600638977646"/><polyline points="-0.4538380102040816,0.4030007987220447+-0.4538380102040816,-0.47399600638977646"/><polyline points="-0.32629496173469374,0.4030007987220447+-0.32629496173469374,-0.47399600638977646"/><polyline points="-0.198751913265306,0.4030007987220447+-0.198751913265306,-0.47399600638977646"/><polyline points="-7.120886479591826e-2,0.4030007987220447+-7.120886479591826e-2,-0.47399600638977646"/><polyline points="5.633418367346954e-2,0.4030007987220447+5.633418367346954e-2,-0.47399600638977646"/><polyline points="0.18387723214285745,0.4030007987220447+0.18387723214285745,-0.47399600638977646"/><polyline points="0.311420280612245,0.4030007987220447+0.311420280612245,-0.47399600638977646"/><polyline points="0.43896332908163305,0.4030007987220447+0.43896332908163305,-0.47399600638977646"/><polyline points="0.5665063775510206,0.4030007987220447+0.5665063775510206,-0.47399600638977646"/><polyline points="0.6940494260204084,0.4030007987220447+0.6940494260204084,-0.47399600638977646"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5830816326530611" width="1.2788316326530613" y="0.41177076677316293" height="3.5079872204472617e-3"/></g></g></g></g></svg>
− other/label.svg
@@ -1,1 +0,0 @@-<svg height="300.0" width="300.0000000000001" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6040702012600883 -0.6493250352560272 1.2533952365161158 1.2533952365161154"><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-1.131370849898472e-2" x="1.1313708498984831e-2" transform="rotate(45.0, 1.1313708498984831e-2, -1.131370849898472e-2)">text at (1,1) rotated by -(pi/4) radians</text></g></svg>
− other/legend.svg
@@ -1,46 +0,0 @@-<svg height="300.0" width="471.9812426729191" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.87 -0.52 1.6775 1.0662500000000001"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8481404520588612" y="-0.44037572622026233" width="1.4445949676731749" x="-0.6945949676731749"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.4077647258385989-0.75,0.4077647258385989"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.32295068063271276-0.75,0.32295068063271276"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.23813663542682662-0.75,0.23813663542682662"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.15332259022094047-0.75,0.15332259022094047"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,6.850854501505443e-2-0.75,6.850854501505443e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-1.6305500190831768e-2-0.75,-1.6305500190831768e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.10111954539671786-0.75,-0.10111954539671786"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.18593359060260406-0.75,-0.18593359060260406"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.27074763580849015-0.75,-0.27074763580849015"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.35556168101437624-0.75,-0.35556168101437624"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,-0.44037572622026233-0.75,-0.44037572622026233"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.42006276239345225" x="-0.75">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.33524871718756627" x="-0.75">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2504346719816801" x="-0.75">-0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.16562062677579398" x="-0.75">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="8.080658156990789e-2" x="-0.75">-0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.007463635978259e-3" x="-0.75">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-8.882150884186446e-2" x="-0.75">0.1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.17363555404775055" x="-0.75">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.25844959925363653" x="-0.75">0.3</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.34326364445952273" x="-0.75">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4280776896654086" x="-0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7201161454354009, 0.4077647258385989)"><polyline points="-0.7201161454354009,0.4227647258385989--0.7201161454354009,0.3927647258385989"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.32295068063271276)"><polyline points="-0.7201161454354009,0.3379506806327128--0.7201161454354009,0.30795068063271275"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.23813663542682662)"><polyline points="-0.7201161454354009,0.25313663542682663--0.7201161454354009,0.2231366354268266"/></g><g transform="rotate(-90.0, -0.7201161454354009, 0.15332259022094047)"><polyline points="-0.7201161454354009,0.16832259022094048--0.7201161454354009,0.13832259022094046"/></g><g transform="rotate(-90.0, -0.7201161454354009, 6.850854501505443e-2)"><polyline points="-0.7201161454354009,8.350854501505443e-2--0.7201161454354009,5.3508545015054435e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -1.6305500190831768e-2)"><polyline points="-0.7201161454354009,-1.3055001908317682e-3--0.7201161454354009,-3.130550019083177e-2"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.10111954539671786)"><polyline points="-0.7201161454354009,-8.611954539671786e-2--0.7201161454354009,-0.11611954539671786"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.18593359060260406)"><polyline points="-0.7201161454354009,-0.17093359060260405--0.7201161454354009,-0.20093359060260407"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.27074763580849015)"><polyline points="-0.7201161454354009,-0.25574763580849014--0.7201161454354009,-0.28574763580849016"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.35556168101437624)"><polyline points="-0.7201161454354009,-0.3405616810143762--0.7201161454354009,-0.37056168101437625"/></g><g transform="rotate(-90.0, -0.7201161454354009, -0.44037572622026233)"><polyline points="-0.7201161454354009,-0.4253757262202623--0.7201161454354009,-0.45537572622026234"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8481404520588612" y="-0.44037572622026233" width="3.8522532471284565e-3" x="-0.7080778540381245"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.4077647258385989--0.6945949676731749,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5501354709058575,0.4077647258385989--0.5501354709058575,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.40567597413853984,0.4077647258385989--0.40567597413853984,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.2612164773712222,0.4077647258385989--0.2612164773712222,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.11675698060390471,0.4077647258385989--0.11675698060390471,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.770251616341257e-2,0.4077647258385989-2.770251616341257e-2,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1721620129307302,0.4077647258385989-0.1721620129307302,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3166215096980478,0.4077647258385989-0.3166215096980478,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4610810064653652,0.4077647258385989-0.4610810064653652,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.6055405032326826,0.4077647258385989-0.6055405032326826,-0.44037572622026233"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.75,0.4077647258385989-0.75,-0.44037572622026233"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6945949676731749">-0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.5501354709058575">-0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.40567597413853984">-0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.2612164773712222">-0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.11675698060390471">-0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="2.770251616341257e-2">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.1721620129307302">0.1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3166215096980478">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4610810064653652">0.3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6055405032326826">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">0.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.6945949676731749,0.44524044781815864--0.6945949676731749,0.4152404478181586"/><polyline points="-0.5501354709058575,0.44524044781815864--0.5501354709058575,0.4152404478181586"/><polyline points="-0.40567597413853984,0.44524044781815864--0.40567597413853984,0.4152404478181586"/><polyline points="-0.2612164773712222,0.44524044781815864--0.2612164773712222,0.4152404478181586"/><polyline points="-0.11675698060390471,0.44524044781815864--0.11675698060390471,0.4152404478181586"/><polyline points="2.770251616341257e-2,0.44524044781815864-2.770251616341257e-2,0.4152404478181586"/><polyline points="0.1721620129307302,0.44524044781815864-0.1721620129307302,0.4152404478181586"/><polyline points="0.3166215096980478,0.44524044781815864-0.3166215096980478,0.4152404478181586"/><polyline points="0.4610810064653652,0.44524044781815864-0.4610810064653652,0.4152404478181586"/><polyline points="0.6055405032326826,0.44524044781815864-0.6055405032326826,0.4152404478181586"/><polyline points="0.75,0.44524044781815864-0.75,0.4152404478181586"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.392561808235439e-3" y="0.41624613035918745" width="1.4445949676731749" x="-0.6945949676731749"/></g><g></g><g fill-opacity="0.0" stroke-opacity="1.0" fill="#0d0d0d" stroke-width="3.0e-3" stroke="#0d0d0d"><rect height="0.532292947712141" y="-0.49363894660955854" width="0.6991839643538167" x="-1.1893831900509078e-3"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-8.163351851066647e-3" x="2.770251616341257e-2">blank</text></g><g></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-9.26381408761292e-2" x="2.770251616341257e-2">abcdefghijklmnopqrst</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.6000000000000004e-2" y="-0.11878028921589433" width="3.600000000000003e-2" x="0.5470918441378338"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.17711292990119176" x="2.770251616341257e-2">line</text></g><g stroke-opacity="1.0" fill="none" stroke-width="1.2e-2" stroke="#0d0d0d"><polyline points="0.5477567045257556,-0.18525507824095677-0.6170972629740679,-0.18525507824095677"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.2615877189262543" x="2.770251616341257e-2">text</text></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.6e-2"><text y="-0.26362325601119563" x="0.5477567045257556">content</text></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.3460625079513169" x="2.770251616341257e-2">rect</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="3.0e-3" stroke="#a6cfe3"><rect height="3.0533056274118953e-2" y="-0.3694711844281414" width="3.467027922415622e-2" x="0.5477567045257556"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.8e-2"><text y="-0.4305372969763793" x="2.770251616341257e-2">glyph</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.600000000000003e-2" y="-0.45667944531614446" width="3.600000000000003e-2" x="0.5470918441378336"/></g><g></g></svg>
− other/lglyph.svg
@@ -1,1 +0,0 @@-<svg height="300.0" width="445.0402144772118" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8300000000000001 -0.594 1.6600000000000001 1.119"><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.75">0,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.75">0,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.75">0,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.75">0,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.75">0,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.75">0,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.44999999999999996">1,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.44999999999999996">1,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.44999999999999996">1,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.44999999999999996">1,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.44999999999999996">1,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.44999999999999996">1,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="-0.1499999999999999">2,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="-0.1499999999999999">2,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="-0.1499999999999999">2,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="-0.1499999999999999">2,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="-0.1499999999999999">2,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.1499999999999999">2,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.15000000000000013">3,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.15000000000000013">3,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.15000000000000013">3,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.15000000000000013">3,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.15000000000000013">3,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.15000000000000013">3,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.4500000000000002">4,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.4500000000000002">4,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.4500000000000002">4,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.4500000000000002">4,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.4500000000000002">4,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.4500000000000002">4,5</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.46153846153846156" x="0.75">5,0</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.2692307692307693" x="0.75">5,1</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="7.692307692307693e-2" x="0.75">5,2</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.11538461538461542" x="0.75">5,3</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.3076923076923077" x="0.75">5,4</text></g><g text-anchor="middle" fill-opacity="0.2" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="0.75">5,5</text></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="-0.755"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="-0.45499999999999996"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="-0.15499999999999992"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="0.14500000000000013"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="0.4450000000000002"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.495" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.3026923076923077" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="0.11038461538461541" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-8.192307692307688e-2" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.27423076923076917" width="1.0000000000000009e-2" x="0.745"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="0.0" stroke="#1f78b5"><rect height="1.0000000000000009e-2" y="-0.46653846153846146" width="1.0000000000000009e-2" x="0.745"/></g></svg>
other/line.svg view
@@ -1,44 +1,65 @@-<svg height="300.0" width="441.21648345456595" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.8759951587651147 -0.594 1.6769903175302294 1.14025"><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.3752423510316214" transform="rotate(-0.0, 0.3752423510316214, 0.5)">An example from chart-svg</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.5" x="-0.22980689995525283" transform="rotate(-0.0, -0.22980689995525283, -0.5)">Line Chart</text></g><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.7704160246533129" y="-0.444722650231125" width="1.0772198435402474" x="-0.728907988597132"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.32569337442218793-0.34831185494311523,0.32569337442218793"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.24865177195685662-0.34831185494311523,0.24865177195685662"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.17161016949152536-0.34831185494311523,0.17161016949152536"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,9.456856702619398e-2-0.34831185494311523,9.456856702619398e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,1.7526964560862723e-2-0.34831185494311523,1.7526964560862723e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-5.951463790446854e-2-0.34831185494311523,-5.951463790446854e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.13655624036979985-0.34831185494311523,-0.13655624036979985"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.21359784283513117-0.34831185494311523,-0.21359784283513117"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.2906394453004625-0.34831185494311523,-0.2906394453004625"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.3676810477657938-0.34831185494311523,-0.3676810477657938"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,-0.444722650231125-0.34831185494311523,-0.444722650231125"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.3368644067796609" x="-0.7809951587651147">0.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2598228043143297" x="-0.7809951587651147">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.18278120184899838" x="-0.7809951587651147">1.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.105739599383667" x="-0.7809951587651147">1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="2.869799691833569e-2" x="-0.7809951587651147">2.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.834360554699557e-2" x="-0.7809951587651147">2.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1253852080123269" x="-0.7809951587651147">3.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.20242681047765798" x="-0.7809951587651147">3.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.2794684129429895" x="-0.7809951587651147">4.0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3565100154083205" x="-0.7809951587651147">4.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.43355161787365204" x="-0.7809951587651147">5.0</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.7587110709350788, 0.32569337442218793)"><polyline points="-0.7587110709350788,0.34069337442218794--0.7587110709350788,0.3106933744221879"/></g><g transform="rotate(-90.0, -0.7587110709350788, 0.24865177195685662)"><polyline points="-0.7587110709350788,0.26365177195685663--0.7587110709350788,0.2336517719568566"/></g><g transform="rotate(-90.0, -0.7587110709350788, 0.17161016949152536)"><polyline points="-0.7587110709350788,0.18661016949152537--0.7587110709350788,0.15661016949152534"/></g><g transform="rotate(-90.0, -0.7587110709350788, 9.456856702619398e-2)"><polyline points="-0.7587110709350788,0.10956856702619398--0.7587110709350788,7.956856702619398e-2"/></g><g transform="rotate(-90.0, -0.7587110709350788, 1.7526964560862723e-2)"><polyline points="-0.7587110709350788,3.252696456086272e-2--0.7587110709350788,2.526964560862724e-3"/></g><g transform="rotate(-90.0, -0.7587110709350788, -5.951463790446854e-2)"><polyline points="-0.7587110709350788,-4.451463790446854e-2--0.7587110709350788,-7.451463790446854e-2"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.13655624036979985)"><polyline points="-0.7587110709350788,-0.12155624036979985--0.7587110709350788,-0.15155624036979987"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.21359784283513117)"><polyline points="-0.7587110709350788,-0.19859784283513116--0.7587110709350788,-0.22859784283513118"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.2906394453004625)"><polyline points="-0.7587110709350788,-0.27563944530046247--0.7587110709350788,-0.3056394453004625"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.3676810477657938)"><polyline points="-0.7587110709350788,-0.3526810477657938--0.7587110709350788,-0.3826810477657938"/></g><g transform="rotate(-90.0, -0.7587110709350788, -0.444722650231125)"><polyline points="-0.7587110709350788,-0.429722650231125--0.7587110709350788,-0.459722650231125"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.7704160246533129" y="-0.444722650231125" width="2.872586249440645e-3" x="-0.7497342389055768"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.32569337442218793--0.728907988597132,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.5493713480070908,0.32569337442218793--0.5493713480070908,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.36983470741704955,0.32569337442218793--0.36983470741704955,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.19029806682700834,0.32569337442218793--0.19029806682700834,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-1.0761426236967186e-2,0.32569337442218793--1.0761426236967186e-2,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.16877521435307408,0.32569337442218793-0.16877521435307408,-0.444722650231125"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.34831185494311523,0.32569337442218793-0.34831185494311523,-0.444722650231125"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.728907988597132">0.0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.5493713480070908">0.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.36983470741704955">1.0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-0.19029806682700834">1.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="-1.0761426236967186e-2">2.0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="0.16877521435307408">2.5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4210323574730354" x="0.34831185494311523">3.0</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.728907988597132,0.3726656394453004--0.728907988597132,0.3426656394453004"/><polyline points="-0.5493713480070908,0.3726656394453004--0.5493713480070908,0.3426656394453004"/><polyline points="-0.36983470741704955,0.3726656394453004--0.36983470741704955,0.3426656394453004"/><polyline points="-0.19029806682700834,0.3726656394453004--0.19029806682700834,0.3426656394453004"/><polyline points="-1.0761426236967186e-2,0.3726656394453004--1.0761426236967186e-2,0.3426656394453004"/><polyline points="0.16877521435307408,0.3726656394453004-0.16877521435307408,0.3426656394453004"/><polyline points="0.34831185494311523,0.3726656394453004-0.34831185494311523,0.3426656394453004"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.0816640986132127e-3" y="0.34495377503852076" width="1.0772198435402474" x="-0.728907988597132"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.728907988597132,0.17161016949152536--0.36983470741704955,0.17161016949152536--1.0761426236967186e-2,-0.444722650231125"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.728907988597132,0.32569337442218793-0.27649719870709877,-0.13655624036979985"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.5493713480070908,-0.2906394453004625--0.5493713480070908,0.32569337442218793"/></g><g></g><g fill-opacity="0.0" stroke-opacity="1.0" fill="#0d0d0d" stroke-width="2.5e-3" stroke="#0d0d0d"><rect height="0.17758089368258856" y="-0.15995762711864414" width="0.2764864265086635" x="0.5000203162417001"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.0e-2"><text y="-1.3771186440677985e-2" x="0.5179739803007044">vertical</text></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="0.6400588959019324,-1.839368258859786e-2-0.7477808802559571,-1.839368258859786e-2"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.0e-2"><text y="-6.654468412942993e-2" x="0.5179739803007044">line</text></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="0.6400588959019324,-7.11671802773498e-2-0.7477808802559571,-7.11671802773498e-2"/></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.0e-2"><text y="-0.11931818181818199" x="0.5179739803007044">hockey</text></g><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="0.6400588959019324,-0.12394067796610186-0.7477808802559571,-0.12394067796610186"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="446.753163625545" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7380894953982863 -0.49743338195719966 1.4823989209774675 0.995448297856914" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="line"><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.2226262967974741+-0.16239638210092033,0.2226262967974741+0.271434147889559,-0.47471244925575107"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.39696098331078034+0.6184985718819421,-0.12604307622913857"/></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.37931164709615994,-0.30037776274244476+-0.37931164709615994,0.39696098331078034"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.6027343700412567" width="1.3079990479212948" y="-0.48124999999999996" height="0.8847485340550292"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6287642018406855, 0.39696098331078034)"><polyline points="-0.6287642018406855,0.41196098331078035+-0.6287642018406855,0.3819609833107803"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.30979364005412724)"><polyline points="-0.6287642018406855,0.32479364005412725+-0.6287642018406855,0.2947936400541272"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.2226262967974741)"><polyline points="-0.6287642018406855,0.2376262967974741+-0.6287642018406855,0.20762629679747407"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.13545895354082088)"><polyline points="-0.6287642018406855,0.1504589535408209+-0.6287642018406855,0.12045895354082088"/></g><g transform="rotate(-90.0, -0.6287642018406855, 4.829161028416773e-2)"><polyline points="-0.6287642018406855,6.329161028416773e-2+-0.6287642018406855,3.329161028416773e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -3.8875732972485366e-2)"><polyline points="-0.6287642018406855,-2.3875732972485367e-2+-0.6287642018406855,-5.3875732972485366e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.12604307622913857)"><polyline points="-0.6287642018406855,-0.11104307622913857+-0.6287642018406855,-0.1410430762291386"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.21321041948579178)"><polyline points="-0.6287642018406855,-0.19821041948579177+-0.6287642018406855,-0.2282104194857918"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.30037776274244476)"><polyline points="-0.6287642018406855,-0.28537776274244475+-0.6287642018406855,-0.3153777627424448"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.38754510599909786)"><polyline points="-0.6287642018406855,-0.37254510599909785+-0.6287642018406855,-0.4025451059990979"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.47471244925575107)"><polyline points="-0.6287642018406855,-0.45971244925575105+-0.6287642018406855,-0.4897124492557511"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.40894649300857017">0.00</text><text x="-0.66" y="0.321779149751917">0.50</text><text x="-0.66" y="0.2346118064952638">1.00</text><text x="-0.66" y="0.14744446323861077">1.50</text><text x="-0.66" y="6.027711998195756e-2">2.00</text><text x="-0.66" y="-2.689022327469548e-2">2.50</text><text x="-0.66" y="-0.11405756653134869">3.00</text><text x="-0.66" y="-0.2012249097880019">3.50</text><text x="-0.66" y="-0.2883922530446551">4.00</text><text x="-0.66" y="-0.3755595963013081">4.50</text><text x="-0.66" y="-0.4627269395579613">5.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034+0.7052646778800381,0.39696098331078034"/><polyline points="-0.5962269120913996,0.30979364005412724+0.7052646778800381,0.30979364005412724"/><polyline points="-0.5962269120913996,0.2226262967974741+0.7052646778800381,0.2226262967974741"/><polyline points="-0.5962269120913996,0.13545895354082088+0.7052646778800381,0.13545895354082088"/><polyline points="-0.5962269120913996,4.829161028416773e-2+0.7052646778800381,4.829161028416773e-2"/><polyline points="-0.5962269120913996,-3.8875732972485366e-2+0.7052646778800381,-3.8875732972485366e-2"/><polyline points="-0.5962269120913996,-0.12604307622913857+0.7052646778800381,-0.12604307622913857"/><polyline points="-0.5962269120913996,-0.21321041948579178+0.7052646778800381,-0.21321041948579178"/><polyline points="-0.5962269120913996,-0.30037776274244476+0.7052646778800381,-0.30037776274244476"/><polyline points="-0.5962269120913996,-0.38754510599909786+0.7052646778800381,-0.38754510599909786"/><polyline points="-0.5962269120913996,-0.47471244925575107+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6148816248809902" width="3.4706442399238258e-3" y="-0.4764557961208842" height="0.8751601262967976"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5962269120913996,0.44464873703202523+-0.5962269120913996,0.4146487370320252"/><polyline points="-0.37931164709615994,0.44464873703202523+-0.37931164709615994,0.4146487370320252"/><polyline points="-0.16239638210092033,0.44464873703202523+-0.16239638210092033,0.4146487370320252"/><polyline points="5.4518882894319276e-2,0.44464873703202523+5.4518882894319276e-2,0.4146487370320252"/><polyline points="0.271434147889559,0.44464873703202523+0.271434147889559,0.4146487370320252"/><polyline points="0.4883494128847986,0.44464873703202523+0.4883494128847986,0.4146487370320252"/><polyline points="0.7052646778800381,0.44464873703202523+0.7052646778800381,0.4146487370320252"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5962269120913996" y="0.485">0.00</text><text x="-0.37931164709615994" y="0.485">0.50</text><text x="-0.16239638210092033" y="0.485">1.00</text><text x="5.4518882894319276e-2" y="0.485">1.50</text><text x="0.271434147889559" y="0.485">2.00</text><text x="0.4883494128847986" y="0.485">2.50</text><text x="0.7052646778800381" y="0.485">3.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034+-0.5962269120913996,-0.47471244925575107"/><polyline points="-0.37931164709615994,0.39696098331078034+-0.37931164709615994,-0.47471244925575107"/><polyline points="-0.16239638210092033,0.39696098331078034+-0.16239638210092033,-0.47471244925575107"/><polyline points="5.4518882894319276e-2,0.39696098331078034+5.4518882894319276e-2,-0.47471244925575107"/><polyline points="0.271434147889559,0.39696098331078034+0.271434147889559,-0.47471244925575107"/><polyline points="0.4883494128847986,0.39696098331078034+0.4883494128847986,-0.47471244925575107"/><polyline points="0.7052646778800381,0.39696098331078034+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5979622342113615" width="1.3049622342113616" y="0.4122152683806946" height="3.4866937302661105e-3"/></g></g></g></g></svg>
other/path.svg view
@@ -1,35 +1,68 @@-<svg height="300.0" width="264.1756768643528" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6012842749868601 -0.6332546448113643 1.1440685499737202 1.29921334570234"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8962313923197105" y="-0.5" width="0.8000434283917985" x="-0.3737591534049384"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.3962313923197103-0.4262842749868601,0.3962313923197103"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.2842024682797465-0.4262842749868601,0.2842024682797465"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.1721735442397827-0.4262842749868601,0.1721735442397827"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,6.014462019981892e-2-0.4262842749868601,6.014462019981892e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-5.188430384014486e-2-0.4262842749868601,-5.188430384014486e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.16391322788010854-0.4262842749868601,-0.16391322788010854"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.27594215192007243-0.4262842749868601,-0.27594215192007243"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.3879710759600362-0.4262842749868601,-0.3879710759600362"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,-0.5-0.4262842749868601,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4092267475083461" x="-0.4262842749868601">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2971978234683823" x="-0.4262842749868601">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.18516889942841852" x="-0.4262842749868601">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="7.313997538845474e-2" x="-0.4262842749868601">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.888894865150905e-2" x="-0.4262842749868601">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.15091787269147272" x="-0.4262842749868601">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.2629467967314366" x="-0.4262842749868601">1.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3749757207714005" x="-0.4262842749868601">1.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4870046448113643" x="-0.4262842749868601">1.6</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.3979537600783423, 0.3962313923197103)"><polyline points="-0.3979537600783423,0.4112313923197103--0.3979537600783423,0.38123139231971026"/></g><g transform="rotate(-90.0, -0.3979537600783423, 0.2842024682797465)"><polyline points="-0.3979537600783423,0.2992024682797465--0.3979537600783423,0.2692024682797465"/></g><g transform="rotate(-90.0, -0.3979537600783423, 0.1721735442397827)"><polyline points="-0.3979537600783423,0.18717354423978272--0.3979537600783423,0.1571735442397827"/></g><g transform="rotate(-90.0, -0.3979537600783423, 6.014462019981892e-2)"><polyline points="-0.3979537600783423,7.514462019981892e-2--0.3979537600783423,4.514462019981892e-2"/></g><g transform="rotate(-90.0, -0.3979537600783423, -5.188430384014486e-2)"><polyline points="-0.3979537600783423,-3.6884303840144864e-2--0.3979537600783423,-6.688430384014486e-2"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.16391322788010854)"><polyline points="-0.3979537600783423,-0.14891322788010852--0.3979537600783423,-0.17891322788010855"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.27594215192007243)"><polyline points="-0.3979537600783423,-0.2609421519200724--0.3979537600783423,-0.29094215192007244"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.3879710759600362)"><polyline points="-0.3979537600783423,-0.3729710759600362--0.3979537600783423,-0.40297107596003623"/></g><g transform="rotate(-90.0, -0.3979537600783423, -0.5)"><polyline points="-0.3979537600783423,-0.485--0.3979537600783423,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8962313923197105" y="-0.5" width="3.652016101645894e-3" x="-0.386541209760699"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.3962313923197105--0.3737591534049384,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.25946723506325287,0.3962313923197105--0.25946723506325287,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.14517531672156742,0.3962313923197105--0.14517531672156742,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-3.0883398379881855e-2,0.3962313923197105--3.0883398379881855e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="8.34085199618036e-2,0.3962313923197105-8.34085199618036e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.197700438303489,0.3962313923197105-0.197700438303489,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3119923566451746,0.3962313923197105-0.3119923566451746,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4262842749868601,0.3962313923197105-0.4262842749868601,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-0.3737591534049384" transform="rotate(-45.0, -0.3737591534049384, 0.5)">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-0.25946723506325287" transform="rotate(-45.0, -0.25946723506325287, 0.5)">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-0.14517531672156742" transform="rotate(-45.0, -0.14517531672156742, 0.5)">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="-3.0883398379881855e-2" transform="rotate(-45.0, -3.0883398379881855e-2, 0.5)">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="8.34085199618036e-2" transform="rotate(-45.0, 8.34085199618036e-2, 0.5)">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="0.197700438303489" transform="rotate(-45.0, 0.197700438303489, 0.5)">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="0.3119923566451746" transform="rotate(-45.0, 0.3119923566451746, 0.5)">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="3.694245123030814e-2"><text y="0.5" x="0.4262842749868601" transform="rotate(-45.0, 0.4262842749868601, 0.5)">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.3737591534049384,0.4497693421894578--0.3737591534049384,0.4197693421894578"/><polyline points="-0.25946723506325287,0.4497693421894578--0.25946723506325287,0.4197693421894578"/><polyline points="-0.14517531672156742,0.4497693421894578--0.14517531672156742,0.4197693421894578"/><polyline points="-3.0883398379881855e-2,0.4497693421894578--3.0883398379881855e-2,0.4197693421894578"/><polyline points="8.34085199618036e-2,0.4497693421894578-8.34085199618036e-2,0.4197693421894578"/><polyline points="0.197700438303489,0.4497693421894578-0.197700438303489,0.4197693421894578"/><polyline points="0.3119923566451746,0.4497693421894578-0.3119923566451746,0.4197693421894578"/><polyline points="0.4262842749868601,0.4497693421894578-0.4262842749868601,0.4197693421894578"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.584925569278752e-3" y="0.4199815242161827" width="0.8000434283917985" x="-0.3737591534049384"/></g><g fill-opacity="0.1" stroke-opacity="0.3" fill="#1f78b5" stroke-width="1.0e-2" stroke="#33cc66"><path d="M -0.1452,0.3962 L 0.4263,0.3962 C -0.0309,0.3962 -0.0023,-0.1639 0.4263,-0.1639 Q -0.7166,-0.7241 -0.1452,-0.1639 A 0.5686281102556423 0.5629706236631298 30.0 0 0 -0.1452,0.3962"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0000000000000027e-2" y="0.38123139231971026" width="3.0000000000000027e-2" x="-0.16017531672156743"/><rect height="3.0000000000000027e-2" y="0.38123139231971026" width="3.0000000000000027e-2" x="0.4112842749868601"/><rect height="3.0000000000000027e-2" y="-0.17891322788010855" width="3.0000000000000027e-2" x="0.4112842749868601"/><rect height="3.0000000000000027e-2" y="-0.17891322788010855" width="3.0000000000000027e-2" x="-0.16017531672156743"/><rect height="3.0000000000000027e-2" y="0.38123139231971026" width="3.0000000000000027e-2" x="-0.16017531672156743"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="375.0492051476155" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7512380952380954 -1.52625 2.0643333333333342 1.6512500000000006" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}{+  .pathtext g {+    fill: #0d0d0d;+  }+}+@media (prefers-color-scheme:dark) {+  .pathtext g {+    fill: #f0f0f0;+  }+}</style><g class="chart"><g class="path"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.1" stroke-opacity="1.0"><path d="M 0.0476,0 L 1.0,0 C 0.2381,0 0.2857,-0.9375 1.0,-0.9375 Q -0.9048,-1.875 0.0476,-0.9375 A 0.9486825977868139 0.9412422945844034 30.0 0 0 0.0476,0"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="3.261904761904767e-2" width="3.0e-2" y="-1.4999999999999555e-2" height="3.0e-2"/><rect x="0.985" width="2.9999999999999916e-2" y="-1.4999999999999555e-2" height="3.0e-2"/><rect x="0.985" width="2.9999999999999916e-2" y="-0.9524999999999998" height="3.0000000000000027e-2"/><rect x="3.261904761904767e-2" width="3.0e-2" y="-0.9524999999999998" height="3.0000000000000027e-2"/><rect x="3.261904761904767e-2" width="3.0e-2" y="-1.4999999999999555e-2" height="3.0e-2"/></g></g><g class="pathtext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.761904761904763e-2" fill-opacity="1.0" text-anchor="middle"><text x="4.761904761904767e-2" y="-4.687499999999957e-2">StartP (Point 0 0)</text><text x="0.523809523809524" y="4.440892098500626e-16">LineP (Point 1 0)</text><text x="0.8095238095238099" y="-0.46874999999999967">CubicP (Point 0.2 0) (Point 0.25 1) (Point 1 1)</text><text x="0.4285714285714287" y="-1.0312499999999998">QuadP (Point (-1) 2) (Point 0 1)</text><text x="4.761904761904767e-2" y="-0.37499999999999967">ArcP (ArcInfo (Point 1 1) (-pi / 6) False False) (Point 0 0)</text></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5952380952380953" width="1.908333333333334" y="-1.5" height="1.5165000000000004"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6252380952380954, 6.661338147750939e-16)"><polyline points="-0.6252380952380954,1.5000000000000666e-2+-0.6252380952380954,-1.4999999999999333e-2"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.18749999999999942)"><polyline points="-0.6252380952380954,-0.17249999999999943+-0.6252380952380954,-0.2024999999999994"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.3749999999999995)"><polyline points="-0.6252380952380954,-0.3599999999999995+-0.6252380952380954,-0.3899999999999995"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.5624999999999997)"><polyline points="-0.6252380952380954,-0.5474999999999997+-0.6252380952380954,-0.5774999999999997"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.7499999999999997)"><polyline points="-0.6252380952380954,-0.7349999999999997+-0.6252380952380954,-0.7649999999999997"/></g><g transform="rotate(-90.0, -0.6252380952380954, -0.9374999999999998)"><polyline points="-0.6252380952380954,-0.9224999999999998+-0.6252380952380954,-0.9524999999999998"/></g><g transform="rotate(-90.0, -0.6252380952380954, -1.125)"><polyline points="-0.6252380952380954,-1.11+-0.6252380952380954,-1.14"/></g><g transform="rotate(-90.0, -0.6252380952380954, -1.3125)"><polyline points="-0.6252380952380954,-1.2975+-0.6252380952380954,-1.3275"/></g><g transform="rotate(-90.0, -0.6252380952380954, -1.5)"><polyline points="-0.6252380952380954,-1.485+-0.6252380952380954,-1.515"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.0e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6612380952380954" y="1.3750000000000668e-2">0.00</text><text x="-0.6612380952380954" y="-0.1737499999999994">0.20</text><text x="-0.6612380952380954" y="-0.3612499999999995">0.40</text><text x="-0.6612380952380954" y="-0.5487499999999996">0.60</text><text x="-0.6612380952380954" y="-0.7362499999999996">0.80</text><text x="-0.6612380952380954" y="-0.9237499999999997">1.00</text><text x="-0.6612380952380954" y="-1.11125">1.20</text><text x="-0.6612380952380954" y="-1.29875">1.40</text><text x="-0.6612380952380954" y="-1.48625">1.60</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.33333333333333337,6.661338147750939e-16+1.0,6.661338147750939e-16"/><polyline points="-0.33333333333333337,-0.18749999999999942+1.0,-0.18749999999999942"/><polyline points="-0.33333333333333337,-0.3749999999999995+1.0,-0.3749999999999995"/><polyline points="-0.33333333333333337,-0.5624999999999997+1.0,-0.5624999999999997"/><polyline points="-0.33333333333333337,-0.7499999999999997+1.0,-0.7499999999999997"/><polyline points="-0.33333333333333337,-0.9374999999999998+1.0,-0.9374999999999998"/><polyline points="-0.33333333333333337,-1.125+1.0,-1.125"/><polyline points="-0.33333333333333337,-1.3125+1.0,-1.3125"/><polyline points="-0.33333333333333337,-1.5+1.0,-1.5"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6092380952380954" width="4.0000000000000036e-3" y="-1.502" height="1.5040000000000007"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.33333333333333337,6.150000000000044e-2+-0.33333333333333337,3.1500000000000444e-2"/><polyline points="-0.14285714285714285,6.150000000000044e-2+-0.14285714285714285,3.1500000000000444e-2"/><polyline points="4.761904761904767e-2,6.150000000000044e-2+4.761904761904767e-2,3.1500000000000444e-2"/><polyline points="0.23809523809523825,6.150000000000044e-2+0.23809523809523825,3.1500000000000444e-2"/><polyline points="0.4285714285714287,6.150000000000044e-2+0.4285714285714287,3.1500000000000444e-2"/><polyline points="0.6190476190476192,6.150000000000044e-2+0.6190476190476192,3.1500000000000444e-2"/><polyline points="0.8095238095238099,6.150000000000044e-2+0.8095238095238099,3.1500000000000444e-2"/><polyline points="1.0,6.150000000000044e-2+1.0,3.1500000000000444e-2"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="5.0e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.33333333333333337" y="0.11000000000000046">-0.40</text><text x="-0.14285714285714285" y="0.11000000000000046">-0.20</text><text x="4.761904761904767e-2" y="0.11000000000000046"> 0.00</text><text x="0.23809523809523825" y="0.11000000000000046"> 0.20</text><text x="0.4285714285714287" y="0.11000000000000046"> 0.40</text><text x="0.6190476190476192" y="0.11000000000000046"> 0.60</text><text x="0.8095238095238099" y="0.11000000000000046"> 0.80</text><text x="1.0" y="0.11000000000000046"> 1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.33333333333333337,6.661338147750939e-16+-0.33333333333333337,-1.5"/><polyline points="-0.14285714285714285,6.661338147750939e-16+-0.14285714285714285,-1.5"/><polyline points="4.761904761904767e-2,6.661338147750939e-16+4.761904761904767e-2,-1.5"/><polyline points="0.23809523809523825,6.661338147750939e-16+0.23809523809523825,-1.5"/><polyline points="0.4285714285714287,6.661338147750939e-16+0.4285714285714287,-1.5"/><polyline points="0.6190476190476192,6.661338147750939e-16+0.6190476190476192,-1.5"/><polyline points="0.8095238095238099,6.661338147750939e-16+0.8095238095238099,-1.5"/><polyline points="1.0,6.661338147750939e-16+1.0,-1.5"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.33533333333333337" width="1.3373333333333335" y="2.6500000000000447e-2" height="3.999999999999997e-3"/></g></g></g></g></svg>
other/quad.svg view
@@ -1,145 +1,170 @@-<svg height="300.0" width="332.5498942989464" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.6823211801526162 -0.5833034558344269 1.2811423603052323 1.1557444903171854"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8928651148670972" y="-0.5" width="0.9912594250674862" x="-0.45893824491487023"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.39286511486709713-0.532321180152616,0.39286511486709713"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.30357860338038745-0.532321180152616,0.30357860338038745"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.2142920918936777-0.532321180152616,0.2142920918936777"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.12500558040696802-0.532321180152616,0.12500558040696802"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,3.5719068920258334e-2-0.532321180152616,3.5719068920258334e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-5.3567442566451406e-2-0.532321180152616,-5.3567442566451406e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.14285395405316115-0.532321180152616,-0.14285395405316115"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.2321404655398709-0.532321180152616,-0.2321404655398709"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.3214269770265804-0.532321180152616,-0.3214269770265804"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.41071348851329004-0.532321180152616,-0.41071348851329004"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,-0.5-0.532321180152616,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4058116590326699" x="-0.5323211801526162">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.31652514754596034" x="-0.5323211801526162">-0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.2272386360592506" x="-0.5323211801526162">-0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.1379521245725409" x="-0.5323211801526162">-0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="4.866561308583123e-2" x="-0.5323211801526162">-0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.062089840087857e-2" x="-0.5323211801526162">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.1299074098875883" x="-0.5323211801526162">0.2</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.21919392137429783" x="-0.5323211801526162">0.4</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.30848043286100757" x="-0.5323211801526162">0.6</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3977669443477173" x="-0.5323211801526162">0.8</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.48705345583442683" x="-0.5323211801526162">1</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.5015624001927721, 0.39286511486709713)"><polyline points="-0.5015624001927721,0.40786511486709714--0.5015624001927721,0.3778651148670971"/></g><g transform="rotate(-90.0, -0.5015624001927721, 0.30357860338038745)"><polyline points="-0.5015624001927721,0.31857860338038746--0.5015624001927721,0.28857860338038743"/></g><g transform="rotate(-90.0, -0.5015624001927721, 0.2142920918936777)"><polyline points="-0.5015624001927721,0.22929209189367772--0.5015624001927721,0.1992920918936777"/></g><g transform="rotate(-90.0, -0.5015624001927721, 0.12500558040696802)"><polyline points="-0.5015624001927721,0.14000558040696803--0.5015624001927721,0.11000558040696802"/></g><g transform="rotate(-90.0, -0.5015624001927721, 3.5719068920258334e-2)"><polyline points="-0.5015624001927721,5.0719068920258334e-2--0.5015624001927721,2.0719068920258335e-2"/></g><g transform="rotate(-90.0, -0.5015624001927721, -5.3567442566451406e-2)"><polyline points="-0.5015624001927721,-3.856744256645141e-2--0.5015624001927721,-6.85674425664514e-2"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.14285395405316115)"><polyline points="-0.5015624001927721,-0.12785395405316113--0.5015624001927721,-0.15785395405316116"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.2321404655398709)"><polyline points="-0.5015624001927721,-0.21714046553987087--0.5015624001927721,-0.2471404655398709"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.3214269770265804)"><polyline points="-0.5015624001927721,-0.3064269770265804--0.5015624001927721,-0.3364269770265804"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.41071348851329004)"><polyline points="-0.5015624001927721,-0.39571348851329--0.5015624001927721,-0.42571348851329005"/></g><g transform="rotate(-90.0, -0.5015624001927721, -0.5)"><polyline points="-0.5015624001927721,-0.485--0.5015624001927721,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.8928651148670972" y="-0.5" width="3.965037700269958e-3" x="-0.4891716573794286"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.39286511486709713--0.45893824491487023,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.35981230240812156,0.39286511486709713--0.35981230240812156,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.26068635990137295,0.39286511486709713--0.26068635990137295,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.16156041739462423,0.39286511486709713--0.16156041739462423,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-6.2434474887875624e-2,0.39286511486709713--6.2434474887875624e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="3.6691467618872986e-2,0.39286511486709713-3.6691467618872986e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.13581741012562165,0.39286511486709713-0.13581741012562165,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.23494335263237032,0.39286511486709713-0.23494335263237032,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.334069295139119,0.39286511486709713-0.334069295139119,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.43319523764586754,0.39286511486709713-0.43319523764586754,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.532321180152616,0.39286511486709713-0.532321180152616,-0.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.45893824491487023">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.35981230240812156">0.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.26068635990137295">0.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-0.16156041739462423">0.6</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="-6.2434474887875624e-2">0.8</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="3.6691467618872986e-2">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.13581741012562165">1.2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.23494335263237032">1.4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.334069295139119">1.6</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.43319523764586754">1.8</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.274482758620691e-2"><text y="0.5" x="0.532321180152616">2</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.45893824491487023,0.44625831480638223--0.45893824491487023,0.4162583148063822"/><polyline points="-0.35981230240812156,0.44625831480638223--0.35981230240812156,0.4162583148063822"/><polyline points="-0.26068635990137295,0.44625831480638223--0.26068635990137295,0.4162583148063822"/><polyline points="-0.16156041739462423,0.44625831480638223--0.16156041739462423,0.4162583148063822"/><polyline points="-6.2434474887875624e-2,0.44625831480638223--6.2434474887875624e-2,0.4162583148063822"/><polyline points="3.6691467618872986e-2,0.44625831480638223-3.6691467618872986e-2,0.4162583148063822"/><polyline points="0.13581741012562165,0.44625831480638223-0.13581741012562165,0.4162583148063822"/><polyline points="0.23494335263237032,0.44625831480638223-0.23494335263237032,0.4162583148063822"/><polyline points="0.334069295139119,0.44625831480638223-0.334069295139119,0.4162583148063822"/><polyline points="0.43319523764586754,0.44625831480638223-0.43319523764586754,0.4162583148063822"/><polyline points="0.532321180152616,0.44625831480638223-0.532321180152616,0.4162583148063822"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.5714604594683785e-3" y="0.41652604041107516" width="0.9912594250674862" x="-0.45893824491487023"/></g><g fill-opacity="0.1" stroke-opacity="0.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#000000"><path d="M -0.4589,-0.0536 Q 0.5323,0.3929 0.0367,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="2.0e-3" stroke="#a6cfe3"><polyline points="-0.45893824491487023,-5.3567442566451406e-2--0.43926174532728063,-4.477272118501041e-2--0.41988262356721123,-3.624585933802971e-2--0.40080087963466215,-2.798685702550907e-2--0.3820165135296333,-1.9995714247448615e-2--0.3635295252521247,-1.2272431003848006e-2--0.3453399148021363,-4.817007294707909e-3--0.32744768217966813,2.3705568799722854e-3--0.3098528273847203,9.2902615201923e-3--0.29255535041729264,1.5942106625952135e-2--0.2755552512773852,2.23260921972519e-2--0.2588525299649981,2.8442218234091488e-2--0.2424471864801313,3.4290484736470894e-2--0.22633922082278457,3.98708917043904e-2--0.2105286329929581,4.518343913784956e-2--0.195015422990652,5.022812703684876e-2--0.17979959081586616,5.500495540138767e-2--0.16488113646860036,5.9513924231466564e-2--0.15026005994885494,6.375503352708523e-2--0.13593636125662983,6.772828328824382e-2--0.12191004039192482,7.143367351494223e-2--0.10818109735474019,7.487120420718058e-2--9.474953214507575e-2,7.804087536495868e-2--8.161534476293142e-2,8.094268698827678e-2--6.877853520830757e-2,8.35766390771347e-2--5.623910348120387e-2,8.59427316315326e-2--4.399704958162032e-2,8.804096465147021e-2--3.205237350955725e-2,8.98713381369477e-2--2.0405075265014228e-2,9.143385208796523e-2--9.055154847991576e-3,9.272850650452247e-2-1.9973877415109254e-3,9.375530138661958e-2-1.2752552503493053e-2,9.451423673425657e-2-2.321033943795514e-2,9.50053125474336e-2-3.3370748544896855e-2,9.52285288261503e-2-4.323377982431842e-2,9.518388557040697e-2-5.279943327621961e-2,9.487138278020352e-2-6.206770890060065e-2,9.429102045553983e-2-7.103860669746143e-2,9.344279859641613e-2-7.971212666680183e-2,9.232671720283225e-2-8.80882688086222e-2,9.094277627478825e-2-9.616703312292219e-2,8.929097581228418e-2-0.10394841960970191,8.737131581531987e-2-0.11143242826896149,8.51837962838955e-2-0.1186190591007007,8.2728417218011e-2-0.12550831210491997,8.000517861766637e-2-0.13210018728161854,7.701408048286157e-2-0.13839468463079718,7.37551228135967e-2-0.14439180415245545,7.022830560987159e-2-0.15009154584659323,6.643362887168641e-2-0.1554939097132113,6.237109259904122e-2-0.1605988957523089,5.804069679193574e-2-0.16540650396388623,5.344244145037025e-2-0.1699167343479432,4.8576326574344464e-2-0.17412958690448,4.344235216385878e-2-0.17804506163349665,3.80405182189128e-2-0.18166315853499282,3.23708247395067e-2-0.18498387760896895,2.6433271725640528e-2-0.1880072188554247,2.0227859177314234e-2-0.19073318227436042,1.375458709452776e-2-0.19316176786577566,7.013455477281272e-3-0.19529297562967074,4.464325574382588e-6-0.19712680556604556,-7.272386360592353e-3-0.19866325767490034,-1.4817096581219436e-2-0.19990233195623452,-2.2629666336306475e-2-0.20084402841004867,-3.0710095625853695e-2-0.20148834703634255,-3.9058384449861094e-2-0.20183528783511606,-4.767453280832845e-2-0.20188485080636953,-5.655854070125621e-2-0.20163703595010274,-6.571040812864393e-2-0.20109184326631557,-7.513013509049193e-2-0.20024927275500815,-8.48177215867999e-2-0.19910932441618068,-9.477316761756782e-2-0.19767199824983284,-0.10499647318279604-0.19593729425596462,-0.11548763828248454-0.19390521243457637,-0.126246662916633-0.19157575278566785,-0.13727354708524175-0.18894891530923896,-0.14856829078831058-0.1860247000052898,-0.16013089402583935-0.1828031068738204,-0.17196135679782854-0.17928413591483094,-0.18405967910427745-0.17546778712832112,-0.196425860945187-0.17135406051429092,-0.2090599023205565-0.16694295607274057,-0.22196180323038595-0.16223447380367007,-0.23513156367467558-0.1572286137070792,-0.24856918365342529-0.15192537578296827,-0.26227466316663517-0.1463247600313371,-0.27624800221430523-0.14042676645218544,-0.2904892007964356-0.13423139504551374,-0.3049982589130259-0.12773864581132155,-0.3197751765640764-0.12094851874960932,-0.33481995374958695-0.11386101386037684,-0.3501325904695577-0.10647613114362398,-0.3657130867239884-9.879387059935085e-2,-0.3815614425128795-9.08142322275578e-2,-0.39767765783623066-8.253721602824415e-2,-0.4140617326940419-7.396282200141058e-2,-0.430713667086313-6.509105014705663e-2,-0.4476334610130446-5.5921900465182195e-2,-0.46482111447423624-4.645537295578761e-2,-0.482276627469888-3.6691467618872986e-2,-0.5"/></g><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0e-2" y="-6.85674425664514e-2" width="3.0000000000000027e-2" x="-0.47393824491487024"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0e-2" x="2.1691467618872987e-2"/><rect height="3.0000000000000027e-2" y="0.3778651148670971" width="3.0000000000000027e-2" x="0.517321180152616"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#6666cc" stroke-width="2.0e-3" stroke="#808080"><rect height="0.5952434099113981" y="-0.5" width="0.6608396167116576" x="-0.45893824491487023"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="450.74399222262986" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7049708234277069 -0.47438340177220667 1.4549708234277068 0.9683795115625675" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="quad"><g fill="rgb(66%, 7%, 55%)" stroke="rgb(0%, 0%, 0%)" stroke-width="1.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M -0.5880,0.0169 Q 0.3116,0.4006 -0.1382,-0.3667"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="-0.5880213961530149,1.6922516142470367e-2+-0.5701641182191485,2.448081649656314e-2+-0.5525767235789928,3.180891480941461e-2+-0.535259212232548,3.890681108102473e-2+-0.5182115841798142,4.577450531139343e-2+-0.501433839420791,5.2411997500520724e-2+-0.4849259779554787,5.881928764840655e-2+-0.4686879997838772,6.499637575505102e-2+-0.45271990490598657,7.094326182045407e-2+-0.4370216933218068,7.665994584461566e-2+-0.42159336503133776,8.214642782753595e-2+-0.4064349200345796,8.740270776921472e-2+-0.3915463583315323,9.242878566965207e-2+-0.3769276799221958,9.722466152884812e-2+-0.36257888480657013,0.10179033534680276+-0.3484999729846553,0.10612580712351594+-0.3346909444564513,0.1102310768589877+-0.3211517992219581,0.1141061445532181+-0.30788253728117565,0.11775101020620704+-0.29488315863410414,0.12116567381795462+-0.2821536632807434,0.12435013538846074+-0.2696940512210936,0.1273043949177255+-0.2575043224551545,0.13002845240574873+-0.24558447698292635,0.13252230785253072+-0.2339345148044089,0.13478596125807119+-0.22255443591960233,0.1368194126223703+-0.21144424032850662,0.138622661945428+-0.2006039280311217,0.14019570922724428+-0.19003349902744765,0.14153855446781916+-0.1797329533174844,0.14265119766715262+-0.1697022909012319,0.14353363882524467+-0.15994151177869037,0.1441858779420953+-0.15045061594985953,0.14460791501770465+-0.1412296034147396,0.14479975005207246+-0.1322784741733306,0.14476138304519887+-0.12359722822563213,0.1444928139970839+-0.11518586557164479,0.14399404290772755+-0.10704438621136814,0.14326506977712977+-9.917279014480229e-2,0.14230589460529053+-9.157107737194736e-2,0.14111651739220993+-8.423924789280313e-2,0.13969693813788792+-7.71773017073697e-2,0.1380471568423245+-7.038523881564729e-2,0.1361671735055197+-6.386305921763569e-2,0.13405698812747346+-5.761076291333467e-2,0.13171660070818586+-5.1628349902744786e-2,0.12914601124765668+-4.59158201858656e-2,0.1263452197458863+-4.047317376269732e-2,0.12331422620287436+-3.530041063323974e-2,0.12005303061862105+-3.0397530797492966e-2,0.11656163299312644+-2.5764534255457106e-2,0.11284003332639037+-2.140142100713216e-2,0.10888823161841282+-1.7308191052517907e-2,0.10470622786919387+-1.348484439161457e-2,0.10029402207873361+-9.931381024421815e-3,9.565161424703189e-2+-6.647800950940197e-3,9.077900437408865e-2+-3.6341041711692723e-3,8.567619245990415e-2+-8.902906851092629e-4,8.034317850447825e-2+1.5836395072399423e-3,7.477996250781088e-2+3.7876864058786763e-3,6.898654446990216e-2+5.72185001080594e-3,6.29629243907519e-2+7.386130322022844e-3,5.6709102270360356e-2+8.780527339528721e-3,5.022507810872734e-2+9.905041063323905e-3,4.3510851905852854e-2+1.0759671493408174e-2,3.6566423661737124e-2+1.134441862978175e-2,2.939179337637987e-2+1.1659282472444299e-2,2.1986961049781262e-2+1.1704263021396155e-2,1.435192668194113e-2+1.1479360276637096e-2,6.4866902728596965e-3+1.0984574238167233e-2,-1.6087481774630374e-3+1.0219904905986565e-2,-9.934388669027239e-3+9.185352280095094e-3,-1.8490231201832907e-2+7.880916360492707e-3,-2.7276275775879988e-2+6.306597147179516e-3,-3.6292522391168536e-2+4.462394640155742e-3,-4.553897104769833e-2+2.3483088394207208e-3,-5.50156217454697e-2+-3.5660255024883014e-5,-6.472247448448254e-2+-2.689512643181402e-3,-7.465952926473662e-2+-5.613248325048725e-3,-8.482678608623206e-2+-8.806867300626742e-3,-9.522424494896897e-2+-1.2270369569915784e-2,-0.10585190585294746+-1.600375513291552e-2,-0.11670976879816719+-2.0007023989626282e-2,-0.12779783378462806+-2.4280176140047627e-2,-0.13911610081233072+-2.8823211584179886e-2,-0.15066456988127463+-3.363613032202306e-2,-0.16244324099146012+-3.871893235357682e-2,-0.17445211414288686+-4.40716176788416e-2,-0.18669118933555506+-4.969418629781719e-2,-0.19916046656946473+-5.558663821050358e-2,-0.21185994584461576+-6.174897341690089e-2,-0.22478962716100825+-6.8181191917009e-2,-0.237949510518642+-7.48832937108278e-2,-0.2513395959175173+-8.185527879835752e-2,-0.2649598833576339+-8.909714717959794e-2,-0.2788103728389919+-9.660889885454937e-2,-0.2928910643615913+-0.10439053382321162,-0.30720195792543226+-0.11244205208558455,-0.32174305353051436+-0.12076345364166852,-0.33651435117683803+-0.12935473849146317,-0.3515158508644033+-0.13821590663496874,-0.3667475525932098"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.6030213961530149" width="3.0000000000000027e-2" y="1.922516142470368e-3" height="3.0e-2"/><rect x="-0.15321590663496876" width="3.0000000000000013e-2" y="-0.3817475525932098" height="3.0000000000000027e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="0.40059258487815036" cx="0.3115895828830775" r="1.5e-2"/></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.0e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="-0.5880213961530149" width="0.5997406526907282" y="-0.3667475525932098" height="0.5115600916475735"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5979171169224119" width="0.9194024205748864" y="-0.3794086648614873" height="0.7926623620079151"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6159093365031337, 0.40059258487815036)"><polyline points="-0.6159093365031337,0.4155925848781504+-0.6159093365031337,0.38559258487815035"/></g><g transform="rotate(-90.0, -0.6159093365031337, 0.32385857113101435)"><polyline points="-0.6159093365031337,0.33885857113101436+-0.6159093365031337,0.30885857113101434"/></g><g transform="rotate(-90.0, -0.6159093365031337, 0.24712455738387834)"><polyline points="-0.6159093365031337,0.26212455738387835+-0.6159093365031337,0.23212455738387833"/></g><g transform="rotate(-90.0, -0.6159093365031337, 0.17039054363674233)"><polyline points="-0.6159093365031337,0.18539054363674234+-0.6159093365031337,0.15539054363674232"/></g><g transform="rotate(-90.0, -0.6159093365031337, 9.365652988960627e-2)"><polyline points="-0.6159093365031337,0.10865652988960627+-0.6159093365031337,7.865652988960627e-2"/></g><g transform="rotate(-90.0, -0.6159093365031337, 1.6922516142470367e-2)"><polyline points="-0.6159093365031337,3.192251614247037e-2+-0.6159093365031337,1.922516142470368e-3"/></g><g transform="rotate(-90.0, -0.6159093365031337, -5.981149760466575e-2)"><polyline points="-0.6159093365031337,-4.4811497604665754e-2+-0.6159093365031337,-7.481149760466575e-2"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.13654551135180182)"><polyline points="-0.6159093365031337,-0.12154551135180182+-0.6159093365031337,-0.15154551135180183"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.21327952509893777)"><polyline points="-0.6159093365031337,-0.19827952509893776+-0.6159093365031337,-0.22827952509893779"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.29001353884607384)"><polyline points="-0.6159093365031337,-0.2750135388460738+-0.6159093365031337,-0.30501353884607385"/></g><g transform="rotate(-90.0, -0.6159093365031337, -0.3667475525932098)"><polyline points="-0.6159093365031337,-0.3517475525932098+-0.6159093365031337,-0.3817475525932098"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4111435117683816">-1.00</text><text x="-0.6375" y="0.33440949802124553">-0.80</text><text x="-0.6375" y="0.2576754842741095">-0.60</text><text x="-0.6375" y="0.18094147052697357">-0.40</text><text x="-0.6375" y="0.10420745677983745">-0.20</text><text x="-0.6375" y="2.747344303270155e-2"> 0.00</text><text x="-0.6375" y="-4.926057071443457e-2"> 0.20</text><text x="-0.6375" y="-0.12599458446157064"> 0.40</text><text x="-0.6375" y="-0.20272859820870648"> 0.60</text><text x="-0.6375" y="-0.27946261195584265"> 0.80</text><text x="-0.6375" y="-0.3561966257029785"> 1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5880213961530149,0.40059258487815036+0.3115895828830775,0.40059258487815036"/><polyline points="-0.5880213961530149,0.32385857113101435+0.3115895828830775,0.32385857113101435"/><polyline points="-0.5880213961530149,0.24712455738387834+0.3115895828830775,0.24712455738387834"/><polyline points="-0.5880213961530149,0.17039054363674233+0.3115895828830775,0.17039054363674233"/><polyline points="-0.5880213961530149,9.365652988960627e-2+0.3115895828830775,9.365652988960627e-2"/><polyline points="-0.5880213961530149,1.6922516142470367e-2+0.3115895828830775,1.6922516142470367e-2"/><polyline points="-0.5880213961530149,-5.981149760466575e-2+0.3115895828830775,-5.981149760466575e-2"/><polyline points="-0.5880213961530149,-0.13654551135180182+0.3115895828830775,-0.13654551135180182"/><polyline points="-0.5880213961530149,-0.21327952509893777+0.3115895828830775,-0.21327952509893777"/><polyline points="-0.5880213961530149,-0.29001353884607384+0.3115895828830775,-0.29001353884607384"/><polyline points="-0.5880213961530149,-0.3667475525932098+0.3115895828830775,-0.3667475525932098"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6063134860600821" width="2.398962610762889e-3" y="-0.36828223286815254" height="0.7704094980212457"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5880213961530149,0.45127390127056866+-0.5880213961530149,0.42127390127056863"/><polyline points="-0.4980602982494056,0.45127390127056866+-0.4980602982494056,0.42127390127056863"/><polyline points="-0.4080992003457964,0.45127390127056866+-0.4080992003457964,0.42127390127056863"/><polyline points="-0.3181381024421871,0.45127390127056866+-0.3181381024421871,0.42127390127056863"/><polyline points="-0.22817700453857787,0.45127390127056866+-0.22817700453857787,0.42127390127056863"/><polyline points="-0.13821590663496874,0.45127390127056866+-0.13821590663496874,0.42127390127056863"/><polyline points="-4.8254808731359344e-2,0.45127390127056866+-4.8254808731359344e-2,0.42127390127056863"/><polyline points="4.170628917224983e-2,0.45127390127056866+4.170628917224983e-2,0.42127390127056863"/><polyline points="0.131667387075859,0.45127390127056866+0.131667387075859,0.42127390127056863"/><polyline points="0.2216284849794684,0.45127390127056866+0.2216284849794684,0.42127390127056863"/><polyline points="0.3115895828830775,0.45127390127056866+0.3115895828830775,0.42127390127056863"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5880213961530149" y="0.485">0.00</text><text x="-0.4980602982494056" y="0.485">0.20</text><text x="-0.4080992003457964" y="0.485">0.40</text><text x="-0.3181381024421871" y="0.485">0.60</text><text x="-0.22817700453857787" y="0.485">0.80</text><text x="-0.13821590663496874" y="0.485">1.00</text><text x="-4.8254808731359344e-2" y="0.485">1.20</text><text x="4.170628917224983e-2" y="0.485">1.40</text><text x="0.131667387075859" y="0.485">1.60</text><text x="0.2216284849794684" y="0.485">1.80</text><text x="0.3115895828830775" y="0.485">2.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5880213961530149,0.40059258487815036+-0.5880213961530149,-0.3667475525932098"/><polyline points="-0.4980602982494056,0.40059258487815036+-0.4980602982494056,-0.3667475525932098"/><polyline points="-0.4080992003457964,0.40059258487815036+-0.4080992003457964,-0.3667475525932098"/><polyline points="-0.3181381024421871,0.40059258487815036+-0.3181381024421871,-0.3667475525932098"/><polyline points="-0.22817700453857787,0.40059258487815036+-0.22817700453857787,-0.3667475525932098"/><polyline points="-0.13821590663496874,0.40059258487815036+-0.13821590663496874,-0.3667475525932098"/><polyline points="-4.8254808731359344e-2,0.40059258487815036+-4.8254808731359344e-2,-0.3667475525932098"/><polyline points="4.170628917224983e-2,0.40059258487815036+4.170628917224983e-2,-0.3667475525932098"/><polyline points="0.131667387075859,0.40059258487815036+0.131667387075859,-0.3667475525932098"/><polyline points="0.2216284849794684,0.40059258487815036+0.2216284849794684,-0.3667475525932098"/><polyline points="0.3115895828830775,0.40059258487815036+0.3115895828830775,-0.3667475525932098"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5892208774583964" width="0.9020099416468553" y="0.4209270985211414" height="3.069360549885436e-3"/></g></g></g><g class="legend"><g class="legendBorder"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="2.5e-3" fill-opacity="0.0" stroke-opacity="1.0"><rect x="0.38355846120596504" width="0.3634428355305812" y="-0.2546839200166634" height="0.34977921266402856"/></g></g><g class="legendContent"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="6.440168714851074e-2">Bounding Box</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(40%, 40%, 40%)" stroke-width="2.5e-3" fill-opacity="5.0e-2" stroke-opacity="1.0"><rect x="0.6714339744975144" width="2.9987032634536392e-2" y="3.562643199333476e-2" height="3.836700687356792e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="3.0144761508018036e-3">Path Control Point</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><circle cy="-6.577275567590135e-3" cx="0.6864274908147825" r="2.5e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="-5.837273484690686e-2">Path Endpoints</text></g><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="0.6614274908147825" width="5.0000000000000044e-2" y="-9.296448656529907e-2" height="4.9999999999999996e-2"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="-0.11975994584461569">Path Chord</text></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="2.0e-3" stroke-opacity="1.0"><polyline points="0.6714339744975144,-0.1293516975630078+0.7314080397665872,-0.1293516975630078"/></g><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="2.998703263453641e-2" fill-opacity="1.0" text-anchor="start"><text x="0.3985519775232331" y="-0.18114715684232452">Path Fill</text></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(0%, 0%, 0%)" stroke-width="5.0e-2" fill-opacity="0.2" stroke-opacity="0.0"><path d="M 0.6714,-0.1779 Q 0.7314,-0.1396 0.7014,-0.2163"/></g></g></g><g class="title"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.7979252215258256e-2" fill-opacity="1.0" text-anchor="middle"><text x="2.2514588286146497e-2" y="-0.43600000000000005">QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))</text></g></g></g></svg>
other/rect.svg view
@@ -1,23 +1,36 @@-<svg height="300.0" width="442.8070175438596" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.795 -0.5225 1.5775000000000001 1.06875"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9019165727170236" y="-0.5" width="1.5" x="-0.75"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.75,0.40191657271702363--0.75,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.6,0.40191657271702363--0.6,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.44999999999999996,0.40191657271702363--0.44999999999999996,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.29999999999999993,0.40191657271702363--0.29999999999999993,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.1499999999999999,0.40191657271702363--0.1499999999999999,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.0,0.40191657271702363-0.0,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.15000000000000013,0.40191657271702363-0.15000000000000013,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.2999999999999998,0.40191657271702363-0.2999999999999998,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.4500000000000002,0.40191657271702363-0.4500000000000002,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.6000000000000001,0.40191657271702363-0.6000000000000001,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.75,0.40191657271702363-0.75,-0.5"/></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.75">-5</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.6">-4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.44999999999999996">-3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.29999999999999993">-2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.1499999999999999">-1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.0">0</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.15000000000000013">1</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.2999999999999998">2</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.4500000000000002">3</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.6000000000000001">4</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="0.75">5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.75,0.44081736189402476--0.75,0.41081736189402474"/><polyline points="-0.6,0.44081736189402476--0.6,0.41081736189402474"/><polyline points="-0.44999999999999996,0.44081736189402476--0.44999999999999996,0.41081736189402474"/><polyline points="-0.29999999999999993,0.44081736189402476--0.29999999999999993,0.41081736189402474"/><polyline points="-0.1499999999999999,0.44081736189402476--0.1499999999999999,0.41081736189402474"/><polyline points="0.0,0.44081736189402476-0.0,0.41081736189402474"/><polyline points="0.15000000000000013,0.44081736189402476-0.15000000000000013,0.41081736189402474"/><polyline points="0.2999999999999998,0.44081736189402476-0.2999999999999998,0.41081736189402474"/><polyline points="0.4500000000000002,0.44081736189402476-0.4500000000000002,0.41081736189402474"/><polyline points="0.6000000000000001,0.44081736189402476-0.6000000000000001,0.41081736189402474"/><polyline points="0.75,0.44081736189402476-0.75,0.41081736189402474"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6076662908680057e-3" y="0.41093573844419395" width="1.5" x="-0.75"/></g><g fill-opacity="1.0" stroke-opacity="0.0" fill="#a6cfe3" stroke-width="0.0" stroke="#000000"><rect height="5.541566947764309e-6" y="0.40191103115007587" width="2.9999999999999916e-2" x="-0.75"/><rect height="1.447289085471093e-5" y="0.4019020998261689" width="3.0000000000000027e-2" x="-0.72"/><rect height="3.631668593628845e-5" y="0.40188025603108735" width="2.9999999999999916e-2" x="-0.69"/><rect height="8.755588746184317e-5" y="0.4018290168295618" width="2.9999999999999916e-2" x="-0.66"/><rect height="2.0281156633938924e-4" y="0.40171376115068425" width="2.9999999999999916e-2" x="-0.63"/><rect height="4.5136544166002324e-4" y="0.4014652072753636" width="2.9999999999999916e-2" x="-0.6"/><rect height="9.651439906557258e-4" y="0.4009514287263679" width="3.0000000000000138e-2" x="-0.5700000000000001"/><rect height="1.982823867456629e-3" y="0.399933748849567" width="3.0000000000000027e-2" x="-0.5399999999999999"/><rect height="3.913851878907693e-3" y="0.39800272083811594" width="3.0000000000000138e-2" x="-0.51"/><rect height="7.422545252780133e-3" y="0.3944940274642435" width="3.0000000000000027e-2" x="-0.48"/><rect height="1.3524759251840046e-2" y="0.3883918134651836" width="3.0000000000000027e-2" x="-0.44999999999999996"/><rect height="2.3677424095321753e-2" y="0.3782391486217019" width="3.0000000000000027e-2" x="-0.41999999999999993"/><rect height="3.982608200197779e-2" y="0.36209049071504584" width="3.0000000000000027e-2" x="-0.3899999999999999"/><rect height="6.43619116630314e-2" y="0.33755466105399223" width="3.0000000000000027e-2" x="-0.36"/><rect height="9.993520483637786e-2" y="0.3019813678806458" width="3.0000000000000027e-2" x="-0.32999999999999996"/><rect height="0.14908580673874772" y="0.2528307659782759" width="3.0000000000000027e-2" x="-0.29999999999999993"/><rect height="0.21368907209210536" y="0.18822750062491828" width="3.0000000000000027e-2" x="-0.2699999999999999"/><rect height="0.29427715411322636" y="0.10763941860379728" width="3.0000000000000138e-2" x="-0.23999999999999988"/><rect height="0.389366875697028" y="1.2549697019995643e-2" width="3.0000000000000027e-2" x="-0.20999999999999996"/><rect height="0.49498230989314684" y="-9.306573717612321e-2" width="3.0000000000000027e-2" x="-0.17999999999999994"/><rect height="0.6045727585439812" y="-0.20265618582695755" width="3.0000000000000027e-2" x="-0.1499999999999999"/><rect height="0.7094727044568689" y="-0.3075561317398453" width="3.0000000000000027e-2" x="-0.11999999999999988"/><rect height="0.7999282405566247" y="-0.39801166783960107" width="3.0000000000000027e-2" x="-8.999999999999986e-2"/><rect height="0.8665519180629746" y="-0.46463534534595097" width="3.0000000000000027e-2" x="-5.999999999999983e-2"/><rect height="0.9019165727170236" y="-0.5" width="3.0000000000000027e-2" x="-2.9999999999999805e-2"/><rect height="0.9019165727170236" y="-0.5" width="3.0000000000000027e-2" x="0.0"/><rect height="0.8665519180629746" y="-0.46463534534595097" width="3.0000000000000027e-2" x="3.0000000000000027e-2"/><rect height="0.7999282405566244" y="-0.39801166783960074" width="3.0000000000000027e-2" x="6.000000000000005e-2"/><rect height="0.7094727044568686" y="-0.307556131739845" width="3.0000000000000027e-2" x="9.000000000000008e-2"/><rect height="0.604572758543981" y="-0.20265618582695732" width="3.0000000000000027e-2" x="0.1200000000000001"/><rect height="0.4949823098931466" y="-9.306573717612299e-2" width="3.0000000000000027e-2" x="0.15000000000000013"/><rect height="0.38936687569702777" y="1.2549697019995865e-2" width="3.0000000000000027e-2" x="0.18000000000000016"/><rect height="0.2942771541132259" y="0.10763941860379772" width="3.0000000000000027e-2" x="0.2100000000000002"/><rect height="0.21368907209210503" y="0.1882275006249186" width="3.0000000000000027e-2" x="0.2400000000000002"/><rect height="0.1490858067387475" y="0.25283076597827614" width="3.0000000000000027e-2" x="0.27000000000000024"/><rect height="9.993520483637774e-2" y="0.3019813678806459" width="3.000000000000025e-2" x="0.2999999999999998"/><rect height="6.436191166303129e-2" y="0.33755466105399234" width="2.9999999999999805e-2" x="0.33000000000000007"/><rect height="3.982608200197768e-2" y="0.36209049071504595" width="3.000000000000025e-2" x="0.3599999999999999"/><rect height="2.3677424095321642e-2" y="0.378239148621702" width="2.9999999999999805e-2" x="0.3900000000000001"/><rect height="1.3524759251840046e-2" y="0.3883918134651836" width="3.000000000000025e-2" x="0.41999999999999993"/><rect height="7.422545252780133e-3" y="0.3944940274642435" width="2.9999999999999805e-2" x="0.4500000000000002"/><rect height="3.913851878907637e-3" y="0.398002720838116" width="3.000000000000025e-2" x="0.4800000000000002"/><rect height="1.982823867456629e-3" y="0.399933748849567" width="2.9999999999999805e-2" x="0.5100000000000002"/><rect height="9.651439906557258e-4" y="0.4009514287263679" width="3.000000000000025e-2" x="0.54"/><rect height="4.5136544166002324e-4" y="0.4014652072753636" width="2.9999999999999805e-2" x="0.5700000000000003"/><rect height="2.0281156633938924e-4" y="0.40171376115068425" width="2.9999999999999805e-2" x="0.6000000000000001"/><rect height="8.755588746184317e-5" y="0.4018290168295618" width="2.9999999999999805e-2" x="0.6300000000000003"/><rect height="3.631668593628845e-5" y="0.40188025603108735" width="2.9999999999999805e-2" x="0.6600000000000001"/><rect height="1.447289085471093e-5" y="0.4019020998261689" width="2.9999999999999805e-2" x="0.6900000000000004"/><rect height="5.541566947764309e-6" y="0.40191103115007587" width="2.9999999999999805e-2" x="0.7200000000000002"/></g><g fill-opacity="1.0" stroke-opacity="0.0" fill="#1f78b5" stroke-width="0.0" stroke="#000000"><rect height="2.253624368773849e-2" y="0.37938032902928515" width="2.9999999999999916e-2" x="-0.75"/><rect height="2.8649180639473637e-2" y="0.37326739207755" width="3.0000000000000027e-2" x="-0.72"/><rect height="3.60578590373129e-2" y="0.36585871367971073" width="2.9999999999999916e-2" x="-0.69"/><rect height="4.493085910119554e-2" y="0.3569857136158281" width="2.9999999999999916e-2" x="-0.66"/><rect height="5.543021508815271e-2" y="0.3464863576288709" width="2.9999999999999916e-2" x="-0.63"/><rect height="6.77026175940812e-2" y="0.33421395512294244" width="2.9999999999999916e-2" x="-0.6"/><rect height="8.186936308598547e-2" y="0.32004720963103817" width="3.0000000000000138e-2" x="-0.5700000000000001"/><rect height="9.801542299426558e-2" y="0.30390114972275806" width="3.0000000000000027e-2" x="-0.5399999999999999"/><rect height="0.11617815637932072" y="0.2857384163377029" width="3.0000000000000138e-2" x="-0.51"/><rect height="0.1363363294829193" y="0.26558024323410434" width="3.0000000000000027e-2" x="-0.48"/><rect height="0.1584002161211413" y="0.24351635659588233" width="3.0000000000000027e-2" x="-0.44999999999999996"/><rect height="0.18220361833747106" y="0.21971295437955257" width="3.0000000000000027e-2" x="-0.41999999999999993"/><rect height="0.20749865210715862" y="0.194417920609865" width="3.0000000000000027e-2" x="-0.3899999999999999"/><rect height="0.23395407695778547" y="0.16796249575923816" width="3.0000000000000027e-2" x="-0.36"/><rect height="0.26115780560242313" y="0.1407587671146005" width="3.0000000000000027e-2" x="-0.32999999999999996"/><rect height="0.28862401178025143" y="0.1132925609367722" width="3.0000000000000027e-2" x="-0.29999999999999993"/><rect height="0.31580497134978075" y="8.611160136724288e-2" width="3.0000000000000027e-2" x="-0.2699999999999999"/><rect height="0.3421074413706784" y="5.9809131346345246e-2" width="3.0000000000000138e-2" x="-0.23999999999999988"/><rect height="0.3669130297379998" y="3.500354297902386e-2" width="3.0000000000000027e-2" x="-0.20999999999999996"/><rect height="0.3896016643794924" y="1.2314908337531238e-2" width="3.0000000000000027e-2" x="-0.17999999999999994"/><rect height="0.4095769688621528" y="-7.660396145129145e-3" width="3.0000000000000027e-2" x="-0.1499999999999999"/><rect height="0.426292122052789" y="-2.4375549335765356e-2" width="3.0000000000000027e-2" x="-0.11999999999999988"/><rect height="0.4392746499579623" y="-3.735807724093865e-2" width="3.0000000000000027e-2" x="-8.999999999999986e-2"/><rect height="0.44814858652689726" y="-4.623201380987363e-2" width="3.0000000000000027e-2" x="-5.999999999999983e-2"/><rect height="0.4526525547000263" y="-5.0735981983002665e-2" width="3.0000000000000027e-2" x="-2.9999999999999805e-2"/><rect height="0.4526525547000263" y="-5.0735981983002665e-2" width="3.0000000000000027e-2" x="0.0"/><rect height="0.44814858652689726" y="-4.623201380987363e-2" width="3.0000000000000027e-2" x="3.0000000000000027e-2"/><rect height="0.4392746499579623" y="-3.735807724093865e-2" width="3.0000000000000027e-2" x="6.000000000000005e-2"/><rect height="0.4262921220527889" y="-2.4375549335765245e-2" width="3.0000000000000027e-2" x="9.000000000000008e-2"/><rect height="0.4095769688621528" y="-7.660396145129145e-3" width="3.0000000000000027e-2" x="0.1200000000000001"/><rect height="0.3896016643794923" y="1.231490833753135e-2" width="3.0000000000000027e-2" x="0.15000000000000013"/><rect height="0.3669130297379998" y="3.500354297902386e-2" width="3.0000000000000027e-2" x="0.18000000000000016"/><rect height="0.3421074413706783" y="5.980913134634536e-2" width="3.0000000000000027e-2" x="0.2100000000000002"/><rect height="0.31580497134978064" y="8.6111601367243e-2" width="3.0000000000000027e-2" x="0.2400000000000002"/><rect height="0.2886240117802512" y="0.11329256093677242" width="3.0000000000000027e-2" x="0.27000000000000024"/><rect height="0.261157805602423" y="0.1407587671146006" width="3.000000000000025e-2" x="0.2999999999999998"/><rect height="0.23395407695778542" y="0.16796249575923822" width="2.9999999999999805e-2" x="0.33000000000000007"/><rect height="0.2074986521071585" y="0.19441792060986512" width="3.000000000000025e-2" x="0.3599999999999999"/><rect height="0.18220361833747095" y="0.21971295437955268" width="2.9999999999999805e-2" x="0.3900000000000001"/><rect height="0.1584002161211412" y="0.24351635659588244" width="3.000000000000025e-2" x="0.41999999999999993"/><rect height="0.1363363294829193" y="0.26558024323410434" width="2.9999999999999805e-2" x="0.4500000000000002"/><rect height="0.11617815637932061" y="0.285738416337703" width="3.000000000000025e-2" x="0.4800000000000002"/><rect height="9.801542299426558e-2" y="0.30390114972275806" width="2.9999999999999805e-2" x="0.5100000000000002"/><rect height="8.186936308598547e-2" y="0.32004720963103817" width="3.000000000000025e-2" x="0.54"/><rect height="6.770261759408114e-2" y="0.3342139551229425" width="2.9999999999999805e-2" x="0.5700000000000003"/><rect height="5.543021508815277e-2" y="0.34648635762887087" width="2.9999999999999805e-2" x="0.6000000000000001"/><rect height="4.493085910119554e-2" y="0.3569857136158281" width="2.9999999999999805e-2" x="0.6300000000000003"/><rect height="3.60578590373129e-2" y="0.36585871367971073" width="2.9999999999999805e-2" x="0.6600000000000001"/><rect height="2.8649180639473526e-2" y="0.3732673920775501" width="2.9999999999999805e-2" x="0.6900000000000004"/><rect height="2.253624368773849e-2" y="0.37938032902928515" width="2.9999999999999805e-2" x="0.7200000000000002"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="448.85901573886144" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7474268617021277 -0.5 1.4948537234042556 0.9991023936170212" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="rect"><g fill="rgb(2%, 29%, 48%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.7051196808510638" width="2.8204787234042517e-2" y="0.4007717859632665" height="5.534567140419444e-6"/><rect x="-0.6769148936170212" width="2.8204787234042406e-2" y="0.4007628659209244" height="1.4454609482517089e-5"/><rect x="-0.6487101063829787" width="2.8204787234042517e-2" y="0.40074104971774216" height="3.627081266477372e-5"/><rect x="-0.6205053191489361" width="2.8204787234042406e-2" y="0.40068987523880195" height="8.744529160498171e-5"/><rect x="-0.5923005319148936" width="2.8204787234042517e-2" y="0.40057476514465823" height="2.025553857487039e-4"/><rect x="-0.564095744680851" width="2.8204787234042517e-2" y="0.4003265252291367" height="4.507953012702348e-4"/><rect x="-0.5358909574468085" width="2.8204787234042628e-2" y="0.3998133956573891" height="9.639248730178296e-4"/><rect x="-0.5076861702127659" width="2.8204787234042572e-2" y="0.39879700125871337" height="1.9803192716935647e-3"/><rect x="-0.4794813829787234" width="2.8204787234042628e-2" y="0.3968684124173042" height="3.908908113102738e-3"/><rect x="-0.4512765957446808" width="2.8204787234042572e-2" y="0.39336415103494765" height="7.413169495459282e-3"/><rect x="-0.42307180851063825" width="2.8204787234042628e-2" y="0.38726964502224914" height="1.350767550815779e-2"/><rect x="-0.3948670212765956" width="2.8204787234042517e-2" y="0.37712980447535194" height="2.3647516055054996e-2"/><rect x="-0.3666622340425531" width="2.8204787234042572e-2" y="0.36100154467910606" height="3.9775775851300876e-2"/><rect x="-0.3384574468085106" width="2.8204787234042517e-2" y="0.33649670734975734" height="6.428061318064959e-2"/><rect x="-0.31025265957446807" width="2.8204787234042628e-2" y="0.3009683484344774" height="9.980897209592954e-2"/><rect x="-0.28204787234042544" width="2.8204787234042572e-2" y="0.25187983091151095" height="0.14889748961889598"/><rect x="-0.25384308510638287" width="2.8204787234042517e-2" y="0.18735816890545037" height="0.21341915162495656"/><rect x="-0.22563829787234035" width="2.8204787234042628e-2" y="0.10687188138665377" height="0.29390543914375317"/><rect x="-0.19743351063829784" width="2.8204787234042628e-2" y="1.1902271991181046e-2" height="0.3888750485392259"/><rect x="-0.1692287234042552" width="2.8204787234042517e-2" y="-9.357975450627909e-2" height="0.494357075036686"/><rect x="-0.1410239361702127" width="2.8204787234042628e-2" y="-0.2030317744353951" height="0.603809094965802"/><rect x="-0.11281914893617007" width="2.8204787234042517e-2" y="-0.3077992164156882" height="0.7085765369460951"/><rect x="-8.461436170212755e-2" width="2.8204787234042628e-2" y="-0.3981404939793325" height="0.7989178145097394"/><rect x="-5.640957446808492e-2" width="2.8204787234042517e-2" y="-0.46468001606313514" height="0.8654573365935421"/><rect x="-2.8204787234042406e-2" width="2.8204787234042517e-2" y="-0.5" height="0.9007773205304069"/><rect x="0.0" width="2.8204787234042628e-2" y="-0.4999999999999998" height="0.9007773205304067"/><rect x="2.8204787234042628e-2" width="2.8204787234042406e-2" y="-0.46468001606313514" height="0.8654573365935421"/><rect x="5.640957446808503e-2" width="2.8204787234042628e-2" y="-0.39814049397933216" height="0.7989178145097391"/><rect x="8.461436170212766e-2" width="2.8204787234042628e-2" y="-0.30779921641568786" height="0.7085765369460948"/><rect x="0.11281914893617029" width="2.8204787234042517e-2" y="-0.20303177443539466" height="0.6038090949658016"/><rect x="0.1410239361702128" width="2.8204787234042628e-2" y="-9.357975450627887e-2" height="0.4943570750366858"/><rect x="0.16922872340425543" width="2.8204787234042628e-2" y="1.1902271991181268e-2" height="0.38887504853922567"/><rect x="0.19743351063829806" width="2.8204787234042628e-2" y="0.10687188138665421" height="0.2939054391437527"/><rect x="0.2256382978723407" width="2.8204787234042406e-2" y="0.1873581689054507" height="0.21341915162495623"/><rect x="0.2538430851063831" width="2.8204787234042628e-2" y="0.2518798309115112" height="0.1488974896188957"/><rect x="0.2820478723404256" width="2.8204787234042406e-2" y="0.3009683484344775" height="9.980897209592943e-2"/><rect x="0.310252659574468" width="2.820478723404274e-2" y="0.33649670734975745" height="6.428061318064948e-2"/><rect x="0.33845744680851075" width="2.8204787234042517e-2" y="0.36100154467910617" height="3.9775775851300765e-2"/><rect x="0.36666223404255327" width="2.820478723404274e-2" y="0.37712980447535194" height="2.3647516055054996e-2"/><rect x="0.394867021276596" width="2.8204787234042294e-2" y="0.3872696450222492" height="1.3507675508157735e-2"/><rect x="0.4230718085106383" width="2.8204787234042517e-2" y="0.39336415103494765" height="7.413169495459282e-3"/><rect x="0.45127659574468104" width="2.820478723404274e-2" y="0.39686841241730425" height="3.908908113102683e-3"/><rect x="0.47948138297872356" width="2.8204787234042517e-2" y="0.39879700125871337" height="1.9803192716935647e-3"/><rect x="0.5076861702127659" width="2.820478723404296e-2" y="0.3998133956573891" height="9.639248730178296e-4"/><rect x="0.5358909574468088" width="2.8204787234042294e-2" y="0.4003265252291367" height="4.507953012702348e-4"/><rect x="0.5640957446808511" width="2.8204787234042294e-2" y="0.40057476514465823" height="2.025553857487039e-4"/><rect x="0.5923005319148941" width="2.8204787234042294e-2" y="0.40068987523880195" height="8.744529160498171e-5"/><rect x="0.6205053191489364" width="2.8204787234042294e-2" y="0.40074104971774216" height="3.627081266477372e-5"/><rect x="0.6487101063829791" width="2.8204787234042294e-2" y="0.4007628659209244" height="1.4454609482517089e-5"/><rect x="0.6769148936170214" width="2.8204787234042517e-2" y="0.4007717859632665" height="5.534567140419444e-6"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.7051196808510638" width="2.8204787234042517e-2" y="0.37826954340562563" height="2.2507777124781303e-2"/><rect x="-0.6769148936170212" width="2.8204787234042406e-2" y="0.3721643279849052" height="2.861299254550176e-2"/><rect x="-0.6487101063829787" width="2.8204787234042517e-2" y="0.36476500782852633" height="3.60123127018806e-2"/><rect x="-0.6205053191489361" width="2.8204787234042406e-2" y="0.3559032156579572" height="4.487410487244975e-2"/><rect x="-0.5923005319148936" width="2.8204787234042517e-2" y="0.3454171218890677" height="5.536019864133923e-2"/><rect x="-0.564095744680851" width="2.8204787234042517e-2" y="0.33316022121758027" height="6.761709931282667e-2"/><rect x="-0.5358909574468085" width="2.8204787234042628e-2" y="0.3190113703916208" height="8.176595013878613e-2"/><rect x="-0.5076861702127659" width="2.8204787234042572e-2" y="0.3028857053121" height="9.789161521830692e-2"/><rect x="-0.4794813829787234" width="2.8204787234042628e-2" y="0.2847459141085612" height="0.11603140642184573"/><rect x="-0.4512765957446808" width="2.8204787234042572e-2" y="0.2646132037179021" height="0.13616411681250484"/><rect x="-0.42307180851063825" width="2.8204787234042628e-2" y="0.24257718698678488" height="0.15820013354362206"/><rect x="-0.3948670212765956" width="2.8204787234042517e-2" y="0.2188038519394641" height="0.18197346859094282"/><rect x="-0.3666622340425531" width="2.8204787234042572e-2" y="0.19354076948700966" height="0.20723655104339728"/><rect x="-0.3384574468085106" width="2.8204787234042517e-2" y="0.167118761696808" height="0.23365855883359893"/><rect x="-0.31025265957446807" width="2.8204787234042628e-2" y="0.13994939532943634" height="0.2608279252009706"/><rect x="-0.28204787234042544" width="2.8204787234042572e-2" y="0.11251788297628401" height="0.2882594375541229"/><rect x="-0.25384308510638287" width="2.8204787234042517e-2" y="8.537125692335767e-2" height="0.31540606360704926"/><rect x="-0.22563829787234035" width="2.8204787234042628e-2" y="5.9102010758625034e-2" height="0.3416753097717819"/><rect x="-0.19743351063829784" width="2.8204787234042628e-2" y="3.4327755467602084e-2" height="0.36644956506280485"/><rect x="-0.1692287234042552" width="2.8204787234042517e-2" y="1.1667779881069262e-2" height="0.38910954064933767"/><rect x="-0.1410239361702127" width="2.8204787234042628e-2" y="-8.282292878393327e-3" height="0.40905961340880026"/><rect x="-0.11281914893617007" width="2.8204787234042517e-2" y="-2.4976332392445677e-2" height="0.4257536529228526"/><rect x="-8.461436170212755e-2" width="2.8204787234042628e-2" y="-3.794246147121838e-2" height="0.4387197820016253"/><rect x="-5.640957446808492e-2" width="2.8204787234042517e-2" y="-4.6805188963897404e-2" height="0.44758250949430434"/><rect x="-2.8204787234042406e-2" width="2.8204787234042517e-2" y="-5.130346796826635e-2" height="0.4520807884986733"/><rect x="0.0" width="2.8204787234042628e-2" y="-5.130346796826635e-2" height="0.4520807884986733"/><rect x="2.8204787234042628e-2" width="2.8204787234042406e-2" y="-4.6805188963897404e-2" height="0.44758250949430434"/><rect x="5.640957446808503e-2" width="2.8204787234042628e-2" y="-3.794246147121838e-2" height="0.4387197820016253"/><rect x="8.461436170212766e-2" width="2.8204787234042628e-2" y="-2.4976332392445566e-2" height="0.4257536529228525"/><rect x="0.11281914893617029" width="2.8204787234042517e-2" y="-8.282292878393327e-3" height="0.40905961340880026"/><rect x="0.1410239361702128" width="2.8204787234042628e-2" y="1.1667779881069373e-2" height="0.38910954064933756"/><rect x="0.16922872340425543" width="2.8204787234042628e-2" y="3.4327755467602084e-2" height="0.36644956506280485"/><rect x="0.19743351063829806" width="2.8204787234042628e-2" y="5.9102010758625145e-2" height="0.3416753097717818"/><rect x="0.2256382978723407" width="2.8204787234042406e-2" y="8.537125692335779e-2" height="0.31540606360704915"/><rect x="0.2538430851063831" width="2.8204787234042628e-2" y="0.11251788297628418" height="0.28825943755412275"/><rect x="0.2820478723404256" width="2.8204787234042406e-2" y="0.13994939532943645" height="0.2608279252009705"/><rect x="0.310252659574468" width="2.820478723404274e-2" y="0.167118761696808" height="0.23365855883359893"/><rect x="0.33845744680851075" width="2.8204787234042517e-2" y="0.1935407694870097" height="0.20723655104339722"/><rect x="0.36666223404255327" width="2.820478723404274e-2" y="0.21880385193946422" height="0.1819734685909427"/><rect x="0.394867021276596" width="2.8204787234042294e-2" y="0.242577186986785" height="0.15820013354362195"/><rect x="0.4230718085106383" width="2.8204787234042517e-2" y="0.2646132037179021" height="0.13616411681250484"/><rect x="0.45127659574468104" width="2.820478723404274e-2" y="0.28474591410856137" height="0.11603140642184556"/><rect x="0.47948138297872356" width="2.8204787234042517e-2" y="0.3028857053121001" height="9.789161521830686e-2"/><rect x="0.5076861702127659" width="2.820478723404296e-2" y="0.3190113703916208" height="8.176595013878613e-2"/><rect x="0.5358909574468088" width="2.8204787234042294e-2" y="0.33316022121758027" height="6.761709931282667e-2"/><rect x="0.5640957446808511" width="2.8204787234042294e-2" y="0.3454171218890676" height="5.536019864133934e-2"/><rect x="0.5923005319148941" width="2.8204787234042294e-2" y="0.3559032156579572" height="4.487410487244975e-2"/><rect x="0.6205053191489364" width="2.8204787234042294e-2" y="0.36476500782852633" height="3.60123127018806e-2"/><rect x="0.6487101063829791" width="2.8204787234042294e-2" y="0.37216432798490523" height="2.8612992545501703e-2"/><rect x="0.6769148936170214" width="2.8204787234042517e-2" y="0.37826954340562563" height="2.2507777124781303e-2"/></g></g></g><g class="hud"><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.7051196808510638,0.44280064014631915+-0.7051196808510638,0.4128006401463191"/><polyline points="-0.564095744680851,0.44280064014631915+-0.564095744680851,0.4128006401463191"/><polyline points="-0.42307180851063825,0.44280064014631915+-0.42307180851063825,0.4128006401463191"/><polyline points="-0.28204787234042544,0.44280064014631915+-0.28204787234042544,0.4128006401463191"/><polyline points="-0.1410239361702127,0.44280064014631915+-0.1410239361702127,0.4128006401463191"/><polyline points="0.0,0.44280064014631915+0.0,0.4128006401463191"/><polyline points="0.1410239361702128,0.44280064014631915+0.1410239361702128,0.4128006401463191"/><polyline points="0.2820478723404256,0.44280064014631915+0.2820478723404256,0.4128006401463191"/><polyline points="0.4230718085106383,0.44280064014631915+0.4230718085106383,0.4128006401463191"/><polyline points="0.5640957446808511,0.44280064014631915+0.5640957446808511,0.4128006401463191"/><polyline points="0.7051196808510639,0.44280064014631915+0.7051196808510639,0.4128006401463191"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.700797872340426e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.7051196808510638" y="0.485">-5.0</text><text x="-0.564095744680851" y="0.485">-4.0</text><text x="-0.42307180851063825" y="0.485">-3.0</text><text x="-0.28204787234042544" y="0.485">-2.0</text><text x="-0.1410239361702127" y="0.485">-1.0</text><text x="0.0" y="0.485"> 0.0</text><text x="0.1410239361702128" y="0.485"> 1.0</text><text x="0.2820478723404256" y="0.485"> 2.0</text><text x="0.4230718085106383" y="0.485"> 3.0</text><text x="0.5640957446808511" y="0.485"> 4.0</text><text x="0.7051196808510639" y="0.485"> 5.0</text></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.707" width="1.414" y="0.409785093735711" height="3.6031092821216526e-3"/></g></g></g></g></svg>
other/surface.svg view

file too large to diff

− other/svgoptions.svg
@@ -1,5 +0,0 @@-<svg height="300.0" width="217.41176470588235" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.385 -0.5275 0.7699999999999999 1.0625"><g stroke-opacity="1.0" fill="none" stroke-width="1.5e-2" stroke="#b05929"><polyline points="-0.35,0.29999999999999993--9.999999999999998e-2,0.29999999999999993-0.15000000000000002,-0.5"/></g><g stroke-opacity="1.0" fill="none" stroke-width="3.0e-2" stroke="#a6cfe3"><polyline points="-0.35,0.5-0.34999999999999987,-0.10000000000000009"/></g><g stroke-opacity="1.0" fill="none" stroke-width="1.0e-2" stroke="#1f78b5"><polyline points="-0.22499999999999998,-0.30000000000000016--0.22499999999999998,0.5"/></g></svg>
other/text.svg view
@@ -1,1 +1,68 @@-<svg height="300.0" width="422.02247191011236" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.7825 -0.56625 1.565 1.1125"><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.5" x="-0.75">a</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.45833333333333337" x="-0.6001859947935977">b</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.4166666666666667" x="-0.451868881605292">c</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.375" x="-0.3065305960029406">d</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.33333333333333337" x="-0.1656233100938329">e</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.29166666666666674" x="-3.0554922901016246e-2">f</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.25" x="9.732500689835166e-2">g</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.20833333333333343" x="0.2167387453171994">h</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.16666666666666669" x="0.32649314975417987">i</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.125" x="0.4254915904801422">j</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="8.333333333333337e-2" x="0.5127449077998856">k</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="4.166666666666674e-2" x="0.5873812954088635">l</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.0" x="0.6486550111935965">m</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-4.166666666666663e-2" x="0.6959538284403606">n</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-8.333333333333315e-2" x="0.7288051530021376">o</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.125" x="0.7468807453031088">p</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.16666666666666663" x="0.75">q</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.20833333333333326" x="0.738131750530969">r</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.25" x="0.7113945805215882">s</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.29166666666666663" x="0.6700556389364578">t</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.33333333333333326" x="0.6145279708150595">u</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.375" x="0.5453663902622552">v</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4166666666666665" x="0.4632619369291495">w</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.45833333333333326" x="0.369034971373323">x</text></g><g text-anchor="middle" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.5" x="0.2636269782873162">y</text></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="445.5752551155162" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.737737713453645 -0.5010794026798592 1.4838186055464497 0.9990356882554667" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}{+  .text g {+    fill: #0d0d0d;+  }+}+@media (prefers-color-scheme:dark) {+  .text g {+    fill: #f0f0f0;+  }+}</style><g class="chart"><g class="text"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="6.478142787803755e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5884165221947686" y="0.37213541666666666">a</text><text x="-0.4590694965882771" y="0.3386320153061224">b</text><text x="-0.3310148637052037" y="0.3051286139455782">c</text><text x="-0.20553210310808218" y="0.271625212585034">d</text><text x="-8.387499706171309e-2" y="0.23812181122448978">e</text><text x="3.274089684478099e-2" y="0.20461840986394558">f</text><text x="0.14315039114757588" y="0.1711150085034014">g</text><text x="0.24625031067612413" y="0.13761160714285714">h</text><text x="0.3410105151147992" y="0.10410820578231295">i</text><text x="0.4264841918244081" y="7.060480442176875e-2">j</text><text x="0.5018173160811107" y="3.71014030612245e-2">k</text><text x="0.5662571842091536" y="3.5980017006802534e-3">l</text><text x="0.6191599343471895" y="-2.990539965986394e-2">m</text><text x="0.6599969797031636" y="-6.340880102040813e-2">n</text><text x="0.6883602900188116" y="-9.691220238095244e-2">o</text><text x="0.7039664684731229" y="-0.13041560374149652">p</text><text x="0.7066595832896992" y="-0.16391900510204072">q</text><text x="0.6964127257555185" y="-0.1974224064625849">r</text><text x="0.6733282790839018" y="-0.2309258078231291">s</text><text x="0.6376368954352881" y="-0.2644292091836733">t</text><text x="0.5896951913170917" y="-0.2979326105442176">u</text><text x="0.5299821843894411" y="-0.3314360119047618">v</text><text x="0.4590945072790612" y="-0.364939413265306">w</text><text x="0.37774044622328884" y="-0.3984428146258503">x</text><text x="0.2867328641081157" y="-0.43194621598639427">y</text><text x="0.18698107861093038" y="-0.46544961734693857">z</text></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.602992343467327" width="1.3242277480295845" y="-0.4999999999999999" height="0.9066857993197277"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.628904914618542, 0.37213541666666666)"><polyline points="-0.628904914618542,0.3871354166666667+-0.628904914618542,0.35713541666666665"/></g><g transform="rotate(-90.0, -0.628904914618542, 0.20461840986394558)"><polyline points="-0.628904914618542,0.2196184098639456+-0.628904914618542,0.18961840986394557"/></g><g transform="rotate(-90.0, -0.628904914618542, 3.71014030612245e-2)"><polyline points="-0.628904914618542,5.21014030612245e-2+-0.628904914618542,2.2101403061224503e-2"/></g><g transform="rotate(-90.0, -0.628904914618542, -0.13041560374149652)"><polyline points="-0.628904914618542,-0.11541560374149652+-0.628904914618542,-0.14541560374149654"/></g><g transform="rotate(-90.0, -0.628904914618542, -0.2979326105442176)"><polyline points="-0.628904914618542,-0.2829326105442176+-0.628904914618542,-0.3129326105442176"/></g><g transform="rotate(-90.0, -0.628904914618542, -0.46544961734693857)"><polyline points="-0.628904914618542,-0.45044961734693856+-0.628904914618542,-0.4804496173469386"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3187618585358356e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.38365221088435375"> 0.0</text><text x="-0.66" y="0.21613520408163267"> 5.0</text><text x="-0.66" y="4.8618197278911646e-2">10.0</text><text x="-0.66" y="-0.11889880952380938">15.0</text><text x="-0.66" y="-0.28641581632653057">20.0</text><text x="-0.66" y="-0.45393282312925154">25.0</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5884165221947686,0.37213541666666666+0.7072120353659822,0.37213541666666666"/><polyline points="-0.5884165221947686,0.20461840986394558+0.7072120353659822,0.20461840986394558"/><polyline points="-0.5884165221947686,3.71014030612245e-2+0.7072120353659822,3.71014030612245e-2"/><polyline points="-0.5884165221947686,-0.13041560374149652+0.7072120353659822,-0.13041560374149652"/><polyline points="-0.5884165221947686,-0.2979326105442176+0.7072120353659822,-0.2979326105442176"/><polyline points="-0.5884165221947686,-0.46544961734693857+0.7072120353659822,-0.46544961734693857"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6150848766712274" width="3.455009486828753e-3" y="-0.4671247874149659" height="0.8409353741496597"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5884165221947686,0.4468133503401361+-0.5884165221947686,0.41681335034013606"/><polyline points="-0.4588536664386934,0.4468133503401361+-0.4588536664386934,0.41681335034013606"/><polyline points="-0.32929081068261834,0.4468133503401361+-0.32929081068261834,0.41681335034013606"/><polyline points="-0.19972795492654322,0.4468133503401361+-0.19972795492654322,0.41681335034013606"/><polyline points="-7.016509917046809e-2,0.4468133503401361+-7.016509917046809e-2,0.41681335034013606"/><polyline points="5.9397756585606865e-2,0.4468133503401361+5.9397756585606865e-2,0.41681335034013606"/><polyline points="0.18896061234168204,0.4468133503401361+0.18896061234168204,0.41681335034013606"/><polyline points="0.318523468097757,0.4468133503401361+0.318523468097757,0.41681335034013606"/><polyline points="0.4480863238538323,0.4468133503401361+0.4480863238538323,0.41681335034013606"/><polyline points="0.5776491796099071,0.4468133503401361+0.5776491796099071,0.41681335034013606"/><polyline points="0.7072120353659822,0.4468133503401361+0.7072120353659822,0.41681335034013606"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3187618585358356e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5884165221947686" y="0.485">0.00</text><text x="-0.4588536664386934" y="0.485">0.10</text><text x="-0.32929081068261834" y="0.485">0.20</text><text x="-0.19972795492654322" y="0.485">0.30</text><text x="-7.016509917046809e-2" y="0.485">0.40</text><text x="5.9397756585606865e-2" y="0.485">0.50</text><text x="0.18896061234168204" y="0.485">0.60</text><text x="0.318523468097757" y="0.485">0.70</text><text x="0.4480863238538323" y="0.485">0.80</text><text x="0.5776491796099071" y="0.485">0.90</text><text x="0.7072120353659822" y="0.485">1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5884165221947686,0.37213541666666666+-0.5884165221947686,-0.46544961734693857"/><polyline points="-0.4588536664386934,0.37213541666666666+-0.4588536664386934,-0.46544961734693857"/><polyline points="-0.32929081068261834,0.37213541666666666+-0.32929081068261834,-0.46544961734693857"/><polyline points="-0.19972795492654322,0.37213541666666666+-0.19972795492654322,-0.46544961734693857"/><polyline points="-7.016509917046809e-2,0.37213541666666666+-7.016509917046809e-2,-0.46544961734693857"/><polyline points="5.9397756585606865e-2,0.37213541666666666+5.9397756585606865e-2,-0.46544961734693857"/><polyline points="0.18896061234168204,0.37213541666666666+0.18896061234168204,-0.46544961734693857"/><polyline points="0.318523468097757,0.37213541666666666+0.318523468097757,-0.46544961734693857"/><polyline points="0.4480863238538323,0.37213541666666666+0.4480863238538323,-0.46544961734693857"/><polyline points="0.5776491796099071,0.37213541666666666+0.5776491796099071,-0.46544961734693857"/><polyline points="0.7072120353659822,0.37213541666666666+0.7072120353659822,-0.46544961734693857"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5901440269381829" width="1.2990835670475795" y="0.4150616496598639" height="3.350340136054397e-3"/></g></g></g></g></svg>
− other/textlocal.svg
@@ -1,1 +0,0 @@-<svg height="300.0" width="573.2594690189848" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.775 -0.5276917562724014 2.0115517241379313 1.0526917562724014"><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="0.4623655913978495" x="-0.75">a pretty long piece of text</text></g><g text-anchor="start" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="8.0e-2"><text y="-0.4336917562724014" x="-0.10344827586206895">another pretty long piece of text</text></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><rect height="0.10394265232974909" y="0.3960573476702509" width="0.6982758620689655" x="-0.75"/></g><g fill-opacity="0.1" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><rect height="0.1039426523297492" y="-0.5" width="0.853448275862069" x="-0.10344827586206895"/></g></svg>
other/unit.svg view
@@ -1,1 +1,69 @@-<svg height="300.0" width="442.8571428571429" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.775 -0.525 1.55 1.05"><g fill-opacity="1.0" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><rect height="1.0" y="-0.5" width="1.5" x="-0.75"/></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="445.19459582915766" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7328858661167512 -0.4962895215155287 1.475089427347716 0.9940076369977622" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="unit"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="1.0e-2" fill-opacity="0.1" stroke-opacity="1.0"><rect x="-0.5773009200507613" width="1.2718115482233503" y="-0.47438321250566384" height="0.8733574988672406"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5815402918781725" width="1.2802902918781724" y="-0.47875" height="0.8820910738559129"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6069765228426395, 0.3989742863615767)"><polyline points="-0.6069765228426395,0.41397428636157674+-0.6069765228426395,0.3839742863615767"/></g><g transform="rotate(-90.0, -0.6069765228426395, 0.31163853647485273)"><polyline points="-0.6069765228426395,0.32663853647485275+-0.6069765228426395,0.2966385364748527"/></g><g transform="rotate(-90.0, -0.6069765228426395, 0.22430278658812863)"><polyline points="-0.6069765228426395,0.23930278658812865+-0.6069765228426395,0.20930278658812862"/></g><g transform="rotate(-90.0, -0.6069765228426395, 0.13696703670140453)"><polyline points="-0.6069765228426395,0.15196703670140455+-0.6069765228426395,0.12196703670140453"/></g><g transform="rotate(-90.0, -0.6069765228426395, 4.9631286814680486e-2)"><polyline points="-0.6069765228426395,6.463128681468049e-2+-0.6069765228426395,3.463128681468049e-2"/></g><g transform="rotate(-90.0, -0.6069765228426395, -3.770446307204356e-2)"><polyline points="-0.6069765228426395,-2.270446307204356e-2+-0.6069765228426395,-5.270446307204356e-2"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.12504021295876766)"><polyline points="-0.6069765228426395,-0.11004021295876766+-0.6069765228426395,-0.14004021295876767"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.21237596284549165)"><polyline points="-0.6069765228426395,-0.19737596284549164+-0.6069765228426395,-0.22737596284549166"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.29971171273221575)"><polyline points="-0.6069765228426395,-0.28471171273221574+-0.6069765228426395,-0.31471171273221576"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.38704746261893985)"><polyline points="-0.6069765228426395,-0.37204746261893984+-0.6069765228426395,-0.40204746261893987"/></g><g transform="rotate(-90.0, -0.6069765228426395, -0.47438321250566384)"><polyline points="-0.6069765228426395,-0.45938321250566383+-0.6069765228426395,-0.48938321250566386"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2393718274111675e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4109829519710013">-0.50</text><text x="-0.6375" y="0.3236472020842772">-0.40</text><text x="-0.6375" y="0.23631145219755315">-0.30</text><text x="-0.6375" y="0.14897570231082913">-0.20</text><text x="-0.6375" y="6.163995242410503e-2">-0.10</text><text x="-0.6375" y="-2.5695797462618963e-2"> 0.00</text><text x="-0.6375" y="-0.11303154734934306"> 0.10</text><text x="-0.6375" y="-0.20036729723606705"> 0.20</text><text x="-0.6375" y="-0.28770304712279127"> 0.30</text><text x="-0.6375" y="-0.37503879700951526"> 0.40</text><text x="-0.6375" y="-0.46237454689623936"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5773009200507613,0.3989742863615767+0.694510628172589,0.3989742863615767"/><polyline points="-0.5773009200507613,0.31163853647485273+0.694510628172589,0.31163853647485273"/><polyline points="-0.5773009200507613,0.22430278658812863+0.694510628172589,0.22430278658812863"/><polyline points="-0.5773009200507613,0.13696703670140453+0.694510628172589,0.13696703670140453"/><polyline points="-0.5773009200507613,4.9631286814680486e-2+0.694510628172589,4.9631286814680486e-2"/><polyline points="-0.5773009200507613,-3.770446307204356e-2+0.694510628172589,-3.770446307204356e-2"/><polyline points="-0.5773009200507613,-0.12504021295876766+0.694510628172589,-0.12504021295876766"/><polyline points="-0.5773009200507613,-0.21237596284549165+0.694510628172589,-0.21237596284549165"/><polyline points="-0.5773009200507613,-0.29971171273221575+0.694510628172589,-0.29971171273221575"/><polyline points="-0.5773009200507613,-0.38704746261893985+0.694510628172589,-0.38704746261893985"/><polyline points="-0.5773009200507613,-0.47438321250566384+0.694510628172589,-0.47438321250566384"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5934105329949237" width="3.391497461928905e-3" y="-0.47612992750339833" height="0.8768509288627095"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5773009200507613,0.44454179882193023+-0.5773009200507613,0.4145417988219302"/><polyline points="-0.45011976522842634,0.44454179882193023+-0.45011976522842634,0.4145417988219302"/><polyline points="-0.32293861040609123,0.44454179882193023+-0.32293861040609123,0.4145417988219302"/><polyline points="-0.19575745558375618,0.44454179882193023+-0.19575745558375618,0.4145417988219302"/><polyline points="-6.857630076142118e-2,0.44454179882193023+-6.857630076142118e-2,0.4145417988219302"/><polyline points="5.860485406091387e-2,0.44454179882193023+5.860485406091387e-2,0.4145417988219302"/><polyline points="0.18578600888324892,0.44454179882193023+0.18578600888324892,0.4145417988219302"/><polyline points="0.31296716370558375,0.44454179882193023+0.31296716370558375,0.4145417988219302"/><polyline points="0.44014831852791914,0.44454179882193023+0.44014831852791914,0.4145417988219302"/><polyline points="0.5673294733502541,0.44454179882193023+0.5673294733502541,0.4145417988219302"/><polyline points="0.694510628172589,0.44454179882193023+0.694510628172589,0.4145417988219302"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2393718274111675e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5773009200507613" y="0.485">-0.50</text><text x="-0.45011976522842634" y="0.485">-0.40</text><text x="-0.32293861040609123" y="0.485">-0.30</text><text x="-0.19575745558375618" y="0.485">-0.20</text><text x="-6.857630076142118e-2" y="0.485">-0.10</text><text x="5.860485406091387e-2" y="0.485"> 0.00</text><text x="0.18578600888324892" y="0.485"> 0.10</text><text x="0.31296716370558375" y="0.485"> 0.20</text><text x="0.44014831852791914" y="0.485"> 0.30</text><text x="0.5673294733502541" y="0.485"> 0.40</text><text x="0.694510628172589" y="0.485"> 0.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5773009200507613,0.3989742863615767+-0.5773009200507613,-0.47438321250566384"/><polyline points="-0.45011976522842634,0.3989742863615767+-0.45011976522842634,-0.47438321250566384"/><polyline points="-0.32293861040609123,0.3989742863615767+-0.32293861040609123,-0.47438321250566384"/><polyline points="-0.19575745558375618,0.3989742863615767+-0.19575745558375618,-0.47438321250566384"/><polyline points="-6.857630076142118e-2,0.3989742863615767+-6.857630076142118e-2,-0.47438321250566384"/><polyline points="5.860485406091387e-2,0.3989742863615767+5.860485406091387e-2,-0.47438321250566384"/><polyline points="0.18578600888324892,0.3989742863615767+0.18578600888324892,-0.47438321250566384"/><polyline points="0.31296716370558375,0.3989742863615767+0.31296716370558375,-0.47438321250566384"/><polyline points="0.44014831852791914,0.3989742863615767+0.44014831852791914,-0.47438321250566384"/><polyline points="0.5673294733502541,0.3989742863615767+0.5673294733502541,-0.47438321250566384"/><polyline points="0.694510628172589,0.3989742863615767+0.694510628172589,-0.47438321250566384"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5789966687817258" width="1.275203045685279" y="0.4120746488445854" height="3.493429995468922e-3"/></g></g></g></g></svg>
+ other/usage.svg view
@@ -0,0 +1,65 @@+<svg xmlns="http://www.w3.org/2000/svg" width="446.753163625545" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7380894953982863 -0.49743338195719966 1.4823989209774675 0.995448297856914" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="line"><g fill="none" stroke="rgb(2%, 73%, 80%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.2226262967974741+-0.16239638210092033,0.2226262967974741+0.271434147889559,-0.47471244925575107"/></g><g fill="none" stroke="rgb(2%, 29%, 48%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.5962269120913996,0.39696098331078034+0.6184985718819421,-0.12604307622913857"/></g><g fill="none" stroke="rgb(66%, 7%, 55%)" stroke-width="1.5e-2" stroke-opacity="1.0"><polyline points="-0.37931164709615994,-0.30037776274244476+-0.37931164709615994,0.39696098331078034"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.6027343700412567" width="1.3079990479212948" y="-0.48124999999999996" height="0.8847485340550292"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6287642018406855, 0.39696098331078034)"><polyline points="-0.6287642018406855,0.41196098331078035+-0.6287642018406855,0.3819609833107803"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.30979364005412724)"><polyline points="-0.6287642018406855,0.32479364005412725+-0.6287642018406855,0.2947936400541272"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.2226262967974741)"><polyline points="-0.6287642018406855,0.2376262967974741+-0.6287642018406855,0.20762629679747407"/></g><g transform="rotate(-90.0, -0.6287642018406855, 0.13545895354082088)"><polyline points="-0.6287642018406855,0.1504589535408209+-0.6287642018406855,0.12045895354082088"/></g><g transform="rotate(-90.0, -0.6287642018406855, 4.829161028416773e-2)"><polyline points="-0.6287642018406855,6.329161028416773e-2+-0.6287642018406855,3.329161028416773e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -3.8875732972485366e-2)"><polyline points="-0.6287642018406855,-2.3875732972485367e-2+-0.6287642018406855,-5.3875732972485366e-2"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.12604307622913857)"><polyline points="-0.6287642018406855,-0.11104307622913857+-0.6287642018406855,-0.1410430762291386"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.21321041948579178)"><polyline points="-0.6287642018406855,-0.19821041948579177+-0.6287642018406855,-0.2282104194857918"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.30037776274244476)"><polyline points="-0.6287642018406855,-0.28537776274244475+-0.6287642018406855,-0.3153777627424448"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.38754510599909786)"><polyline points="-0.6287642018406855,-0.37254510599909785+-0.6287642018406855,-0.4025451059990979"/></g><g transform="rotate(-90.0, -0.6287642018406855, -0.47471244925575107)"><polyline points="-0.6287642018406855,-0.45971244925575105+-0.6287642018406855,-0.4897124492557511"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.66" y="0.40894649300857017">0.00</text><text x="-0.66" y="0.321779149751917">0.50</text><text x="-0.66" y="0.2346118064952638">1.00</text><text x="-0.66" y="0.14744446323861077">1.50</text><text x="-0.66" y="6.027711998195756e-2">2.00</text><text x="-0.66" y="-2.689022327469548e-2">2.50</text><text x="-0.66" y="-0.11405756653134869">3.00</text><text x="-0.66" y="-0.2012249097880019">3.50</text><text x="-0.66" y="-0.2883922530446551">4.00</text><text x="-0.66" y="-0.3755595963013081">4.50</text><text x="-0.66" y="-0.4627269395579613">5.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034+0.7052646778800381,0.39696098331078034"/><polyline points="-0.5962269120913996,0.30979364005412724+0.7052646778800381,0.30979364005412724"/><polyline points="-0.5962269120913996,0.2226262967974741+0.7052646778800381,0.2226262967974741"/><polyline points="-0.5962269120913996,0.13545895354082088+0.7052646778800381,0.13545895354082088"/><polyline points="-0.5962269120913996,4.829161028416773e-2+0.7052646778800381,4.829161028416773e-2"/><polyline points="-0.5962269120913996,-3.8875732972485366e-2+0.7052646778800381,-3.8875732972485366e-2"/><polyline points="-0.5962269120913996,-0.12604307622913857+0.7052646778800381,-0.12604307622913857"/><polyline points="-0.5962269120913996,-0.21321041948579178+0.7052646778800381,-0.21321041948579178"/><polyline points="-0.5962269120913996,-0.30037776274244476+0.7052646778800381,-0.30037776274244476"/><polyline points="-0.5962269120913996,-0.38754510599909786+0.7052646778800381,-0.38754510599909786"/><polyline points="-0.5962269120913996,-0.47471244925575107+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.6148816248809902" width="3.4706442399238258e-3" y="-0.4764557961208842" height="0.8751601262967976"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5962269120913996,0.44464873703202523+-0.5962269120913996,0.4146487370320252"/><polyline points="-0.37931164709615994,0.44464873703202523+-0.37931164709615994,0.4146487370320252"/><polyline points="-0.16239638210092033,0.44464873703202523+-0.16239638210092033,0.4146487370320252"/><polyline points="5.4518882894319276e-2,0.44464873703202523+5.4518882894319276e-2,0.4146487370320252"/><polyline points="0.271434147889559,0.44464873703202523+0.271434147889559,0.4146487370320252"/><polyline points="0.4883494128847986,0.44464873703202523+0.4883494128847986,0.4146487370320252"/><polyline points="0.7052646778800381,0.44464873703202523+0.7052646778800381,0.4146487370320252"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.3383052999047926e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5962269120913996" y="0.485">0.00</text><text x="-0.37931164709615994" y="0.485">0.50</text><text x="-0.16239638210092033" y="0.485">1.00</text><text x="5.4518882894319276e-2" y="0.485">1.50</text><text x="0.271434147889559" y="0.485">2.00</text><text x="0.4883494128847986" y="0.485">2.50</text><text x="0.7052646778800381" y="0.485">3.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5962269120913996,0.39696098331078034+-0.5962269120913996,-0.47471244925575107"/><polyline points="-0.37931164709615994,0.39696098331078034+-0.37931164709615994,-0.47471244925575107"/><polyline points="-0.16239638210092033,0.39696098331078034+-0.16239638210092033,-0.47471244925575107"/><polyline points="5.4518882894319276e-2,0.39696098331078034+5.4518882894319276e-2,-0.47471244925575107"/><polyline points="0.271434147889559,0.39696098331078034+0.271434147889559,-0.47471244925575107"/><polyline points="0.4883494128847986,0.39696098331078034+0.4883494128847986,-0.47471244925575107"/><polyline points="0.7052646778800381,0.39696098331078034+0.7052646778800381,-0.47471244925575107"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5979622342113615" width="1.3049622342113616" y="0.4122152683806946" height="3.4866937302661105e-3"/></g></g></g></g></svg>
other/venn.svg view
@@ -1,29 +1,53 @@-<svg height="300.0" width="302.02163212349313" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.62 -0.5531609947643978 1.155514898098931 1.1477802665735424"><g fill-opacity="5.0e-2" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9026900162484203" y="-0.5" width="0.9411498969440864" x="-0.4411498969440863"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.40269001624842027-0.5,0.40269001624842027"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.252241680207017-0.5,0.252241680207017"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.10179334416561353-0.5,0.10179334416561353"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-4.865499187578981e-2-0.5,-4.865499187578981e-2"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-0.1991033279171931-0.5,-0.1991033279171931"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-0.3495516639585964-0.5,-0.3495516639585964"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,-0.5-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.41577902148402235" x="-0.5">-1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.26533068544261906" x="-0.5">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="0.11488234940121572" x="-0.5">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-3.556598664018773e-2" x="-0.5">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.18601432268159102" x="-0.5">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.3364626587229943" x="-0.5">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="5.0e-2"><text y="-0.4869109947643978" x="-0.5">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><g transform="rotate(-90.0, -0.470796118697825, 0.40269001624842027)"><polyline points="-0.470796118697825,0.4176900162484203--0.470796118697825,0.38769001624842025"/></g><g transform="rotate(-90.0, -0.470796118697825, 0.252241680207017)"><polyline points="-0.470796118697825,0.267241680207017--0.470796118697825,0.23724168020701697"/></g><g transform="rotate(-90.0, -0.470796118697825, 0.10179334416561353)"><polyline points="-0.470796118697825,0.11679334416561353--0.470796118697825,8.679334416561353e-2"/></g><g transform="rotate(-90.0, -0.470796118697825, -4.865499187578981e-2)"><polyline points="-0.470796118697825,-3.365499187578981e-2--0.470796118697825,-6.365499187578981e-2"/></g><g transform="rotate(-90.0, -0.470796118697825, -0.1991033279171931)"><polyline points="-0.470796118697825,-0.18410332791719308--0.470796118697825,-0.2141033279171931"/></g><g transform="rotate(-90.0, -0.470796118697825, -0.3495516639585964)"><polyline points="-0.470796118697825,-0.33455166395859637--0.470796118697825,-0.3645516639585964"/></g><g transform="rotate(-90.0, -0.470796118697825, -0.5)"><polyline points="-0.470796118697825,-0.485--0.470796118697825,-0.515"/></g></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="0.9026900162484203" y="-0.5" width="3.7645995877763627e-3" x="-0.45903174498602395"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.40269001624842027--0.4411498969440863,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.2842915807867386,0.40269001624842027--0.2842915807867386,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="-0.12743326462939086,0.40269001624842027--0.12743326462939086,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="2.9425051527956825e-2,0.40269001624842027-2.9425051527956825e-2,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.1862833676853045,0.40269001624842027-0.1862833676853045,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.3431416838426522,0.40269001624842027-0.3431416838426522,-0.5"/></g><g stroke-opacity="5.0e-2" fill="none" stroke-width="5.0e-3" stroke="#0d0d0d"><polyline points="0.5,0.40269001624842027-0.5,-0.5"/></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="-0.4411498969440863" transform="rotate(-45.0, -0.4411498969440863, 0.5)">-1.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="-0.2842915807867386" transform="rotate(-45.0, -0.2842915807867386, 0.5)">-1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="-0.12743326462939086" transform="rotate(-45.0, -0.12743326462939086, 0.5)">-0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="2.9425051527956825e-2" transform="rotate(-45.0, 2.9425051527956825e-2, 0.5)">0</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="0.1862833676853045" transform="rotate(-45.0, 0.1862833676853045, 0.5)">0.5</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="0.3431416838426522" transform="rotate(-45.0, 0.3431416838426522, 0.5)">1</text></g><g text-anchor="end" fill-opacity="1.0" fill="#0d0d0d" stroke-width="0.0" stroke="none" font-size="4.179310344827586e-2"><text y="0.5" x="0.5" transform="rotate(-45.0, 0.5, 0.5)">1.5</text></g><g fill-opacity="0.4" stroke-opacity="0.4" fill="#0d0d0d" stroke-width="2.0e-3" stroke="#0d0d0d"><polyline points="-0.4411498969440863,0.4461247517602456--0.4411498969440863,0.41612475176024555"/><polyline points="-0.2842915807867386,0.4461247517602456--0.2842915807867386,0.41612475176024555"/><polyline points="-0.12743326462939086,0.4461247517602456--0.12743326462939086,0.41612475176024555"/><polyline points="2.9425051527956825e-2,0.4461247517602456-2.9425051527956825e-2,0.41612475176024555"/><polyline points="0.1862833676853045,0.4461247517602456-0.1862833676853045,0.41612475176024555"/><polyline points="0.3431416838426522,0.4461247517602456-0.3431416838426522,0.41612475176024555"/><polyline points="0.5,0.4461247517602456-0.5,0.41612475176024555"/></g><g fill-opacity="0.4" stroke-opacity="0.0" fill="#0d0d0d" stroke-width="0.0" stroke="#000000"><rect height="3.6107600649936678e-3" y="0.4162303664921466" width="0.9411498969440864" x="-0.4411498969440863"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#b05929" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.0294,-0.4194 A 0.15685831615734772 0.15044833604140337 -0.0 1 1 0.3431,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.0294,-0.4194 L 0.0294,-0.4194"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M -0.2843,0.1018 A 0.15685831615734772 0.15044833604140337 -0.0 1 0 0.3431,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.2843,0.1018 L -0.2843,0.1018"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#1f78b5" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M -0.2843,0.1018 A 0.15685831615734772 0.15044833604140337 -0.0 1 1 0.0294,-0.4194 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 -0.2843,0.1018 L -0.2843,0.1018"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#e31a1c" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.3431,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.1863,-0.1588 L 0.1863,-0.1588"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#b2de8a" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.2843,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 0.0294,0.1018 L 0.0294,0.1018"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#33a12b" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.0294,-0.4194 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 0 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,-0.4194 L 0.0294,-0.4194"/></g><g fill-opacity="0.2" stroke-opacity="1.0" fill="#fa9999" stroke-width="1.0e-2" stroke="#a6cfe3"><path d="M 0.1863,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.0294,0.1018 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 -0.1274,-0.1588 A 0.31371663231469543 0.30089667208280674 -0.0 0 1 0.1863,-0.1588 L 0.1863,-0.1588"/></g><g></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="299.59019837846336" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.47987325612208 -0.4958906334198819 0.9784229494865739 0.9797613087300289" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="venn"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.0793,-0.4021 A 0.13684926832900743 0.1344253013659252 -0.0 1 1 0.3530,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.0793,-0.4021 L 0.0793,-0.4021"/></g><g fill="rgb(2%, 29%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M -0.1944,0.0636 A 0.13684926832900743 0.1344253013659252 -0.0 1 0 0.3530,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.1944,0.0636 L -0.1944,0.0636"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M -0.1944,0.0636 A 0.13684926832900743 0.1344253013659252 -0.0 1 1 0.0793,-0.4021 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 -0.1944,0.0636 L -0.1944,0.0636"/></g><g fill="rgb(96%, 60%, 92%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.3530,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.2161,-0.1693 L 0.2161,-0.1693"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.1944,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 0.0793,0.0636 L 0.0793,0.0636"/></g><g fill="rgb(73%, 34%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.0793,-0.4021 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 0 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,-0.4021 L 0.0793,-0.4021"/></g><g fill="rgb(21%, 29%, 7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="5.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><path d="M 0.2161,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.0793,0.0636 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 -0.0576,-0.1693 A 0.27369853665801486 0.2688506027318504 -0.0 0 1 0.2161,-0.1693 L 0.2161,-0.1693"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.333307689741713" width="0.8252010880239147" y="-0.4741368963836091" height="0.8085681877160402"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.35794055804093433, 0.33241491181194227)"><polyline points="-0.35794055804093433,0.3474149118119423+-0.35794055804093433,0.31741491181194226"/></g><g transform="rotate(-90.0, -0.35794055804093433, 0.1979896104460171)"><polyline points="-0.35794055804093433,0.2129896104460171+-0.35794055804093433,0.18298961044601708"/></g><g transform="rotate(-90.0, -0.35794055804093433, 6.356430908009186e-2)"><polyline points="-0.35794055804093433,7.856430908009186e-2+-0.35794055804093433,4.8564309080091864e-2"/></g><g transform="rotate(-90.0, -0.35794055804093433, -7.086099228583331e-2)"><polyline points="-0.35794055804093433,-5.5860992285833314e-2+-0.35794055804093433,-8.586099228583331e-2"/></g><g transform="rotate(-90.0, -0.35794055804093433, -0.20528629365175854)"><polyline points="-0.35794055804093433,-0.19028629365175853+-0.35794055804093433,-0.22028629365175856"/></g><g transform="rotate(-90.0, -0.35794055804093433, -0.33971159501768367)"><polyline points="-0.35794055804093433,-0.32471159501768365+-0.35794055804093433,-0.3547115950176837"/></g><g transform="rotate(-90.0, -0.35794055804093433, -0.4741368963836091)"><polyline points="-0.35794055804093433,-0.4591368963836091+-0.35794055804093433,-0.48913689638360913"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.105478049870223e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.38749999999999996" y="0.3435049991746312">-1.50</text><text x="-0.38749999999999996" y="0.20907969780870594">-1.00</text><text x="-0.38749999999999996" y="7.465439644278071e-2">-0.50</text><text x="-0.38749999999999996" y="-5.977090492314446e-2"> 0.00</text><text x="-0.38749999999999996" y="-0.19419620628906964"> 0.50</text><text x="-0.38749999999999996" y="-0.32862150765499487"> 1.00</text><text x="-0.38749999999999996" y="-0.4630468090209201"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.3312549507167779,0.33241491181194227+0.4898406592572666,0.33241491181194227"/><polyline points="-0.3312549507167779,0.1979896104460171+0.4898406592572666,0.1979896104460171"/><polyline points="-0.3312549507167779,6.356430908009186e-2+0.4898406592572666,6.356430908009186e-2"/><polyline points="-0.3312549507167779,-7.086099228583331e-2+0.4898406592572666,-7.086099228583331e-2"/><polyline points="-0.3312549507167779,-0.20528629365175854+0.4898406592572666,-0.20528629365175854"/><polyline points="-0.3312549507167779,-0.33971159501768367+0.4898406592572666,-0.33971159501768367"/><polyline points="-0.3312549507167779,-0.4741368963836091+0.4898406592572666,-0.4741368963836091"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.3448030282813496" width="3.284382439896205e-3" y="-0.47575" height="0.8097780154283334"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.3312549507167779,0.3736278455782977+-0.3312549507167779,0.3436278455782977"/><polyline points="-0.19440568238777053,0.3736278455782977+-0.19440568238777053,0.3436278455782977"/><polyline points="-5.7556414058763106e-2,0.3736278455782977+-5.7556414058763106e-2,0.3436278455782977"/><polyline points="7.929285427024435e-2,0.3736278455782977+7.929285427024435e-2,0.3436278455782977"/><polyline points="0.2161421225992517,0.3736278455782977+0.2161421225992517,0.3436278455782977"/><polyline points="0.35299139092825915,0.3736278455782977+0.35299139092825915,0.3436278455782977"/><polyline points="0.4898406592572666,0.3736278455782977+0.4898406592572666,0.3436278455782977"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.105478049870223e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.3312549507167779" y="0.4098438853987152" transform="rotate(-45.0, -0.3312549507167779, 0.4098438853987152)">-1.50</text><text x="-0.19440568238777053" y="0.4098438853987152" transform="rotate(-45.0, -0.19440568238777053, 0.4098438853987152)">-1.00</text><text x="-5.7556414058763106e-2" y="0.4098438853987152" transform="rotate(-45.0, -5.7556414058763106e-2, 0.4098438853987152)">-0.50</text><text x="7.929285427024435e-2" y="0.4098438853987152" transform="rotate(-45.0, 7.929285427024435e-2, 0.4098438853987152)"> 0.00</text><text x="0.2161421225992517" y="0.4098438853987152" transform="rotate(-45.0, 0.2161421225992517, 0.4098438853987152)"> 0.50</text><text x="0.35299139092825915" y="0.4098438853987152" transform="rotate(-45.0, 0.35299139092825915, 0.4098438853987152)"> 1.00</text><text x="0.4898406592572666" y="0.4098438853987152" transform="rotate(-45.0, 0.4898406592572666, 0.4098438853987152)"> 1.50</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.3312549507167779,0.33241491181194227+-0.3312549507167779,-0.4741368963836091"/><polyline points="-0.19440568238777053,0.33241491181194227+-0.19440568238777053,-0.4741368963836091"/><polyline points="-5.7556414058763106e-2,0.33241491181194227+-5.7556414058763106e-2,-0.4741368963836091"/><polyline points="7.929285427024435e-2,0.33241491181194227+7.929285427024435e-2,-0.4741368963836091"/><polyline points="0.2161421225992517,0.33241491181194227+0.2161421225992517,-0.4741368963836091"/><polyline points="0.35299139092825915,0.33241491181194227+0.35299139092825915,-0.4741368963836091"/><polyline points="0.4898406592572666,0.33241491181194227+0.4898406592572666,-0.4741368963836091"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.332897141936726" width="0.8243799924139406" y="0.34249680941438665" height="3.226207232782219e-3"/></g></g></g></g></svg>
other/wave.svg view
@@ -1,1 +1,63 @@-<svg height="300.0" width="439.7949673811743" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="-0.7865 -0.5365 1.573 1.073"><g fill-opacity="1.0" stroke-opacity="1.0" fill="#a6cfe3" stroke-width="3.0e-3" stroke="#1f78b5"><rect height="3.0e-2" y="-1.5e-2" width="3.0000000000000027e-2" x="-0.765"/><rect height="3.0e-2" y="-0.11952846326765364" width="3.0000000000000027e-2" x="-0.715"/><rect height="3.0000000000000027e-2" y="-0.21948853110729405" width="3.0000000000000027e-2" x="-0.665"/><rect height="3.0000000000000027e-2" y="-0.3105114688927061" width="3.0000000000000027e-2" x="-0.615"/><rect height="3.0000000000000027e-2" y="-0.3886191374661522" width="3.0000000000000027e-2" x="-0.5650000000000001"/><rect height="3.0000000000000027e-2" y="-0.4503978569087953" width="3.0000000000000027e-2" x="-0.515"/><rect height="3.0000000000000027e-2" y="-0.4931476007338057" width="3.0000000000000027e-2" x="-0.46499999999999997"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="-0.41500000000000004"/><rect height="3.0000000000000027e-2" y="-0.515" width="3.0000000000000027e-2" x="-0.36499999999999994"/><rect height="3.0000000000000027e-2" y="-0.4931476007338059" width="3.0000000000000027e-2" x="-0.3150000000000001"/><rect height="3.0000000000000027e-2" y="-0.4503978569087955" width="3.0000000000000027e-2" x="-0.265"/><rect height="3.0000000000000027e-2" y="-0.3886191374661524" width="3.0000000000000027e-2" x="-0.2150000000000002"/><rect height="3.0000000000000027e-2" y="-0.3105114688927062" width="3.0000000000000027e-2" x="-0.16499999999999992"/><rect height="3.0000000000000027e-2" y="-0.21948853110729416" width="3.0e-2" x="-0.11500000000000009"/><rect height="3.0e-2" y="-0.11952846326765375" width="3.0e-2" x="-6.500000000000004e-2"/><rect height="3.0e-2" y="-1.500000000000011e-2" width="3.0e-2" x="-1.5e-2"/><rect height="3.0e-2" y="8.952846326765325e-2" width="3.0e-2" x="3.5000000000000156e-2"/><rect height="3.0000000000000027e-2" y="0.1894885311072937" width="3.0e-2" x="8.499999999999998e-2"/><rect height="3.0000000000000027e-2" y="0.28051146889270595" width="3.0000000000000027e-2" x="0.1349999999999998"/><rect height="3.0000000000000027e-2" y="0.35861913746615204" width="3.0000000000000027e-2" x="0.18499999999999994"/><rect height="3.0000000000000027e-2" y="0.42039785690879505" width="3.0000000000000027e-2" x="0.235"/><rect height="3.0000000000000027e-2" y="0.46314760073380556" width="3.0000000000000027e-2" x="0.28500000000000003"/><rect height="3.0000000000000027e-2" y="0.4849999999999999" width="3.0000000000000027e-2" x="0.33499999999999963"/><rect height="3.0000000000000027e-2" y="0.485" width="3.0000000000000027e-2" x="0.3849999999999999"/><rect height="3.0000000000000027e-2" y="0.4631476007338056" width="3.0000000000000027e-2" x="0.43500000000000016"/><rect height="3.0000000000000027e-2" y="0.4203978569087954" width="3.0000000000000027e-2" x="0.485"/><rect height="3.0000000000000027e-2" y="0.35861913746615237" width="3.0000000000000027e-2" x="0.5349999999999998"/><rect height="3.0000000000000027e-2" y="0.28051146889270606" width="3.0000000000000027e-2" x="0.5850000000000001"/><rect height="3.0000000000000027e-2" y="0.18948853110729424" width="3.0000000000000027e-2" x="0.6349999999999999"/><rect height="3.0e-2" y="8.95284632676537e-2" width="3.0000000000000027e-2" x="0.6849999999999999"/><rect height="3.0e-2" y="-1.4999999999999888e-2" width="3.0000000000000027e-2" x="0.735"/></g></svg>+<svg xmlns="http://www.w3.org/2000/svg" width="445.66691218957544" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.7337586778163459 -0.49786990812511744 1.479175015777848 0.9957043985006302" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="wave"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="3.0e-3" fill-opacity="0.2" stroke-opacity="1.0"><rect x="-0.5819103029346796" width="3.0000000000000027e-2" y="-5.681211862490497e-2" height="3.0e-2"/><rect x="-0.5435095975286989" width="3.0000000000000027e-2" y="-0.1469960821617482" height="3.0000000000000013e-2"/><rect x="-0.505108892122718" width="3.0000000000000027e-2" y="-0.23323857374136125" height="3.0000000000000027e-2"/><rect x="-0.4667081867167372" width="3.0000000000000027e-2" y="-0.3117703826443262" height="3.0000000000000027e-2"/><rect x="-0.4283074813107564" width="3.0000000000000027e-2" y="-0.37915929198415466" height="3.0000000000000027e-2"/><rect x="-0.38990677590477557" width="3.0000000000000027e-2" y="-0.4324600830548322" height="3.0000000000000027e-2"/><rect x="-0.3515060704987948" width="3.0000000000000027e-2" y="-0.46934325552099776" height="3.0000000000000027e-2"/><rect x="-0.31310536509281395" width="3.0000000000000027e-2" y="-0.4881968377607824" height="3.0000000000000027e-2"/><rect x="-0.27470465968683316" width="3.0000000000000027e-2" y="-0.4881968377607824" height="3.0000000000000027e-2"/><rect x="-0.23630395428085232" width="3.0000000000000027e-2" y="-0.46934325552099776" height="3.0000000000000027e-2"/><rect x="-0.19790324887487148" width="3.0000000000000027e-2" y="-0.4324600830548324" height="3.0000000000000027e-2"/><rect x="-0.15950254346889076" width="3.0000000000000027e-2" y="-0.3791592919841549" height="3.0000000000000027e-2"/><rect x="-0.12110183806290985" width="3.0e-2" y="-0.3117703826443262" height="3.0000000000000027e-2"/><rect x="-8.270113265692901e-2" width="3.0e-2" y="-0.23323857374136137" height="3.0000000000000027e-2"/><rect x="-4.430042725094839e-2" width="3.0e-2" y="-0.1469960821617482" height="3.0000000000000013e-2"/><rect x="-5.899721844967329e-3" width="3.0e-2" y="-5.681211862490508e-2" height="3.0e-2"/><rect x="3.25009835610134e-2" width="3.0e-2" y="3.337184491193797e-2" height="3.0e-2"/><rect x="7.090168896699424e-2" width="3.0e-2" y="0.11961433649155113" height="3.0000000000000013e-2"/><rect x="0.10930239437297508" width="3.0000000000000013e-2" y="0.19814614539451608" height="3.0000000000000027e-2"/><rect x="0.1477030997789558" width="3.0000000000000027e-2" y="0.2655350547343446" height="3.0000000000000027e-2"/><rect x="0.18610380518493652" width="3.0000000000000027e-2" y="0.31883584580502206" height="3.0000000000000027e-2"/><rect x="0.22450451059091747" width="3.0000000000000027e-2" y="0.3557190182711878" height="3.0000000000000027e-2"/><rect x="0.2629052159968982" width="3.0000000000000027e-2" y="0.3745726005109724" height="3.0000000000000027e-2"/><rect x="0.30130592140287915" width="3.0000000000000027e-2" y="0.3745726005109724" height="3.0000000000000027e-2"/><rect x="0.33970662680886" width="3.0000000000000027e-2" y="0.3557190182711878" height="3.0000000000000027e-2"/><rect x="0.3781073322148404" width="3.0000000000000027e-2" y="0.31883584580502233" height="3.0000000000000027e-2"/><rect x="0.41650803762082156" width="3.0000000000000027e-2" y="0.26553505473434486" height="3.0000000000000027e-2"/><rect x="0.4549087430268025" width="3.0000000000000027e-2" y="0.19814614539451614" height="3.0000000000000027e-2"/><rect x="0.493309448432783" width="3.0000000000000027e-2" y="0.11961433649155158" height="3.0000000000000013e-2"/><rect x="0.5317101538387642" width="3.0000000000000027e-2" y="3.3371844911938356e-2" height="3.0e-2"/><rect x="0.5701108592447447" width="3.0000000000000027e-2" y="-5.681211862490497e-2" height="3.0e-2"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5810282423477436" width="1.297566976964342" y="-0.4875109476841367" height="0.8913976581184633"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.6066972230987693, 0.39194878814340184)"><polyline points="-0.6066972230987693,0.40694878814340185+-0.6066972230987693,0.3769487881434018"/></g><g transform="rotate(-90.0, -0.6066972230987693, 0.3051966067897405)"><polyline points="-0.6066972230987693,0.3201966067897405+-0.6066972230987693,0.29019660678974046"/></g><g transform="rotate(-90.0, -0.6066972230987693, 0.21844442543607906)"><polyline points="-0.6066972230987693,0.23344442543607907+-0.6066972230987693,0.20344442543607905"/></g><g transform="rotate(-90.0, -0.6066972230987693, 0.1316922440824177)"><polyline points="-0.6066972230987693,0.1466922440824177+-0.6066972230987693,0.1166922440824177"/></g><g transform="rotate(-90.0, -0.6066972230987693, 4.4940062728756336e-2)"><polyline points="-0.6066972230987693,5.9940062728756335e-2+-0.6066972230987693,2.9940062728756336e-2"/></g><g transform="rotate(-90.0, -0.6066972230987693, -4.181211862490497e-2)"><polyline points="-0.6066972230987693,-2.681211862490497e-2+-0.6066972230987693,-5.681211862490497e-2"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.12856429997856655)"><polyline points="-0.6066972230987693,-0.11356429997856655+-0.6066972230987693,-0.14356429997856657"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.2153164813322278)"><polyline points="-0.6066972230987693,-0.2003164813322278+-0.6066972230987693,-0.23031648133222782"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.30206866268588917)"><polyline points="-0.6066972230987693,-0.28706866268588915+-0.6066972230987693,-0.3170686626858892"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.38882084403955053)"><polyline points="-0.6066972230987693,-0.3738208440395505+-0.6066972230987693,-0.40382084403955054"/></g><g transform="rotate(-90.0, -0.6066972230987693, -0.4755730253932118)"><polyline points="-0.6066972230987693,-0.46057302539321177+-0.6066972230987693,-0.4905730253932118"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2781634585042604e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.6375" y="0.4038772130795303">-1.00</text><text x="-0.6375" y="0.3171250317258689">-0.80</text><text x="-0.6375" y="0.2303728503722075">-0.60</text><text x="-0.6375" y="0.14362066901854614">-0.40</text><text x="-0.6375" y="5.686848766488478e-2">-0.20</text><text x="-0.6375" y="-2.9883693688776525e-2"> 0.00</text><text x="-0.6375" y="-0.116635875042438"> 0.20</text><text x="-0.6375" y="-0.20338805639609936"> 0.40</text><text x="-0.6375" y="-0.2901402377497606"> 0.60</text><text x="-0.6375" y="-0.3768924191034221"> 0.80</text><text x="-0.6375" y="-0.46364460045708333"> 1.00</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5669103029346796,0.39194878814340184+0.7165387346165986,0.39194878814340184"/><polyline points="-0.5669103029346796,0.3051966067897405+0.7165387346165986,0.3051966067897405"/><polyline points="-0.5669103029346796,0.21844442543607906+0.7165387346165986,0.21844442543607906"/><polyline points="-0.5669103029346796,0.1316922440824177+0.7165387346165986,0.1316922440824177"/><polyline points="-0.5669103029346796,4.4940062728756336e-2+0.7165387346165986,4.4940062728756336e-2"/><polyline points="-0.5669103029346796,-4.181211862490497e-2+0.7165387346165986,-4.181211862490497e-2"/><polyline points="-0.5669103029346796,-0.12856429997856655+0.7165387346165986,-0.12856429997856655"/><polyline points="-0.5669103029346796,-0.2153164813322278+0.7165387346165986,-0.2153164813322278"/><polyline points="-0.5669103029346796,-0.30206866268588917+0.7165387346165986,-0.30206866268588917"/><polyline points="-0.5669103029346796,-0.38882084403955053+0.7165387346165986,-0.38882084403955053"/><polyline points="-0.5669103029346796,-0.4755730253932118+0.7165387346165986,-0.4755730253932118"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5930071000315557" width="3.4225307668034333e-3" y="-0.4773080690202852" height="0.8709919007907603"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5669103029346796,0.444912364840425+-0.5669103029346796,0.414912364840425"/><polyline points="-0.3835604404273542,0.444912364840425+-0.3835604404273542,0.414912364840425"/><polyline points="-0.20021057792002872,0.444912364840425+-0.20021057792002872,0.414912364840425"/><polyline points="-1.6860715412703398e-2,0.444912364840425+-1.6860715412703398e-2,0.414912364840425"/><polyline points="0.16648914709462204,0.444912364840425+0.16648914709462204,0.414912364840425"/><polyline points="0.34983900960194736,0.444912364840425+0.34983900960194736,0.414912364840425"/><polyline points="0.533188872109273,0.444912364840425+0.533188872109273,0.414912364840425"/><polyline points="0.7165387346165986,0.444912364840425+0.7165387346165986,0.414912364840425"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.2781634585042604e-2" fill-opacity="1.0" text-anchor="middle"><text x="-0.5669103029346796" y="0.485">0.0</text><text x="-0.3835604404273542" y="0.485">1.0</text><text x="-0.20021057792002872" y="0.485">2.0</text><text x="-1.6860715412703398e-2" y="0.485">3.0</text><text x="0.16648914709462204" y="0.485">4.0</text><text x="0.34983900960194736" y="0.485">5.0</text><text x="0.533188872109273" y="0.485">6.0</text><text x="0.7165387346165986" y="0.485">7.0</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5669103029346796,0.39194878814340184+-0.5669103029346796,-0.4755730253932118"/><polyline points="-0.3835604404273542,0.39194878814340184+-0.3835604404273542,-0.4755730253932118"/><polyline points="-0.20021057792002872,0.39194878814340184+-0.20021057792002872,-0.4755730253932118"/><polyline points="-1.6860715412703398e-2,0.39194878814340184+-1.6860715412703398e-2,-0.4755730253932118"/><polyline points="0.16648914709462204,0.39194878814340184+0.16648914709462204,-0.4755730253932118"/><polyline points="0.34983900960194736,0.39194878814340184+0.34983900960194736,-0.4755730253932118"/><polyline points="0.533188872109273,0.39194878814340184+0.533188872109273,-0.4755730253932118"/><polyline points="0.7165387346165986,0.39194878814340184+0.7165387346165986,-0.4755730253932118"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5686215683180813" width="1.2868715683180814" y="0.4125619285696927" height="3.4700872541464922e-3"/></g></g></g></g></svg>
+ other/wheel.svg view
@@ -0,0 +1,63 @@+<svg xmlns="http://www.w3.org/2000/svg" width="451.62214217250556" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-0.731781319367409 -0.4978484285626692 1.4806198310116425 0.9835344812075835" height="300.0"><style>svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #0d0d0d;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #0d0d0d;+  }+  .legendBorder g {+    fill: #f0f0f0;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: #f0f0f0;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: #f0f0f0;+  }+  .legendBorder g {+    fill: #0d0d0d;+  }+}</style><g class="chart"><g class="dots"><g fill="rgb(2%, 73%, 80%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.11103193242994913" cx="-0.4268236784626688" r="4.0e-2"/></g><g fill="rgb(2%, 29%, 48%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-4.8378389925234244e-2" cx="-0.2032463170209744" r="4.0e-2"/></g><g fill="rgb(66%, 7%, 55%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-7.076416935012897e-2" cx="0.5602804899549139" r="4.0e-2"/></g><g fill="rgb(96%, 60%, 92%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-8.125519588584867e-2" cx="0.35424081534968144" r="4.0e-2"/></g><g fill="rgb(100%, 71%, 35%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.4386167023784807" cx="8.061815034747388e-2" r="4.0e-2"/></g><g fill="rgb(73%, 34%, 1%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.4122535289466883" cx="0.24142247085194224" r="4.0e-2"/></g><g fill="rgb(21%, 29%, 7%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.32770362452141577" cx="-0.24108410000700525" r="4.0e-2"/></g><g fill="rgb(53%, 51%, 28%)" stroke="rgb(50%, 50%, 50%)" stroke-width="3.0e-3" fill-opacity="1.0" stroke-opacity="1.0"><circle cy="-0.34648111450405095" cx="-0.1341177220743705" r="4.0e-2"/></g></g><g class="wheel"><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.631807983395156e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.387882445411583e-2" width="9.999999999999995e-3" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.413461767192172e-2" width="9.999999999999995e-3" y="-0.21675018266569146" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.489796331349127e-2" width="9.999999999999995e-3" y="-0.2189263844165089" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.615682296205636e-2" width="9.999999999999995e-3" y="-0.2210333962446197" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.789134364895253e-2" width="9.999999999999995e-3" y="-0.22303798931482688" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.007417094679555e-2" width="9.999999999999995e-3" y="-0.22490854999692722" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.267088036514e-2" width="9.999999999999995e-3" y="-0.22661557843154534" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.564052024526e-2" width="9.999999999999995e-3" y="-0.22813215376053797" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.893625759226894e-2" width="9.999999999999995e-3" y="-0.2294343586850084" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.250611665942662e-2" width="1.0000000000000002e-2" y="-0.23050165665539857" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.629379863671336e-2" width="1.0000000000000002e-2" y="-0.2313172157451424" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.023956951669597e-2" width="1.0000000000000002e-2" y="-0.23186817410020322" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.42812021355077e-2" width="1.0000000000000009e-2" y="-0.2321458427781954" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.835495753239552e-2" width="1.0000000000000009e-2" y="-0.2321458427781954" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.239659015120726e-2" width="1.0000000000000009e-2" y="-0.23186817410020322" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.634236103118975e-2" width="1.0000000000000009e-2" y="-0.2313172157451424" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.01300430084766e-2" width="1.0000000000000009e-2" y="-0.23050165665539857" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.369990207563428e-2" width="1.0000000000000009e-2" y="-0.2294343586850084" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.699563942264322e-2" width="1.0000000000000009e-2" y="-0.22813215376053797" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.996527930276311e-2" width="1.0000000000000009e-2" y="-0.22661557843154534" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10256198872110767" width="1.0000000000000009e-2" y="-0.22490854999692722" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10474481601895058" width="1.0000000000000009e-2" y="-0.22303798931482688" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10647933670584686" width="1.0000000000000009e-2" y="-0.2210333962446197" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10773819635441184" width="1.0000000000000009e-2" y="-0.2189263844165089" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1085015419959815" width="1.0000000000000009e-2" y="-0.21675018266569146" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10875733521378739" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1085015419959815" width="1.0000000000000009e-2" y="-0.21232803932186395" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10773819635441184" width="1.0000000000000009e-2" y="-0.2101518375710466" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10647933670584686" width="1.0000000000000009e-2" y="-0.2080448257429357" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10474481601895058" width="1.0000000000000009e-2" y="-0.20604023267272864" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10256198872110767" width="1.0000000000000009e-2" y="-0.2041696719906283" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.996527930276311e-2" width="1.0000000000000009e-2" y="-0.20246264355601018" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.699563942264322e-2" width="1.0000000000000009e-2" y="-0.20094606822701766" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.369990207563428e-2" width="1.0000000000000009e-2" y="-0.19964386330254702" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.01300430084766e-2" width="1.0000000000000009e-2" y="-0.19857656533215695" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.634236103118975e-2" width="1.0000000000000009e-2" y="-0.197761006242413" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.239659015120726e-2" width="1.0000000000000009e-2" y="-0.1972100478873522" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.835495753239552e-2" width="1.0000000000000009e-2" y="-0.19693237920936013" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.42812021355077e-2" width="1.0000000000000009e-2" y="-0.19693237920936013" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.023956951669597e-2" width="1.0000000000000002e-2" y="-0.1972100478873522" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.629379863671336e-2" width="1.0000000000000002e-2" y="-0.197761006242413" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.250611665942662e-2" width="1.0000000000000002e-2" y="-0.19857656533215695" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.893625759226894e-2" width="9.999999999999995e-3" y="-0.19964386330254702" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.564052024526e-2" width="9.999999999999995e-3" y="-0.20094606822701766" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.267088036514e-2" width="9.999999999999995e-3" y="-0.20246264355601018" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.007417094679555e-2" width="9.999999999999995e-3" y="-0.2041696719906283" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.789134364895253e-2" width="9.999999999999995e-3" y="-0.20604023267272864" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.615682296205636e-2" width="9.999999999999995e-3" y="-0.2080448257429357" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.489796331349127e-2" width="9.999999999999995e-3" y="-0.2101518375710466" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.413461767192172e-2" width="9.999999999999995e-3" y="-0.21232803932186395" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1439569074280006e-2" width="1.0000000000000002e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1951155509891783e-2" width="1.0000000000000002e-2" y="-0.21896125433760516" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3477846793030986e-2" width="1.0000000000000002e-2" y="-0.22331365783924007" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.599556609016106e-2" width="1.0000000000000002e-2" y="-0.22752768149546176" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9464607463953617e-2" width="1.0000000000000002e-2" y="-0.231536867635876" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.3830262059639336e-2" width="1.0000000000000002e-2" y="-0.2352779890000768" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.902368089632845e-2" width="1.0000000000000002e-2" y="-0.23869204586931303" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.4962960656568336e-2" width="9.999999999999998e-3" y="-0.24172519652729796" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.155443535058633e-2" width="9.999999999999995e-3" y="-0.24432960637623913" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 38%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.8694153484901685e-2" width="9.999999999999995e-3" y="-0.2464642023170196" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 38%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.626951743947505e-2" width="9.999999999999995e-3" y="-0.2480953204965073" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.416105919944026e-2" width="1.0000000000000002e-2" y="-0.2491972372066289" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.224432443706363e-2" width="1.0000000000000002e-2" y="-0.24975257456261302" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.039183523083959e-2" width="1.0000000000000009e-2" y="-0.24975257456261302" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.847510046846296e-2" width="1.0000000000000009e-2" y="-0.2491972372066289" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 39%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.636664222842806e-2" width="1.0000000000000009e-2" y="-0.2480953204965073" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 40%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10394200618300165" width="1.0000000000000009e-2" y="-0.2464642023170196" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11108172431731689" width="1.0000000000000009e-2" y="-0.24432960637623913" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11767319901133488" width="1.0000000000000009e-2" y="-0.24172519652729796" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12361247877157472" width="1.0000000000000009e-2" y="-0.23869204586931292" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12880589760826394" width="1.0000000000000009e-2" y="-0.2352779890000768" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 40%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1331715522039495" width="1.0000000000000009e-2" y="-0.231536867635876" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13664059357774222" width="1.0000000000000009e-2" y="-0.22752768149546176" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13915831287487218" width="1.0000000000000009e-2" y="-0.22331365783924007" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14068500415801133" width="1.0000000000000009e-2" y="-0.21896125433760516" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14119659059362327" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14068500415801133" width="1.0000000000000009e-2" y="-0.21011696764995036" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13915831287487218" width="1.0000000000000009e-2" y="-0.20576456414831545" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13664059357774222" width="1.0000000000000009e-2" y="-0.20155054049209364" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1331715522039495" width="1.0000000000000009e-2" y="-0.19754135435167952" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12880589760826394" width="1.0000000000000009e-2" y="-0.19380023298747873" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 40%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12361247877157472" width="1.0000000000000009e-2" y="-0.1903861761182426" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11767319901133488" width="1.0000000000000009e-2" y="-0.18735302546025745" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 40%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11108172431731689" width="1.0000000000000009e-2" y="-0.1847486156113164" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 39%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10394200618300142" width="1.0000000000000009e-2" y="-0.18261401967053603" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 39%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.636664222842806e-2" width="1.0000000000000009e-2" y="-0.18098290149104823" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 39%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.847510046846296e-2" width="1.0000000000000009e-2" y="-0.17988098478092662" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.039183523083959e-2" width="1.0000000000000009e-2" y="-0.1793256474249425" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.224432443706363e-2" width="1.0000000000000002e-2" y="-0.1793256474249425" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.416105919944026e-2" width="1.0000000000000002e-2" y="-0.17988098478092662" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.626951743947505e-2" width="9.999999999999995e-3" y="-0.18098290149104823" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.8694153484901685e-2" width="9.999999999999995e-3" y="-0.18261401967053603" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.155443535058633e-2" width="9.999999999999995e-3" y="-0.1847486156113164" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 38%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.4962960656568336e-2" width="9.999999999999998e-3" y="-0.18735302546025745" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 38%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.902368089632845e-2" width="1.0000000000000002e-2" y="-0.1903861761182426" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 37%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.3830262059639336e-2" width="1.0000000000000002e-2" y="-0.19380023298747873" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.9464607463953617e-2" width="1.0000000000000002e-2" y="-0.19754135435167952" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5995566090160947e-2" width="1.0000000000000002e-2" y="-0.20155054049209364" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.3477846793030986e-2" width="1.0000000000000002e-2" y="-0.20576456414831545" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.1951155509891783e-2" width="1.0000000000000002e-2" y="-0.21011696764995036" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0999686305555824e-2" width="1.0000000000000002e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0232306652138158e-2" width="1.0000000000000002e-2" y="-0.22117232600951897" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.794226972742952e-2" width="1.0000000000000002e-2" y="-0.2277009312619711" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.4165690781734356e-2" width="1.0000000000000002e-2" y="-0.23402196674630382" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.962128721045296e-3" width="1.0000000000000002e-2" y="-0.24003574595692523" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.413646827516773e-3" width="1.0000000000000002e-2" y="-0.24564742800322636" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.376481427517006e-3" width="1.0e-2" y="-0.2507685133070805" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.4285401067876787e-2" width="1.0000000000000002e-2" y="-0.25531823929405806" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 37%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.4172613108903725e-2" width="1.0000000000000002e-2" y="-0.25922485406746976" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 38%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.488219031037664e-2" width="9.999999999999998e-3" y="-0.2624267479786403" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.624523624223697e-2" width="9.999999999999995e-3" y="-0.26487342524787194" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.808254888218455e-2" width="9.999999999999995e-3" y="-0.2665263003130546" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.020744673861967e-2" width="1.0000000000000002e-2" y="-0.26735930634703053" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.242871292928344e-2" width="1.0000000000000009e-2" y="-0.26735930634703053" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 39%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.455361078571867e-2" width="1.0000000000000009e-2" y="-0.2665263003130546" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 40%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10639092342566625" width="1.0000000000000009e-2" y="-0.26487342524787194" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 40%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11775396935752647" width="1.0000000000000009e-2" y="-0.2624267479786403" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12846354655899944" width="1.0000000000000009e-2" y="-0.25922485406746976" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13835075860002632" width="1.0000000000000009e-2" y="-0.25531823929405806" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14725967824038627" width="1.0000000000000009e-2" y="-0.2507685133070805" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 41%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15504980649541994" width="1.0000000000000009e-2" y="-0.24564742800322636" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 41%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16159828838894852" width="1.0000000000000009e-2" y="-0.24003574595692523" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 41%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16680185044963758" width="1.0000000000000009e-2" y="-0.2340219667463037" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 41%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17057842939533252" width="1.0000000000000009e-2" y="-0.2277009312619711" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 41%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17286846632004127" width="1.0000000000000009e-2" y="-0.22117232600951897" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 41%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17363584597345905" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17286846632004127" width="1.0000000000000009e-2" y="-0.20790589597803666" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17057842939533252" width="1.0000000000000009e-2" y="-0.2013772907255842" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16680185044963758" width="1.0000000000000009e-2" y="-0.1950562552412517" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16159828838894852" width="1.0000000000000009e-2" y="-0.1890424760306303" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 41%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15504980649541994" width="1.0000000000000009e-2" y="-0.18343079398432927" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 41%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14725967824038627" width="1.0000000000000009e-2" y="-0.17830970868047502" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 40%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13835075860002632" width="1.0000000000000009e-2" y="-0.17375998269349746" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 40%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12846354655899944" width="1.0000000000000009e-2" y="-0.16985336792008576" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 40%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11775396935752647" width="1.0000000000000009e-2" y="-0.16665147400891522" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10639092342566625" width="1.0000000000000009e-2" y="-0.16420479673968358" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.455361078571867e-2" width="1.0000000000000009e-2" y="-0.16255192167450105" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.242871292928344e-2" width="1.0000000000000009e-2" y="-0.16171891564052487" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 39%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.020744673861967e-2" width="1.0000000000000002e-2" y="-0.16171891564052487" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.808254888218444e-2" width="9.999999999999995e-3" y="-0.16255192167450105" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.624523624223697e-2" width="9.999999999999995e-3" y="-0.16420479673968358" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 38%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.488219031037664e-2" width="9.999999999999998e-3" y="-0.16665147400891522" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 37%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.4172613108903725e-2" width="1.0000000000000002e-2" y="-0.16985336792008576" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 37%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.4285401067876787e-2" width="1.0000000000000002e-2" y="-0.17375998269349746" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.376481427516784e-3" width="1.0e-2" y="-0.17830970868047502" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.413646827516773e-3" width="1.0000000000000002e-2" y="-0.18343079398432915" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 37%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.962128721045296e-3" width="1.0000000000000002e-2" y="-0.1890424760306303" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.4165690781734356e-2" width="1.0000000000000002e-2" y="-0.1950562552412517" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.794226972742952e-2" width="1.0000000000000002e-2" y="-0.2013772907255842" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0232306652138158e-2" width="1.0000000000000002e-2" y="-0.20790589597803666" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.343894168539177e-2" width="1.0000000000000002e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.241576881416799e-2" width="9.999999999999995e-3" y="-0.22338339768143256" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.9362386247889696e-2" width="9.999999999999995e-3" y="-0.23208820468470237" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.432694765362955e-2" width="9.999999999999995e-3" y="-0.24051625199714577" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 36%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.738886490604421e-2" width="9.999999999999995e-3" y="-0.24853462427797424" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 36%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.865755571467277e-2" width="9.999999999999998e-3" y="-0.2560168670063757" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 36%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.8270718041294657e-2" width="1.0000000000000002e-2" y="-0.2628449807448482" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 36%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.392158520814655e-3" width="1.0000000000000002e-2" y="-0.26891128206081816" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 37%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.790790867221115e-3" width="1.0e-2" y="-0.2741201017587006" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 37%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1070227135851823e-2" width="1.0000000000000002e-2" y="-0.2783892936402613" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.6220955044998775e-2" width="9.999999999999998e-3" y="-0.2816515299992367" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 38%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.200403856492885e-2" width="9.999999999999995e-3" y="-0.28385536341948014" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 38%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.817056904017582e-2" width="1.0000000000000002e-2" y="-0.2849660381314483" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.44655906277274e-2" width="1.0000000000000009e-2" y="-0.2849660381314483" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10063212110297426" width="1.0000000000000009e-2" y="-0.28385536341948014" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11641520462290444" width="1.0000000000000009e-2" y="-0.2816515299992367" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13156593253205145" width="1.0000000000000009e-2" y="-0.2783892936402613" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 40%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.145845368800682" width="1.0000000000000009e-2" y="-0.2741201017587006" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15902831818871804" width="1.0000000000000009e-2" y="-0.26891128206081816" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 41%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17090687770919788" width="1.0000000000000009e-2" y="-0.2628449807448482" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 41%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18129371538257605" width="1.0000000000000009e-2" y="-0.2560168670063757" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 42%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19002502457394754" width="1.0000000000000009e-2" y="-0.24853462427797424" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 42%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19696310732153277" width="1.0000000000000009e-2" y="-0.24051625199714577" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 42%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20199854591579286" width="1.0000000000000009e-2" y="-0.23208820468470237" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 42%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2050519284820711" width="1.0000000000000009e-2" y="-0.22338339768143256" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 42%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20607510135329488" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2050519284820711" width="1.0000000000000009e-2" y="-0.20569482430612285" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20199854591579286" width="1.0000000000000009e-2" y="-0.19699001730285315" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19696310732153277" width="1.0000000000000009e-2" y="-0.18856196999040975" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 42%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19002502457394738" width="1.0000000000000009e-2" y="-0.18054359770958117" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 41%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18129371538257605" width="1.0000000000000009e-2" y="-0.1730613549811797" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 41%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17090687770919788" width="1.0000000000000009e-2" y="-0.16623324124270744" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 41%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15902831818871804" width="1.0000000000000009e-2" y="-0.16016693992673736" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 40%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.145845368800682" width="1.0000000000000009e-2" y="-0.15495812022885513" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 40%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1315659325320514" width="1.0000000000000009e-2" y="-0.1506889283472943" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 40%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11641520462290444" width="1.0000000000000009e-2" y="-0.14742669198831881" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 39%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10063212110297426" width="1.0000000000000009e-2" y="-0.14522285856807537" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 39%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.44655906277274e-2" width="1.0000000000000009e-2" y="-0.14411218385610725" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 38%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.817056904017582e-2" width="1.0000000000000002e-2" y="-0.14411218385610725" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 38%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.200403856492885e-2" width="9.999999999999995e-3" y="-0.14522285856807537" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 38%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.6220955044998775e-2" width="9.999999999999998e-3" y="-0.14742669198831881" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 37%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1070227135851823e-2" width="1.0000000000000002e-2" y="-0.1506889283472943" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 37%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.790790867221115e-3" width="1.0e-2" y="-0.15495812022885502" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 37%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.392158520814877e-3" width="1.0000000000000002e-2" y="-0.16016693992673736" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 36%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.8270718041294657e-2" width="1.0000000000000002e-2" y="-0.16623324124270744" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.865755571467277e-2" width="9.999999999999998e-3" y="-0.1730613549811797" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 36%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.738886490604421e-2" width="9.999999999999995e-3" y="-0.18054359770958117" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 36%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.432694765362955e-2" width="9.999999999999995e-3" y="-0.18856196999040975" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 35%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.9362386247889696e-2" width="9.999999999999995e-3" y="-0.19699001730285315" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 35%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.241576881416799e-2" width="9.999999999999995e-3" y="-0.20569482430612285" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 34%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.587819706522737e-2" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 34%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.459923097619793e-2" width="1.0000000000000009e-2" y="-0.22559446935334637" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 34%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.078250276835008e-2" width="1.0000000000000009e-2" y="-0.23647547810743352" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.448820452552496e-2" width="1.0000000000000009e-2" y="-0.24701053724798772" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.581560109104312e-2" width="1.0000000000000009e-2" y="-0.25703350259902347" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.490146460182899e-2" width="1.0000000000000002e-2" y="-0.2663863060095253" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 35%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.19179175101061e-2" width="9.999999999999995e-3" y="-0.27492144818261577" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 36%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7069718109506428e-2" width="9.999999999999998e-3" y="-0.28250432482757826" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 36%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.0591031374461383e-2" width="1.0000000000000002e-2" y="-0.2890153494499311" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 37%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.258263961326779e-3" width="1.0e-2" y="-0.29435183930188213" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 37%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.6196673847760473e-2" width="1.0000000000000002e-2" y="-0.29842963475060136" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.592552824767326e-2" width="9.999999999999995e-3" y="-0.3011844265259057" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 38%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.613369134173175e-2" width="1.0000000000000002e-2" y="-0.3025727699158659" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.650246832617148e-2" width="1.0000000000000009e-2" y="-0.3025727699158659" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 39%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10671063142022985" width="1.0000000000000009e-2" y="-0.3011844265259057" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12643948582014258" width="1.0000000000000009e-2" y="-0.29842963475060136" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 40%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14537789570657644" width="1.0000000000000009e-2" y="-0.29435183930188213" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 41%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16322719104236466" width="1.0000000000000009e-2" y="-0.2890153494499311" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 41%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17970587777740954" width="1.0000000000000009e-2" y="-0.28250432482757837" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 42%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19455407717800943" width="1.0000000000000009e-2" y="-0.27492144818261577" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 42%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2075376242697322" width="1.0000000000000009e-2" y="-0.2663863060095253" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 42%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21845176075894646" width="1.0000000000000009e-2" y="-0.25703350259902347" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 42%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22712436419342807" width="1.0000000000000009e-2" y="-0.24701053724798772" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 43%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2334186624362532" width="1.0000000000000009e-2" y="-0.23647547810743352" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 43%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23723539064410104" width="1.0000000000000009e-2" y="-0.22559446935334637" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 43%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23851435673313065" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 43%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23723539064410104" width="1.0000000000000009e-2" y="-0.20348375263420915" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 43%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2334186624362532" width="1.0000000000000009e-2" y="-0.192602743880122" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 42%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22712436419342807" width="1.0000000000000009e-2" y="-0.1820676847395677" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 42%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21845176075894646" width="1.0000000000000009e-2" y="-0.17204471938853205" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 42%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2075376242697322" width="1.0000000000000009e-2" y="-0.16269191597803023" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 41%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19455407717800943" width="1.0000000000000009e-2" y="-0.15415677380493986" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 41%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17970587777740954" width="1.0000000000000009e-2" y="-0.14657389715997704" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 41%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16322719104236466" width="1.0000000000000009e-2" y="-0.14006287253762428" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 40%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1453778957065764" width="1.0000000000000009e-2" y="-0.13472638268567327" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 40%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12643948582014275" width="1.0000000000000009e-2" y="-0.13064858723695416" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 39%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10671063142022985" width="1.0000000000000009e-2" y="-0.1278937954616498" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 39%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.650246832617148e-2" width="1.0000000000000009e-2" y="-0.12650545207168962" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 38%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.613369134173175e-2" width="1.0000000000000002e-2" y="-0.12650545207168962" height="1.0000000000000009e-2"/></g><g fill="rgb(37%, 38%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.5925528247673035e-2" width="9.999999999999995e-3" y="-0.1278937954616498" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 37%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.6196673847760584e-2" width="1.0000000000000002e-2" y="-0.13064858723695416" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 37%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-7.258263961326779e-3" width="1.0e-2" y="-0.13472638268567327" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 36%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.0591031374461383e-2" width="1.0000000000000002e-2" y="-0.14006287253762428" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 36%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7069718109506428e-2" width="9.999999999999998e-3" y="-0.14657389715997715" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 36%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.191791751010621e-2" width="9.999999999999995e-3" y="-0.15415677380493986" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 35%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.490146460182899e-2" width="1.0000000000000002e-2" y="-0.16269191597803023" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 35%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.581560109104312e-2" width="1.0000000000000009e-2" y="-0.17204471938853205" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 35%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.448820452552496e-2" width="1.0000000000000009e-2" y="-0.1820676847395677" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 34%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.078250276835008e-2" width="1.0000000000000009e-2" y="-0.192602743880122" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 34%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.459923097619793e-2" width="1.0000000000000009e-2" y="-0.20348375263420915" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 33%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11831745244506342" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 33%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11678269313822764" width="1.0000000000000009e-2" y="-0.22780554102526018" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 33%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11220261928881026" width="1.0000000000000009e-2" y="-0.24086275153016468" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 34%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10464946139742026" width="1.0000000000000009e-2" y="-0.2535048224988299" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 34%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.424233727604225e-2" width="1.0000000000000009e-2" y="-0.2655323809200727" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 34%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.11453734889851e-2" width="1.0000000000000009e-2" y="-0.27675574501267475" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 35%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.556511697891765e-2" width="1.0000000000000009e-2" y="-0.28699791562038335" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 35%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.7747277698198094e-2" width="9.999999999999995e-3" y="-0.29609736759433836" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 36%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7972853616144103e-2" width="9.999999999999998e-3" y="-0.30391059714116186" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 36%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.553699213198265e-3" width="1.0000000000000002e-2" y="-0.31031438496350294" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 37%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.617239265052228e-2" width="1.0000000000000002e-2" y="-0.315207739501966" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 37%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.9847017930417665e-2" width="9.999999999999998e-3" y="-0.3185134896323314" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.409681364328779e-2" width="1.0000000000000002e-2" y="-0.3201795017002834" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.853934602461544e-2" width="1.0000000000000009e-2" y="-0.3201795017002834" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11278914173748555" width="1.0000000000000009e-2" y="-0.3185134896323314" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13646376701738078" width="1.0000000000000009e-2" y="-0.31520773950196623" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15918985888110138" width="1.0000000000000009e-2" y="-0.31031438496350294" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18060901328404733" width="1.0000000000000009e-2" y="-0.30391059714116186" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 42%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2003834373661011" width="1.0000000000000009e-2" y="-0.29609736759433836" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 42%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21820127664682099" width="1.0000000000000009e-2" y="-0.28699791562038335" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 43%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23378153315688827" width="1.0000000000000009e-2" y="-0.27675574501267475" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 43%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24687849694394542" width="1.0000000000000009e-2" y="-0.2655323809200727" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 43%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2572856210653234" width="1.0000000000000009e-2" y="-0.2535048224988299" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 43%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2648387789567136" width="1.0000000000000009e-2" y="-0.24086275153016468" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 43%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2694188528061308" width="1.0000000000000009e-2" y="-0.22780554102525996" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 43%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2709536121129665" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2694188528061308" width="1.0000000000000009e-2" y="-0.20127268096229545" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2648387789567136" width="1.0000000000000009e-2" y="-0.18821547045739084" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2572856210653234" width="1.0000000000000009e-2" y="-0.17557339948872563" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 43%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2468784969439453" width="1.0000000000000009e-2" y="-0.16354584106748282" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 42%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23378153315688827" width="1.0000000000000009e-2" y="-0.15232247697488066" height="1.0000000000000009e-2"/></g><g fill="rgb(23%, 42%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21820127664682099" width="1.0000000000000009e-2" y="-0.14208030636717217" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 41%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2003834373661011" width="1.0000000000000009e-2" y="-0.13298085439321694" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 41%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18060901328404733" width="1.0000000000000009e-2" y="-0.12516762484639377" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 40%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1591898588811012" width="1.0000000000000009e-2" y="-0.11876383702405247" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 40%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1364637670173809" width="1.0000000000000009e-2" y="-0.1138704824855894" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 39%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11278914173748555" width="1.0000000000000009e-2" y="-0.11056473235522407" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 39%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-8.853934602461533e-2" width="1.0000000000000009e-2" y="-0.10889872028727204" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 38%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.409681364328779e-2" width="1.0000000000000002e-2" y="-0.10889872028727204" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 37%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.984701793041744e-2" width="9.999999999999998e-3" y="-0.11056473235522407" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 37%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.617239265052239e-2" width="1.0000000000000002e-2" y="-0.1138704824855894" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 36%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.553699213198265e-3" width="1.0000000000000002e-2" y="-0.11876383702405247" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 36%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7972853616144103e-2" width="9.999999999999998e-3" y="-0.12516762484639365" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 35%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.7747277698198094e-2" width="9.999999999999995e-3" y="-0.13298085439321705" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 35%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.556511697891776e-2" width="1.0000000000000009e-2" y="-0.14208030636717217" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 34%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.11453734889851e-2" width="1.0000000000000009e-2" y="-0.15232247697488066" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 34%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.424233727604225e-2" width="1.0000000000000009e-2" y="-0.16354584106748282" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 34%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10464946139742026" width="1.0000000000000009e-2" y="-0.17557339948872563" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 33%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11220261928881026" width="1.0000000000000009e-2" y="-0.18821547045739084" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 33%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11678269313822764" width="1.0000000000000009e-2" y="-0.20127268096229556" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 32%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15075670782489903" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 32%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1489661553002577" width="1.0000000000000009e-2" y="-0.23001661269717366" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 32%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14362273580927065" width="1.0000000000000009e-2" y="-0.24525002495289583" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 32%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13481071826931545" width="1.0000000000000009e-2" y="-0.25999910774967194" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 33%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.12266907346104117" width="1.0000000000000009e-2" y="-0.2740312592411217" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 33%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1073892823761412" width="1.0000000000000009e-2" y="-0.2871251840158243" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 34%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.921231644772942e-2" width="1.0000000000000009e-2" y="-0.2990743830581509" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 34%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.842483728688953e-2" width="1.0000000000000009e-2" y="-0.30969041036109857" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 35%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.5354675857826605e-2" width="9.999999999999995e-3" y="-0.3188058448323925" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 36%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0365662387723197e-2" width="1.0000000000000002e-2" y="-0.32627693062512386" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 36%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.148111453284084e-3" width="1.0e-2" y="-0.3319858442533309" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 37%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.376850761316185e-2" width="9.999999999999998e-3" y="-0.33584255273875696" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 38%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.205993594484382e-2" width="9.999999999999995e-3" y="-0.33778623348470127" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 39%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.057622372305929e-2" width="1.0000000000000009e-2" y="-0.33778623348470127" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 39%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11886765205474126" width="1.0000000000000009e-2" y="-0.33584255273875696" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 40%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14648804821461908" width="1.0000000000000009e-2" y="-0.3319858442533309" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17300182205562636" width="1.0000000000000009e-2" y="-0.32627693062512386" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 41%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19799083552572982" width="1.0000000000000009e-2" y="-0.3188058448323925" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 42%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22106099695479275" width="1.0000000000000009e-2" y="-0.30969041036109857" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 43%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24184847611563248" width="1.0000000000000009e-2" y="-0.2990743830581509" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 43%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26002544204404443" width="1.0000000000000009e-2" y="-0.2871251840158243" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 43%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2753052331289444" width="1.0000000000000009e-2" y="-0.2740312592411217" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 44%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2874468779372187" width="1.0000000000000009e-2" y="-0.25999910774967194" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 44%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2962588954771738" width="1.0000000000000009e-2" y="-0.24525002495289583" height="1.0000000000000009e-2"/></g><g fill="rgb(20%, 44%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30160231496816076" width="1.0000000000000009e-2" y="-0.23001661269717366" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 44%, 39%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30339286749280236" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 44%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30160231496816076" width="1.0000000000000009e-2" y="-0.19906160929038175" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 44%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2962588954771738" width="1.0000000000000009e-2" y="-0.1838281970346597" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 44%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2874468779372187" width="1.0000000000000009e-2" y="-0.1690791142378837" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 43%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2753052331289444" width="1.0000000000000009e-2" y="-0.1550469627464337" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 43%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26002544204404443" width="1.0000000000000009e-2" y="-0.1419530379717313" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 42%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24184847611563248" width="1.0000000000000009e-2" y="-0.1300038389294046" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 42%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22106099695479275" width="1.0000000000000009e-2" y="-0.11938781162645695" height="1.0000000000000009e-2"/></g><g fill="rgb(23%, 41%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19799083552572988" width="1.0000000000000009e-2" y="-0.11027237715516292" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 41%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1730018220556262" width="1.0000000000000009e-2" y="-0.1028012913624316" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 40%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14648804821461908" width="1.0000000000000009e-2" y="-9.709237773422469e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 39%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11886765205474126" width="1.0000000000000009e-2" y="-9.323566924879856e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 38%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.057622372305929e-2" width="1.0000000000000009e-2" y="-9.12919885028543e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 38%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.2059935944843596e-2" width="9.999999999999995e-3" y="-9.12919885028543e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 37%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.376850761316174e-2" width="9.999999999999998e-3" y="-9.323566924879856e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 36%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.148111453284195e-3" width="1.0e-2" y="-9.709237773422469e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 36%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0365662387723197e-2" width="1.0000000000000002e-2" y="-0.1028012913624316" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 35%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.5354675857826605e-2" width="9.999999999999995e-3" y="-0.11027237715516292" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 35%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.842483728688953e-2" width="1.0000000000000009e-2" y="-0.11938781162645695" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 34%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.921231644772942e-2" width="1.0000000000000009e-2" y="-0.1300038389294046" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 33%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1073892823761412" width="1.0000000000000009e-2" y="-0.1419530379717312" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 33%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.12266907346104117" width="1.0000000000000009e-2" y="-0.1550469627464337" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 33%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13481071826931545" width="1.0000000000000009e-2" y="-0.1690791142378837" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 32%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14362273580927076" width="1.0000000000000009e-2" y="-0.1838281970346597" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 32%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1489661553002577" width="1.0000000000000009e-2" y="-0.19906160929038175" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 31%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18319596320473486" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 31%, 36%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18114961746228742" width="1.0000000000000009e-2" y="-0.23222768436908747" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 31%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17504285232973116" width="1.0000000000000009e-2" y="-0.24963729837562698" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 31%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16497197514121076" width="1.0000000000000009e-2" y="-0.2664933930005139" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 32%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1510958096460402" width="1.0000000000000009e-2" y="-0.28253013756217094" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 32%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13363319126329742" width="1.0000000000000009e-2" y="-0.2974946230189738" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 33%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11285951591654098" width="1.0000000000000009e-2" y="-0.3111508504959184" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 33%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.910239687558119e-2" width="1.0000000000000009e-2" y="-0.32328345312785867" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 34%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.273649809950921e-2" width="1.0000000000000009e-2" y="-0.33370109252362323" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 35%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.417762556224802e-2" width="9.999999999999995e-3" y="-0.34223947628674467" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 36%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.8761697439539987e-3" width="1.0000000000000002e-2" y="-0.34876394900469565" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 37%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7689997295906262e-2" width="1.0000000000000002e-2" y="-0.35317161584518253" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 38%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.002305824639997e-2" width="9.999999999999995e-3" y="-0.3553929652691188" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 38%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.261310142150336e-2" width="1.0000000000000009e-2" y="-0.3553929652691188" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12494616237199696" width="1.0000000000000009e-2" y="-0.35317161584518253" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 40%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15651232941185728" width="1.0000000000000009e-2" y="-0.34876394900469565" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18681378523015135" width="1.0000000000000009e-2" y="-0.34223947628674467" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 42%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21537265776741243" width="1.0000000000000009e-2" y="-0.33370109252362323" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 42%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2417385565434843" width="1.0000000000000009e-2" y="-0.32328345312785867" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 43%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26549567558444404" width="1.0000000000000009e-2" y="-0.3111508504959184" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 44%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.28626935093120054" width="1.0000000000000009e-2" y="-0.2974946230189738" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 44%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30373196931394336" width="1.0000000000000009e-2" y="-0.28253013756217094" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 44%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.31760813480911404" width="1.0000000000000009e-2" y="-0.2664933930005138" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 45%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3276790119976342" width="1.0000000000000009e-2" y="-0.24963729837562698" height="1.0000000000000009e-2"/></g><g fill="rgb(15%, 45%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33378577713019064" width="1.0000000000000009e-2" y="-0.23222768436908747" height="1.0000000000000009e-2"/></g><g fill="rgb(12%, 45%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33583212287263814" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(10%, 45%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33378577713019064" width="1.0000000000000009e-2" y="-0.19685053761846805" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 44%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3276790119976342" width="1.0000000000000009e-2" y="-0.17944092361192843" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 44%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.31760813480911404" width="1.0000000000000009e-2" y="-0.16258482898704163" height="1.0000000000000009e-2"/></g><g fill="rgb(9%, 44%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30373196931394325" width="1.0000000000000009e-2" y="-0.14654808442538458" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 43%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.28626935093120054" width="1.0000000000000009e-2" y="-0.13158359896858174" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 43%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.26549567558444404" width="1.0000000000000009e-2" y="-0.11792737149163701" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 42%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2417385565434843" width="1.0000000000000009e-2" y="-0.10579476885969685" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 41%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21537265776741255" width="1.0000000000000009e-2" y="-9.537712946393234e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 41%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18681378523015124" width="1.0000000000000009e-2" y="-8.683874570081074e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 40%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15651232941185728" width="1.0000000000000009e-2" y="-8.031427298285992e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 39%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12494616237199696" width="1.0000000000000009e-2" y="-7.590660614237288e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 38%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.261310142150325e-2" width="1.0000000000000009e-2" y="-7.368525671843673e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(33%, 38%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-6.0023058246399745e-2" width="9.999999999999995e-3" y="-7.368525671843673e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(36%, 37%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.768999729590604e-2" width="1.0000000000000002e-2" y="-7.590660614237288e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 36%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.8761697439539987e-3" width="1.0000000000000002e-2" y="-8.031427298285992e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 35%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.417762556224802e-2" width="9.999999999999995e-3" y="-8.683874570081085e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 34%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.273649809950921e-2" width="1.0000000000000009e-2" y="-9.537712946393234e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 34%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.910239687558119e-2" width="1.0000000000000009e-2" y="-0.10579476885969685" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 33%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11285951591654098" width="1.0000000000000009e-2" y="-0.11792737149163701" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 33%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13363319126329742" width="1.0000000000000009e-2" y="-0.13158359896858174" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 32%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1510958096460402" width="1.0000000000000009e-2" y="-0.14654808442538458" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 32%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16497197514121076" width="1.0000000000000009e-2" y="-0.16258482898704163" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 31%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17504285232973116" width="1.0000000000000009e-2" y="-0.17944092361192854" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 31%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18114961746228742" width="1.0000000000000009e-2" y="-0.19685053761846816" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 30%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2156352185845708" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 30%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21333307962431747" width="1.0000000000000009e-2" y="-0.23443875604100117" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 30%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20646296885019133" width="1.0000000000000009e-2" y="-0.25402457179835825" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 30%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19513323201310595" width="1.0000000000000009e-2" y="-0.27298767825135595" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 31%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.179522545831039" width="1.0000000000000009e-2" y="-0.29102901588322005" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 31%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15987710015045353" width="1.0000000000000009e-2" y="-0.30786406202212335" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 32%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1365067153853523" width="1.0000000000000009e-2" y="-0.3232273179336861" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 32%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10977995646427263" width="1.0000000000000009e-2" y="-0.3368764958946189" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 33%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.011832034119193e-2" width="1.0000000000000009e-2" y="-0.34859634021485386" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 34%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.798958873677318e-2" width="9.999999999999995e-3" y="-0.3582020219483657" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 35%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3900450941192192e-2" width="1.0000000000000002e-2" y="-0.3655420537560603" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 36%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.161148697865056e-2" width="1.0000000000000002e-2" y="-0.3705006789516082" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 37%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.7986180547955894e-2" width="9.999999999999995e-3" y="-0.3729996970535363" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 38%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.464997911994733e-2" width="1.0000000000000009e-2" y="-0.3729996970535363" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 39%, 12%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1310246726892526" width="1.0000000000000009e-2" y="-0.3705006789516082" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 40%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16653661060909547" width="1.0000000000000009e-2" y="-0.3655420537560603" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20062574840467634" width="1.0000000000000009e-2" y="-0.3582020219483656" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 42%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.23275448000909504" width="1.0000000000000009e-2" y="-0.34859634021485386" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 43%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2624161161321759" width="1.0000000000000009e-2" y="-0.3368764958946189" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 44%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.28914287505325564" width="1.0000000000000009e-2" y="-0.3232273179336861" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 44%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3125132598183566" width="1.0000000000000009e-2" y="-0.30786406202212335" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 45%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.33215870549894233" width="1.0000000000000009e-2" y="-0.29102901588322005" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 45%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3477693916810093" width="1.0000000000000009e-2" y="-0.27298767825135584" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 45%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3590991285180945" width="1.0000000000000009e-2" y="-0.25402457179835825" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 45%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3659692392922205" width="1.0000000000000009e-2" y="-0.23443875604100117" height="1.0000000000000009e-2"/></g><g fill="rgb(1%, 45%, 40%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3682713782524739" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(5%, 43%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2891428750532556" width="1.0000000000000009e-2" y="-0.10585090405386949" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 42%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2624161161321759" width="1.0000000000000009e-2" y="-9.220172609293664e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(15%, 42%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2327544800090951" width="1.0000000000000009e-2" y="-8.04818817727016e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 41%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20062574840467612" width="1.0000000000000009e-2" y="-7.087620003918987e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(23%, 40%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16653661060909547" width="1.0000000000000009e-2" y="-6.353616823149522e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(26%, 39%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1310246726892526" width="1.0000000000000009e-2" y="-5.857754303594736e-2" height="9.999999999999995e-3"/></g><g fill="rgb(30%, 38%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.464997911994733e-2" width="1.0000000000000009e-2" y="-5.607852493401921e-2" height="9.999999999999995e-3"/></g><g fill="rgb(33%, 37%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.798618054795578e-2" width="9.999999999999995e-3" y="-5.607852493401921e-2" height="9.999999999999995e-3"/></g><g fill="rgb(35%, 36%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1611486978650337e-2" width="1.0000000000000002e-2" y="-5.857754303594736e-2" height="9.999999999999995e-3"/></g><g fill="rgb(38%, 35%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.3900450941192192e-2" width="1.0000000000000002e-2" y="-6.353616823149522e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(40%, 35%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.798958873677318e-2" width="9.999999999999995e-3" y="-7.087620003918998e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(43%, 34%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.011832034119193e-2" width="1.0000000000000009e-2" y="-8.04818817727016e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 33%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10977995646427263" width="1.0000000000000009e-2" y="-9.22017260929367e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 32%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13650671538535242" width="1.0000000000000009e-2" y="-0.10585090405386954" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 32%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15987710015045353" width="1.0000000000000009e-2" y="-0.12121415996543217" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 31%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.179522545831039" width="1.0000000000000009e-2" y="-0.13804920610433535" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 31%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19513323201310595" width="1.0000000000000009e-2" y="-0.15609054373619968" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 30%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20646296885019144" width="1.0000000000000009e-2" y="-0.17505365018919739" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 30%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21333307962431747" width="1.0000000000000009e-2" y="-0.19463946594655446" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 29%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.24807447396440652" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 29%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2455165417863473" width="1.0000000000000009e-2" y="-0.23664982771291487" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 29%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23788308537065161" width="1.0000000000000009e-2" y="-0.2584118452210893" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 29%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.22529448888500136" width="1.0000000000000009e-2" y="-0.2794819635021979" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 29%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2079492820160379" width="1.0000000000000009e-2" y="-0.2995278942042692" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 30%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18612100903760964" width="1.0000000000000009e-2" y="-0.3182335010252728" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 31%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16015391485416397" width="1.0000000000000009e-2" y="-0.33530378537145367" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 32%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13045751605296452" width="1.0000000000000009e-2" y="-0.350469538661379" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 33%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.750014258287454e-2" width="1.0000000000000009e-2" y="-0.3634915879060846" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 34%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.180155191129811e-2" width="1.0000000000000002e-2" y="-0.3741645676099865" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 35%, 7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.3924732138430497e-2" width="9.999999999999998e-3" y="-0.38232015850742496" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 36%, 4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5532976661394856e-2" width="1.0000000000000002e-2" y="-0.3878297420580338" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 37%, 3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.594930284951193e-2" width="9.999999999999995e-3" y="-0.39060642883795393" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 38%, 3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.668685681839129e-2" width="1.0000000000000009e-2" y="-0.39060642883795393" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 39%, 5%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1371031830065083" width="1.0000000000000009e-2" y="-0.3878297420580338" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 40%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1765608918063336" width="1.0000000000000009e-2" y="-0.38232015850742496" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 41%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21443771157920127" width="1.0000000000000009e-2" y="-0.3741645676099865" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 42%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2501363022507777" width="1.0000000000000009e-2" y="-0.3634915879060846" height="1.0000000000000009e-2"/></g><g fill="rgb(32%, 43%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2830936757208675" width="1.0000000000000009e-2" y="-0.350469538661379" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 44%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3127900745220672" width="1.0000000000000009e-2" y="-0.33530378537145356" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 45%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3387571687055127" width="1.0000000000000009e-2" y="-0.3182335010252728" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 45%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.36058544168394124" width="1.0000000000000009e-2" y="-0.2995278942042692" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 46%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3779306485529047" width="1.0000000000000009e-2" y="-0.2794819635021979" height="1.0000000000000009e-2"/></g><g fill="rgb(6%, 46%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.39051924503855484" width="1.0000000000000009e-2" y="-0.2584118452210893" height="1.0000000000000009e-2"/></g><g fill="rgb(0%, 43%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2830936757208675" width="1.0000000000000009e-2" y="-7.86086833261766e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(10%, 42%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.25013630225077776" width="1.0000000000000009e-2" y="-6.558663408147092e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(16%, 41%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2144377115792011" width="1.0000000000000009e-2" y="-5.4913654377569e-2" height="9.999999999999995e-3"/></g><g fill="rgb(21%, 40%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1765608918063336" width="1.0000000000000009e-2" y="-4.6758063480130445e-2" height="9.999999999999995e-3"/></g><g fill="rgb(25%, 39%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1371031830065083" width="1.0000000000000009e-2" y="-4.124847992952168e-2" height="9.999999999999998e-3"/></g><g fill="rgb(29%, 38%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.668685681839118e-2" width="1.0000000000000009e-2" y="-3.847179314960152e-2" height="9.999999999999998e-3"/></g><g fill="rgb(32%, 37%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.594930284951182e-2" width="9.999999999999995e-3" y="-3.847179314960152e-2" height="9.999999999999998e-3"/></g><g fill="rgb(35%, 36%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.5532976661394634e-2" width="1.0000000000000002e-2" y="-4.1248479929521735e-2" height="9.999999999999998e-3"/></g><g fill="rgb(38%, 35%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.3924732138430386e-2" width="9.999999999999998e-3" y="-4.6758063480130445e-2" height="9.999999999999995e-3"/></g><g fill="rgb(41%, 34%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.180155191129811e-2" width="1.0000000000000002e-2" y="-5.4913654377569114e-2" height="9.999999999999995e-3"/></g><g fill="rgb(43%, 33%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.750014258287454e-2" width="1.0000000000000009e-2" y="-6.558663408147092e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(46%, 32%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13045751605296452" width="1.0000000000000009e-2" y="-7.86086833261766e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 31%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16015391485416397" width="1.0000000000000009e-2" y="-9.377443661610191e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 31%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18612100903760964" width="1.0000000000000009e-2" y="-0.11084472096228276" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 30%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2079492820160379" width="1.0000000000000009e-2" y="-0.12955032778328623" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 29%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.22529448888500148" width="1.0000000000000009e-2" y="-0.14959625848535762" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 29%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23788308537065161" width="1.0000000000000009e-2" y="-0.17066637676646623" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 29%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2455165417863473" width="1.0000000000000009e-2" y="-0.19242839427464065" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 27%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.28051372934424235" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 27%, 35%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2777000039483768" width="1.0000000000000009e-2" y="-0.23886089938482868" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 27%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2693032018911121" width="1.0000000000000009e-2" y="-0.26279911864382044" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 28%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.25545574575689656" width="1.0000000000000009e-2" y="-0.28597624875303995" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 28%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23637601820103704" width="1.0000000000000009e-2" y="-0.3080267725253184" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 29%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21236491792476564" width="1.0000000000000009e-2" y="-0.3286029400284223" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 30%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18380111432297552" width="1.0000000000000009e-2" y="-0.34738025280922125" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 31%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15113507564165596" width="1.0000000000000009e-2" y="-0.3640625814281391" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 32%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11488196482455704" width="1.0000000000000009e-2" y="-0.37838683559731523" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 33%, 2%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.561351508582304e-2" width="1.0000000000000009e-2" y="-0.3901271132716073" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 42%, 4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22824967475372626" width="1.0000000000000009e-2" y="-0.3901271132716073" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 43%, 9%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2675181244924602" width="1.0000000000000009e-2" y="-0.37838683559731523" height="1.0000000000000009e-2"/></g><g fill="rgb(31%, 44%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.30377123530955913" width="1.0000000000000009e-2" y="-0.3640625814281391" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 44%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3364372739908788" width="1.0000000000000009e-2" y="-0.34738025280922125" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 45%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.36500107759266887" width="1.0000000000000009e-2" y="-0.3286029400284223" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 46%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.38901217786894027" width="1.0000000000000009e-2" y="-0.3080267725253184" height="1.0000000000000009e-2"/></g><g fill="rgb(7%, 46%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4080919054247999" width="1.0000000000000009e-2" y="-0.28597624875303995" height="1.0000000000000009e-2"/></g><g fill="rgb(0%, 42%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2675181244924603" width="1.0000000000000009e-2" y="-5.069138639024028e-2" height="9.999999999999995e-3"/></g><g fill="rgb(12%, 41%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.22824967475372604" width="1.0000000000000009e-2" y="-3.895110871594803e-2" height="9.999999999999998e-3"/></g><g fill="rgb(18%, 40%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18658517300357197" width="1.0000000000000009e-2" y="-2.997995872876574e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(23%, 39%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14318169332376407" width="1.0000000000000009e-2" y="-2.3919416823096114e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(27%, 38%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.872373451683514e-2" width="1.0000000000000009e-2" y="-2.0865061365183842e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(31%, 36%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.391242515106786e-2" width="9.999999999999995e-3" y="-2.0865061365183842e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(35%, 35%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-9.45446634413882e-3" width="1.0000000000000002e-2" y="-2.3919416823096114e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(38%, 34%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.3949013335668694e-2" width="9.999999999999995e-3" y="-2.997995872876574e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(41%, 33%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.561351508582304e-2" width="1.0000000000000009e-2" y="-3.895110871594825e-2" height="9.999999999999998e-3"/></g><g fill="rgb(44%, 32%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11488196482455704" width="1.0000000000000009e-2" y="-5.069138639024028e-2" height="9.999999999999995e-3"/></g><g fill="rgb(46%, 31%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15113507564165607" width="1.0000000000000009e-2" y="-6.50156405594165e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(49%, 30%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18380111432297552" width="1.0000000000000009e-2" y="-8.169796917833438e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 30%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21236491792476564" width="1.0000000000000009e-2" y="-0.10047528195913313" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 29%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23637601820103704" width="1.0000000000000009e-2" y="-0.12105144946223723" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 28%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.25545574575689656" width="1.0000000000000009e-2" y="-0.14310197323451557" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 28%, 44%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2693032018911121" width="1.0000000000000009e-2" y="-0.16627910334373508" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 27%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2777000039483768" width="1.0000000000000009e-2" y="-0.19021732260272695" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 26%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3129529847240783" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 26%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.30988346611040685" width="1.0000000000000009e-2" y="-0.24107197105674238" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 26%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3007233184115722" width="1.0000000000000009e-2" y="-0.2671863920665516" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 26%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.28561700262879197" width="1.0000000000000009e-2" y="-0.2924705340038819" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 27%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26480275438603607" width="1.0000000000000009e-2" y="-0.3165256508463675" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 27%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23860882681192186" width="1.0000000000000009e-2" y="-0.33897237903157185" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 28%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20744831379178708" width="1.0000000000000009e-2" y="-0.3594567202469888" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 29%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17181263523034762" width="1.0000000000000009e-2" y="-0.3776556241948992" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 31%, 0%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13226378706623954" width="1.0000000000000009e-2" y="-0.39328208328854597" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 43%, 2%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.2848999467341429" width="1.0000000000000009e-2" y="-0.39328208328854597" height="1.0000000000000009e-2"/></g><g fill="rgb(30%, 44%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3244487948982506" width="1.0000000000000009e-2" y="-0.3776556241948992" height="1.0000000000000009e-2"/></g><g fill="rgb(25%, 45%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.36008447345969036" width="1.0000000000000009e-2" y="-0.3594567202469887" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 46%, 20%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.391244986479825" width="1.0000000000000009e-2" y="-0.33897237903157185" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 46%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4174389140539392" width="1.0000000000000009e-2" y="-0.3165256508463675" height="1.0000000000000009e-2"/></g><g fill="rgb(6%, 41%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.24206163792825097" width="1.0000000000000009e-2" y="-2.298856305432728e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(15%, 40%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1966094542008101" width="1.0000000000000009e-2" y="-1.3201853977400976e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(21%, 38%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.14926020364101972" width="1.0000000000000009e-2" y="-6.59035371667049e-3" height="1.0e-2"/></g><g fill="rgb(26%, 37%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10076061221527899" width="1.0000000000000009e-2" y="-3.258329580766324e-3" height="1.0e-2"/></g><g fill="rgb(31%, 36%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-5.18755474526239e-2" width="9.999999999999995e-3" y="-3.258329580766324e-3" height="1.0e-2"/></g><g fill="rgb(35%, 35%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.375956026883227e-3" width="1.0e-2" y="-6.590353716670545e-3" height="1.0e-2"/></g><g fill="rgb(38%, 34%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.397329453290678e-2" width="9.999999999999995e-3" y="-1.3201853977400976e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(41%, 32%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.942547826034808e-2" width="1.0000000000000009e-2" y="-2.298856305432728e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(44%, 31%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13226378706623954" width="1.0000000000000009e-2" y="-3.579613869900949e-2" height="9.999999999999998e-3"/></g><g fill="rgb(47%, 30%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.17181263523034762" width="1.0000000000000009e-2" y="-5.142259779265639e-2" height="9.999999999999995e-3"/></g><g fill="rgb(49%, 29%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2074483137917872" width="1.0000000000000009e-2" y="-6.96215017405667e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(52%, 28%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23860882681192164" width="1.0000000000000009e-2" y="-9.010584295598373e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 28%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26480275438603607" width="1.0000000000000009e-2" y="-0.112552571141188" height="1.0000000000000009e-2"/></g><g fill="rgb(56%, 27%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2856170026287921" width="1.0000000000000009e-2" y="-0.1366076879836735" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 26%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3007233184115722" width="1.0000000000000009e-2" y="-0.16189182992100382" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 26%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.30988346611040685" width="1.0000000000000009e-2" y="-0.18800625093081325" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 24%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.345392240103914" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 24%, 34%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3420669282724368" width="1.0000000000000009e-2" y="-0.24328304272865608" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 24%, 30%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3321434349320327" width="1.0000000000000009e-2" y="-0.27157366548928275" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 25%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3157782595006874" width="1.0000000000000009e-2" y="-0.29896481925472396" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 25%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.293229490571035" width="1.0000000000000009e-2" y="-0.32502452916741653" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 26%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26485273569907786" width="1.0000000000000009e-2" y="-0.3493418180347214" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 27%, 10%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23109551326059874" width="1.0000000000000009e-2" y="-0.3715331876847565" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 28%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19249019481903906" width="1.0000000000000009e-2" y="-0.3912486669616593" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 44%, 3%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.3451263544869423" width="1.0000000000000009e-2" y="-0.3912486669616593" height="1.0000000000000009e-2"/></g><g fill="rgb(24%, 45%, 12%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.38373167292850185" width="1.0000000000000009e-2" y="-0.3715331876847564" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 46%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4174888953669811" width="1.0000000000000009e-2" y="-0.3493418180347214" height="1.0000000000000009e-2"/></g><g fill="rgb(4%, 47%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4458656502389382" width="1.0000000000000009e-2" y="-0.32502452916741653" height="1.0000000000000009e-2"/></g><g fill="rgb(12%, 40%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.20663373539804836" width="1.0000000000000009e-2" y="3.5762507739636783e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(20%, 38%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.15533871395827548" width="1.0000000000000009e-2" y="1.0738709389755133e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(25%, 37%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10279748991372295" width="1.0000000000000009e-2" y="1.434840220365136e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(30%, 36%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.9838669754179825e-2" width="9.999999999999995e-3" y="1.434840220365136e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(34%, 34%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7025542903723653e-3" width="1.0000000000000002e-2" y="1.0738709389755133e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(38%, 33%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.399757573014508e-2" width="1.0000000000000002e-2" y="3.576250773963734e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(42%, 32%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1032374414348729" width="1.0000000000000009e-2" y="-7.026017392706414e-3" height="1.0e-2"/></g><g fill="rgb(45%, 30%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14964560930792214" width="1.0000000000000009e-2" y="-2.0900891007778918e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(48%, 29%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19249019481903928" width="1.0000000000000009e-2" y="-3.782955502589624e-2" height="9.999999999999998e-3"/></g><g fill="rgb(50%, 28%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.23109551326059874" width="1.0000000000000009e-2" y="-5.754503430279911e-2" height="9.999999999999995e-3"/></g><g fill="rgb(53%, 27%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26485273569907786" width="1.0000000000000009e-2" y="-7.973640395283416e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 26%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.293229490571035" width="1.0000000000000009e-2" y="-0.10405369282013899" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 26%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3157782595006874" width="1.0000000000000009e-2" y="-0.13011340273283145" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 25%, 45%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3321434349320327" width="1.0000000000000009e-2" y="-0.15750455649827277" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 24%, 41%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3420669282724368" width="1.0000000000000009e-2" y="-0.18579517925889955" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 22%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37783149548374995" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 22%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37425039043446695" width="1.0000000000000009e-2" y="-0.24549411440056967" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 22%, 29%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.363563551452493" width="1.0000000000000009e-2" y="-0.2759609389120139" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 23%, 24%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3459395163725826" width="1.0000000000000009e-2" y="-0.3054591045055661" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 23%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3216562267560341" width="1.0000000000000009e-2" y="-0.3335234074884659" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 24%, 14%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2910966445862342" width="1.0000000000000009e-2" y="-0.3597112570378709" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 26%, 6%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2547427127294104" width="1.0000000000000009e-2" y="-0.3836096551225241" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 46%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4073788723973135" width="1.0000000000000009e-2" y="-0.383609655122524" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 46%, 15%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4437328042541372" width="1.0000000000000009e-2" y="-0.3597112570378709" height="1.0000000000000009e-2"/></g><g fill="rgb(7%, 39%, 69%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.21665801659528666" width="1.0000000000000009e-2" y="2.0354355525328386e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(18%, 38%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16141722427553107" width="1.0000000000000009e-2" y="2.8067772496180702e-2" height="9.999999999999998e-3"/></g><g fill="rgb(24%, 36%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10483436761216702" width="1.0000000000000009e-2" y="3.195513398806905e-2" height="9.999999999999995e-3"/></g><g fill="rgb(30%, 35%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.780179205573586e-2" width="9.999999999999995e-3" y="3.195513398806905e-2" height="9.999999999999995e-3"/></g><g fill="rgb(34%, 34%, 69%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.781064607628068e-3" width="1.0000000000000002e-2" y="2.8067772496180702e-2" height="9.999999999999998e-3"/></g><g fill="rgb(38%, 32%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.402185692738327e-2" width="1.0000000000000009e-2" y="2.035435552532844e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(42%, 31%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11704940460939817" width="1.0000000000000009e-2" y="8.936528268914504e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(45%, 30%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.16702743154960487" width="1.0000000000000009e-2" y="-6.005643316548177e-3" height="1.0e-2"/></g><g fill="rgb(48%, 28%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.21316775440773073" width="1.0000000000000009e-2" y="-2.4236512259136086e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(51%, 27%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2547427127294104" width="1.0000000000000009e-2" y="-4.546856686503158e-2" height="9.999999999999995e-3"/></g><g fill="rgb(54%, 26%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2910966445862342" width="1.0000000000000009e-2" y="-6.936696494968458e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(56%, 25%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3216562267560341" width="1.0000000000000009e-2" y="-9.555481449908965e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 24%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3459395163725826" width="1.0000000000000009e-2" y="-0.1236191174819895" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 23%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3635635514524931" width="1.0000000000000009e-2" y="-0.15311728307554162" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 23%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37425039043446695" width="1.0000000000000009e-2" y="-0.18358410758698596" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 21%, 38%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4102707508635858" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 20%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40643385259649667" width="1.0000000000000009e-2" y="-0.24770518607248349" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 20%, 28%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.39498366797295337" width="1.0000000000000009e-2" y="-0.28034821233474516" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 21%, 23%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3761007732444779" width="1.0000000000000009e-2" y="-0.3119533897564081" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 22%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3500829629410329" width="1.0000000000000009e-2" y="-0.342022285809515" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 23%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.31734055347338996" width="1.0000000000000009e-2" y="-0.37008069604102034" height="1.0000000000000009e-2"/></g><g fill="rgb(20%, 46%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.43102607186612496" width="1.0000000000000009e-2" y="-0.39568612256029156" height="1.0000000000000009e-2"/></g><g fill="rgb(9%, 47%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4699767131412933" width="1.0000000000000009e-2" y="-0.37008069604102034" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 38%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.16749573459278672" width="1.0000000000000009e-2" y="4.539683560260633e-2" height="9.999999999999995e-3"/></g><g fill="rgb(23%, 36%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1068712453106111" width="1.0000000000000009e-2" y="4.9561865772486564e-2" height="9.999999999999995e-3"/></g><g fill="rgb(29%, 34%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.57649143572919e-2" width="9.999999999999995e-3" y="4.9561865772486564e-2" height="9.999999999999995e-3"/></g><g fill="rgb(34%, 33%, 71%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="1.485957492488377e-2" width="1.0000000000000002e-2" y="4.539683560260622e-2" height="9.999999999999995e-3"/></g><g fill="rgb(38%, 31%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.404613812462146e-2" width="1.0000000000000009e-2" y="3.7132460276693154e-2" height="9.999999999999995e-3"/></g><g fill="rgb(42%, 30%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13086136778392288" width="1.0000000000000009e-2" y="2.4899073930535313e-2" height="9.999999999999998e-3"/></g><g fill="rgb(46%, 29%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18440925379128736" width="1.0000000000000009e-2" y="8.88960437468245e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(49%, 27%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2338453139964224" width="1.0000000000000009e-2" y="-1.0643469492376097e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(52%, 26%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.27838991219822173" width="1.0000000000000009e-2" y="-3.339209942726406e-2" height="9.999999999999998e-3"/></g><g fill="rgb(55%, 25%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.31734055347338996" width="1.0000000000000009e-2" y="-5.899752594653523e-2" height="9.999999999999995e-3"/></g><g fill="rgb(57%, 24%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3500829629410329" width="1.0000000000000009e-2" y="-8.705593617804058e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 23%, 50%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3761007732444779" width="1.0000000000000009e-2" y="-0.11712483223114756" height="1.0000000000000009e-2"/></g><g fill="rgb(61%, 22%, 46%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.39498366797295337" width="1.0000000000000009e-2" y="-0.14873000965281047" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 21%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40643385259649667" width="1.0000000000000009e-2" y="-0.18137303591507214" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 18%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4427100062434214" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 18%, 33%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4386173147585263" width="1.0000000000000009e-2" y="-0.24991625774439719" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 18%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.42640378449341376" width="1.0000000000000009e-2" y="-0.2847354857574762" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 19%, 22%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4062620301163732" width="1.0000000000000009e-2" y="-0.31844767500725013" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 20%, 16%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37850969912603194" width="1.0000000000000009e-2" y="-0.3505211641305641" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 21%, 7%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3435844623605463" width="1.0000000000000009e-2" y="-0.3804501350441698" height="1.0000000000000009e-2"/></g><g fill="rgb(2%, 47%, 9%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.4962206220284494" width="1.0000000000000009e-2" y="-0.3804501350441699" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 37%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17357424491004242" width="1.0000000000000009e-2" y="6.272589870903189e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(22%, 35%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.10890812300905495" width="1.0000000000000009e-2" y="6.716859755690419e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(29%, 34%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.372803665884805e-2" width="9.999999999999995e-3" y="6.716859755690419e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 32%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.0938085242139585e-2" width="1.0000000000000002e-2" y="6.272589870903184e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(38%, 30%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.407041932185966e-2" width="1.0000000000000009e-2" y="5.391056502805786e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(42%, 29%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14467333095844792" width="1.0000000000000009e-2" y="4.0861619592156236e-2" height="9.999999999999995e-3"/></g><g fill="rgb(46%, 27%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.20179107603296997" width="1.0000000000000009e-2" y="2.378485206591319e-2" height="9.999999999999998e-3"/></g><g fill="rgb(50%, 26%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.25452287358511416" width="1.0000000000000009e-2" y="2.949573274384114e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(53%, 25%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3020371116670334" width="1.0000000000000009e-2" y="-2.1315631989496316e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(55%, 23%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3435844623605463" width="1.0000000000000009e-2" y="-4.8628086943385655e-2" height="9.999999999999995e-3"/></g><g fill="rgb(58%, 22%, 55%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37850969912603194" width="1.0000000000000009e-2" y="-7.855705785699135e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(60%, 21%, 51%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4062620301163732" width="1.0000000000000009e-2" y="-0.1106305469803055" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 20%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.42640378449341376" width="1.0000000000000009e-2" y="-0.14434273623007932" height="1.0000000000000009e-2"/></g><g fill="rgb(64%, 19%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4386173147585263" width="1.0000000000000009e-2" y="-0.17916196424315844" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 16%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47514926162325744" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 16%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47080077692055633" width="1.0000000000000009e-2" y="-0.2521273294163109" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 16%, 27%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.45782390101387416" width="1.0000000000000009e-2" y="-0.28912275918020747" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 16%, 21%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4364232869882686" width="1.0000000000000009e-2" y="-0.3249419602580922" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 17%, 13%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40693643531103085" width="1.0000000000000009e-2" y="-0.35902004245161323" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 19%, 1%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3698283712477023" width="1.0000000000000009e-2" y="-0.3908195740473194" height="1.0000000000000009e-2"/></g><g fill="rgb(11%, 37%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.17965275522729812" width="1.0000000000000009e-2" y="8.005496181545751e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(21%, 35%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11094500070749891" width="1.0000000000000009e-2" y="8.477532934132187e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 33%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-4.169115896040398e-2" width="9.999999999999995e-3" y="8.477532934132187e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 31%, 75%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="2.7016595559395177e-2" width="9.999999999999998e-3" y="8.005496181545746e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 30%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.409470051909774e-2" width="1.0000000000000009e-2" y="7.068866977942262e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 28%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15848529413297285" width="1.0000000000000009e-2" y="5.68241652537771e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(47%, 26%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2191728982746527" width="1.0000000000000009e-2" y="3.868009975714388e-2" height="9.999999999999995e-3"/></g><g fill="rgb(50%, 25%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2752004331738057" width="1.0000000000000009e-2" y="1.6542616041144157e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(53%, 23%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.32568431113584506" width="1.0000000000000009e-2" y="-9.239164551728792e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(56%, 22%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3698283712477023" width="1.0000000000000009e-2" y="-3.8258647940236194e-2" height="9.999999999999998e-3"/></g><g fill="rgb(59%, 20%, 56%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.40693643531103085" width="1.0000000000000009e-2" y="-7.005817953594223e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(61%, 19%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4364232869882688" width="1.0000000000000009e-2" y="-0.1041362617294635" height="1.0000000000000009e-2"/></g><g fill="rgb(63%, 18%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.45782390101387416" width="1.0000000000000009e-2" y="-0.13995546280734816" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 17%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47080077692055633" width="1.0000000000000009e-2" y="-0.17695089257124474" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 13%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.507588517003093" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 12%, 32%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5029842390825862" width="1.0000000000000009e-2" y="-0.2543384010882247" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 12%, 26%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4892440175343341" width="1.0000000000000009e-2" y="-0.2935100326029385" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 13%, 19%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4665845438601638" width="1.0000000000000009e-2" y="-0.331436245508934" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 14%, 11%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.43536317149602943" width="1.0000000000000009e-2" y="-0.36751892077266235" height="1.0000000000000009e-2"/></g><g fill="rgb(8%, 36%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.18573126554455383" width="1.0000000000000009e-2" y="9.738402492188303e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(20%, 34%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11298187840594287" width="1.0000000000000009e-2" y="0.10238206112573944" height="1.0000000000000009e-2"/></g><g fill="rgb(28%, 32%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.9654281261960016e-2" width="9.999999999999998e-3" y="0.10238206112573944" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 30%, 77%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.309510587665077e-2" width="9.999999999999995e-3" y="9.738402492188303e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 29%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.10411898171633593" width="1.0000000000000009e-2" y="8.746677453078733e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(43%, 27%, 74%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1722972573074978" width="1.0000000000000009e-2" y="7.27867109153979e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 25%, 71%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2365547205163352" width="1.0000000000000009e-2" y="5.357534744837456e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(51%, 23%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2958779927624974" width="1.0000000000000009e-2" y="3.0135658807904257e-2" height="9.999999999999998e-3"/></g><g fill="rgb(54%, 22%, 65%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3493315106046566" width="1.0000000000000009e-2" y="2.8373028860387327e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(57%, 20%, 61%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3960722801348583" width="1.0000000000000009e-2" y="-2.7889208937086626e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(60%, 18%, 57%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.43536317149602943" width="1.0000000000000009e-2" y="-6.155930121489316e-2" height="9.999999999999995e-3"/></g><g fill="rgb(62%, 17%, 52%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4665845438601638" width="1.0000000000000009e-2" y="-9.76419764786215e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(65%, 15%, 47%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.48924401753433455" width="1.0000000000000009e-2" y="-0.1355681893846169" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 14%, 42%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5029842390825862" width="1.0000000000000009e-2" y="-0.17473982089933104" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 9%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5400277723829289" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 8%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.535167701244616" width="1.0000000000000009e-2" y="-0.2565494727601383" height="1.0000000000000009e-2"/></g><g fill="rgb(71%, 8%, 25%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5206641340547945" width="1.0000000000000009e-2" y="-0.2978973060256698" height="1.0000000000000009e-2"/></g><g fill="rgb(72%, 9%, 18%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4967458007320592" width="1.0000000000000009e-2" y="-0.3379305307597761" height="1.0000000000000009e-2"/></g><g fill="rgb(72%, 10%, 8%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4637899076810287" width="1.0000000000000009e-2" y="-0.37601779909371147" height="1.0000000000000009e-2"/></g><g fill="rgb(3%, 36%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.19180977586180942" width="1.0000000000000009e-2" y="0.11471308802830871" height="1.0000000000000009e-2"/></g><g fill="rgb(19%, 34%, 81%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11501875610438672" width="1.0000000000000009e-2" y="0.11998879291015702" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 32%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.7617403563516054e-2" width="9.999999999999998e-3" y="0.11998879291015702" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 29%, 79%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="3.917361619390659e-2" width="9.999999999999995e-3" y="0.11471308802830865" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 27%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.11414326291357435" width="1.0000000000000009e-2" y="0.10424487928215209" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 25%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.18610922048202283" width="1.0000000000000009e-2" y="8.874925657701882e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 24%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2539365427580177" width="1.0000000000000009e-2" y="6.847059513960518e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 22%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.31655555235118893" width="1.0000000000000009e-2" y="4.3728701574664415e-2" height="9.999999999999995e-3"/></g><g fill="rgb(55%, 20%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37297871007346817" width="1.0000000000000009e-2" y="1.4913770323806367e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(58%, 18%, 62%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.42231618902201473" width="1.0000000000000009e-2" y="-1.751976993393711e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(61%, 16%, 58%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4637899076810287" width="1.0000000000000009e-2" y="-5.306042289384393e-2" height="9.999999999999995e-3"/></g><g fill="rgb(64%, 14%, 53%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4967458007320592" width="1.0000000000000009e-2" y="-9.114769122777938e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(66%, 12%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5206641340547947" width="1.0000000000000009e-2" y="-0.13118091596188586" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 11%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.535167701244616" width="1.0000000000000009e-2" y="-0.17252874922741734" height="1.0000000000000009e-2"/></g><g fill="rgb(70%, 2%, 37%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5724670277627649" width="1.0000000000000009e-2" y="-0.21453911099377776" height="1.0000000000000009e-2"/></g><g fill="rgb(72%, 0%, 31%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.567351163406646" width="1.0000000000000009e-2" y="-0.258760544432052" height="1.0000000000000009e-2"/></g><g fill="rgb(73%, 1%, 17%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5269070576039544" width="1.0000000000000009e-2" y="-0.34442481601061814" height="1.0000000000000009e-2"/></g><g fill="rgb(73%, 5%, 4%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4922166438660277" width="1.0000000000000009e-2" y="-0.3845166774147606" height="1.0000000000000009e-2"/></g><g fill="rgb(18%, 33%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.1170556338028308" width="1.0000000000000009e-2" y="0.1375955246945747" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 31%, 82%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.558052586507209e-2" width="9.999999999999998e-3" y="0.1375955246945747" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 28%, 81%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="4.525212651116229e-2" width="9.999999999999995e-3" y="0.13204215113473433" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 26%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.12416754411081243" width="1.0000000000000009e-2" y="0.1210229840335168" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 24%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19992118365654776" width="1.0000000000000009e-2" y="0.10471180223863968" height="1.0000000000000009e-2"/></g><g fill="rgb(48%, 22%, 75%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2713183649997005" width="1.0000000000000009e-2" y="8.336584283083592e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(52%, 20%, 71%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3372331119398805" width="1.0000000000000009e-2" y="5.7321744341424515e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(56%, 18%, 68%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.39662590954227983" width="1.0000000000000009e-2" y="2.699023776157389e-2" height="9.999999999999998e-3"/></g><g fill="rgb(59%, 16%, 63%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.44856009790917073" width="1.0000000000000009e-2" y="-7.150330930787592e-3" height="1.0e-2"/></g><g fill="rgb(62%, 13%, 59%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4922166438660277" width="1.0000000000000009e-2" y="-4.456154457279481e-2" height="9.999999999999995e-3"/></g><g fill="rgb(65%, 11%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5269070576039544" width="1.0000000000000009e-2" y="-8.465340597693732e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(67%, 8%, 48%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5520842505752549" width="1.0000000000000009e-2" y="-0.1267936425391547" height="1.0000000000000009e-2"/></g><g fill="rgb(69%, 6%, 43%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.567351163406646" width="1.0000000000000009e-2" y="-0.17031767755550375" height="1.0000000000000009e-2"/></g><g fill="rgb(17%, 32%, 85%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.11909251150127487" width="1.0000000000000009e-2" y="0.15520225647899227" height="1.0000000000000009e-2"/></g><g fill="rgb(27%, 30%, 84%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.354364816662802e-2" width="9.999999999999998e-3" y="0.15520225647899227" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 27%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.133063682841799e-2" width="9.999999999999995e-3" y="0.14937121424115982" height="1.0000000000000009e-2"/></g><g fill="rgb(39%, 25%, 82%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.13419182530805063" width="1.0000000000000009e-2" y="0.1378010887848815" height="1.0000000000000009e-2"/></g><g fill="rgb(44%, 22%, 79%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2137331468310727" width="1.0000000000000009e-2" y="0.1206743479002606" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 20%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2887001872413828" width="1.0000000000000009e-2" y="9.826109052206655e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 18%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3579106715285719" width="1.0000000000000009e-2" y="7.091478710818455e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 15%, 69%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4202731090110913" width="1.0000000000000009e-2" y="3.9066705199341474e-2" height="9.999999999999995e-3"/></g><g fill="rgb(60%, 13%, 64%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.47480400679632695" width="1.0000000000000009e-2" y="3.219108072361869e-3" height="1.0000000000000002e-2"/></g><g fill="rgb(63%, 10%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5206433800510267" width="1.0000000000000009e-2" y="-3.6062666251745694e-2" height="9.999999999999998e-3"/></g><g fill="rgb(66%, 7%, 54%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5570683144758498" width="1.0000000000000009e-2" y="-7.815912072609538e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(68%, 2%, 49%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5835043670957153" width="1.0000000000000009e-2" y="-0.12240636911642366" height="1.0000000000000009e-2"/></g><g fill="rgb(16%, 31%, 87%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12112938919971877" width="1.0000000000000009e-2" y="0.17280898826340993" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 29%, 87%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-3.150677046818428e-2" width="9.999999999999998e-3" y="0.17280898826340993" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 26%, 86%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="5.7409147145673696e-2" width="1.0000000000000002e-2" y="0.16670027734758547" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 23%, 84%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.14421610650528882" width="1.0000000000000009e-2" y="0.15457919353624622" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 21%, 81%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.22754511000559763" width="1.0000000000000009e-2" y="0.13663689356188147" height="1.0000000000000009e-2"/></g><g fill="rgb(49%, 18%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3060820094830655" width="1.0000000000000009e-2" y="0.11315633821329724" height="1.0000000000000009e-2"/></g><g fill="rgb(53%, 16%, 75%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.3785882311172636" width="1.0000000000000009e-2" y="8.450782987494476e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(57%, 13%, 70%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4439203084799027" width="1.0000000000000009e-2" y="5.1143172637109054e-2" height="9.999999999999995e-3"/></g><g fill="rgb(61%, 10%, 66%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.501047915683483" width="1.0000000000000009e-2" y="1.358854707551144e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(64%, 5%, 60%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.5490701162360255" width="1.0000000000000009e-2" y="-2.7563787930696523e-2" height="1.0000000000000002e-2"/></g><g fill="rgb(16%, 30%, 89%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12316626689816268" width="1.0000000000000009e-2" y="0.19041572004782759" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 27%, 89%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.94698927697401e-2" width="1.0000000000000002e-2" y="0.19041572004782759" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 24%, 88%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.348765746292917e-2" width="1.0000000000000009e-2" y="0.18402934045401115" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 22%, 86%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.15424038770252702" width="1.0000000000000009e-2" y="0.17135729828761098" height="1.0000000000000009e-2"/></g><g fill="rgb(45%, 19%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.24135707318012267" width="1.0000000000000009e-2" y="0.1525994392235023" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 16%, 80%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.32346383172474813" width="1.0000000000000009e-2" y="0.12805158590452792" height="1.0000000000000009e-2"/></g><g fill="rgb(54%, 13%, 76%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.399265790705955" width="1.0000000000000009e-2" y="9.810087264170486e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(58%, 9%, 72%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.46756750794871416" width="1.0000000000000009e-2" y="6.321964007487668e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(62%, 4%, 67%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.527291824570639" width="1.0000000000000009e-2" y="2.3957986078660846e-2" height="9.999999999999998e-3"/></g><g fill="rgb(15%, 29%, 91%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12520314459660664" width="1.0000000000000009e-2" y="0.20802245183224516" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 26%, 91%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.7433015071296137e-2" width="1.0000000000000002e-2" y="0.20802245183224516" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 23%, 90%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="6.956616778018487e-2" width="1.0000000000000009e-2" y="0.2013584035604367" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 20%, 88%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1642646688997652" width="1.0000000000000009e-2" y="0.1881354030389757" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 16%, 85%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2551690363546476" width="1.0000000000000009e-2" y="0.1685619848851231" height="1.0000000000000009e-2"/></g><g fill="rgb(50%, 13%, 82%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.34084565396643074" width="1.0000000000000009e-2" y="0.14294683359575855" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 9%, 78%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4199433502946469" width="1.0000000000000009e-2" y="0.11169391540846496" height="1.0000000000000009e-2"/></g><g fill="rgb(59%, 3%, 73%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.4912147074175258" width="1.0000000000000009e-2" y="7.52961075126442e-2" height="1.0000000000000009e-2"/></g><g fill="rgb(14%, 28%, 93%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12724002229505055" width="1.0000000000000009e-2" y="0.2256291836166628" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 24%, 93%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.5396137372852175e-2" width="1.0000000000000002e-2" y="0.2256291836166628" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 21%, 92%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="7.56446780974408e-2" width="1.0000000000000009e-2" y="0.21868746666686226" height="1.0000000000000009e-2"/></g><g fill="rgb(40%, 17%, 90%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1742889500970034" width="1.0000000000000009e-2" y="0.20491350779034043" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 14%, 87%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.26898099952917254" width="1.0000000000000009e-2" y="0.18452453054674406" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 9%, 83%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.35822747620811324" width="1.0000000000000009e-2" y="0.15784208128698926" height="1.0000000000000009e-2"/></g><g fill="rgb(55%, 3%, 79%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.44062090988333835" width="1.0000000000000009e-2" y="0.125286958175225" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 27%, 96%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.12927689999349457" width="1.0000000000000009e-2" y="0.2432359154010805" height="9.999999999999981e-3"/></g><g fill="rgb(26%, 23%, 95%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.3359259674408214e-2" width="1.0000000000000002e-2" y="0.2432359154010805" height="9.999999999999981e-3"/></g><g fill="rgb(34%, 19%, 94%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.172318841469628e-2" width="1.0000000000000009e-2" y="0.2360165297732879" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 15%, 92%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.1843132312942416" width="1.0000000000000009e-2" y="0.22169161254170514" height="1.0000000000000009e-2"/></g><g fill="rgb(46%, 10%, 89%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.28279296270369747" width="1.0000000000000009e-2" y="0.20048707620836492" height="1.0000000000000009e-2"/></g><g fill="rgb(51%, 3%, 85%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.37560929844979607" width="1.0000000000000009e-2" y="0.17273732897822" height="1.0000000000000009e-2"/></g><g fill="rgb(13%, 25%, 98%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13131377769193847" width="1.0000000000000009e-2" y="0.2608426471854981" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 21%, 97%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-2.1322381975964252e-2" width="1.0000000000000002e-2" y="0.2608426471854981" height="1.0000000000000009e-2"/></g><g fill="rgb(34%, 16%, 96%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="8.78016987319522e-2" width="1.0000000000000009e-2" y="0.2533455928797135" height="1.0000000000000009e-2"/></g><g fill="rgb(41%, 11%, 94%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.19433751249147968" width="1.0000000000000009e-2" y="0.2384697172930699" height="1.0000000000000009e-2"/></g><g fill="rgb(47%, 4%, 91%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2966049258782224" width="1.0000000000000009e-2" y="0.21644962186998581" height="1.0000000000000009e-2"/></g><g fill="rgb(12%, 23%, 100%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-0.13335065539038243" width="1.0000000000000009e-2" y="0.27844937896991573" height="1.0000000000000009e-2"/></g><g fill="rgb(26%, 19%, 99%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="-1.92855042775204e-2" width="1.0000000000000002e-2" y="0.27844937896991573" height="1.0000000000000009e-2"/></g><g fill="rgb(35%, 13%, 98%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="9.388020904920769e-2" width="1.0000000000000009e-2" y="0.27067465598613916" height="1.0000000000000009e-2"/></g><g fill="rgb(42%, 6%, 96%)" stroke="rgb(2%, 29%, 48%)" stroke-width="0.0" fill-opacity="1.0" stroke-opacity="1.0"><rect x="0.2043617936887182" width="1.0000000000000009e-2" y="0.25524782204443464" height="1.0000000000000009e-2"/></g></g></g><g class="hud"><g class="frame"><g fill="rgb(100%, 100%, 100%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="2.0e-2" stroke-opacity="0.0"><rect x="-0.5579069105314889" width="1.2975702151934327" y="-0.47416226109936654" height="0.7938694503167667"/></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><g transform="rotate(-90.0, -0.5838583148353576, 0.31970718921740016)"><polyline points="-0.5838583148353576,0.33470718921740017+-0.5838583148353576,0.30470718921740014"/></g><g transform="rotate(-90.0, -0.5838583148353576, 0.23149947251553718)"><polyline points="-0.5838583148353576,0.24649947251553717+-0.5838583148353576,0.2164994725155372"/></g><g transform="rotate(-90.0, -0.5838583148353576, 0.14329175581367426)"><polyline points="-0.5838583148353576,0.15829175581367427+-0.5838583148353576,0.12829175581367425"/></g><g transform="rotate(-90.0, -0.5838583148353576, 5.5084039111811256e-2)"><polyline points="-0.5838583148353576,7.008403911181126e-2+-0.5838583148353576,4.008403911181126e-2"/></g><g transform="rotate(-90.0, -0.5838583148353576, -3.312367759005175e-2)"><polyline points="-0.5838583148353576,-1.812367759005175e-2+-0.5838583148353576,-4.812367759005175e-2"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.12133139429191464)"><polyline points="-0.5838583148353576,-0.10633139429191464+-0.5838583148353576,-0.13633139429191465"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.20953911099377776)"><polyline points="-0.5838583148353576,-0.19453911099377774+-0.5838583148353576,-0.22453911099377777"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.29774682769564065)"><polyline points="-0.5838583148353576,-0.28274682769564063+-0.5838583148353576,-0.31274682769564066"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.38595454439750365)"><polyline points="-0.5838583148353576,-0.37095454439750364+-0.5838583148353576,-0.40095454439750366"/></g><g transform="rotate(-90.0, -0.5838583148353576, -0.47416226109936654)"><polyline points="-0.5838583148353576,-0.45916226109936653+-0.5838583148353576,-0.48916226109936656"/></g></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.325234050644776e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.615" y="0.3306228941592557">-0.300</text><text x="-0.615" y="0.24241517745739272">-0.250</text><text x="-0.615" y="0.15420746075552977">-0.200</text><text x="-0.615" y="6.599974405366676e-2">-0.150</text><text x="-0.615" y="-2.220797264819624e-2">-0.100</text><text x="-0.615" y="-0.11041568935005908">-0.050</text><text x="-0.615" y="-0.1986234060519222"> 0.000</text><text x="-0.615" y="-0.2868311227537851"> 0.050</text><text x="-0.615" y="-0.3750388394556482"> 0.100</text><text x="-0.615" y="-0.463246556157511"> 0.150</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5579069105314889,0.31970718921740016+0.7396633046619439,0.31970718921740016"/><polyline points="-0.5579069105314889,0.23149947251553718+0.7396633046619439,0.23149947251553718"/><polyline points="-0.5579069105314889,0.14329175581367426+0.7396633046619439,0.14329175581367426"/><polyline points="-0.5579069105314889,5.5084039111811256e-2+0.7396633046619439,5.5084039111811256e-2"/><polyline points="-0.5579069105314889,-3.312367759005175e-2+0.7396633046619439,-3.312367759005175e-2"/><polyline points="-0.5579069105314889,-0.12133139429191464+0.7396633046619439,-0.12133139429191464"/><polyline points="-0.5579069105314889,-0.20953911099377776+0.7396633046619439,-0.20953911099377776"/><polyline points="-0.5579069105314889,-0.29774682769564065+0.7396633046619439,-0.29774682769564065"/><polyline points="-0.5579069105314889,-0.38595454439750365+0.7396633046619439,-0.38595454439750365"/><polyline points="-0.5579069105314889,-0.47416226109936654+0.7396633046619439,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5700175658732943" width="3.4601872405158884e-3" y="-0.47575" height="0.7970449281180336"/></g></g></g><g class="axis"><g class="ticks"><g class="tickglyph"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(5%, 5%, 5%)" stroke-width="4.0e-3" fill-opacity="0.4" stroke-opacity="0.4"><polyline points="-0.5579069105314889,0.3585232727269032+-0.5579069105314889,0.3285232727269032"/><polyline points="-0.39571063363230985,0.3585232727269032+-0.39571063363230985,0.3285232727269032"/><polyline points="-0.2335143567331307,0.3585232727269032+-0.2335143567331307,0.3285232727269032"/><polyline points="-7.131807983395155e-2,0.3585232727269032+-7.131807983395155e-2,0.3285232727269032"/><polyline points="9.087819706522737e-2,0.3585232727269032+9.087819706522737e-2,0.3285232727269032"/><polyline points="0.2530744739644065,0.3585232727269032+0.2530744739644065,0.3285232727269032"/><polyline points="0.4152707508635858,0.3585232727269032+0.4152707508635858,0.3285232727269032"/><polyline points="0.5774670277627649,0.3585232727269032+0.5774670277627649,0.3285232727269032"/><polyline points="0.7396633046619439,0.3585232727269032+0.7396633046619439,0.3285232727269032"/></g></g><g class="ticktext"><g fill="rgb(5%, 5%, 5%)" stroke="none" stroke-width="0.0" font-size="4.325234050644776e-2" fill-opacity="1.0" text-anchor="end"><text x="-0.5579069105314889" y="0.39393398282201786" transform="rotate(-45.0, -0.5579069105314889, 0.39393398282201786)">-0.150</text><text x="-0.39571063363230985" y="0.39393398282201786" transform="rotate(-45.0, -0.39571063363230985, 0.39393398282201786)">-0.100</text><text x="-0.2335143567331307" y="0.39393398282201786" transform="rotate(-45.0, -0.2335143567331307, 0.39393398282201786)">-0.050</text><text x="-7.131807983395155e-2" y="0.39393398282201786" transform="rotate(-45.0, -7.131807983395155e-2, 0.39393398282201786)"> 0.000</text><text x="9.087819706522737e-2" y="0.39393398282201786" transform="rotate(-45.0, 9.087819706522737e-2, 0.39393398282201786)"> 0.050</text><text x="0.2530744739644065" y="0.39393398282201786" transform="rotate(-45.0, 0.2530744739644065, 0.39393398282201786)"> 0.100</text><text x="0.4152707508635858" y="0.39393398282201786" transform="rotate(-45.0, 0.4152707508635858, 0.39393398282201786)"> 0.150</text><text x="0.5774670277627649" y="0.39393398282201786" transform="rotate(-45.0, 0.5774670277627649, 0.39393398282201786)"> 0.200</text><text x="0.7396633046619439" y="0.39393398282201786" transform="rotate(-45.0, 0.7396633046619439, 0.39393398282201786)"> 0.250</text></g></g><g class="ticklines"><g fill="none" stroke="rgb(5%, 5%, 5%)" stroke-width="5.0e-3" stroke-opacity="5.0e-2"><polyline points="-0.5579069105314889,0.31970718921740016+-0.5579069105314889,-0.47416226109936654"/><polyline points="-0.39571063363230985,0.31970718921740016+-0.39571063363230985,-0.47416226109936654"/><polyline points="-0.2335143567331307,0.31970718921740016+-0.2335143567331307,-0.47416226109936654"/><polyline points="-7.131807983395155e-2,0.31970718921740016+-7.131807983395155e-2,-0.47416226109936654"/><polyline points="9.087819706522737e-2,0.31970718921740016+9.087819706522737e-2,-0.47416226109936654"/><polyline points="0.2530744739644065,0.31970718921740016+0.2530744739644065,-0.47416226109936654"/><polyline points="0.4152707508635858,0.31970718921740016+0.4152707508635858,-0.47416226109936654"/><polyline points="0.5774670277627649,0.31970718921740016+0.5774670277627649,-0.47416226109936654"/><polyline points="0.7396633046619439,0.31970718921740016+0.7396633046619439,-0.47416226109936654"/></g></g></g><g class="axisbar"><g fill="rgb(5%, 5%, 5%)" stroke="rgb(0%, 0%, 0%)" stroke-width="0.0" fill-opacity="0.4" stroke-opacity="0.0"><rect x="-0.5596370041517468" width="1.3010304024339483" y="0.3276458837205678" height="3.1754778012670903e-3"/></g></g></g></g></svg>
src/Chart.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -Wall #-}+{-# OPTIONS_HADDOCK prune #-} --- | A haskell Charting library targetting SVGs+-- | A haskell Charting library targetting SVG. module Chart   ( -- * Usage @@ -13,206 +13,122 @@     --     -- $overview -    -- * Chart-    Chart (..),-    moveChart,-    projectXYs,-    projectXYsWith,-    projectArcPosition,--    -- * Annotation-    Annotation (..),-    annotationText,-    scaleAnn,-    scaleOpacAnn,-    colourAnn,-    padRect,--    -- * Styles-    RectStyle (..),-    defaultRectStyle,-    blob,-    clear,-    border,-    TextStyle (..),-    defaultTextStyle,-    GlyphStyle (..),-    defaultGlyphStyle,-    GlyphShape (..),-    glyphText,-    LineStyle (..),-    defaultLineStyle,-    LineCap (..),-    fromLineCap,-    toLineCap,-    LineJoin (..),-    fromLineJoin,-    toLineJoin,-    fromDashArray,-    Anchor (..),-    fromAnchor,-    toAnchor,-    PathStyle (..),-    toPathChart,-    defaultPathStyle,--    -- * Hud types-    ChartDims (..),-    HudT (..),-    Hud,-    simulHud,-    HudOptions (..),-    defaultHudOptions,-    scaleOpacHudOptions,-    colourHudOptions,-    defaultCanvas,-    runHudWith,-    runHud,-    makeHud,-    ChartAspect (..),-    toChartAspect,-    fromChartAspect,-    initialCanvas,-    chartAspectHud,-    canvas,-    title,-    tick,--    -- * Hud primitives-    AxisOptions (..),-    defaultAxisOptions,-    flipAxis,-    Place (..),-    placeText,-    AxisBar (..),-    defaultAxisBar,-    Title (..),-    defaultTitle,-    Tick (..),-    defaultGlyphTick,-    defaultTextTick,-    defaultLineTick,-    defaultTick,-    TickStyle (..),-    defaultTickStyle,-    tickStyleText,-    TickExtend (..),-    adjustTick,-    makeTickDates,-    makeTickDatesContinuous,-    Adjustments (..),-    defaultAdjustments,-    LegendOptions (..),-    defaultLegendOptions,-    legendHud,-    Orientation (..),-    fromOrientation,-    toOrientation,+    -- * Hud -    -- * SVG primitives-    CssOptions (..),-    SvgOptions (..),-    defaultSvgOptions,-    defaultSvgFrame,+    --+    -- $hud -    -- * Chart manipulation-    padChart,-    frameChart,-    hori,-    vert,-    stack,+    -- * Optics Usage -    -- * Bounding box calculation-    padBox,-    dataBox,-    dataBoxes,-    dataBoxesS,-    styleBox,-    styleBoxes,-    styleBoxesS,-    styleBoxText,-    styleBoxGlyph,+    --+    -- $optics      -- * Re-exports-    module Chart.Render,+    module Chart.Primitive,+    module Chart.Data,+    module Chart.Hud,+    module Chart.Style,+    module Chart.Svg,     module Chart.Bar,     module Chart.Surface,     module Data.Colour,     module Data.FormatN,     module Data.Path,-    module NumHask.Space,+    module Data.Path.Parser,   ) where  import Chart.Bar-import Chart.Render+import Chart.Data+import Chart.Hud+import Chart.Primitive+import Chart.Style import Chart.Surface-import Chart.Types+import Chart.Svg import Data.Colour import Data.FormatN import Data.Path-import NumHask.Space+import Data.Path.Parser  -- $setup -- -- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings -- >>> import Chart--- >>> import Control.Lens+-- >>> import Optics.Core +-- $usage+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings+-- >>> import Chart+-- >>> import Optics.Core+-- >>> let lines = [[Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],[Point 0.0 0.0, Point 2.8 3.0],[Point 0.5 4.0, Point 0.5 0]]+-- >>> let styles = (\c -> defaultLineStyle & #color .~ palette1 c & #size .~ 0.015) <$> [0..2]+-- >>> let cs = zipWith (\s x -> LineChart s [x]) styles lines+-- >>> let lineExample = mempty & #charts .~ named "line" cs & #hudOptions .~ defaultHudOptions :: ChartSvg+-- >>> writeChartSvg "other/usage.svg" lineExample+ -- $overview ----- Charting consists of three highly-coupled conceptual layers:+-- Charting consists of three tightly-coupled domains: ----- 1. the data to be represented.--- 2. how the data will be represented on a screen, and.--- 3. the creation of visual aids that help interpret the data; such as axes, gridlines and titles.+-- 1. /data domain/: the data to be represented.+-- 2. /screen syntax/: the syntactics of the data. How and where data is to be represented on a screen (or page), and.+-- 3. /the hud/: visual aids that help interpret the screened data; such as axes, gridlines and titles. -- -- == What is a 'Chart'? ----- A 'Chart' in this library consists of a specification of the first two items in the above list; data and data annotation.------ - 'XY': a list of values, specified as either 2D points or rectangles.------ - 'Annotation': a description of how the data should be represented on the screen.------ >>> :t Chart--- Chart :: Annotation -> [XY a] -> Chart a------ What exactly is annotation and what is data is highly variant within charting practice. This construction treats position on the XY plane differently from other quantitative manifests such as color and size. The chief advantage of priveliging XY position is that scaling and integrating data with other chart elements becomes much easier. The disadvantage is that, to use quantitative tools such as size, data needs to be consciously separated into that which is position-orientated, and that which is defined as 'Annotation'.---+-- A 'Chart' in this library consists of a specification of the first two items in the above list; data and its syntax. ----- Here's some data; three lists of points that will form a line:+-- Here's some data; three lists of points that form lines to be charted: ----- >>> let xs = fmap (fmap (uncurry Point)) [[(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)], [(0.0, 0.0), (3.2, 3.0)], [(0.5, 4.0), (0.5, 0)]] :: [[Point Double]]+-- >>> let lines = [[Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],[Point 0.0 0.0, Point 2.8 3.0],[Point 0.5 4.0, Point 0.5 0]] ----- and an Annotation to describe representation of this data; three line styles with different colors and widths:+-- and some line styles with different colors in order to distinguish the data: ----- >>> let anns = zipWith (\w c -> LineA (LineStyle w c Nothing Nothing Nothing Nothing)) [0.015, 0.03, 0.01] palette1_+-- >>> let styles = (\c -> defaultLineStyle & #color .~ palette1 c & #size .~ 0.015) <$> [0..2]+-- >>> styles+-- [LineStyle {size = 1.5e-2, color = Colour 0.02 0.73 0.80 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},LineStyle {size = 1.5e-2, color = Colour 0.02 0.29 0.48 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},LineStyle {size = 1.5e-2, color = Colour 0.66 0.07 0.55 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}] ----- and this is enough to create a Chart.+-- This is enough to create the charts. ----- >>> let lineExample = mempty & (#chartList .~ zipWith Chart anns (fmap (fmap PointXY) xs)) & #hudOptions .~ defaultHudOptions & #svgOptions .~ defaultSvgOptions :: ChartSvg+-- >>> let cs = zipWith (\s x -> LineChart s [x]) styles lines+-- >>> let lineExample = mempty & #charts .~ named "line" cs & #hudOptions .~ defaultHudOptions :: ChartSvg -- >>> :t lineExample -- lineExample :: ChartSvg ----- > writeChartSvg "other/line.svg" lineExample+-- > writeChartSvg "other/usage.svg" lineExample ----- ![lines example](other/line.svg)+-- ![usage example](other/usage.svg)  -- $hud ----- Axes, titles, tick marks, grid lines and legends are chart elements that exist to provide references for the viewer that helps explain the data that is being represented by the chart. They can be clearly distinguished from data representations such as a mark where a value is.+-- Axes, titles, tick marks, grid lines and legends are chart elements that exist to provide references to help explain the data being represented. The collective noun used by the library for these elements is /hud/. Hud elements can usually be distinguished from data syntax, but need information from the chart domain (data domain and style domain) to function. A tick mark and tick value on an axis need to know the range of the data to be placed properly on the screen. A chart border needs to know the syntactic range of the entire data representation inclusive of representational artifacts that might extend beyond the data domain (A circle glyph representing a point has dimension). ----- Apart from this, hud elements are pretty much the same as data elements. They simulateously have two reference frames: a data domain (tick values reference the data value range) and a page domain (a title needs to be placed on the left say, and has a size of 0.1 versus the page size). They are also typically composed of the same sorts of primitives as data elements, such as rectangles and lines and text and colors.+-- Apart from this functional usage, however, hud elements are pretty much the same as data elements. They are typically composed of the same stuff; rectangles and lines and text and colors. ----- Given this similarity, an efficient process for chart creation is roughly:+-- Given this similarity, the library process for chart creation is roughly: ----- - collect the chart data and data annotations into a [Chart Double]+-- - collect the chart data and syntax (or style) into a collection of charts (a list or a tree). See 'Chart' and 'ChartTree' -- -- - measure the range of the data values ----- - begin a process of folding a [Hud Double] in with the charts, supplying the the data values to the hud elements if needed, and keeping track of the overall page size of the chart.+-- - fold hud elements into a chart, /creating new 'ChartTree' from the hud/, keeping track of chart dimensions across three domains: ----- This process is encapsulated in 'runHud'.+--   - The domain of the underlying data ----- An important quality of 'runHud' (and conversion of charts to svg in general)is that this is the point at which the 'XY's of the chart are converted from the data domain to the page domain. Once the hud and the chart has been integrated there is no going back and the original data is forgotten. This is an opinionated aspect of chart-svg. A counter-example is d3 which stores the raw data in the svg element it represents.+--   - The domain of the canvas where the data is being represented+--+--   - The domain of the chart, inclusive of Hud or decorative elements.+--+-- This process is reified in 'runHudWith'. The most common Hud concepts, such as axes and titles, have been collected into the 'HudOptions' type.+--+-- An important quality of 'runHud' (and conversion of charts to svg in general) is that this is the point at which chart data is converted from the data domain to the page domain.+--++-- $optics+--+-- Usage suggests the use of optics-core and OverloadedLabels, but this is not required. 'Chart', 'HudOptions' and associated chart configuration types are big and sometimes deep syntax trees, and simple optics getting, setting and modding makes manipulation more pleasant. Lens works as well, and the library is perfectly capable of being used with records.+--+-- Lenses are supplied, for the optics-core library, but can be easily modified for lens. The chart-svg convention is that lenses are either OverloadedLabels, or suffixed with a single quote /'/.
src/Chart/Bar.hs view
@@ -1,12 +1,10 @@-{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RebindableSyntax #-} {-# LANGUAGE TupleSections #-} {-# OPTIONS_GHC -Wall #-} --- | bar charts+-- | Bar charts module Chart.Bar   ( BarOptions (..),     defaultBarOptions,@@ -19,34 +17,33 @@   ) where -import Chart.Render-import Chart.Types-import Control.Lens-import Data.Bifunctor+import Chart.Data+import Chart.Hud+import Chart.Primitive+import Chart.Style+import Chart.Svg import Data.Bool import Data.Colour+import Data.Foldable import Data.FormatN-import Data.Generics.Labels () import Data.List (scanl', transpose)-import qualified Data.List.NonEmpty as NonEmpty import Data.Maybe import Data.Text (Text, pack) import GHC.Generics-import GHC.OverloadedLabels-import NumHask.Prelude-import NumHask.Space+import Optics.Core+import Prelude hiding (abs)  -- $setup -- -- >>> :set -XOverloadedLabels -- >>> :set -XOverloadedStrings -- >>> import Chart--- >>> import Control.Lens+-- >>> import Optics.Core -- >>> import Data.Text (pack)  -- | Typical bar chart options. ----- >>> let barDataExample = BarData [[1, 2, 3, 5, 8, 0, -2, 11, 2, 1], [1 .. 10]] (Just (("row " <>) . pack . show <$> [1 .. 11])) (Just (("column " <>) . pack . show <$> [1 .. 2]))+-- >>> let barDataExample = BarData [[1, 2, 3, 5, 8, 0, -2, 11, 2, 1], [1 .. 10]] (("row " <>) . pack . show <$> [1 .. 11]) (("column " <>) . pack . show <$> [1 .. 2]) -- >>> let barExample = barChart defaultBarOptions barDataExample -- -- > writeChartSvg "other/bar.svg" barExample@@ -63,10 +60,43 @@     valueFormatN :: FormatN,     accumulateValues :: Bool,     barOrientation :: Orientation,-    barHudOptions :: HudOptions+    barLegendOptions :: LegendOptions   }   deriving (Show, Eq, Generic) +-- | A bar chart.+--+-- >>> emptyBar = barChart defaultBarOptions (BarData [] [] [])+-- >>> foldOf (#charts % charts') emptyBar+-- []+barChart :: BarOptions -> BarData -> ChartSvg+barChart bo bd =+  mempty+    & set #hudOptions (barHudOptions bo bd)+    & set+      #charts+      ( named+          "barchart"+          ( bars bo bd+              <> bool [] (barTextCharts bo bd) (view #displayValues bo)+          )+      )++barHudOptions :: BarOptions -> BarData -> HudOptions+barHudOptions bo bd =+  mempty+    & #axes+    .~ [ (1, axis1),+         (1, axis2)+       ]+    & #legends+    .~ [ (10, o & #content .~ barLegendContent bo bd)+       ]+  where+    o = view #barLegendOptions bo+    axis1 = bool id flipAxis (barOrientation bo == Vert) (defaultAxisOptions & #ticks % #ltick .~ Nothing & #ticks % #style .~ barTicks bd)+    axis2 = bool id flipAxis (barOrientation bo == Hori) defaultAxisOptions+ -- | The official bar options. defaultBarOptions :: BarOptions defaultBarOptions =@@ -78,49 +108,30 @@     0.04     0.1     True-    (FormatComma (Just 2))+    (FormatN FSCommaPrec (Just 2) True)     False     Hori-    ( defaultHudOptions-        & #hudAxes-          .~ [ defaultAxisOptions-                 & #axisTick . #ltick .~ Nothing,-               defaultAxisOptions & #place .~ PlaceLeft-             ]-        & #hudTitles .~ []-        & #hudLegend-          ?~ ( defaultLegendOptions-                 & #lplace .~ PlaceRight-                 & #lsize .~ 0.12-                 & #vgap .~ 0.4-                 & #hgap .~ 0.14-                 & #ltext . #size .~ 0.12-                 & #lscale .~ 0.4,-               []-             )-    )+    defaultLegendOptions   where-    gs = (\x -> RectStyle 0.002 x x) <$> palette1_-    ts = (\x -> defaultTextStyle & #color .~ x & #size .~ 0.04) <$> palette1_+    gs = (\x -> RectStyle 0.005 (palette1 x) (palette1a x 0.7)) <$> [1, 2, 6, 7, 5, 3, 4, 0]+    ts = (\x -> defaultTextStyle & #color .~ palette1 x & #size .~ 0.24) <$> [1, 2, 6, 7, 5, 3, 4, 0] --- | imagine a dataframe you get in other languages:------ - definitely some [[Double]]------ - maybe some row names+-- | Two dimensional data, maybe with row and column labels. ----- - maybe some column names data BarData = BarData   { barData :: [[Double]],-    barRowLabels :: Maybe [Text],-    barColumnLabels :: Maybe [Text]+    barRowLabels :: [Text],+    barColumnLabels :: [Text]   }   deriving (Show, Eq, Generic) --- | Convert BarData to rectangles+-- | Convert BarData to Rects -- -- >>> barRects defaultBarOptions [[1,2],[2,3]] -- [[Rect 5.0e-2 0.45 0.0 1.0,Rect 1.05 1.4500000000000002 0.0 2.0],[Rect 0.45 0.8500000000000001 0.0 2.0,Rect 1.4500000000000002 1.85 0.0 3.0]]+--+-- >>> barRects defaultBarOptions [[]]+-- [[]] barRects ::   BarOptions ->   [[Double]] ->@@ -148,83 +159,77 @@     bstep = (1 - (1 + 1) * ogap + (n - 1) * igap') / n     igap' = igap * (1 - (1 + 1) * ogap) --- | convert data to a range assuming a zero bound--- a very common but implicit assumption in a lot of bar charts+-- | Convert data to a range assuming a zero bound (a very common but implicit assumption in a lot of bar charts) -- -- >>> barDataLowerUpper False [[1,2],[2,3]] -- [[(0.0,1.0),(0.0,2.0)],[(0.0,2.0),(0.0,3.0)]] barDataLowerUpper :: Bool -> [[Double]] -> [[(Double, Double)]] barDataLowerUpper add bs =   case add of-    False -> fmap (0,) <$> bs-    True -> fmap (0,) <$> accRows bs+    False -> fmap (fmap (0,)) bs+    True -> fmap (fmap (0,)) (accRows bs) --- | calculate the Rect range of a bar data set.+-- | Calculate the Rect range of a bar data set. -- -- >>> barRange [[1,2],[2,3]] -- Rect 0.0 2.0 0.0 3.0+--+-- >>> barRange [[]]+-- Rect -0.5 0.5 -0.5 0.5 barRange ::   [[Double]] -> Rect Double-barRange [] = Rect 0 0 0 0-barRange ys'@(y : ys) = Rect 0 (fromIntegral $ maximum (length <$> ys')) (min 0 l) u+barRange ys = singletonGuard $ Just $ Rect 0 (fromIntegral $ maximum (length <$> ys)) (min 0 l) u   where-    (Range l u) = sconcat $ space1 <$> (y NonEmpty.:| ys)+    (Range l u) = fromMaybe one $ space1 $ mconcat ys  -- | A bar chart without hud trimmings. ----- >>> bars defaultBarOptions (BarData [[1,2],[2,3]] Nothing Nothing)--- [Chart {annotation = RectA (RectStyle {borderSize = 2.0e-3, borderColor = Colour 0.69 0.35 0.16 1.00, color = Colour 0.69 0.35 0.16 1.00}), xys = [R 5.0e-2 0.45 0.0 1.0,R 1.05 1.4500000000000002 0.0 2.0]},Chart {annotation = RectA (RectStyle {borderSize = 2.0e-3, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.65 0.81 0.89 1.00}), xys = [R 0.45 0.8500000000000001 0.0 2.0,R 1.4500000000000002 1.85 0.0 3.0]},Chart {annotation = BlankA, xys = [R -5.0e-2 1.9500000000000002 0.0 3.0]}]-bars :: BarOptions -> BarData -> [Chart Double]-bars bo bd =-  zipWith (\o d -> Chart (RectA o) d) (bo ^. #barRectStyles) (fmap RectXY <$> barRects bo (bd ^. #barData)) <> [Chart BlankA [RectXY (Rect (x - (bo ^. #outerGap)) (z + (bo ^. #outerGap)) y w)]]+-- >>> bars defaultBarOptions (BarData [[1,2],[2,3]] [] [])+-- [RectChart (RectStyle {borderSize = 5.0e-3, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.29 0.48 0.70}) [Rect 5.0e-2 0.45 0.0 1.0,Rect 1.05 1.4500000000000002 0.0 2.0],RectChart (RectStyle {borderSize = 5.0e-3, borderColor = Colour 0.66 0.07 0.55 1.00, color = Colour 0.66 0.07 0.55 0.70}) [Rect 0.45 0.8500000000000001 0.0 2.0,Rect 1.4500000000000002 1.85 0.0 3.0],BlankChart [Rect -5.0e-2 1.9500000000000002 0.0 3.0]]+--+-- >>> bars defaultBarOptions (BarData [[]] [] [])+-- []+bars :: BarOptions -> BarData -> [Chart]+bars bo bd = bool cs [] (null $ mconcat $ view #barData bd)   where-    (Rect x z y w) = fromMaybe one $ foldRect $ catMaybes $ foldRect <$> barRects bo (bd ^. #barData)+    cs = zipWith (\o d -> RectChart o d) (bo ^. #barRectStyles <> repeat defaultRectStyle) (barRects bo (bd ^. #barData)) <> [BlankChart [Rect (x - (bo ^. #outerGap)) (z + (bo ^. #outerGap)) y w]]+    (Rect x z y w) = fromMaybe one $ foldRect $ mconcat $ barRects bo (bd ^. #barData)  maxRows :: [[Double]] -> Int-maxRows [] = 0 maxRows xs = maximum $ length <$> xs  appendZero :: [[Double]] -> [[Double]]-appendZero xs = (\x -> take (maxRows xs) (x <> repeat 0)) <$> xs+appendZero xs =+  ( \x ->+      take+        (maxRows xs)+        (x <> repeat 0)+  )+    <$> xs  accRows :: [[Double]] -> [[Double]]-accRows xs = transpose $ drop 1 . scanl' (+) 0 <$> transpose xs+accRows xs = transpose $ drop 1 . scanl' (+) 0 <$> transpose (fmap toList $ toList xs) --- | sensible ticks+-- | Sensible ticks for a bar chart. barTicks :: BarData -> TickStyle barTicks bd   | null (bd ^. #barData) = TickNone-  | isNothing (bd ^. #barRowLabels) =+  | null (bd ^. #barRowLabels) =     TickLabels $ pack . show <$> [0 .. (maxRows (bd ^. #barData) - 1)]   | otherwise =     TickLabels $       take (maxRows (bd ^. #barData)) $-        fromMaybe [] (bd ^. #barRowLabels) <> repeat ""--tickFirstAxis :: BarData -> [AxisOptions] -> [AxisOptions]-tickFirstAxis _ [] = []-tickFirstAxis bd (x : xs) = (x & #axisTick . #tstyle .~ barTicks bd) : xs+        (bd ^. #barRowLabels) <> repeat "" --- | bar legend-barLegend :: BarData -> BarOptions -> [(Annotation, Text)]-barLegend bd bo+-- | A bar legend+barLegendContent :: BarOptions -> BarData -> [(Text, Chart)]+barLegendContent bo bd   | null (bd ^. #barData) = []-  | isNothing (bd ^. #barColumnLabels) = []-  | otherwise = zip (RectA <$> bo ^. #barRectStyles) $ take (length (bd ^. #barData)) $ fromMaybe [] (bd ^. #barColumnLabels) <> repeat ""---- | A bar chart.------ By convention only, the first axis (if any) is the bar axis.-barChart :: BarOptions -> BarData -> ChartSvg-barChart bo bd =-  mempty-    & #hudOptions .~ bo ^. #barHudOptions-    & #hudOptions . #hudLegend %~ fmap (second (const (barLegend bd bo)))-    & #hudOptions . #hudAxes %~ tickFirstAxis bd . flipAllAxes (barOrientation bo)-    & #chartList .~ bars bo bd <> bool [] (barTextCharts bo bd) (bo ^. #displayValues)--flipAllAxes :: Orientation -> [AxisOptions] -> [AxisOptions]-flipAllAxes o = fmap (bool id flipAxis (o == Vert))+  | null (bd ^. #barColumnLabels) = []+  | otherwise =+    zip+      (view #barColumnLabels bd <> repeat "")+      ((\s -> RectChart s [one]) <$> take (length (view #barData bd)) (bo ^. #barRectStyles))  barDataTP :: Bool -> FormatN -> Double -> Double -> [[Double]] -> [[(Text, Double)]] barDataTP add fn d negd bs =@@ -234,12 +239,13 @@     bs' = appendZero bs     (Rect _ _ y w) = barRange bs' --- | Convert BarData to text+-- | Convert BarData to text placed above (or below) the bars. barTexts ::   BarOptions ->   [[Double]] ->   [[(Text, Point Double)]]-barTexts (BarOptions _ _ ogap igap tgap tgapneg _ fn add orient _) bs = zipWith zip (fmap fst <$> barDataTP add fn tgap tgapneg bs') (txs'' orient)+barTexts (BarOptions _ _ ogap igap tgap tgapneg _ fn add orient _) bs =+  zipWith zip (fmap fst <$> barDataTP add fn tgap tgapneg bs') (txs'' orient)   where     bs' = bool bs (appendZero bs) add     txs'' Hori = txs'@@ -258,7 +264,7 @@     bstep = (1 - (1 + 1) * ogap + (n - 1) * igap') / n     igap' = igap * (1 - (1 + 1) * ogap) --- | text, hold the bars-barTextCharts :: BarOptions -> BarData -> [Chart Double]+-- | Placed text, hold the bars.+barTextCharts :: BarOptions -> BarData -> [Chart] barTextCharts bo bd =-  zipWith (\o d -> Chart (TextA o (fst <$> d)) (PointXY . snd <$> d)) (bo ^. #barTextStyles) (barTexts bo (bd ^. #barData))+  zipWith TextChart (bo ^. #barTextStyles <> repeat defaultTextStyle) (barTexts bo (bd ^. #barData))
+ src/Chart/Data.hs view
@@ -0,0 +1,71 @@+{-# LANGUAGE RebindableSyntax #-}+{-# OPTIONS_GHC -Wall #-}+{-# OPTIONS_HADDOCK prune #-}++-- | Data primitives and utilities+--+-- Whilst the library makes use of <https://hackage.haskell.org/package/numhask numhask>, it does not re-export, to avoid clashes with Prelude, with the exception of 'zero', 'one', 'angle', 'norm' & 'abs'.+--+-- 'Rect' and 'Point', from <https://hackage.haskell.org/package/numhask-space numhask-space>, make up the base elements of many chart primitives, and all of numhask-space is re-exported.+--+module Chart.Data+  ( -- * Data Primitives+    Rect (..),+    padRect,+    padSingletons,+    singletonGuard,+    Point (..),+    addp,++    -- * NumHask Exports+    --+    -- | Note that (+) and (*) from numhask are not actually re-exported.+    Multiplicative (one),+    Additive (zero),+    Direction (..),+    Norm (..),+    Signed (..),++    -- * Re-exports+    module NumHask.Space,+  )+where++import NumHask.Prelude+import NumHask.Space++-- | Additive pad (or frame or buffer) a Rect.+--+-- >>> padRect 1 one+-- Rect -1.5 1.5 -1.5 1.5+padRect :: (Subtractive a) => a -> Rect a -> Rect a+padRect p (Rect x z y w) = Rect (x - p) (z + p) (y - p) (w + p)++-- | Pad a Rect to remove singleton dimensions.+--+-- Attempting to scale a singleton dimension of a Rect is a common bug.+--+-- Due to the use of scaling, and thus zero dividing, this is a common exception to guard against.+--+-- >>> project (Rect 0 0 0 1) one (Point 0 0)+-- Point NaN -0.5+--+-- >>> project (padSingletons (Rect 0 0 0 1)) one (Point 0 0)+-- Point 0.0 -0.5+padSingletons :: Rect Double -> Rect Double+padSingletons (Rect x z y w)+  | x == z && y == w = Rect (x - 0.5) (x + 0.5) (y - 0.5) (y + 0.5)+  | x == z = Rect (x - 0.5) (x + 0.5) y w+  | y == w = Rect x z (y - 0.5) (y + 0.5)+  | otherwise = Rect x z y w++-- | Guard against an upstream Nothing or a singleton dimension+singletonGuard :: Maybe (Rect Double) -> Rect Double+singletonGuard = maybe one padSingletons++-- | add Points, dimension-wise+--+-- >>> Point 1 1 `addp` Point 0 2+-- Point 1.0 3.0+addp :: Point Double -> Point Double -> Point Double+addp = (+)
src/Chart/Examples.hs view
@@ -1,76 +1,72 @@-{-# LANGUAGE NegativeLiterals #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RebindableSyntax #-}+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE TupleSections #-} {-# OPTIONS_GHC -Wall #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}-{-# OPTIONS_GHC -fno-warn-type-defaults #-}  -- | Examples of chart construction. module Chart.Examples-  ( unitExample,-    svgOptionsExample,+  (+    -- * Unit & Hud+    unitExample,     hudOptionsExample,++    -- * Iconic primitives.+    lineExample,     rectExample,     textExample,     glyphsExample,-    lineExample,+    pathExample,++    -- * Compounds     barExample,     waveExample,-    lglyphExample,-    glinesExample,-    compoundExample,-    textLocalExample,-    labelExample,-    legendExample,     surfaceExample,     rosenbrock,-    arcExample,     arcFlagsExample,     ellipseExample,     quadExample,     cubicExample,-    pathExample,     vennExample,     arrowExample,+    dateExample,++    -- * Colour+    gradientExample,+    wheelExample,++    -- * Debugging+    debugExample,     writeAllExamples,+    writeAllExamplesDark,   ) where  import Chart-import Control.Lens+import Data.Bifunctor+import Data.Bool+import Data.Function import Data.Text (Text, pack) import qualified Data.Text as Text-import GHC.OverloadedLabels-import NumHask.Prelude hiding (lines)---- $setup--- >>> import Chart--- >>> import Control.Lens+import Data.Time+import NeatInterpolation+import Optics.Core+import Prelude hiding (abs)  -- | unit example -- -- ![unit example](other/unit.svg) unitExample :: ChartSvg-unitExample = mempty & #chartList .~ [Chart (RectA defaultRectStyle) [one]]+unitExample = mempty & #charts .~ named "unit" [RectChart defaultRectStyle [one]] & #hudOptions .~ defaultHudOptions --- | 'HudOptions' example+-- | A 'BlankChart', 'defaultHudOptions' example. -- -- ![hudoptions example](other/hudoptions.svg) hudOptionsExample :: ChartSvg hudOptionsExample =   mempty-    & #hudOptions .~ colourHudOptions dark defaultHudOptions-    & #chartList .~ [Chart BlankA [one]]---- | 'SvgOptions' example.------ ![svgoptions example](other/svgoptions.svg)-svgOptionsExample :: ChartSvg-svgOptionsExample =-  mempty-    & #svgOptions %~ #chartAspect .~ FixedAspect 0.7-    & #chartList .~ zipWith (\s d -> Chart (LineA s) (fmap PointXY d)) lopts ls+    & #hudOptions .~ colourHudOptions (rgb dark) defaultHudOptions+    & #charts .~ blank one  -- | rect example --@@ -78,151 +74,155 @@ rectExample :: ChartSvg rectExample =   mempty-    & #hudOptions .~ (defaultHudOptions & #hudAxes .~ [defaultAxisOptions])-    & #chartList .~ zipWith Chart (RectA <$> ropts) (fmap RectXY <$> rss)+    & #hudOptions+      .~ ( mempty+             & set+               #axes+               [(1, defaultAxisOptions & #ticks % #ltick .~ Nothing)]+         )+    & #charts .~ named "rect" (zipWith RectChart ropts rss)  rss :: [[Rect Double]] rss =-  [ gridR (\x -> exp (-(x ** 2) / 2)) (Range -5 5) 50,-    gridR (\x -> 0.5 * exp (-(x ** 2) / 8)) (Range -5 5) 50+  [ gridR (\x -> exp (-x ** 2 / 2)) (Range (-5) 5) 50,+    gridR (\x -> 0.5 * exp (-x ** 2 / 8)) (Range (-5) 5) 50   ]  ropts :: [RectStyle] ropts =-  [ blob (palette1 1),-    blob (palette1 2)+  [ blob (palette1a 1 0.4),+    blob (palette1a 2 0.4)   ]  -- | line example ----- Example in cabal file------ This 'lineExample' provides a bit more detail for testing huds.------ Simplified example:------ >>> :set -XOverloadedLabels--- >>> import Chart--- >>> let xs = fmap (fmap (uncurry Point)) [[(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)], [(0.0, 0.0), (3.2, 3.0)], [(0.5, 4.0), (0.5, 0)]] :: [[Point Double]]--- >>> xs--- [[Point 0.0 1.0,Point 1.0 1.0,Point 2.0 5.0],[Point 0.0 0.0,Point 3.2 3.0],[Point 0.5 4.0,Point 0.5 0.0]]------ >>> let anns = zipWith (\w c -> LineA (defaultLineStyle & #width .~ w & #color .~ c)) [0.015, 0.03, 0.01] palette1_--- >>> anns--- [LineA (LineStyle {width = 1.5e-2, color = Colour 0.69 0.35 0.16 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}),LineA (LineStyle {width = 3.0e-2, color = Colour 0.65 0.81 0.89 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}),LineA (LineStyle {width = 1.0e-2, color = Colour 0.12 0.47 0.71 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing})]------ >>> let lineExample = mempty & (#chartList .~ zipWith Chart anns (fmap (fmap PointXY) xs)) & #hudOptions .~ defaultHudOptions & #svgOptions .~ defaultSvgOptions :: ChartSvg--- >>> :t lineExample--- lineExample :: ChartSvg------ > writeChartSvg "other/line.svg" lineExample--- -- ![line example](other/line.svg) lineExample :: ChartSvg lineExample =-  mempty-    & #svgOptions . #chartAspect-    .~ CanvasAspect 1.5-    & #hudOptions-    .~ exampleLineHudOptions-      "Line Chart"-      (Just "An example from chart-svg")-      (Just (defaultLegendOptions, zip (LineA <$> lopts) ["hockey", "line", "vertical"]))-    & #chartList-    .~ zipWith (\s d -> Chart (LineA s) (fmap PointXY d)) lopts ls--ls :: [[Point Double]]-ls =-  fmap (uncurry Point)-    <$> [ [(0.0, 1.0), (1.0, 1.0), (2.0, 5.0)],-          [(0.0, 0.0), (2.8, 3.0)],-          [(0.5, 4.0), (0.5, 0)]-        ]--lopts :: [LineStyle]-lopts =-  [ defaultLineStyle & #color .~ palette1 0 & #width .~ 0.015,-    defaultLineStyle & #color .~ palette1 1 & #width .~ 0.03,-    defaultLineStyle & #color .~ palette1 2 & #width .~ 0.01-  ]--exampleLineHudOptions :: Text -> Maybe Text -> Maybe (LegendOptions, [(Annotation, Text)]) -> HudOptions-exampleLineHudOptions t1 t2 legends' =-  defaultHudOptions-    & #hudTitles-      .~ ( [ defaultTitle t1-               & #style . #size .~ 0.08-           ]-             <> foldMap-               ( \x ->-                   [ defaultTitle x-                       & #style . #size .~ 0.05-                       & #place .~ PlaceBottom-                       & #anchor .~ AnchorEnd-                   ]-               )-               t2-         )-    & #hudLegend .~ legends'-    & #hudAxes %~ fmap (#axisTick . #tstyle .~ TickRound (FormatFixed (Just 1)) 8 TickExtend)+  mempty & set #hudOptions ho & #charts .~ named "line" cs+  where+    ho =+      defaultHudOptions+        & set+          #titles+          [ (6, defaultTitle "Line Chart" & set (#style % #size) 0.1),+            ( 11,+              defaultTitle "Made with love and chart-svg"+                & set (#style % #size) 0.06+                & set #place PlaceBottom+                & set #anchor AnchorEnd+            )+          ]+        & over #frames (<> [(20, defaultFrameOptions & #buffer .~ 0.04)])+        & set+          #legends+          [ ( 12,+              defaultLegendOptions+                & over #frame (fmap (set #color white))+                & set #place (PlaceAbsolute (Point 0.45 (-0.35)))+                & set (#textStyle % #size) 0.20+                & set #content (zip ["palette1 0", "palette1 1", "palette1 2"] cs)+            )+          ]+    cs =+      zipWith+        ( \c l ->+            LineChart+              ( defaultLineStyle+                  & set #color (palette1 c)+                  & set #size 0.015+              )+              [l]+        )+        [0 ..]+        ls+    ls =+      [ [Point 0.0 1.0, Point 1.0 1.0, Point 2.0 5.0],+        [Point 0.0 0.0, Point 2.8 3.0],+        [Point 0.5 4.0, Point 0.5 0]+      ]  -- | text example -- -- ![text example](other/text.svg) textExample :: ChartSvg textExample =-  mempty & #chartList-    .~ zipWith-      Chart-      (TextA (defaultTextStyle & (#color .~ dark) & (#size .~ (0.05 :: Double))) . (: []) . fst <$> ts)-      ((: []) . PointXY . snd <$> ts)+  mempty+    & #charts+      .~ named+        "text"+        [ TextChart+            (defaultTextStyle & #color .~ dark & #size .~ 0.05 & #vshift .~ 0)+            ts+        ]+    & #hudOptions .~ defaultHudOptions+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud+    & #svgOptions % #cssOptions % #cssExtra .~ textSwitch (light, dark)   where     ts :: [(Text, Point Double)]     ts =       zip-        (fmap Text.singleton ['a' .. 'y'])-        [Point (sin (x * 0.1)) x | x <- [0 .. 25]]+        (fmap Text.singleton ['a' .. 'z'])+        ((\x -> Point (sin (x * 0.1)) x) <$> [0 .. 25]) +    textSwitch :: (Colour, Colour) -> Text+    textSwitch (cl, cd) =+      [trimming|+{+  .text g {+    fill: $hexDark;+  }+}+@media (prefers-color-scheme:dark) {+  .text g {+    fill: $hexLight;+  }+}+|]+      where+        hexLight = hex cl+        hexDark = hex cd+ -- | glyphs example -- -- ![glyphs example](other/glyphs.svg) glyphsExample :: ChartSvg glyphsExample =   mempty-    & #svgOptions . #svgHeight-    .~ 50-      & #chartList-    .~ zipWith-      ( \(sh, bs) p ->-          Chart-            ( GlyphA-                ( defaultGlyphStyle-                    & #size .~ (0.1 :: Double)-                    & #borderSize .~ bs-                    & #shape .~ sh-                )+    & set (#svgOptions % #svgHeight) 400+    & set+      #charts+      ( named "glyphs" $+          zipWith+            ( \(sh, bs) p ->+                GlyphChart+                  ( defaultGlyphStyle+                      & #size .~ (0.1 :: Double)+                      & #borderSize .~ bs+                      & #shape .~ sh+                  )+                  [p]             )-            [p]+            [ (CircleGlyph, 0.01 :: Double),+              (SquareGlyph, 0.01),+              (RectSharpGlyph 0.75, 0.01),+              (RectRoundedGlyph 0.75 0.01 0.01, 0.01),+              (EllipseGlyph 0.75, 0.01),+              (VLineGlyph, 0.01),+              (HLineGlyph, 0.01),+              (TriangleGlyph (Point 0.0 (0.5 * sqrt 2)) (Point (-cos (pi / 3)) (-sin (pi / 3) / 2)) (Point (cos (pi / 3)) (-sin (pi / 3) / 2)), 0.01),+              (PathGlyph "M 0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0,0.5 A 1.0 1.0 -0.0 0 1 -0.5,-0.3660 A 1.0 1.0 -0.0 0 1 0.5,-0.3660 L 0.5,-0.3660 Z" ScaleBorder, 0.01)+            ]+            [Point x 0 | x <- [0 .. (8 :: Double)]]       )-      [ (CircleGlyph, 0.01 :: Double),-        (SquareGlyph, 0.01),-        (RectSharpGlyph 0.75, 0.01),-        (RectRoundedGlyph 0.75 0.01 0.01, 0.01),-        (EllipseGlyph 0.75, 0),-        (VLineGlyph 0.005, 0.01),-        (HLineGlyph 0.005, 0.01),-        (TriangleGlyph (Point 0.0 0.0) (Point 1 1) (Point 1 0), 0.01),-        (PathGlyph "M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z", 0.01)-      ]-      [P x 0 | x <- [0 .. (8 :: Double)]]  -- | Example data for Bar chart barDataExample :: BarData barDataExample =   BarData     [[1, 2, 3, 5, 8, 0, -2, 11, 2, 1], [1 .. 10]]-    (Just (("row " <>) . pack . show <$> ([1 .. 11] :: [Int])))-    (Just (("column " <>) . pack . show <$> ([1 .. 2] :: [Int])))+    (("row " <>) . pack . show <$> [1 .. 11 :: Int])+    (("column " <>) . pack . show <$> [1 .. 2 :: Int])  -- | Bar chart example. --@@ -230,140 +230,11 @@ barExample :: ChartSvg barExample = barChart defaultBarOptions barDataExample --- | A reminder that Text scale is at representation level, and so doesn't scale compared with other chart elements, such as a rectangle.------ ![text local example](other/textlocal.svg)-textLocalExample :: ChartSvg-textLocalExample =-  mempty & #chartList-    .~ [ t1,-         t2,-         Chart (RectA rs) [RectXY (padBox $ styleBox t1)],-         Chart (RectA rs) [RectXY (padBox $ styleBox t2)]-       ]-  where-    rs = defaultRectStyle & #color %~ setOpac 0.1-    t1 =-      Chart-        ( TextA-            (defaultTextStyle & #anchor .~ AnchorStart & #hsize .~ 0.5 & #size .~ 0.08)-            ["a pretty long piece of text"]-        )-        [zero]-    t2 =-      Chart-        ( TextA-            (defaultTextStyle & #anchor .~ AnchorStart & #hsize .~ 0.5 & #size .~ 0.08)-            ["another pretty long piece of text"]-        )-        [P 1 1]---- | compound chart-gopts3 :: [GlyphStyle]-gopts3 =-  zipWith-    ( \x y ->-        (#color .~ x)-          . (#borderColor .~ x)-          . (#borderSize .~ 0.005)-          . (#shape .~ y)-          . (#size .~ 0.08)-          $ defaultGlyphStyle-    )-    palette1_-    [EllipseGlyph 1.5, SquareGlyph, CircleGlyph]---- | Glyph + Lines------ ![glines example](other/glines.svg)-glinesExample :: ChartSvg-glinesExample = mempty & #chartList .~ (cs <> gs)-  where-    cs = zipWith (\d s -> Chart (LineA s) (PointXY <$> d)) ls lopts-    gs = zipWith (\d s -> Chart (GlyphA s) (PointXY <$> d)) ls gopts3--lgdata :: [(Text, Point Double)]-lgdata =-  (\p@(Point x y) -> (pack (show x <> "," <> show y), fromIntegral <$> p))-    <$> (Point <$> [0 .. 5] <*> [0 .. 5] :: [Point Int])---- | Labelled Glyphs------ ![lglyph example](other/lglyph.svg)-lglyphExample :: ChartSvg-lglyphExample = mempty & #chartList .~ (txt <> gly)-  where-    txt =-      ( \(t, p) ->-          Chart-            ( TextA-                ( defaultTextStyle-                    & #color %~ setOpac 0.2-                )-                [t]-            )-            (PointXY <$> [p + Point 0 0.2])-      )-        <$> lgdata-    gly =-      ( \d ->-          Chart-            ( GlyphA-                ( defaultGlyphStyle-                    & #size .~ 0.01-                    & #borderSize .~ 0-                    & #color .~ palette1 2-                )-            )-            (PointXY <$> [d])-      )-        <$> (snd <$> lgdata)---- | mappend of lglyph and glines examples------ ![compound example](other/compound.svg)-compoundExample :: ChartSvg-compoundExample = lglyphExample <> glinesExample---- | label example.------ ![label example](other/label.svg)-labelExample :: ChartSvg-labelExample =-  mempty & #chartList-    .~ [Chart (TextA (defaultTextStyle & #rotation ?~ -pi / 4) ["text at (1,1) rotated by -(pi/4) radians"]) [PointXY (Point 1.0 1.0)]]---- | legend test------ ![legend example](other/legend.svg)-legendExample :: ChartSvg-legendExample =-  mempty & #hudOptions-    .~ ( defaultHudOptions-           & #hudLegend-           ?~ ( defaultLegendOptions-                  & #lscale .~ 0.3-                  & #lplace .~ PlaceAbsolute (Point 0.0 0.0)-                  & #lsize .~ 0.12-                  & #ltext . #size .~ 0.16,-                l1-              )-       )-  where-    l1 =-      [ (GlyphA defaultGlyphStyle, "glyph"),-        (RectA defaultRectStyle, "rect"),-        (TextA (defaultTextStyle & #anchor .~ AnchorStart) ["content"], "text"),-        (LineA defaultLineStyle, "line"),-        (GlyphA defaultGlyphStyle, "abcdefghijklmnopqrst"),-        (BlankA, "blank")-      ]- -- | wave example -- -- ![wave example](other/wave.svg) waveExample :: ChartSvg-waveExample = mempty & #chartList .~ [Chart (GlyphA defaultGlyphStyle) (PointXY <$> gridP sin (Range 0 (2 * pi)) 30)]+waveExample = mempty & #charts .~ named "wave" [GlyphChart defaultGlyphStyle $ gridP sin (Range 0 (2 * pi)) 30] & #hudOptions .~ defaultHudOptions  -- | venn diagram --@@ -371,9 +242,9 @@ vennExample :: ChartSvg vennExample =   mempty-    & #chartList .~ zipWith (\c x -> Chart (PathA (defaultPathStyle & #color .~ setOpac 0.2 c) (fst <$> x)) (PointXY . snd <$> x)) palette1_ (toPathXYs . parsePath <$> vennSegs)-    & #svgOptions .~ (defaultSvgOptions & #chartAspect .~ FixedAspect 1)+    & #charts .~ named "venn" (zipWith (\c x -> PathChart (defaultPathStyle & #borderSize .~ 0.005 & #color .~ palette1a c 0.2 & over #borderColor (set opac' 1)) x) [0 ..] (svgToPathData <$> vennSegs))     & #hudOptions .~ defaultHudOptions+    & #hudOptions % #chartAspect .~ FixedAspect 1  {- These were originally based on:@@ -404,61 +275,93 @@ pathExample :: ChartSvg pathExample =   mempty-    & #chartList .~ [path', c0]+    & #charts .~ named "path" [path', c0] <> named "pathtext" [t0]     & #hudOptions .~ defaultHudOptions-    & #svgOptions-    %~ ( (#outerPad ?~ 0.1)-           . (#chartAspect .~ ChartAspect)-       )+    & #hudOptions % #chartAspect .~ ChartAspect+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud+    & #svgOptions % #cssOptions % #cssExtra .~ classSwitch (light, dark) "pathtext"   where     ps =-      [ (StartI, Point 0 0),-        (LineI, Point 1 0),-        (CubicI (Point 0.2 0) (Point 0.25 1), Point 1 1),-        (QuadI (Point -1 2), Point 0 1),-        (ArcI (ArcInfo (Point 1 1) (-pi / 6) False False), Point 0 0)+      [ StartP (Point 0 0),+        LineP (Point 1 0),+        CubicP (Point 0.2 0) (Point 0.25 1) (Point 1 1),+        QuadP (Point (-1) 2) (Point 0 1),+        ArcP (ArcInfo (Point 1 1) (-pi / 6) False False) (Point 0 0)       ]-    path' = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ Colour 0.2 0.8 0.4 0.3) (fst <$> ps)) (PointXY . snd <$> ps)-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY . snd <$> ps)+    ts =+      [ "StartP (Point 0 0)",+        "LineP (Point 1 0)",+        "CubicP (Point 0.2 0) (Point 0.25 1) (Point 1 1)",+        "QuadP (Point (-1) 2) (Point 0 1)",+        "ArcP (ArcInfo (Point 1 1) (-pi / 6) False False) (Point 0 0)"+      ]+    path' = PathChart (defaultPathStyle & #color .~ palette1a 0 0.1 & #borderColor .~ palette1a 1 1) ps+    c0 = GlyphChart defaultGlyphStyle (pointPath <$> ps)+    midp = Point 0 0 : zipWith (\(Point x y) (Point x' y') -> Point ((x + x') / 2) ((y + y') / 2)) (drop 1 (pointPath <$> ps)) (pointPath <$> ps)+    offp = [Point 0 0.05, Point 0 0, Point (-0.2) 0, Point (-0.1) 0.1, Point 0 (-0.1)]+    t0 = TextChart (defaultTextStyle & set #size 0.05) (zip ts (zipWith addp offp midp)) +classSwitch :: (Colour, Colour) -> Text -> Text+classSwitch (cl, cd) class' =+  [trimming|+{+  .$class' g {+    fill: $hexDark;+  }+}+@media (prefers-color-scheme:dark) {+  .$class' g {+    fill: $hexLight;+  }+}+|]+  where+    hexLight = hex cl+    hexDark = hex cd+ -- | ellipse example ----- (ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) 0 True True))+-- Under scaling, angles are not invariant, and this effects the shape of ellipses and thus SVG arc paths. Compare the effect of aspect changes to the axes of this ellipse: -- -- ![ellipse example](other/ellipse.svg)-ellipseExample :: ChartSvg-ellipseExample =-  mempty-    & #chartList .~ [ell, ellFull, c0, bbox, xradii, yradii]-    & #hudOptions .~ defaultHudOptions-    & #svgOptions %~ ((#outerPad .~ Nothing) . (#chartAspect .~ UnadjustedAspect))-  where-    p@(ArcPosition p1 p2 _) = ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)-    (ArcCentroid c r phi' ang0 angd) = arcCentroid p-    ellFull = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . ellipse c r phi' . (\x -> 2 * pi * x / 100.0) <$> [0 .. 100])-    ell = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . ellipse c r phi' . (\x -> ang0 + angd * x / 100.0) <$> [0 .. 100])-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY <$> [c, p1, p2])-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (arcBox p)]-    xradii = Chart (LineA $ defaultLineStyle & #color .~ Colour 0.9 0.2 0.02 1 & #width .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound) (PointXY <$> [ellipse c r phi' 0, ellipse c r phi' pi])-    yradii = Chart (LineA $ defaultLineStyle & #color .~ Colour 0.9 0.9 0.02 1 & #width .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound) (PointXY <$> [ellipse c r phi' (pi / 2), ellipse c r phi' (3 / 2 * pi)])---- | arc example ----- ![arc example](other/arc.svg)-arcExample :: ChartSvg-arcExample =+-- Below is the same ellipse with FixedAspect 2. Points scale exactly, but the original points that represent the end points of the axes are no longer on the new axes of the ellipse.+--+-- ![ellipse2 example](other/ellipse2.svg)+ellipseExample :: ChartAspect -> ChartSvg+ellipseExample a =   mempty-    & #chartList .~ [arc, ell, c0, bbox]+    & #charts .~ named "ellipse" [ell, ellFull, c0, c1, bbox, xradii, yradii]     & #hudOptions .~ defaultHudOptions-    & #svgOptions %~ ((#outerPad .~ Nothing) . (#chartAspect .~ FixedAspect 1))+    & #hudOptions % #chartAspect .~ a+    & #hudOptions % #legends .~ [(10, defaultLegendOptions & #content .~ lrows & #textStyle % #size .~ 0.2 & #size .~ 0.1)]+    & #hudOptions % #titles .~ [(11, defaultTitle "ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)" & #style % #size .~ 0.08)]   where-    p1 = ArcPosition (Point 1.0 0.0) (Point 0.0 1.0) (ArcInfo (Point 1.0 0.5) 0 False True)-    ps = singletonArc p1-    (ArcCentroid c r phi' ang0 angd) = arcCentroid p1-    arc = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ transparent) (fst <$> ps)) (PointXY . snd <$> ps)-    ell = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . ellipse c r phi' . (\x -> ang0 + angd * x / 100.0) <$> [0 .. 100])-    c0 = Chart (GlyphA defaultGlyphStyle) [PointXY c]-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (arcBox p1)]+    p@(ArcPosition p1 p2 _) = ArcPosition (Point 1 0) (Point 0 1) (ArcInfo (Point 1.5 1) (pi / 3) True True)+    (ArcCentroid c r phi' ang0' angd) = arcCentroid p+    ellFull = LineChart fullels [ellipse c r phi' . (\x -> 2 * pi * x / 100.0) <$> [0 .. 100]]+    ell = LineChart els [ellipse c r phi' . (\x -> ang0' + angd * x / 100.0) <$> [0 .. 100]]+    g0 = defaultGlyphStyle & #shape .~ CircleGlyph+    c0 = GlyphChart g0 [c]+    g1 = defaultGlyphStyle & #color .~ palette1a 4 0.2+    c1 = GlyphChart g1 [p1, p2]+    bbox = RectChart bbs [arcBox p]+    bbs = defaultRectStyle & #borderSize .~ 0.002 & #color .~ palette1a 7 0.005 & #borderColor .~ grey 0.5 1+    xradii = LineChart xals [[ellipse c r phi' 0, ellipse c r phi' pi]]+    yradii = LineChart yals [[ellipse c r phi' (pi / 2), ellipse c r phi' (3 / 2 * pi)]]+    xals = defaultLineStyle & #color .~ palette1 6 & #size .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound+    yals = defaultLineStyle & #color .~ palette1 5 & #size .~ 0.005 & #dasharray .~ Just [0.03, 0.01] & #linecap .~ Just LineCapRound+    fullels = defaultLineStyle & #size .~ 0.002 & #color .~ palette1 1+    els = defaultLineStyle & #size .~ 0.005 & #color .~ palette1 2+    lrows =+      [ ("Major Axis", LineChart xals [[zero]]),+        ("Minor Axis", LineChart yals [[zero]]),+        ("Full Ellipse", LineChart fullels [[zero]]),+        ("Arc", LineChart els [[zero]]),+        ("Centroid", GlyphChart (g0 & #size .~ 0.01) [zero]),+        ("Endpoints", GlyphChart (g1 & #size .~ 0.01) [zero]),+        ("Bounding Box", RectChart (bbs & #borderSize .~ 0.01) [fmap (2 *) one])+      ]  -- | Reproduction of the flag explanation chart in <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths> --@@ -466,63 +369,98 @@ arcFlagsExample :: ChartSvg arcFlagsExample =   mempty-    & #chartList-    .~ vert-      0.02-      [ hori+    & set+      #charts+      ( vert           0.02-          [ [ Chart BlankA [R -0.4 0.4 -1 5],-              Chart (TextA (defaultTextStyle & #size .~ 0.6 & #rotation .~ Just (pi / 2)) ["Sweep"]) [P 0.1 2]+          [ hori 0.02 [colSweep, colSweep2, colLargeFalse, colLargeTrue],+            rowLarge+          ]+      )+    & #hudOptions % #chartAspect .~ ChartAspect+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud+    & #svgOptions % #cssOptions % #cssExtra+      .~ [trimming|+{+  .chart g {+    stroke: $hexDark;+  }+  .chart g text {+    fill: $hexDark;+  }+}+@media (prefers-color-scheme:dark) {+  .chart g {+    stroke: $hexLight;+  }+  .chart g text {+    fill: $hexLight;+  }+}+|]+  where+    hexDark = hex dark+    hexLight = hex light+    rowLarge =+      unnamed+        [ BlankChart [Rect 0 9 (-2.75) (-3.25)],+          TextChart (defaultTextStyle & #size .~ 0.6) [("Large", Point 5.5 (-3.0))]+        ]+    colLargeFalse =+      vert+        0.02+        [ unnamed (checkFlags False True (set opac' 0.3 dark)),+          unnamed (checkFlags False False (set opac' 0.3 dark)),+          unnamed+            [ BlankChart [Rect (-1) 2 (-0.25) 0.25],+              TextChart (defaultTextStyle & #size .~ 0.4) [("False", Point 0.5 (-0.1))]+            ]+        ]+    colLargeTrue =+      vert+        0.02+        [ unnamed (checkFlags True True (set opac' 0.3 dark)),+          unnamed (checkFlags True False (set opac' 0.3 dark)),+          unnamed+            [ BlankChart [Rect (-1) 2 (-0.25) 0.25],+              TextChart (defaultTextStyle & #size .~ 0.4) [("True", Point 0.5 (-0.1))]+            ]+        ]+    colSweep =+      unnamed+        [ BlankChart [Rect (-0.4) 0.4 (-1) 5],+          TextChart+            (defaultTextStyle & #size .~ 0.6 & #rotation .~ Just (pi / 2))+            [("Sweep", Point 0.1 2)]+        ]+    colSweep2 =+      vert+        0.02+        [ unnamed+            [ BlankChart [Rect (-0.25) 0.25 (-1) 2],+              TextChart+                (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2))+                [("True", Point 0.1 0.5)]             ],-            vert-              0.02-              [ [ Chart BlankA [R -0.25 0.25 -1 2],-                  Chart (TextA (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2)) ["True"]) [P 0.1 0.5]-                ],-                [ Chart BlankA [R -0.25 0.25 -1 2],-                  Chart (TextA (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2)) ["False"]) [P 0.1 0.5]-                ]-              ],-            vert-              0.02-              [ checkFlags False True (setOpac 0.3 dark) & view #chartList,-                checkFlags False False (setOpac 0.3 dark) & view #chartList,-                [ Chart BlankA [R -1 2 -0.25 0.25],-                  Chart (TextA (defaultTextStyle & #size .~ 0.4) ["False"]) [P 0.5 -0.1]-                ]-              ],-            vert-              0.02-              [ checkFlags True True (setOpac 0.3 dark) & view #chartList,-                checkFlags True False (setOpac 0.3 dark) & view #chartList,-                [ Chart BlankA [R -1 2 -0.25 0.25],-                  Chart (TextA (defaultTextStyle & #size .~ 0.4) ["True"]) [P 0.5 -0.1]-                ]-              ]-          ],-        [ Chart BlankA [R 0 9 -2.75 -3.25],-          Chart (TextA (defaultTextStyle & #size .~ 0.6) ["Large"]) [P 5.5 -3.0]+          unnamed+            [ BlankChart [Rect (-0.25) 0.25 (-1) 2],+              TextChart+                (defaultTextStyle & #size .~ 0.4 & #rotation .~ Just (pi / 2))+                [("False", Point 0.1 0.5)]+            ]         ]-      ]-    & #hudOptions-    .~ mempty-    & #svgOptions %~ ((#outerPad .~ Nothing) . (#chartAspect .~ UnadjustedAspect)) -checkFlags :: Bool -> Bool -> Colour -> ChartSvg-checkFlags large sweep co =-  mempty-    & #hudOptions .~ defaultHudOptions-    & #svgOptions . #chartAspect .~ UnadjustedAspect-    & #chartList .~ [c1, c2, ell, arc1]+checkFlags :: Bool -> Bool -> Colour -> [Chart]+checkFlags large' sweep co = [c1, c2, ell, arc1]   where     c = Point 1.0 1.0-    p1 = ArcPosition (Point 0.0 1.0) (Point 1.0 0.0) (ArcInfo (Point 1.0 1.0) 0 large sweep)-    ps1 = singletonPie' c p1-    (ArcCentroid c' r phi' ang0 angd) = arcCentroid p1-    arc1 = Chart (PathA (defaultPathStyle & #color .~ co & #borderColor .~ setOpac 0.5 dark) (fst <$> ps1)) (PointXY . snd <$> ps1)-    c1 = Chart (LineA $ defaultLineStyle & #width .~ 0.02 & #color .~ setOpac 0.2 dark) (PointXY . ellipse (Point 1.0 1.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100])-    c2 = Chart (LineA $ defaultLineStyle & #width .~ 0.02 & #color .~ setOpac 0.2 dark) (PointXY . ellipse (Point 0.0 0.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100])-    ell = Chart (LineA $ defaultLineStyle & #width .~ 0.05 & #color .~ setOpac 0.5 co) (PointXY . ellipse c' r phi' . (\x -> ang0 + angd * x / 100.0) <$> [0 .. 100])+    p1 = ArcPosition (Point 0.0 1.0) (Point 1.0 0.0) (ArcInfo (Point 1.0 1.0) 0 large' sweep)+    ps1 = singletonPie c p1+    (ArcCentroid c' r phi' ang0' angd) = arcCentroid p1+    arc1 = PathChart (defaultPathStyle & #color .~ co & #borderColor .~ set opac' 0.5 dark) ps1+    c1 = LineChart (defaultLineStyle & #size .~ 0.02 & #color .~ set opac' 0.2 dark) [ellipse (Point 1.0 1.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100]]+    c2 = LineChart (defaultLineStyle & #size .~ 0.02 & #color .~ set opac' 0.2 dark) [ellipse (Point 0.0 0.0) (Point 1.0 1.0) 0 . (\x -> 0 + 2 * pi * x / 100.0) <$> [0 .. 100]]+    ell = LineChart (defaultLineStyle & #size .~ 0.05 & #color .~ set opac' 0.5 co) [ellipse c' r phi' . (\x -> ang0' + angd * x / 100.0) <$> [0 .. 100]]  -- | quad example --@@ -530,16 +468,30 @@ quadExample :: ChartSvg quadExample =   mempty-    & #chartList .~ [path', curve, c0, bbox]+    & #charts .~ named "quad" [path', curve, c0, c1, bbox]     & #hudOptions .~ defaultHudOptions-    & #svgOptions %~ ((#outerPad ?~ 0.05) . (#chartAspect .~ ChartAspect))+    & #hudOptions % #chartAspect .~ FixedAspect 1.5+    & #hudOptions % #legends .~ [(10, defaultLegendOptions & #content .~ lrows & #textStyle % #size .~ 0.2 & #size .~ 0.2)]+    & #hudOptions % #titles .~ [(11, defaultTitle "QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))" & #style % #size .~ 0.08)]   where-    p@(QuadPosition start end control) = QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1)+    p@(QuadPosition start end control) = QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))     ps = singletonQuad p-    path' = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ transparent) (fst <$> ps)) (PointXY . snd <$> ps)-    curve = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . quadBezier p . (/ 100.0) <$> [0 .. 100])-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY <$> [start, end, control])-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (quadBox p)]+    path' = PathChart pathStyle ps+    curve = LineChart curveStyle [quadBezier p . (/ 100.0) <$> [0 .. 100]]+    curveStyle = defaultLineStyle & #size .~ 0.002 & #color .~ palette1 1+    c0 = GlyphChart defaultGlyphStyle [start, end]+    c1 = GlyphChart controlStyle [control]+    bbox = RectChart bbs [quadBox p]+    bbs = defaultRectStyle & #borderSize .~ 0.002 & #color .~ palette1a 0 0.05 & #borderColor .~ grey 0.4 1+    pathStyle = defaultPathStyle & #color .~ palette1a 2 0.2 & #borderColor .~ transparent+    controlStyle = defaultGlyphStyle & #shape .~ CircleGlyph+    lrows =+      [ ("Path Fill", PathChart pathStyle [StartP zero]),+        ("Path Chord", LineChart curveStyle [[zero]]),+        ("Path Endpoints", GlyphChart defaultGlyphStyle [zero]),+        ("Path Control Point", GlyphChart controlStyle [zero]),+        ("Bounding Box", RectChart (bbs & #borderSize .~ 0.01) [one])+      ]  -- | cubic example --@@ -547,41 +499,61 @@ cubicExample :: ChartSvg cubicExample =   mempty-    & #chartList .~ [path', curve, c0, bbox]+    & #charts .~ named "cubic" [path', curve, c0, c1, bbox]     & #hudOptions .~ mempty-    & #svgOptions %~ ((#outerPad ?~ 0.02) . (#chartAspect .~ ChartAspect))+    & #hudOptions % #chartAspect .~ FixedAspect 1.5+    & #hudOptions % #legends .~ [(10, defaultLegendOptions & #content .~ lrows & #textStyle % #size .~ 0.2 & #size .~ 0.2)]+    & #hudOptions % #titles .~ [(11, defaultTitle "CubicPosition (Point 0 0) (Point 1 1) (Point 1 0) (Point 0 1)" & #style % #size .~ 0.08)]   where     p@(CubicPosition start end control1 control2) = CubicPosition (Point 0 0) (Point 1 1) (Point 1 0) (Point 0 1)     ps = singletonCubic p-    path' = Chart (PathA (defaultPathStyle & #color .~ setOpac 0.1 (palette1 2) & #borderColor .~ transparent) (fst <$> ps)) (PointXY . snd <$> ps)-    curve = Chart (LineA $ defaultLineStyle & #width .~ 0.002 & #color .~ palette1 1) (PointXY . cubicBezier p . (/ 100.0) <$> [0 .. 100])-    c0 = Chart (GlyphA defaultGlyphStyle) (PointXY <$> [start, end, control1, control2, cubicBezier p 0.8])-    bbox = Chart (RectA $ defaultRectStyle & #borderSize .~ 0.002 & #color .~ Colour 0.4 0.4 0.8 0.1 & #borderColor .~ Colour 0.5 0.5 0.5 1) [RectXY (cubicBox p)]+    path' = PathChart pathStyle ps+    curve = LineChart curveStyle [cubicBezier p . (/ 100.0) <$> [0 .. 100]]+    c0 = GlyphChart defaultGlyphStyle [start, end]+    c1 = GlyphChart controlStyle [control1, control2]+    bbox = RectChart bbs [cubicBox p]+    bbs = defaultRectStyle & #borderSize .~ 0.002 & #color .~ palette1a 0 0.05 & #borderColor .~ grey 0.4 1+    pathStyle = defaultPathStyle & #color .~ palette1a 3 0.2 & #borderColor .~ transparent+    controlStyle = defaultGlyphStyle & #shape .~ CircleGlyph+    curveStyle = defaultLineStyle & #size .~ 0.002 & #color .~ palette1 7+    lrows =+      [ ("Path Fill", PathChart pathStyle [StartP zero]),+        ("Path Chord", LineChart curveStyle [[zero]]),+        ("Path Endpoints", GlyphChart defaultGlyphStyle [zero]),+        ("Path Control Point", GlyphChart controlStyle [zero]),+        ("Bounding Box", RectChart (bbs & #borderSize .~ 0.01) [one])+      ] --- | The common way to create a surface chart is usually a grid over a function.+-- | The common way to create a surface chart (or contour chart or heat map) is usually a grid over a function, a process reified in 'surfacef'. --+-- This is also an example of 'mix' and 'mixes'. In this example, colors with the same lightness have been chosen in the gradient and the result should appear a fairly uniform lightness across the surface.+-- -- ![surface example](other/surface.svg) surfaceExample :: ChartSvg surfaceExample =   mempty-    & #hudList .~ hs-    & #chartList .~ cs-    & #svgOptions .~ (defaultSvgOptions & #cssOptions .~ UseCssCrisp)+    & #extraHuds .~ h+    & #charts .~ named "surface" cs+    & #svgOptions .~ (defaultSvgOptions & #cssOptions % #shapeRendering .~ UseCssCrisp)   where     t = "rosenbrock"-    grain = Point 20 20+    grain = Point 100 100     r = one-    f = fst . bimap (-1.0 *) (-1.0 .*) . rosenbrock 1 10-    (cs, hs) =+    f = fst . bimap ((-1.0) *) (fmap ((-1.0) *)) . rosenbrock 1 10+    evenColors = trimColour . over lightness' (const 0.55) . palette1 <$> [0 .. 5]+    (cs, h) =       surfacefl         f         ( defaultSurfaceOptions             & #soGrain .~ grain             & #soRange .~ r-            & #soStyle . #surfaceColors .~ (palette1 <$> [0 .. 5])+            & #soStyle % #surfaceColors .~ evenColors         )-        ( defaultSurfaceLegendOptions t-            & #sloStyle . #surfaceColors .~ (palette1 <$> [0 .. 5])+        ( defaultSurfaceLegendOptions dark t+            & #sloStyle % #surfaceColors .~ evenColors+            & #sloLegendOptions % #textStyle % #color .~ dark+            & #sloAxisOptions .~ surfaceAxisOptions dark+            & #sloLegendOptions % #frame %~ fmap (#borderColor .~ dark)         )  -- | arrow example@@ -592,13 +564,30 @@ arrowExample :: ChartSvg arrowExample =   mempty-    & #hudOptions .~ (defaultHudOptions & #hudAxes %~ fmap (#axisTick . #ltick .~ Nothing))-    & #chartList .~ ((\p -> chart (tail . f $ p) (angle . f $ p) p) <$> ps)-    & #svgOptions .~ defaultSvgOptions+    & #hudOptions .~ (defaultHudOptions & #axes %~ fmap (second (#ticks % #ltick .~ Nothing)))+    & #charts .~ named "arrow" ((\p -> gchart (tail' . f $ p) (angle . f $ p) p) <$> ps)+    & #svgOptions % #cssOptions % #preferColorScheme .~ PreferHud+    & #svgOptions % #cssOptions % #cssExtra+      .~ [trimming|+{+  .arrow g {+    fill: $hexDark;+    stroke: $hexDark;+  }+}+@media (prefers-color-scheme:dark) {+  .arrow g {+    fill: $hexLight;+    stroke: $hexLight;+  }+}+|]   where-    f = snd . bimap (-1.0 *) (-1.0 .*) . rosenbrock 1 10+    hexLight = hex light+    hexDark = hex dark+    f = snd . bimap ((-1.0) *) (fmap ((-1.0) *)) . rosenbrock 1 10     ps = grid MidPos (one :: Rect Double) (Point 10 10 :: Point Int) :: [Point Double]-    arrow = PathGlyph "M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3"+    arrow = PathGlyph "M -1 0 L 1 0 M 1 0 L 0.4 0.3 M 1 0 L 0.4 -0.3" NoScaleBorder     gs s r' =       defaultGlyphStyle         & #borderSize .~ 0.05@@ -606,10 +595,10 @@         & #borderColor .~ dark         & #rotation .~ Just r'         & #shape .~ arrow-    chart s r' p = Chart (GlyphA (gs s r')) [PointXY p]+    gchart s r' p = GlyphChart (gs s r') [p] -    tail :: Point Double -> Double-    tail = max 0.05 . min 0.02 . (* 0.01) . (/ avmag) . norm+    tail' :: Point Double -> Double+    tail' = max 0.05 . min 0.02 . (* 0.01) . (/ avmag) . norm      avmag = sum (norm . f <$> ps) / fromIntegral (length ps) @@ -621,38 +610,167 @@ -- > f'y = 2 * b * y - 2 * b * x^2 -- > f a b (Point x y) = (a^2 - 2ax + x^2 + b * y^2 - b * 2 * y * x^2 + b * x^4, Point (-2a + 2 * x - b * 4 * y * x + 4 * b * x ^ 3), 2 * b * y - 2 * b * x^2) rosenbrock :: Double -> Double -> Point Double -> (Double, Point Double)-rosenbrock a b (Point x y) = (a ^ 2 - 2 * a * x + x ^ 2 + b * y ^ 2 - b * 2 * y * x ^ 2 + b * x ^ 4, Point (-2 * a + 2 * x - b * 4 * y * x + 4 * b * x ^ 3) (2 * b * y - 2 * b * x ^ 2))+rosenbrock a b (Point x y) = (a ** 2 - 2 * a * x + x ** 2 + b * y ** 2 - b * 2 * y * x ** 2 + b * x ** 4, Point (-2 * a + 2 * x - b * 4 * y * x + 4 * b * x ** 3) (2 * b * y - 2 * b * x ** 2)) --- | Run this to refresh haddock example SVGs.+-- | date example+--+-- A hud that has date as the x-axis, and time as the y-axis. See 'placedTimeLabelContinuous'.+--+-- ![date example](other/date.svg)+dateExample :: ChartSvg+dateExample =+  mempty+    & #charts .~ blank (Rect 0 1 0 1)+    & #hudOptions+      .~ ( mempty & #chartAspect .~ FixedAspect 1.5 & #axes+             .~ [ (1, defaultAxisOptions & #place .~ PlaceLeft & #ticks % #style .~ TickPlaced tsTime),+                  (1, defaultAxisOptions & #ticks % #style .~ TickPlaced tsDate)+                ]+         )+  where+    tsTime = placedTimeLabelContinuous PosIncludeBoundaries Nothing 12 (Range (UTCTime (fromGregorian 2021 12 6) (toDiffTime 0)) (UTCTime (fromGregorian 2021 12 7) (toDiffTime 0)))+    tsDate = placedTimeLabelContinuous PosIncludeBoundaries (Just (pack "%d %b")) 2 (Range (UTCTime (fromGregorian 2021 12 6) (toDiffTime 0)) (UTCTime (fromGregorian 2022 3 13) (toDiffTime 0)))++-- | gradient example+--+-- Mixing Colours using the <https://bottosson.github.io/posts/oklab/ oklch> color model.+--+-- ![gradient example](other/gradient.svg)+gradientExample :: ChartSvg+gradientExample = gradient (Just (orig / 360)) 100 6 100 c0 c1+  where+    ok = LCHA 0.5 0.12 127 1+    c0 = ok & lch' % hLCH' .~ 0.001+    c1 = ok & lch' % hLCH' .~ 360+    orig = view (lch' % hLCH') ok++gradientChart_ :: Int -> LCHA -> LCHA -> [Chart]+gradientChart_ grain c0 c1 =+  (\(r, c) -> RectChart (defaultRectStyle & #color .~ c & #borderSize .~ 0) [r])+    . (\x -> (Rect x (x + d) 0 1, view lcha2colour' (mixLCHA x c0 c1)))+    <$> grid LowerPos (Range 0 1) grain+  where+    d = 1 / fromIntegral grain++gradient :: Maybe Double -> Double -> Double -> Int -> LCHA -> LCHA -> ChartSvg+gradient marker h fa grain ok0 ok1 =+  mempty+    & #svgOptions % #svgHeight+    .~ h+    & #svgOptions % #cssOptions % #shapeRendering+    .~ UseCssCrisp+    & #hudOptions+    .~ ( mempty+           & #chartAspect .~ FixedAspect fa+           & #frames .~ [(20, FrameOptions (Just (border 0.004 white)) 0.1)]+       )+    & #charts+    .~ named "gradient" (gradientChart_ grain ok0 ok1) <> strip+  where+    strip = case marker of+      Nothing -> mempty+      Just marker' ->+        named+          "border"+          [borderStrip 0.02 light (Rect (marker' - 0.02) (marker' + 0.02) (-0.1) 1.1)]++borderStrip :: Double -> Colour -> Rect Double -> Chart+borderStrip w c r = RectChart (defaultRectStyle & #color .~ transparent & #borderSize .~ w & #borderColor .~ c) [r]++-- | Color wheel displaying palette1 choices+--+-- -- ![wheel example](other/wheel.svg)+wheelExample :: ChartSvg+wheelExample = dotMap 0.01 50 0.5 0.5 (palette1 <$> [0 .. 7])++-- | The dotMap+--+-- > dotMap 0.01 20 0.8 0.3+dotMap :: Double -> Int -> Double -> Double -> [Colour] -> ChartSvg+dotMap s grain l maxchroma cs =+  mempty+    & #hudOptions+    .~ defaultHudOptions+    & #charts+    .~ named "dots" (dot_ <$> cs)+    <> named+      "wheel"+      ( ( \(p, c) ->+            GlyphChart+              ( defaultGlyphStyle+                  & #size .~ s+                  & #color .~ c+                  & #borderSize .~ 0+              )+              [p]+        )+          <$> filter (validColour . snd) (wheelPoints grain l maxchroma)+      )++dot_ :: Colour -> Chart+dot_ x = (\(p, c) -> GlyphChart (defaultGlyphStyle & #size .~ 0.08 & #color .~ c & #borderColor .~ Colour 0.5 0.5 0.5 1 & #shape .~ CircleGlyph) [p]) (colour2Point x, x)+  where+    colour2Point c = review lcha2colour' c & (\(LCHA _ ch h _) -> uncurry Point (review xy2ch' (ch, h)))++wheelPoints :: Int -> Double -> Double -> [(Point Double, Colour)]+wheelPoints grain l maxchroma =+  (\(Point c h) -> (uncurry Point $ view (re xy2ch') (c, h), view lcha2colour' (LCHA l c h 1)))+    <$> grid LowerPos (Rect 0 maxchroma 0 360) (Point grain grain)++-- | Adding reference points and bounding boxes to visualize chart alignment for use in debugging charts.+--+-- -- ![debug example](other/debug.svg)+debugExample :: ChartSvg -> ChartSvg+debugExample cs =+  mempty+    & set #charts (e1 <> e2 <> e3)+  where+    e1 = toChartTree cs+    e2 = glyphize (defaultGlyphStyle & #size .~ 0.01 & #shape .~ CircleGlyph) e1+    e3 = rectangularize (defaultRectStyle & #borderColor .~ dark & #borderSize .~ 0.001 & #color % opac' .~ 0.05) e1++pathChartSvg :: [(FilePath, ChartSvg)]+pathChartSvg =+  [ ("other/unit.svg", unitExample),+    ("other/rect.svg", rectExample),+    ("other/text.svg", textExample),+    ("other/glyphs.svg", glyphsExample),+    ("other/line.svg", lineExample),+    ("other/hudoptions.svg", hudOptionsExample),+    ("other/bar.svg", barExample),+    ("other/surface.svg", surfaceExample),+    ("other/wave.svg", waveExample),+    ("other/venn.svg", vennExample),+    ("other/path.svg", pathExample),+    ("other/arcflags.svg", arcFlagsExample),+    ("other/ellipse.svg", ellipseExample (FixedAspect 1.7)),+    ("other/ellipse2.svg", ellipseExample (FixedAspect 2)),+    ("other/quad.svg", quadExample),+    ("other/cubic.svg", cubicExample),+    ("other/arrow.svg", arrowExample),+    ("other/date.svg", dateExample),+    ("other/gradient.svg", gradientExample),+    ("other/wheel.svg", wheelExample),+    ("other/debug.svg", debugExample lineExample)+  ]++-- | Run this to refresh example SVG's. writeAllExamples :: IO () writeAllExamples = do-  -- charts in Chart docs-  writeChartSvg "other/unit.svg" unitExample-  writeChartSvg "other/rect.svg" rectExample-  writeChartSvg "other/text.svg" textExample-  writeChartSvg "other/glyphs.svg" glyphsExample-  writeChartSvg "other/line.svg" lineExample-  writeChartSvg "other/svgoptions.svg" svgOptionsExample-  writeChartSvg "other/hudoptions.svg" hudOptionsExample-  writeChartSvg "other/legend.svg" legendExample-  -- charts in Chart.Bar docs-  writeChartSvg "other/bar.svg" barExample-  -- charts in Chart.Surface docs-  writeChartSvg "other/surface.svg" surfaceExample-  -- extra Charts-  writeChartSvg "other/wave.svg" waveExample-  writeChartSvg "other/lglyph.svg" lglyphExample-  writeChartSvg "other/glines.svg" glinesExample-  writeChartSvg "other/compound.svg" compoundExample-  writeChartSvg "other/textlocal.svg" textLocalExample-  writeChartSvg "other/label.svg" labelExample-  writeChartSvg "other/venn.svg" vennExample-  writeChartSvg "other/path.svg" pathExample-  writeChartSvg "other/arc.svg" arcExample-  writeChartSvg "other/arcflags.svg" arcFlagsExample-  writeChartSvg "other/ellipse.svg" ellipseExample-  writeChartSvg "other/quad.svg" quadExample-  writeChartSvg "other/cubic.svg" cubicExample-  writeChartSvg "other/arrow.svg" arrowExample-+  sequence_ $ uncurry writeChartSvg <$> pathChartSvg   putStrLn "ok"++-- | Version of charts with a dark-friendly hud+writeAllExamplesDark :: IO ()+writeAllExamplesDark = do+  sequence_ $+    uncurry writeChartSvg+      . bimap+        ((<> "d.svg") . reverse . drop 4 . reverse)+        ( \x ->+            x+              & #hudOptions %~ colourHudOptions (rgb light)+              & #svgOptions % #cssOptions % #preferColorScheme .~ PreferDark+        )+      <$> pathChartSvg+  putStrLn "dark version, ok"
+ src/Chart/Hud.hs view
@@ -0,0 +1,1071 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TupleSections #-}+{-# OPTIONS_GHC -Wall #-}++-- | A hud stands for <https://en.wikipedia.org/wiki/Head-up_display head-up display>, and is a collective noun used to name chart elements that assist in data interpretation or otherwise annotate and decorate data.+--+-- This includes axes, titles, borders, frames, background canvaii, tick marks and tick value labels.+--+module Chart.Hud+  ( -- * Hud+    Hud (..),+    Priority,+    HudBox,+    CanvasBox,+    DataBox,+    HudChart (..),+    canvasBox',+    canvasStyleBox',+    hudBox',+    hudStyleBox',++    -- * Hud Processing+    runHudWith,+    runHud,++    -- * HudOptions+    HudOptions (..),+    defaultHudOptions,+    colourHudOptions,+    toHuds,++    -- * Hud Effects+    closes,+    fromEffect,+    applyChartAspect,+    getHudBox,++    -- * Hud primitives+    AxisOptions (..),+    defaultAxisOptions,+    flipAxis,+    FrameOptions (..),+    defaultFrameOptions,+    Place (..),+    placeText,+    AxisBar (..),+    defaultAxisBar,+    Title (..),+    defaultTitle,+    Ticks (..),+    defaultGlyphTick,+    defaultTextTick,+    defaultLineTick,+    defaultTicks,+    TickStyle (..),+    defaultTickStyle,+    tickStyleText,+    TickExtend (..),+    adjustTicks,+    Adjustments (..),+    defaultAdjustments,+    LegendOptions (..),+    defaultLegendOptions,++    -- * Option to Hud+    frameHud,+    legend,+    legendHud,+    legendFrame,+  )+where++import Chart.Data+import Chart.Primitive+import Chart.Style+import Control.Monad.State.Lazy+import Data.Bifunctor+import Data.Bool+import Data.Colour+import Data.Foldable hiding (sum)+import Data.FormatN+import qualified Data.List as List+import Data.Maybe+import Data.Path+import Data.Text (Text)+import Data.Tuple+import GHC.Generics hiding (to)+import qualified NumHask.Prelude as NH+import Optics.Core+import Prelude++-- $setup+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings+-- >>> import Chart+-- >>> import Optics.Core++-- * Hud++-- | The priority of a Hud element or transformation, lower value means higher priority.+--+-- Lower priority (higher values) huds will tend to be placed on the outside of a chart.+--+-- Equal priority values will be placed in the same process step.+type Priority = Double++-- | Heads-up display additions to charts+--+-- A Hud is composed of:+--+-- - A priority for the hud element in the chart folding process.+--+-- - A chart tree with a state dependency on the chart being created.+data Hud = Hud+  { -- | priority for ordering of transformations+    priority :: Priority,+    -- | additional charts+    hud :: State HudChart ChartTree+  }+  deriving (Generic)++-- | Type to track the split of Chart elements into Hud and Canvas+--+-- - charts: charts that form the canvas or data elements of the chart; the rectangular dimension which is considered to be the data representation space.+--+-- - hud: charts that form the Hud.+--+-- - dataBox: The bounding box of the underlying data domain.+--+-- This is done to support functionality where we can choose whether to normalise the chart aspect based on the entire chart (FixedAspect) or on just the data visualisation space (CanvasAspect).+data HudChart = HudChart+  { chart :: ChartTree,+    hud :: ChartTree,+    dataBox :: DataBox+  }+  deriving (Eq, Show, Generic)++-- | A type for Rect to represent the entire bounding box of a chart, including the Hud+type HudBox = Rect Double++-- | A type for Rect to represent the bounding box of the canvas portion of a chart, excluding Hud elements+type CanvasBox = Rect Double++-- | A type for Rect to represent the bounding box of the data elements a chart, which can be a different metric to Canvas and Hud Rects+type DataBox = Rect Double++canvasBox_ :: HudChart -> Maybe CanvasBox+canvasBox_ = boxes . foldOf (#chart % charts')++canvasRebox_ :: HudChart -> Maybe (Rect Double) -> HudChart+canvasRebox_ cs r =+  cs+    & over (#chart % chart') (maybeProjectWith r (canvasBox_ cs))+    & over (#hud % chart') (maybeProjectWith r (canvasBox_ cs))++-- | A lens between a HudChart and the bounding box of the canvas+canvasBox' :: Lens' HudChart (Maybe CanvasBox)+canvasBox' =+  lens canvasBox_ canvasRebox_++-- | A lens between a HudChart and the bounding box of the canvas, including style extensions.+canvasStyleBox' :: Getter HudChart (Maybe CanvasBox)+canvasStyleBox' = to (styleBoxes . foldOf (#chart % charts'))++hudStyleBox_ :: HudChart -> Maybe HudBox+hudStyleBox_ = styleBoxes . (\x -> foldOf (#chart % charts') x <> foldOf (#hud % charts') x)++-- | a lens between a HudChart and the bounding box of the hud.+hudStyleBox' :: Getter HudChart (Maybe HudBox)+hudStyleBox' = to hudStyleBox_++hudBox_ :: HudChart -> Maybe HudBox+hudBox_ = boxes . (\x -> foldOf (#chart % charts') x <> foldOf (#hud % charts') x)++hudRebox_ :: HudChart -> Maybe HudBox -> HudChart+hudRebox_ cs r =+  cs+    & over #chart (over chart' (maybeProjectWith r' (hudBox_ cs)))+    & over #hud (over chart' (maybeProjectWith r' (hudBox_ cs)))+  where+    r' = (NH.-) <$> r <*> ((NH.-) <$> hudStyleBox_ cs <*> hudBox_ cs)++-- | lens between a HudChart and its hud bounding box, not including style.+hudBox' :: Lens' HudChart (Maybe HudBox)+hudBox' =+  lens hudBox_ hudRebox_++appendHud :: ChartTree -> HudChart -> HudChart+appendHud cs x =+  x & over #hud (<> cs)++-- | Absorb a series of state-dependent tress into state.+closes :: (Traversable f) => f (State HudChart ChartTree) -> State HudChart ()+closes xs = do+  xs' <- fmap (mconcat . toList) $ sequence xs+  modify (appendHud xs')++-- | Wrap a state effect into a Hud+fromEffect :: Priority -> State HudChart () -> Hud+fromEffect p s = Hud p (s >> pure mempty)++-- | Apply a ChartAspect+applyChartAspect :: ChartAspect -> State HudChart ()+applyChartAspect fa = do+  hc <- get+  case fa of+    ChartAspect -> pure ()+    _ -> modify (set hudBox' (getHudBox fa hc))++-- | Supply the bounding box of the HudChart given a ChartAspect.+getHudBox :: ChartAspect -> HudChart -> Maybe HudBox+getHudBox fa c =+  case fa of+    FixedAspect a -> Just (aspect a)+    CanvasAspect a ->+      case (view hudBox' c, view canvasBox' c) of+        (Nothing, _) -> Nothing+        (_, Nothing) -> Nothing+        (Just hb, Just cb) -> Just (aspect (a * ratio hb / ratio cb))+    ChartAspect -> view hudBox' c++-- | Combine huds and charts to form a new Chart using the supplied initial canvas and data dimensions. Note that chart data is transformed by this computation (a linear type might be useful here).+runHudWith ::+  -- | initial canvas+  CanvasBox ->+  -- | initial data space+  DataBox ->+  -- | huds to add+  [Hud] ->+  -- | underlying chart+  ChartTree ->+  -- | integrated chart tree+  ChartTree+runHudWith cb db hs cs =+  hs+    & List.sortOn (view #priority)+    & List.groupBy (\a b -> view #priority a == view #priority b)+    & mapM_ (closes . fmap (view #hud))+    & flip+      execState+      ( HudChart+          (cs & over chart' (projectWith cb db))+          mempty+          db+      )+    & (\x -> group (Just "chart") [view #chart x] <> group (Just "hud") [view #hud x])++-- | Combine huds and charts to form a new ChartTree with a supplied initial canvas dimension.+--+-- Note that the original chart data are transformed and irrevocably forgotten by this computation.+runHud ::+  -- | initial canvas dimension+  CanvasBox ->+  -- | huds+  [Hud] ->+  -- | underlying charts+  ChartTree ->+  -- | integrated chart list+  ChartTree+runHud ca hs cs = runHudWith ca (singletonGuard $ boxes (foldOf charts' cs)) hs cs++-- | Typical, configurable hud elements. Anything else can be hand-coded as a 'Hud'.+--+-- ![hud example](other/hudoptions.svg)+data HudOptions = HudOptions+  { chartAspect :: ChartAspect,+    axes :: [(Priority, AxisOptions)],+    frames :: [(Priority, FrameOptions)],+    legends :: [(Priority, LegendOptions)],+    titles :: [(Priority, Title)]+  }+  deriving (Eq, Show, Generic)++instance Semigroup HudOptions where+  (<>) (HudOptions _ a c l t) (HudOptions asp a' c' l' t') =+    HudOptions asp (a <> a') (c <> c') (l <> l') (t <> t')++instance Monoid HudOptions where+  mempty = HudOptions (FixedAspect 1.5) [] [] [] []++-- | The official hud options.+defaultHudOptions :: HudOptions+defaultHudOptions =+  HudOptions+    (FixedAspect 1.5)+    [ (5, defaultAxisOptions),+      (5, defaultAxisOptions & set #place PlaceLeft)+    ]+    [(1, defaultFrameOptions)]+    []+    []++priorities :: HudOptions -> [Priority]+priorities o =+  (fst <$> view #axes o)+    <> (fst <$> view #frames o)+    <> (fst <$> view #legends o)+    <> (fst <$> view #titles o)++lastPriority :: HudOptions -> Priority+lastPriority o = case priorities o of+  [] -> 0+  xs -> maximum xs++-- | Make Huds and potential data box extension; from a HudOption and an initial data box.+toHuds :: HudOptions -> DataBox -> ([Hud], DataBox)+toHuds o db =+  (,db''') $+    (as' & fmap (uncurry Hud . second axis))+      <> (view #frames o & fmap (uncurry Hud . second frameHud))+      <> (view #legends o & fmap (uncurry Hud . second legend))+      <> (view #titles o & fmap (uncurry Hud . second title))+      <> [ fromEffect (lastPriority o + 1) $+             applyChartAspect (view #chartAspect o)+         ]+  where+    (as', db''') =+      foldr+        ( \a (as, db') ->+            let (db'', a') = freezeTicks db' (snd a)+             in (as <> [(fst a, a')], db'')+        )+        ([], db)+        (view #axes o)++freezeTicks :: DataBox -> AxisOptions -> (DataBox, AxisOptions)+freezeTicks db a =+  bimap+    (\x -> placeRect (view #place a) x db)+    (\x -> a & set (#ticks % #style) x)+    (toTickPlaced (placeRange (view #place a) db) (view (#ticks % #style) a))++-- | compute tick components given style, ranges and formatting+makePlacedTicks :: TickStyle -> Range Double -> ([(Double, Text)], Maybe (Range Double))+makePlacedTicks s r =+  case s of+    TickNone -> ([], Nothing)+    TickRound f n e ->+      ( zip+          ticks0+          (formatNs 4 f ticks0),+        bool (space1 ticks0) Nothing (e == NoTickExtend)+      )+      where+        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)+    TickExact f n -> (zip ticks0 (formatNs 4 f ticks0), Nothing)+      where+        ticks0 = grid OuterPos r n+    TickLabels ls ->+      ( zip+          ( project (Range 0 (fromIntegral $ length ls)) r+              <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])+          )+          ls,+        Nothing+      )+    TickPlaced xs -> (xs, Nothing)++toTickPlaced :: Range Double -> TickStyle -> (Range Double, TickStyle)+toTickPlaced r t@TickRound {} = (fromMaybe r ext, TickPlaced ts)+  where+    (ts, ext) = makePlacedTicks t r+toTickPlaced r t = (r, t)++placeRect :: Place -> Range Double -> Rect Double -> Rect Double+placeRect pl' (Range a0 a1) (Rect x z y w) = case pl' of+  PlaceRight -> Rect x z a0 a1+  PlaceLeft -> Rect x z a0 a1+  _ -> Rect a0 a1 y w++placeRange :: Place -> HudBox -> Range Double+placeRange pl (Rect x z y w) = case pl of+  PlaceRight -> Range y w+  PlaceLeft -> Range y w+  _ -> Range x z++placeOrigin :: Place -> Double -> Point Double+placeOrigin pl x+  | pl == PlaceTop || pl == PlaceBottom = Point x 0+  | otherwise = Point 0 x++axis :: AxisOptions -> State HudChart ChartTree+axis a = do+  t <- makeTick a+  b <- maybe (pure mempty) (makeAxisBar (view #place a)) (view #bar a)+  pure (group (Just "axis") [t, b])++-- | alter a colour with a function+colourHudOptions :: (Colour -> Colour) -> HudOptions -> HudOptions+colourHudOptions f o =+  o+    & over #frames (fmap (second fFrame))+    & over #titles (fmap (second (over (#style % #color) f)))+    & over #axes (fmap (second fAxis))+    & over #legends (fmap (second fLegend))+  where+    fAxis :: AxisOptions -> AxisOptions+    fAxis a =+      a+        & over #bar (fmap (over (#style % #color) f))+        & over+          (#ticks % #gtick)+          (fmap (first (over #color f . over #borderColor f)))+        & over+          (#ticks % #ttick)+          (fmap (first (over #color f)))+        & over+          (#ticks % #ltick)+          (fmap (first (over #color f)))+    fLegend :: LegendOptions -> LegendOptions+    fLegend a =+      a+        & over #textStyle (over #color f)+        & over #frame (fmap (over #color f . over #borderColor f))+    fFrame :: FrameOptions -> FrameOptions+    fFrame a =+      a+        & over #frame (fmap (over #color f . over #borderColor f))++-- | Placement of elements around (what is implicity but maybe shouldn't just be) a rectangular canvas+data Place+  = PlaceLeft+  | PlaceRight+  | PlaceTop+  | PlaceBottom+  | PlaceAbsolute (Point Double)+  deriving (Show, Eq, Generic)++-- | textifier+placeText :: Place -> Text+placeText p =+  case p of+    PlaceTop -> "Top"+    PlaceBottom -> "Bottom"+    PlaceLeft -> "Left"+    PlaceRight -> "Right"+    PlaceAbsolute _ -> "Absolute"++-- | axis options+data AxisOptions = AxisOptions+  { bar :: Maybe AxisBar,+    adjust :: Maybe Adjustments,+    ticks :: Ticks,+    place :: Place+  }+  deriving (Eq, Show, Generic)++-- | The official axis+defaultAxisOptions :: AxisOptions+defaultAxisOptions = AxisOptions (Just defaultAxisBar) (Just defaultAdjustments) defaultTicks PlaceBottom++-- | The bar on an axis representing the x or y plane.+--+-- >>> defaultAxisBar+-- AxisBar {style = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 0.40}, size = 4.0e-3, buffer = 1.0e-2, overhang = 2.0e-3}+data AxisBar = AxisBar+  { style :: RectStyle,+    size :: Double,+    buffer :: Double,+    -- | extension over the edges of the axis range+    overhang :: Double+  }+  deriving (Show, Eq, Generic)++-- | The official axis bar+defaultAxisBar :: AxisBar+defaultAxisBar = AxisBar (RectStyle 0 transparent (set opac' 0.4 dark)) 0.004 0.01 0.002++-- | Options for titles.  Defaults to center aligned, and placed at Top of the hud+--+-- >>> defaultTitle "title"+-- Title {text = "title", style = TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing}, place = PlaceTop, anchor = AnchorMiddle, buffer = 4.0e-2}+data Title = Title+  { text :: Text,+    style :: TextStyle,+    place :: Place,+    anchor :: Anchor,+    buffer :: Double+  }+  deriving (Show, Eq, Generic)++-- | The official hud title+defaultTitle :: Text -> Title+defaultTitle txt =+  Title+    txt+    ( defaultTextStyle+        & #size .~ 0.12+    )+    PlaceTop+    AnchorMiddle+    0.04++-- | xy coordinate markings+--+-- >>> defaultTicks+-- Ticks {style = TickRound (FormatN {fstyle = FSCommaPrec, sigFigs = Just 2, addLPad = True}) 8 TickExtend, gtick = Just (GlyphStyle {size = 3.0e-2, color = Colour 0.05 0.05 0.05 0.40, borderColor = Colour 0.05 0.05 0.05 0.40, borderSize = 4.0e-3, shape = VLineGlyph, rotation = Nothing, translate = Nothing},3.0e-2), ttick = Just (TextStyle {size = 5.0e-2, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing},3.3e-2), ltick = Just (LineStyle {size = 5.0e-3, color = Colour 0.05 0.05 0.05 0.05, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},0.0)}+data Ticks = Ticks+  { style :: TickStyle,+    gtick :: Maybe (GlyphStyle, Double),+    ttick :: Maybe (TextStyle, Double),+    ltick :: Maybe (LineStyle, Double)+  }+  deriving (Show, Eq, Generic)++-- | The official glyph tick+defaultGlyphTick :: GlyphStyle+defaultGlyphTick =+  defaultGlyphStyle+    & #borderSize .~ 0.004+    & #shape .~ VLineGlyph+    & #color .~ set opac' 0.4 dark+    & #borderColor .~ set opac' 0.4 dark++-- | The official text tick+defaultTextTick :: TextStyle+defaultTextTick =+  defaultTextStyle & #size .~ 0.05++-- | The official line tick+defaultLineTick :: LineStyle+defaultLineTick =+  defaultLineStyle+    & #size .~ 5.0e-3+    & #color %~ set opac' 0.05++-- | The official tick+defaultTicks :: Ticks+defaultTicks =+  Ticks+    defaultTickStyle+    (Just (defaultGlyphTick, 0.03))+    (Just (defaultTextTick, 0.033))+    (Just (defaultLineTick, 0))++-- | Style of tick marks on an axis.+data TickStyle+  = -- | no ticks on axis+    TickNone+  | -- | specific labels (equidistant placement)+    TickLabels [Text]+  | -- | sensibly rounded ticks, a guide to how many, and whether to extend beyond the data bounding box+    TickRound FormatN Int TickExtend+  | -- | exactly n equally spaced ticks+    TickExact FormatN Int+  | -- | specific labels and placement+    TickPlaced [(Double, Text)]+  deriving (Show, Eq, Generic)++-- | The official tick style+defaultTickStyle :: TickStyle+defaultTickStyle = TickRound defaultFormatN 8 TickExtend++-- | textifier+tickStyleText :: TickStyle -> Text+tickStyleText TickNone = "TickNone"+tickStyleText TickLabels {} = "TickLabels"+tickStyleText TickRound {} = "TickRound"+tickStyleText TickExact {} = "TickExact"+tickStyleText TickPlaced {} = "TickPlaced"++-- | Whether Ticks are allowed to extend the data range+data TickExtend = TickExtend | NoTickExtend deriving (Eq, Show, Generic)++-- | options for prettifying axis decorations+--+-- >>> defaultAdjustments+-- Adjustments {maxXRatio = 8.0e-2, maxYRatio = 6.0e-2, angledRatio = 0.12, allowDiagonal = True}+data Adjustments = Adjustments+  { maxXRatio :: Double,+    maxYRatio :: Double,+    angledRatio :: Double,+    allowDiagonal :: Bool+  }+  deriving (Show, Eq, Generic)++-- | The official hud adjustments.+defaultAdjustments :: Adjustments+defaultAdjustments = Adjustments 0.08 0.06 0.12 True++-- | Legend options+--+-- >>> defaultLegendOptions+-- LegendOptions {size = 0.3, buffer = 0.1, vgap = 0.2, hgap = 0.1, textStyle = TextStyle {size = 0.18, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing}, innerPad = 0.1, outerPad = 2.0e-2, frame = Just (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.05 0.05 0.05 1.00, color = Colour 0.05 0.05 0.05 0.00}), place = PlaceRight, overallScale = 0.25, content = []}+--+data LegendOptions = LegendOptions+  { size :: Double,+    buffer :: Double,+    vgap :: Double,+    hgap :: Double,+    textStyle :: TextStyle,+    innerPad :: Double,+    outerPad :: Double,+    frame :: Maybe RectStyle,+    place :: Place,+    overallScale :: Double,+    content :: [(Text, Chart)]+  }+  deriving (Show, Eq, Generic)++-- | The official legend options+defaultLegendOptions :: LegendOptions+defaultLegendOptions =+  LegendOptions+    0.3+    0.1+    0.2+    0.1+    ( defaultTextStyle+        & #size .~ 0.18+    )+    0.1+    0.02+    (Just (RectStyle 0.01 (set opac' 1 dark) (set opac' 0 dark)))+    PlaceRight+    0.25+    []++-- | flip an axis from being an X dimension to a Y one or vice-versa.+flipAxis :: AxisOptions -> AxisOptions+flipAxis ac = case ac ^. #place of+  PlaceBottom -> ac & #place .~ PlaceLeft+  PlaceTop -> ac & #place .~ PlaceRight+  PlaceLeft -> ac & #place .~ PlaceBottom+  PlaceRight -> ac & #place .~ PlaceTop+  PlaceAbsolute _ -> ac++-- | Options for hud frames+--+-- >>> defaultFrameOptions+-- FrameOptions {frame = Just (RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 1.00 1.00 1.00 0.02}), buffer = 0.0}+data FrameOptions = FrameOptions+  { frame :: Maybe RectStyle,+    buffer :: Double+  }+  deriving (Eq, Show, Generic)++-- | The official hud frame+defaultFrameOptions :: FrameOptions+defaultFrameOptions = FrameOptions (Just (blob (grey 1 0.02))) 0++-- | Make a frame hud transformation.+frameHud :: FrameOptions -> State HudChart ChartTree+frameHud o = do+  hc <- get+  let r = padRect (view #buffer o) <$> view hudStyleBox' hc+  case r of+    Nothing -> pure (unnamed [])+    Just r' -> pure $ case view #frame o of+      Nothing -> blank r'+      Just rs -> named "frame" [RectChart rs [r']]++bar_ :: Place -> AxisBar -> CanvasBox -> HudBox -> Chart+bar_ pl b (Rect x z y w) (Rect x' z' y' w') =+  RectChart (view #style b) $+    case pl of+      PlaceTop ->+        [ Rect+            (x - b ^. #overhang)+            (z + b ^. #overhang)+            (w' + b ^. #buffer)+            (w' + b ^. #buffer + b ^. #size)+        ]+      PlaceBottom ->+        [ Rect+            (x - b ^. #overhang)+            (z + b ^. #overhang)+            (y' - b ^. #size - b ^. #buffer)+            (y' - b ^. #buffer)+        ]+      PlaceLeft ->+        [ Rect+            (x' - b ^. #size - b ^. #buffer)+            (x' - b ^. #buffer)+            (y - b ^. #overhang)+            (w + b ^. #overhang)+        ]+      PlaceRight ->+        [ Rect+            (z' + (b ^. #buffer))+            (z' + (b ^. #buffer) + (b ^. #size))+            (y - b ^. #overhang)+            (w + b ^. #overhang)+        ]+      PlaceAbsolute (Point x'' _) ->+        [ Rect+            (x'' + (b ^. #buffer))+            (x'' + (b ^. #buffer) + (b ^. #size))+            (y - b ^. #overhang)+            (w + b ^. #overhang)+        ]++makeAxisBar :: Place -> AxisBar -> State HudChart ChartTree+makeAxisBar pl b = do+  cb <- gets (view canvasBox')+  hb <- gets (view hudStyleBox')+  let c = bar_ pl b <$> cb <*> hb+  pure $ named "axisbar" (maybeToList c)++title_ :: Title -> HudBox -> Chart+title_ t hb =+  TextChart+    (style' & #rotation .~ bool (Just rot) Nothing (rot == 0))+    [(t ^. #text, addp (placePosTitle t hb) (alignPosTitle t hb))]+  where+    style'+      | t ^. #anchor == AnchorStart =+        #anchor .~ AnchorStart $ t ^. #style+      | t ^. #anchor == AnchorEnd =+        #anchor .~ AnchorEnd $ t ^. #style+      | otherwise = t ^. #style+    rot' = fromMaybe 0 (t ^. #style % #rotation)+    rot+      | t ^. #place == PlaceRight = pi / 2 + rot'+      | t ^. #place == PlaceLeft = pi / 2 + rot'+      | otherwise = rot'++placePosTitle :: Title -> HudBox -> Point Double+placePosTitle t (Rect x z y w) =+  case t ^. #place of+    PlaceTop -> Point ((x + z) / 2.0) (w - y' + (t ^. #buffer))+    PlaceBottom -> Point ((x + z) / 2.0) (y - w' - (t ^. #buffer))+    PlaceLeft -> Point (x + y' - (t ^. #buffer)) ((y + w) / 2.0)+    PlaceRight -> Point (z + w' + (t ^. #buffer)) ((y + w) / 2.0)+    PlaceAbsolute p -> p+  where+    (Rect _ _ y' w') = styleBoxText (view #style t) (view #text t) zero++alignPosTitle :: Title -> HudBox -> Point Double+alignPosTitle t (Rect x z y w)+  | t ^. #anchor == AnchorStart+      && (t ^. #place == PlaceTop || t ^. #place == PlaceBottom) =+    Point ((x - z) / 2.0) 0.0+  | t ^. #anchor == AnchorStart+      && t ^. #place == PlaceLeft =+    Point 0.0 ((y - w) / 2.0)+  | t ^. #anchor == AnchorStart+      && t ^. #place == PlaceRight =+    Point 0.0 ((y - w) / 2.0)+  | t ^. #anchor == AnchorEnd+      && (t ^. #place == PlaceTop || t ^. #place == PlaceBottom) =+    Point ((-x + z) / 2.0) 0.0+  | t ^. #anchor == AnchorEnd+      && t ^. #place == PlaceLeft =+    Point 0.0 ((-y + w) / 2.0)+  | t ^. #anchor == AnchorEnd+      && t ^. #place == PlaceRight =+    Point 0.0 ((-y + w) / 2.0)+  | otherwise = Point 0.0 0.0++-- | title append transformation.+title :: Title -> State HudChart ChartTree+title t = do+  hb <- gets (view hudStyleBox')+  pure $ named "title" (maybeToList $ title_ t <$> hb)++placePos :: Place -> Double -> HudBox -> Point Double+placePos pl b (Rect x z y w) = case pl of+  PlaceTop -> Point 0 (w + b)+  PlaceBottom -> Point 0 (y - b)+  PlaceLeft -> Point (x - b) 0+  PlaceRight -> Point (z + b) 0+  PlaceAbsolute p -> p++placeRot :: Place -> Maybe Double+placeRot pl = case pl of+  PlaceRight -> Just (pi / 2)+  PlaceLeft -> Just (pi / 2)+  _ -> Nothing++textPos :: Place -> TextStyle -> Double -> Point Double+textPos pl tt b = case pl of+  PlaceTop -> Point 0 b+  PlaceBottom -> Point 0 (-b - 0.5 * (tt ^. #vsize) * (tt ^. #size))+  PlaceLeft ->+    Point+      (-b)+      ((tt ^. #vshift) * (tt ^. #vsize) * (tt ^. #size))+  PlaceRight ->+    Point+      b+      ((tt ^. #vshift) * (tt ^. #vsize) * (tt ^. #size))+  PlaceAbsolute p -> p++placeTextAnchor :: Place -> (TextStyle -> TextStyle)+placeTextAnchor pl+  | pl == PlaceLeft = #anchor .~ AnchorEnd+  | pl == PlaceRight = #anchor .~ AnchorStart+  | otherwise = id++placeGridLines :: Place -> HudBox -> Double -> Double -> [Point Double]+placeGridLines pl (Rect x z y w) a b+  | pl == PlaceTop || pl == PlaceBottom = [Point a (y - b), Point a (w + b)]+  | otherwise = [Point (x - b) a, Point (z + b) a]++-- | compute tick values and labels given options, ranges and formatting+ticksR :: TickStyle -> Range Double -> Range Double -> [(Double, Text)]+ticksR s d r =+  case s of+    TickNone -> []+    TickRound f n e -> zip (project r d <$> ticks0) (formatNs 4 f ticks0)+      where+        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)+    TickExact f n -> zip (project r d <$> ticks0) (formatNs 4 f ticks0)+      where+        ticks0 = grid OuterPos r n+    TickLabels ls ->+      zip+        ( project (Range 0 (fromIntegral $ length ls)) d+            <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])+        )+        ls+    TickPlaced xs -> zip (project r d . fst <$> xs) (snd <$> xs)++-- | compute tick values in canvas space given placement, canvas box & data box+ticksPlacedCanvas :: TickStyle -> Place -> CanvasBox -> DataBox -> [(Double, Text)]+ticksPlacedCanvas ts pl cb db =+  first (project (placeRange pl db) (placeRange pl cb))+    <$> fst (makePlacedTicks ts (placeRange pl db))++tickGlyph_ :: Place -> (GlyphStyle, Double) -> TickStyle -> CanvasBox -> CanvasBox -> DataBox -> Maybe Chart+tickGlyph_ pl (g, b) ts sb cb db =+  case l of+    [] -> Nothing+    l' -> Just $ GlyphChart (g & #rotation .~ placeRot pl) l'+  where+    l =+      addp (placePos pl b sb) . placeOrigin pl+        <$> fmap fst (ticksPlacedCanvas ts pl cb db)++-- | aka marks+tickGlyph ::+  Place ->+  (GlyphStyle, Double) ->+  TickStyle ->+  State HudChart ChartTree+tickGlyph pl (g, b) ts = do+  sb <- gets (view canvasStyleBox')+  cb <- gets (view canvasBox')+  db <- gets (view #dataBox)+  let c = tickGlyph_ pl (g, b) ts <$> sb <*> cb <*> pure db+  pure $ named "tickglyph" (catMaybes $ maybeToList c)++tickText_ ::+  Place ->+  (TextStyle, Double) ->+  TickStyle ->+  CanvasBox ->+  CanvasBox ->+  DataBox ->+  Maybe Chart+tickText_ pl (txts, b) ts sb cb db =+  case l of+    [] -> Nothing+    _ -> Just $ TextChart (placeTextAnchor pl txts) l+  where+    l =+      swap . first (addp (addp (placePos pl b sb) (textPos pl txts b)) . placeOrigin pl)+        <$> ticksPlacedCanvas ts pl cb db++-- | aka tick labels+tickText ::+  Place ->+  (TextStyle, Double) ->+  TickStyle ->+  State HudChart ChartTree+tickText pl (txts, b) ts = do+  sb <- gets (view canvasStyleBox')+  cb <- gets (view canvasBox')+  db <- gets (view #dataBox)+  let c = tickText_ pl (txts, b) ts <$> sb <*> cb <*> pure db+  pure $ named "ticktext" (catMaybes $ maybeToList c)++-- | aka grid lines+tickLine ::+  Place ->+  (LineStyle, Double) ->+  TickStyle ->+  State HudChart ChartTree+tickLine pl (ls, b) ts = do+  cb <- gets (view canvasBox')+  db <- gets (view #dataBox)+  case cb of+    Nothing -> pure $ named "ticklines" []+    Just cb' -> do+      let l = (\x -> placeGridLines pl cb' x b) <$> fmap fst (ticksPlacedCanvas ts pl cb' db)+      pure $ named "ticklines" (bool [LineChart ls l] [] (null l))++-- | Create tick glyphs (marks), lines (grid) and text (labels)+applyTicks ::+  Place ->+  Ticks ->+  State HudChart ChartTree+applyTicks pl t = do+  g <- maybe (pure mempty) (\x -> tickGlyph pl x (t ^. #style)) (t ^. #gtick)+  l <- maybe (pure mempty) (\x -> tickText pl x (t ^. #style)) (t ^. #ttick)+  t' <- maybe (pure mempty) (\x -> tickLine pl x (t ^. #style)) (t ^. #ltick)+  pure $ group (Just "ticks") [g, l, t']++-- | adjust Tick for sane font sizes etc+adjustTicks ::+  Adjustments ->+  HudBox ->+  DataBox ->+  Place ->+  Ticks ->+  Ticks+adjustTicks (Adjustments mrx ma mry ad) vb cs pl t+  | pl == PlaceBottom || pl == PlaceTop =+    if ad+      then+        ( case adjustSizeX > 1 of+            True ->+              ( case pl of+                  PlaceBottom -> #ttick % _Just % _1 % #anchor .~ AnchorEnd+                  PlaceTop -> #ttick % _Just % _1 % #anchor .~ AnchorStart+                  _ -> #ttick % _Just % _1 % #anchor .~ AnchorEnd+              )+                . (#ttick % _Just % _1 % #size %~ (/ adjustSizeA))+                $ (#ttick % _Just % _1 % #rotation ?~ pi / 4) t+            False -> (#ttick % _Just % _1 % #size %~ (/ adjustSizeA)) t+        )+      else t & #ttick % _Just % _1 % #size %~ (/ adjustSizeX)+  | otherwise -- pl `elem` [PlaceLeft, PlaceRight]+    =+    (#ttick % _Just % _1 % #size %~ (/ adjustSizeY)) t+  where+    max' [] = 1+    max' xs = maximum xs+    ra (Rect x z y w)+      | pl == PlaceTop || pl == PlaceBottom = Range x z+      | otherwise = Range y w+    asp = ra vb+    r = ra cs+    tickl = snd <$> ticksR (t ^. #style) asp r+    maxWidth :: Double+    maxWidth =+      maybe+        1+        ( \tt ->+            max' $+              (\(Rect x z _ _) -> z - x)+                . (\x -> styleBoxText (fst tt) x (Point 0 0))+                <$> tickl+        )+        (t ^. #ttick)+    maxHeight =+      maybe+        1+        ( \tt ->+            max' $+              (\(Rect _ _ y w) -> w - y)+                . (\x -> styleBoxText (fst tt) x (Point 0 0))+                <$> tickl+        )+        (t ^. #ttick)+    adjustSizeX :: Double+    adjustSizeX = max ((maxWidth / (upper asp - lower asp)) / mrx) 1+    adjustSizeY = max ((maxHeight / (upper asp - lower asp)) / mry) 1+    adjustSizeA = max ((maxHeight / (upper asp - lower asp)) / ma) 1++makeTick :: AxisOptions -> State HudChart ChartTree+makeTick c = do+  hb <- gets (view hudBox')+  db <- gets (view #dataBox)+  case hb of+    Nothing -> pure (named "ticks" [])+    Just hb' -> do+      let adjTick = maybe (c ^. #ticks) (\x -> adjustTicks x hb' db (c ^. #place) (c ^. #ticks)) (c ^. #adjust)+      applyTicks (c ^. #place) adjTick++-- | Make a legend from 'LegendOptions'+legend :: LegendOptions -> State HudChart ChartTree+legend o = legendHud o (legendChart o)++-- | Make a legend hud element, from a bespoke ChartTree.+legendHud :: LegendOptions -> ChartTree -> State HudChart ChartTree+legendHud o lcs = do+  sb <- gets (view hudStyleBox')+  case sb of+    Nothing -> pure (named "legend" [])+    Just sb' -> pure $ placeLegend o sb' (over chart' (scaleChart (o ^. #overallScale)) lcs)++placeLegend :: LegendOptions -> HudBox -> ChartTree -> ChartTree+placeLegend o hb t =+  case view styleBox' t of+    Nothing -> named "legend" []+    Just sb -> t & over chart' (moveChart (placeBeside_ (o ^. #place) (view #buffer o) hb sb))++placeBeside_ :: Place -> Double -> Rect Double -> Rect Double -> Point Double+placeBeside_ pl buff (Rect x z y w) (Rect x' z' y' w') =+  case pl of+    PlaceTop -> Point ((x + z) / 2.0) (buff + w + (w' - y') / 2.0)+    PlaceBottom -> Point ((x + z) / 2.0) (y - buff - (w' - y'))+    PlaceLeft -> Point (x - buff - (z' - x')) ((y + w) / 2.0)+    PlaceRight -> Point (z + buff) ((y + w) / 2.0)+    PlaceAbsolute p -> p++-- | frame a legend+legendFrame :: LegendOptions -> ChartTree -> ChartTree+legendFrame l content' =+  group (Just "legend") [named "legendBorder" borders, rename (Just "legendContent") content']+  where+    borders = [outer, inner] <> frame'+    outer = padChart (view #outerPad l) [inner]+    frame' = foldMap (\r -> [frameChart r 0 [inner]]) (view #frame l)+    inner = padChart (view #innerPad l) (foldOf charts' content')++-- | Make the contents portion of a legend+legendChart :: LegendOptions -> ChartTree+legendChart l = legendFrame l content'+  where+    content' =+      vert+        (l ^. #hgap)+        ( ( \(a, t) ->+              hori+                ((l ^. #vgap) + twidth - gapwidth t)+                (fmap unnamed [[t], [a]])+          )+            <$> es+        )+    es = reverse $ uncurry (legendEntry l) <$> view #content l+    twidth = maybe zero (\(Rect _ z _ _) -> z) (styleBoxes (snd <$> es))+    gapwidth t = maybe 0 (\(Rect _ z _ _) -> z) (sbox t)++legendText ::+  LegendOptions ->+  Text ->+  Chart+legendText l t =+  TextChart (l ^. #textStyle & #anchor .~ AnchorStart) [(t, zero)]++legendizeChart ::+  LegendOptions ->+  Chart ->+  Chart+legendizeChart l c =+  case c of+    (RectChart rs _) -> RectChart rs [Rect 0 (l ^. #size) 0 (l ^. #size)]+    (TextChart ts _) -> TextChart (ts & #size .~ (l ^. #size)) [("text", zero)]+    (GlyphChart gs _) -> GlyphChart (gs & #size .~ (l ^. #size)) [Point (0.5 * l ^. #size) (0.33 * l ^. #size)]+    (LineChart ls _) ->+      LineChart+        (ls & #size %~ (/ (l ^. #overallScale)))+        [[Point 0 (1 * l ^. #size), Point (2 * l ^. #size) (1 * l ^. #size)]]+    (PathChart ps _) ->+      ( let cs =+              singletonQuad+                ( QuadPosition+                    (Point 0 0)+                    (Point (l ^. #size) (l ^. #size))+                    (Point (2 * l ^. #size) ((-1) * l ^. #size))+                )+         in PathChart (ps & #borderSize .~ (l ^. #size)) cs+      )+    (BlankChart _) -> BlankChart [Rect 0 (l ^. #size) 0 (l ^. #size)]++legendEntry ::+  LegendOptions ->+  Text ->+  Chart ->+  (Chart, Chart)+legendEntry l t c =+  ( legendizeChart l c,+    legendText l t+  )
+ src/Chart/Primitive.hs view
@@ -0,0 +1,441 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE OverloadedStrings #-}+{-# OPTIONS_GHC -Wall #-}++-- | Base 'Chart' and 'ChartTree' types and support+module Chart.Primitive+  ( -- * Charts++    Chart (..),+    ChartTree (..),+    tree',+    chart',+    charts',+    named,+    unnamed,+    rename,+    blank,+    group,+    filterChartTree,+    Orientation (..),+    ChartAspect (..),++    -- * Boxes++    -- $boxes+    box,+    sbox,+    projectWith,+    maybeProjectWith,+    moveChart,+    scaleChart,+    scaleStyle,+    colourChart,+    projectChartTree,+    boxes,+    box',+    styleBoxes,+    styleBox',++    -- * Combinators+    vert,+    hori,+    stack,+    frameChart,+    isEmptyChart,+    padChart,+    rectangularize,+    glyphize,+    overText,+  )+where++import Chart.Data+import Chart.Style+import Data.Bifunctor+import Data.Bool+import Data.Colour+import Data.Foldable+import Data.Maybe+import Data.Path+import Data.Text (Text)+import Data.Tree+import GHC.Generics+import qualified NumHask.Prelude as NH+import Optics.Core+import Prelude++-- $setup+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings+-- >>> import Chart+-- >>> import Optics.Core+-- >>> let r = RectChart defaultRectStyle [one]++-- | There are 6 Chart primitives, unified as the Chart type.+--+-- - 'RectChart': a rectangle in the XY-domain. For example, a @Rect 0 1 0 1@ is the set of points on the XY Plane bounded by (0,0), (0,1), (1,0) & (1,1). Much of the library is built on Rect Double's but the base types are polymorphic.+-- - 'LineChart': a list of points which represent connected straight lines. [Point 0 0, Point 1 1, Point 2 2, Point 3 3] is an example; three lines connected up to form a line from (0,0) to (3,3).+-- - 'GlyphChart': a 'GlyphShape' which is a predefined shaped centered at a 'Point' in XY space.+-- - 'TextChart': text centered at a 'Point' in XY space.+-- - 'PathChart': specification of curvilinear paths using the SVG standards.+-- - 'BlankChart': a rectangular space that has no visual representation.+--+-- What is a Chart is usually a combination of these primitives into a tree or list of charts.+--+-- Each Chart primitive is a product of a style (the syntactic representation of the data) and a list of data.+--+-- A simple example is:+--+-- >>> let r = RectChart defaultRectStyle [one]+-- >>> r+-- RectChart (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}) [Rect -0.5 0.5 -0.5 0.5]+--+-- Using the defaults, this chart is rendered as:+--+-- > writeChartSvg "other/unit.hs" $ mempty & #hudOptions .~ defaultHudOptions & #charts .~ unnamed [r]+--+-- ![unit example](other/unit.svg)+data Chart where+  RectChart :: RectStyle -> [Rect Double] -> Chart+  LineChart :: LineStyle -> [[Point Double]] -> Chart+  GlyphChart :: GlyphStyle -> [Point Double] -> Chart+  TextChart :: TextStyle -> [(Text, Point Double)] -> Chart+  PathChart :: PathStyle -> [PathData Double] -> Chart+  BlankChart :: [Rect Double] -> Chart+  deriving (Eq, Show)++-- | A group of charts represented by a 'Tree' of chart lists with labelled branches. The labelling is particularly useful downstream, when groupings become grouped SVG elements with classes or ids.+newtype ChartTree = ChartTree {tree :: Tree (Maybe Text, [Chart])} deriving (Eq, Show, Generic)++-- | Apply a filter to ChartTree+filterChartTree :: (Chart -> Bool) -> ChartTree -> ChartTree+filterChartTree p (ChartTree (Node (a, cs) xs)) =+  ChartTree (Node (a, catMaybes (rem' <$> cs)) (tree . filterChartTree p . ChartTree <$> xs))+  where+    rem' x = bool Nothing (Just x) (p x)++-- | Lens between ChartTree and the underlying Tree representation+tree' :: Iso' ChartTree (Tree (Maybe Text, [Chart]))+tree' = iso tree ChartTree++-- | A traversal of each chart list in a tree.+charts' :: Traversal' ChartTree [Chart]+charts' = tree' % traversed % _2++-- | A traversal of each chart in a tree.+chart' :: Traversal' ChartTree Chart+chart' = tree' % traversed % _2 % traversed++-- | Convert a chart list to a tree, adding a specific text label.+named :: Text -> [Chart] -> ChartTree+named l cs = ChartTree $ Node (Just l, cs) []++-- | Convert a chart list to a tree, with no text label.+unnamed :: [Chart] -> ChartTree+unnamed cs = ChartTree $ Node (Nothing, cs) []++-- | Rename a top-level label in a tree.+rename :: Maybe Text -> ChartTree -> ChartTree+rename l (ChartTree (Node (_, cs) xs)) = ChartTree (Node (l, cs) xs)++-- | A tree with no charts and no label.+blank :: Rect Double -> ChartTree+blank r = unnamed [BlankChart [r]]++-- | Group a list of trees into a new tree.+group :: Maybe Text -> [ChartTree] -> ChartTree+group name cs = ChartTree $ Node (name, []) (tree <$> cs)++instance Semigroup ChartTree where+  (<>) (ChartTree x@(Node (n, cs) xs)) (ChartTree x'@(Node (n', cs') xs')) =+    case (n, n') of+      (Nothing, Nothing) -> ChartTree $ Node (Nothing, cs <> cs') (xs <> xs')+      _ -> ChartTree $ Node (Nothing, []) [x, x']++instance Monoid ChartTree where+  mempty = ChartTree $ Node (Nothing, []) []++-- $boxes+--+-- Library functionality (rescaling, combining charts, working out axes and generally putting charts together) is driven by a box model. A box is a rectangular space that bounds chart elements.++-- | The 'Rect' which encloses the data elements of the chart. /Bounding box/ is a synonym.+--+-- >>> box r+-- Just Rect -0.5 0.5 -0.5 0.5+box :: Chart -> Maybe (Rect Double)+box (RectChart _ a) = foldRect a+box (TextChart _ a) = space1 $ snd <$> a+box (LineChart _ a) = space1 $ mconcat a+box (GlyphChart _ a) = space1 a+box (PathChart _ a) = pathBoxes a+box (BlankChart a) = foldRect a++-- | The bounding box for a chart including both data and style elements.+--+-- >>> sbox r+-- Just Rect -0.505 0.505 -0.505 0.505+--+-- In the above example, the border of the rectangle adds an extra 0.1 to the height and width of the bounding box enclosing the chart.+sbox :: Chart -> Maybe (Rect Double)+sbox (RectChart s a) = foldRect $ padRect (0.5 * view #borderSize s) <$> a+sbox (TextChart s a) = foldRect $ uncurry (styleBoxText s) <$> a+sbox (LineChart s a) = padRect (0.5 * s ^. #size) <$> (space1 $ mconcat a)+sbox (GlyphChart s a) = foldRect $ (\p -> addPoint p (styleBoxGlyph s)) <$> a+sbox (PathChart s a) = padRect (0.5 * view #borderSize s) <$> pathBoxes a+sbox (BlankChart a) = foldRect a++-- | projects a Chart to a new space from an old rectangular space, preserving linear metric structure.+--+-- >>> projectWith (fmap (2*) one) one r+-- RectChart (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}) [Rect -1.0 1.0 -1.0 1.0]+projectWith :: Rect Double -> Rect Double -> Chart -> Chart+projectWith new old (RectChart s a) = RectChart s (projectOnR new old <$> a)+projectWith new old (TextChart s a) = TextChart (projectX s) (second (projectOnP new old) <$> a)+  where+    projectX :: TextStyle -> TextStyle+    projectX s' = case view #scalex s' of+      NoScaleX -> s' & over #hsize (* (width ox / width nx)) & over #vsize (* (width ox / width nx))+      ScaleX -> s' & over #size (* (width nx / width ox))+    (Ranges nx _) = new+    (Ranges ox _) = old+projectWith new old (LineChart s a) = LineChart s (fmap (projectOnP new old) <$> a)+projectWith new old (GlyphChart s a) = GlyphChart s (projectOnP new old <$> a)+projectWith new old (BlankChart a) = BlankChart (projectOnR new old <$> a)+projectWith new old (PathChart s a) = PathChart s (projectPaths new old a)++-- | Maybe project a Chart to a new rectangular space from an old rectangular space, if both Rects exist.+maybeProjectWith :: Maybe (Rect Double) -> Maybe (Rect Double) -> Chart -> Chart+maybeProjectWith new old = fromMaybe id (projectWith <$> new <*> old)++-- | Move a chart.+moveChart :: Point Double -> Chart -> Chart+moveChart p (RectChart s a) = RectChart s (addPoint p <$> a)+moveChart p (TextChart s a) = TextChart s (second (addp p) <$> a)+moveChart p (LineChart s a) = LineChart s (fmap (addp p) <$> a)+moveChart p (GlyphChart s a) = GlyphChart s (addp p <$> a)+moveChart p (PathChart s a) = PathChart s (movePath p <$> a)+moveChart p (BlankChart a) = BlankChart (addPoint p <$> a)++-- | Scale a chart (effecting both the chart data and the style).+scaleChart :: Double -> Chart -> Chart+scaleChart p (RectChart s a) =+  RectChart (s & #borderSize %~ (* p)) (fmap (fmap (* p)) a)+scaleChart p (LineChart s a) =+  LineChart (s & #size %~ (* p)) (fmap (fmap (fmap (* p))) a)+scaleChart p (TextChart s a) =+  TextChart (s & #size %~ (* p)) (fmap (second (fmap (* p))) a)+scaleChart p (GlyphChart s a) =+  GlyphChart (s & #size %~ (* p)) (fmap (fmap (* p)) a)+scaleChart p (PathChart s a) =+  PathChart (s & #borderSize %~ (* p)) (scalePath p <$> a)+scaleChart p (BlankChart a) =+  BlankChart (fmap (fmap (* p)) a)++-- | Scale just the chart style.+scaleStyle :: Double -> Chart -> Chart+scaleStyle x (LineChart a d) = LineChart (a & #size %~ (* x)) d+scaleStyle x (RectChart a d) = RectChart (a & #borderSize %~ (* x)) d+scaleStyle x (TextChart a d) = TextChart (a & #size %~ (* x)) d+scaleStyle x (GlyphChart a d) = GlyphChart (a & #size %~ (* x)) d+scaleStyle x (PathChart a d) = PathChart (a & #borderSize %~ (* x)) d+scaleStyle _ (BlankChart d) = BlankChart d++-- | Modify chart colors, applying to both border and main colors.+colourChart :: (Colour -> Colour) -> Chart -> Chart+colourChart f (RectChart s d) = RectChart s' d+  where+    s' = s & #color %~ f & #borderColor %~ f+colourChart f (TextChart s d) = TextChart s' d+  where+    s' = s & #color %~ f+colourChart f (LineChart s d) = LineChart s' d+  where+    s' = s & #color %~ f+colourChart f (GlyphChart s d) = GlyphChart s' d+  where+    s' = s & #color %~ f & #borderColor %~ f+colourChart f (PathChart s d) = PathChart s' d+  where+    s' = s & #color %~ f & #borderColor %~ f+colourChart _ (BlankChart d) = BlankChart d++-- | Project a chart tree to a new bounding box, guarding against singleton bounds.+projectChartTree :: Rect Double -> [Chart] -> [Chart]+projectChartTree new cs = case styleBoxes cs of+  Nothing -> cs+  Just b -> projectWith new b <$> cs++-- | Compute the bounding box of a list of charts.+boxes :: [Chart] -> Maybe (Rect Double)+boxes cs = foldRect $ mconcat $ maybeToList . box <$> cs++box_ :: ChartTree -> Maybe (Rect Double)+box_ = boxes . foldOf charts'++rebox_ :: ChartTree -> Maybe (Rect Double) -> ChartTree+rebox_ cs r =+  cs+    & over chart' (fromMaybe id $ projectWith <$> r <*> box_ cs)++-- | Lens between a ChartTree and its bounding box.+box' :: Lens' ChartTree (Maybe (Rect Double))+box' =+  lens box_ rebox_++-- | Compute the bounding box of the data and style elements contained in a list of charts.+styleBoxes :: [Chart] -> Maybe (Rect Double)+styleBoxes cs = foldRect $ mconcat $ maybeToList . sbox <$> cs++styleBox_ :: ChartTree -> Maybe (Rect Double)+styleBox_ = styleBoxes . foldOf charts'++styleRebox_ :: ChartTree -> Maybe (Rect Double) -> ChartTree+styleRebox_ cs r =+  cs+    & over chart' (fromMaybe id $ projectWith <$> r' <*> box_ cs)+  where+    r' = (NH.-) <$> r <*> ((NH.-) <$> styleBox_ cs <*> box_ cs)++-- | Lens between a style bounding box and a ChartTree tree.+--+-- Note that a round trip may be only approximately isomorphic ie+--+-- > forall c r. \c -> view styleBox' . set styleBox r c ~= r+--+-- - SVG is, in general, an additive model eg a border adds a constant amount no matter the scale or aspect. Text charts, in particular, can have small data boxes but large style additions to the box.+--+-- - rescaling of style here is, in juxtaposition, a multiplicative model.+--+-- In practice, this can lead to weird corner cases and unrequited distortion.+--+-- The example below starts with the unit chart, and a simple axis bar, with a dynamic overhang, so that the axis bar represents the x-axis extremity.+--+-- >>> t1 = unnamed [RectChart defaultRectStyle [one]]+-- >>> x1 h = toChartTree $ mempty & set #charts t1 & set (#hudOptions % #chartAspect) (ChartAspect) & set (#hudOptions % #axes) [(1,defaultAxisOptions & over #bar (fmap (set #overhang h)) & set (#ticks % #ttick) Nothing & set (#ticks % #gtick) Nothing & set (#ticks % #ltick) Nothing)]+--+-- With a significant overhang, the axis bar dominates the extrema:+--+-- >>> view styleBox' $ set styleBox' (Just one) (x1 0.1)+-- Just Rect -0.5 0.5 -0.5 0.5+--+-- With no overhang, the style additions caused by the chart dominates:+--+-- >>> view styleBox' $ set styleBox' (Just one) (x1 0)+-- Just Rect -0.5 0.5 -0.5 0.5+--+-- In between:+--+-- >>> view styleBox' $ set styleBox' (Just one) (x1 0.002)+-- Just Rect -0.5000199203187251 0.5000199203187251 -0.5 0.5+--+--+-- If having an exact box is important, try running set styleBox' multiple times eg+--+-- >>> view styleBox' $ foldr ($) (x1 0.002) (replicate 10 (set styleBox' (Just one)))+-- Just Rect -0.5 0.5000000000000001 -0.5 0.4999999999999999+styleBox' :: Lens' ChartTree (Maybe (Rect Double))+styleBox' =+  lens styleBox_ styleRebox_++-- | Create a frame over some charts with (additive) padding.+--+-- >>> frameChart defaultRectStyle 0.1 [BlankChart []]+-- RectChart (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}) []+frameChart :: RectStyle -> Double -> [Chart] -> Chart+frameChart rs p cs = RectChart rs (maybeToList (padRect p <$> styleBoxes cs))++-- | Additive padding, framing or buffering for a chart list.+padChart :: Double -> [Chart] -> Chart+padChart p cs = BlankChart (maybeToList (padRect p <$> styleBoxes cs))++-- | Whether a chart is empty of data to be represented.+isEmptyChart :: Chart -> Bool+isEmptyChart (RectChart _ []) = True+isEmptyChart (LineChart _ []) = True+isEmptyChart (GlyphChart _ []) = True+isEmptyChart (TextChart _ []) = True+isEmptyChart (PathChart _ []) = True+isEmptyChart (BlankChart _) = True+isEmptyChart _ = False++-- | Horizontally stack a list of trees (proceeding to the right) with a gap between+hori :: Double -> [ChartTree] -> ChartTree+hori _ [] = mempty+hori gap cs = foldl' step mempty cs+  where+    step x c = x <> over chart' (moveChart (Point (widthx x) (aligny x - aligny c))) c+    widthx x = case foldOf charts' x of+      [] -> zero+      xs -> maybe zero (\(Rect x' z' _ _) -> z' - x' + gap) (styleBoxes xs)+    aligny x = case foldOf charts' x of+      [] -> zero+      xs -> maybe zero (\(Rect _ _ y' w') -> (y' + w') / 2) (styleBoxes xs)++-- | Vertically stack a list of trees (proceeding upwards), aligning them to the left+vert :: Double -> [ChartTree] -> ChartTree+vert _ [] = mempty+vert gap cs = foldl' step mempty cs+  where+    step x c = x <> over chart' (moveChart (Point (alignx x - alignx c) (widthy x))) c+    widthy x = case foldOf charts' x of+      [] -> zero+      xs -> maybe zero (\(Rect _ _ y' w') -> w' - y' + gap) (styleBoxes xs)+    alignx x = case foldOf charts' x of+      [] -> zero+      xs -> maybe zero (\(Rect x' _ _ _) -> x') (styleBoxes xs)++-- | Stack a list of tree charts horizontally, then vertically+stack :: Int -> Double -> [ChartTree] -> ChartTree+stack _ _ [] = mempty+stack n gap cs = vert gap (hori gap <$> group' cs [])+  where+    group' [] acc = reverse acc+    group' x acc = group' (drop n x) (take n x : acc)++-- | Make a new chart tree out of the bounding boxes of a chart tree.+rectangularize :: RectStyle -> ChartTree -> ChartTree+rectangularize r c = group (Just "rectangularize") [over chart' (rectangularize_ r) c]++rectangularize_ :: RectStyle -> Chart -> Chart+rectangularize_ rs (TextChart s xs) = TextChart (s & #frame .~ Just rs) xs+rectangularize_ rs c = RectChart rs (maybeToList $ sbox c)++-- | Make a new chart tree out of the data points of a chart tree, using the supplied glyphs.+glyphize :: GlyphStyle -> ChartTree -> ChartTree+glyphize g c =+  group (Just "glyphize") [over chart' (glyphize_ g) c]++glyphize_ :: GlyphStyle -> Chart -> Chart+glyphize_ g (TextChart _ xs) = GlyphChart g (snd <$> xs)+glyphize_ g (PathChart _ xs) = GlyphChart g (pointPath <$> xs)+glyphize_ g (LineChart _ xs) = GlyphChart g (mconcat xs)+glyphize_ g (BlankChart xs) = GlyphChart g (mid <$> xs)+glyphize_ g (RectChart _ xs) = GlyphChart g (mid <$> xs)+glyphize_ g (GlyphChart _ xs) = GlyphChart g xs++-- | Modify the text in a text chart.+overText :: (TextStyle -> TextStyle) -> Chart -> Chart+overText f (TextChart s xs) = TextChart (f s) xs+overText _ x = x++-- | Verticle or Horizontal+data Orientation = Vert | Hori deriving (Eq, Show, Generic)++-- | The basis for the x-y ratio of a chart+--+-- Default style features tend towards assuming that the usual height of the overall svg image is around 1, and ChartAspect is based on this assumption, so that a ChartAspect of @FixedAspect 1.5@, say, means a height of 1 and a width of 1.5.+data ChartAspect+  = -- | Rescale charts to a fixed x-y ratio, inclusive of hud and style features+    FixedAspect Double+  | -- | Rescale charts to an overall height of 1, preserving the x-y ratio of the data canvas.+    CanvasAspect Double+  | -- | Rescale charts to a height of 1, preserving the existing x-y ratio of the underlying charts, inclusive of hud and style.+    ChartAspect+  deriving (Show, Eq, Generic)
− src/Chart/Reanimate.hs
@@ -1,355 +0,0 @@-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE OverloadedStrings #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}---- | Integration of reanimate and chart-svg-module Chart.Reanimate-  ( ReanimateConfig (..),-    defaultReanimateConfig,-    animChartSvg,-    ChartReanimate (..),-    chartReanimate,-    toTreeA,-    tree,-    treeFromFile,-  )-where--import Chart as C hiding (Line, renderChartsWith, transform)-import Codec.Picture.Types-import Control.Lens hiding (transform)-import qualified Data.Attoparsec.Text as A-import Data.Maybe-import Data.Text (Text, unpack)-import GHC.Generics-import Graphics.SvgTree as Svg hiding (Text)-import qualified Graphics.SvgTree.PathParser as Svg-import Linear.V2-import NumHask.Prelude (one)-import Reanimate as Re---- | global reanimate configuration.------ >>> defaultReanimateConfig--- ReanimateConfig {duration = 5.0, background = Just "black", globalFontFamily = Just ["Arial","Helvetica","sans-serif"], globalFontStyle = Just FontStyleNormal, globalAlignment = AlignxMinYMin}-data ReanimateConfig = ReanimateConfig-  { duration :: Double,-    background :: Maybe Text,-    globalFontFamily :: Maybe [Text],-    globalFontStyle :: Maybe Svg.FontStyle,-    globalAlignment :: Svg.Alignment-  }-  deriving (Eq, Show, Generic)---- |-defaultReanimateConfig :: ReanimateConfig-defaultReanimateConfig = ReanimateConfig 5 (Just "black") (Just ["Arial", "Helvetica", "sans-serif"]) (Just FontStyleNormal) AlignxMinYMin---- | Animate a ChartSvg animation.-animChartSvg :: ReanimateConfig -> (Double -> ChartSvg) -> Animation-animChartSvg cfg cs =-  mkAnimation (view #duration cfg) $ toTreeA cfg cs--globalAtts :: ReanimateConfig -> Svg.DrawAttributes-globalAtts cfg =-  mempty-    & maybe-      id-      (\x -> fontFamily .~ Just (fmap unpack x))-      (view #globalFontFamily cfg)-      . maybe-        id-        (\x -> fontStyle .~ Just x)-        (view #globalFontStyle cfg)---- | The output of the raw translation of ChartSvg to a reanimate svg tree.-data ChartReanimate = ChartReanimate-  { trees :: [Tree],-    box :: Rect Double,-    size :: C.Point Double-  }-  deriving (Eq, Show, Generic)---- | Render a 'ChartSvg' to 'Tree's, the fitted chart viewbox, and the suggested SVG dimensions-chartReanimate :: ChartSvg -> ChartReanimate-chartReanimate cs = ChartReanimate ts rect' size'-  where-    (cl'', rect', size') = renderToCRS so cl'-    so = view #svgOptions cs-    cl' = renderToCharts cs-    ts = tree <$> cl''---- | convert a ChartSvg animation to a Tree animation.-toTreeA :: ReanimateConfig -> (Double -> ChartSvg) -> Double -> Tree-toTreeA cfg cs x =-  reCss (cs x & view (#svgOptions . #cssOptions)) $-    mkGroup $-      (mkBackground . unpack <$> maybeToList (view #background cfg))-        <> [ ( \cr ->-                 let (Rect x z y w) =-                       view #box cr-                  in withViewBox'-                       (x, y, z - x, w - y)-                       (PreserveAspectRatio False (view #globalAlignment cfg) Nothing)-                       $ flipYAxis $-                         groupTrees (globalAtts cfg) $ view #trees cr-             )-               $ chartReanimate-                 (cs x)-           ]--reCss :: CssOptions -> (Tree -> Tree)-reCss NoCssOptions = id-reCss UseCssCrisp = Svg.cssApply (Svg.cssRulesOfText "* { shape-rendering: crispEdges; }")-reCss UseGeometricPrecision = Svg.cssApply (Svg.cssRulesOfText "* { shape-rendering: geometricPrecision; }")--withViewBox' :: (Double, Double, Double, Double) -> Svg.PreserveAspectRatio -> Tree -> Tree-withViewBox' vbox par child =-  Re.translate (-screenWidth / 2) (-screenHeight / 2) $-    svgTree-      Document-        { _documentViewBox = Just vbox,-          _documentWidth = Just (Num screenWidth),-          _documentHeight = Just (Num screenHeight),-          _documentElements = [child],-          _documentDescription = "",-          _documentLocation = "",-          _documentAspectRatio = par-        }---- | Rectange svg-treeRect :: Rect Double -> Tree-treeRect a =-  RectangleTree $ rectSvg a defaultSvg---- | Text svg-treeText :: TextStyle -> Text -> C.Point Double -> Tree-treeText s t p =-  TextTree Nothing (textAt (pointSvg p) t)-    & maybe id (\x -> drawAttributes %~ rotatePDA x p) (s ^. #rotation)---- | GlyphShape to svg Tree-treeShape :: GlyphShape -> Double -> C.Point Double -> Tree-treeShape CircleGlyph s p =-  CircleTree $ Circle mempty (pointSvg p) (Num (s / 2))-treeShape SquareGlyph s p = treeRect (move p ((s *) <$> one))-treeShape (RectSharpGlyph x') s p =-  treeRect (move p (C.scale (C.Point s (x' * s)) one))-treeShape (RectRoundedGlyph x'' rx ry) s p =-  RectangleTree-    . rectSvg (addPoint p $ C.scale (C.Point s (x'' * s)) one)-    . (rectCornerRadius .~ (Just $ Num rx, Just $ Num ry))-    $ defaultSvg-treeShape (TriangleGlyph (C.Point xa ya) (C.Point xb yb) (C.Point xc yc)) s p =-  PolygonTree-    . (polygonPoints .~ rps)-    $ (drawAttributes %~ translateDA p) defaultSvg-  where-    rps =-      [ V2 (s * xa) (-s * ya),-        V2 (s * xb) (-s * yb),-        V2 (s * xc) (-s * yc)-      ]-treeShape (EllipseGlyph x') s p =-  EllipseTree $-    Ellipse-      mempty-      (pointSvg p)-      (Num $ s / 2)-      (Num $ (x' * s) / 2)-treeShape (VLineGlyph x') s (C.Point x y) =-  LineTree $-    Line-      (mempty & strokeWidth .~ Just (Num x'))-      (pointSvg (C.Point x (y - s / 2)))-      (pointSvg (C.Point x (y + s / 2)))-treeShape (HLineGlyph x') s (C.Point x y) =-  LineTree $-    Line-      (mempty & strokeWidth .~ Just (Num x'))-      (pointSvg (C.Point (x - s / 2) y))-      (pointSvg (C.Point (x + s / 2) y))-treeShape (PathGlyph path) s p =-  Svg.PathTree-    ( Svg.Path-        ( Svg.defaultSvg-            & (Svg.drawAttributes %~ scaleDA (C.Point s s) . translateDA p)-        )-        (either mempty id $ A.parseOnly Svg.pathParser path)-    )---- | GlyphStyle to svg Tree-treeGlyph :: GlyphStyle -> C.Point Double -> Tree-treeGlyph s p =-  treeShape (s ^. #shape) (s ^. #size) p-    & maybe id (\x -> drawAttributes %~ rotatePDA x p) (s ^. #rotation)---- | line svg-treeLine :: [C.Point Double] -> Tree-treeLine xs =-  PolyLineTree-    . (polyLinePoints .~ ((\(C.Point x y) -> V2 x (-y)) <$> xs))-    $ defaultSvg---- | GlyphStyle to svg Tree-treePath :: [PathInfo Double] -> [C.Point Double] -> Tree-treePath s p =-  PathTree $-    Path-      mempty-      ( zipWith-          (curry toPathCommand)-          s-          (fmap (\(C.Point x y) -> C.Point x (-y)) p)-      )---- | convert a 'Chart' to a 'Tree'-tree :: Chart Double -> Tree-tree (Chart (TextA s ts) xs) =-  groupTrees (daText s) (zipWith (treeText s) ts (toPoint <$> xs))-tree (Chart (GlyphA s) xs) =-  groupTrees (daGlyph s) (treeGlyph s . toPoint <$> xs)-tree (Chart (LineA s) xs) =-  groupTrees (daLine s) [treeLine (toPoint <$> xs)]-tree (Chart (RectA s) xs) =-  groupTrees (daRect s) (treeRect <$> (toRect <$> xs))-tree (Chart (PathA s pis) xs) =-  groupTrees (daPath s) [treePath pis (toPoint <$> xs)]-tree (Chart BlankA _) =-  groupTrees mempty []---- | add drawing attributes as a group svg wrapping a [Tree]-groupTrees :: DrawAttributes -> [Tree] -> Tree-groupTrees da' tree' =-  GroupTree (drawAttributes %~ (<> da') $ groupChildren .~ tree' $ defaultSvg)---- * DrawAttribute computations--daRect :: RectStyle -> DrawAttributes-daRect o =-  mempty-    & (strokeWidth .~ Just (Num (o ^. #borderSize)))-    & (strokeColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #borderColor)))-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #borderColor))-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))--daText :: () => TextStyle -> DrawAttributes-daText o =-  mempty-    & (fontSize .~ Just (Num (o ^. #size)))-    & (strokeWidth .~ Just (Num 0))-    & (strokeColor .~ Just FillNone)-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))-    & (textAnchor .~ Just (toTextAnchor $ o ^. #anchor))-  where-    toTextAnchor :: Anchor -> Svg.TextAnchor-    toTextAnchor AnchorMiddle = TextAnchorMiddle-    toTextAnchor AnchorStart = TextAnchorStart-    toTextAnchor AnchorEnd = TextAnchorEnd--daGlyph :: GlyphStyle -> DrawAttributes-daGlyph o =-  mempty-    & (strokeWidth .~ Just (Num (o ^. #borderSize)))-    & ( strokeColor-          .~ Just (ColorRef (toPixelRGBA8 $ o ^. #borderColor))-      )-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #borderColor))-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))-    & maybe id (\(C.Point x y) -> transform ?~ [Translate x (-y)]) (o ^. #translate)--daLine :: LineStyle -> DrawAttributes-daLine o =-  mempty-    & (strokeWidth .~ Just (Num (o ^. #width)))-    & (strokeColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #color))-    & (fillColor .~ Just FillNone)-    & maybe-      id-      (\x -> strokeLineCap .~ Just (fromLineCap' x))-      (o ^. #linecap)-    & maybe-      id-      (\x -> strokeLineJoin .~ Just (fromLineJoin' x))-      (o ^. #linejoin)-    & maybe-      id-      (\x -> strokeOffset .~ Just (Num x))-      (o ^. #dashoffset)-    & maybe-      id-      (\xs -> strokeDashArray .~ Just (Num <$> xs))-      (o ^. #dasharray)--fromLineCap' :: LineCap -> Svg.Cap-fromLineCap' LineCapButt = CapButt-fromLineCap' LineCapRound = CapRound-fromLineCap' LineCapSquare = CapSquare--fromLineJoin' :: C.LineJoin -> Svg.LineJoin-fromLineJoin' LineJoinMiter = JoinMiter-fromLineJoin' LineJoinBevel = JoinBevel-fromLineJoin' LineJoinRound = JoinRound--daPath :: PathStyle -> DrawAttributes-daPath o =-  mempty-    & (strokeWidth .~ Just (Num (o ^. #borderSize)))-    & ( strokeColor-          .~ Just (ColorRef (toPixelRGBA8 $ o ^. #borderColor))-      )-    & (strokeOpacity ?~ realToFrac (opac $ o ^. #borderColor))-    & (fillColor .~ Just (ColorRef (toPixelRGBA8 $ o ^. #color)))-    & (fillOpacity ?~ realToFrac (opac $ o ^. #color))---- * svg primitives---- | Convert to reanimate color primitive.-toPixelRGBA8 :: Colour -> PixelRGBA8-toPixelRGBA8 (Colour r g b o) =-  PixelRGBA8-    (fromIntegral (floor $ r * 256 :: Int))-    (fromIntegral (floor $ g * 256 :: Int))-    (fromIntegral (floor $ b * 256 :: Int))-    (fromIntegral (floor $ o * 256 :: Int))---- | convert a point to the svg co-ordinate system--- The svg coordinate system has the y-axis going from top to bottom.-pointSvg :: C.Point Double -> (Svg.Number, Svg.Number)-pointSvg (C.Point x y) = (Num x, Num (-y))---- | A DrawAttributes to rotate around a point by x degrees.-rotatePDA :: (HasDrawAttributes s) => Double -> C.Point Double -> s -> s-rotatePDA a (C.Point x y) s = s & transform %~ (Just . maybe r (<> r))-  where-    r = [Rotate (-a * 180 / pi) (Just (x, -y))]---- | A DrawAttributes to translate by a Point.-translateDA :: (HasDrawAttributes s) => C.Point Double -> s -> s-translateDA (C.Point x' y') =-  transform-    %~ (\x -> Just $ maybe [Translate x' (-y')] (<> [Translate x' (-y')]) x)---- | A DrawAttributes to translate by a Point.-scaleDA :: (HasDrawAttributes s) => C.Point Double -> s -> s-scaleDA (C.Point x' y') =-  transform-    %~ (\x -> Just $ maybe [Scale x' (Just y')] (<> [Scale x' (Just y')]) x)---- | convert a Rect to the svg co-ordinate system-rectSvg :: Rect Double -> Svg.Rectangle -> Svg.Rectangle-rectSvg (Rect x z y w) =-  (rectUpperLeftCorner .~ (Num x, Num (-w)))-    . (rectWidth .~ Just (Num (z - x)))-    . (rectHeight .~ Just (Num (w - y)))---- | import a Tree from a file-treeFromFile :: FilePath -> IO Tree-treeFromFile fp = do-  t <- Svg.loadSvgFile fp-  pure $ maybe Svg.None Re.unbox t
− src/Chart/Render.hs
@@ -1,411 +0,0 @@-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE NoImplicitPrelude #-}-{-# OPTIONS_GHC -Wall #-}---- | Rendering charts to SVG.------ Note that type signatures are tightened to Double as sane SVG rendering suggests.-module Chart.Render-  ( ChartSvg (..),-    renderToCharts,-    renderToCRS,-    chartSvg,-    chartSvgDefault,-    chartSvgHud,-    renderChartsWith,-    renderHudChart,-    writeChartSvg,-    writeChartSvgDefault,-    writeChartSvgHud,-    svg2Tag,-    cssCrisp,-    geometricPrecision,-    svg,-    terms,-    makeAttribute,--    -- * low-level conversions-    attsRect,-    attsText,-    attsGlyph,-    attsLine,-    attsPath,-    svgShape,-  )-where--import Chart.Types-import Control.Lens hiding (transform)-import Data.Colour-import Data.Generics.Labels ()-import Data.Path-import Data.Text (Text, pack, unpack)-import qualified Data.Text as Text-import qualified Data.Text.Lazy as Lazy-import Lucid-import Lucid.Base-import qualified Lucid.Base as Lucid-import NumHask.Prelude-import NumHask.Space as NH hiding (Element)---- $setup--- >>> import Control.Lens--- >>> import Chart---- | Specification of a chart for rendering to SVG-data ChartSvg = ChartSvg-  { svgOptions :: SvgOptions,-    hudOptions :: HudOptions,-    hudList :: [Hud Double],-    chartList :: [Chart Double]-  }-  deriving (Generic)--instance Semigroup ChartSvg where-  (<>) (ChartSvg _ o h c) (ChartSvg s' o' h' c') =-    ChartSvg s' (o <> o') (h <> h') (c <> c')--instance Monoid ChartSvg where-  mempty = ChartSvg defaultSvgOptions mempty [] []---- * rendering---- | @svg@ element + svg 2 attributes-svg2Tag :: Term [Attribute] (s -> t) => s -> t-svg2Tag m =-  svg_-    [ Lucid.makeAttribute "xmlns" "http://www.w3.org/2000/svg",-      Lucid.makeAttribute "xmlns:xlink" "http://www.w3.org/1999/xlink"-    ]-    m--renderToSvg :: CssOptions -> Point Double -> Rect Double -> [Chart Double] -> Html ()-renderToSvg csso (Point w' h') (Rect x z y w) cs =-  with-    ( svg2Tag-        ( cssText csso-            <> mconcat (svg <$> cs)-        )-    )-    [ width_ (pack $ show w'),-      height_ (pack $ show h'),-      makeAttribute "viewBox" (pack $ show x <> " " <> show (-w) <> " " <> show (z - x) <> " " <> show (w - y))-    ]--cssText :: CssOptions -> Html ()-cssText UseCssCrisp = cssCrisp-cssText UseGeometricPrecision = geometricPrecision-cssText NoCssOptions = mempty---- | crisp edges css-cssCrisp :: Html ()-cssCrisp = style_ [type_ "text/css"] ("* { shape-rendering: crispEdges; }" :: Text)---- | crisp edges css-geometricPrecision :: Html ()-geometricPrecision = style_ [type_ "text/css"] ("* { shape-rendering: geometricPrecision; }" :: Text)--makeCharts :: ChartAspect -> HudOptions -> [Chart Double] -> [Chart Double]-makeCharts asp ho cs =-  let (hs', hc') = makeHud (padBox $ dataBoxes cs) ho-   in runHud (initialCanvas asp (cs <> hc')) hs' (cs <> hc')--renderToCRS :: SvgOptions -> [Chart Double] -> ([Chart Double], Rect Double, Point Double)-renderToCRS so cs = (cs', rect', size')-  where-    rect' = styleBoxesS cs' & maybe id padRect (so ^. #outerPad)-    cs' =-      cs-        & runHud penult [chartAspectHud (so ^. #chartAspect)]-        & maybe-          id-          (\x -> frameChart x (fromMaybe 0 (so ^. #innerPad)))-          (so ^. #chartFrame)-    Point w h = NH.width rect'-    size' = Point ((so ^. #svgHeight) / h * w) (so ^. #svgHeight)-    penult = case so ^. #chartAspect of-      FixedAspect _ -> styleBoxesS cs-      CanvasAspect _ -> dataBoxesS cs-      ChartAspect -> styleBoxesS cs-      UnadjustedAspect -> dataBoxesS cs---- | Consume the ChartSvg and produce the combined huds and charts as a chart list.-renderToCharts :: ChartSvg -> [Chart Double]-renderToCharts cs = makeCharts (view (#svgOptions . #chartAspect) cs) (view #hudOptions cs) (view #chartList cs)---- | render Charts with the supplied options.-renderChartsWith :: SvgOptions -> [Chart Double] -> Text-renderChartsWith so cs =-  Lazy.toStrict $ renderText (renderToSvg (so ^. #cssOptions) size' rect' cs'')-  where-    rect' = styleBoxesS cs' & maybe id padRect (so ^. #outerPad)-    cs' =-      cs-        & runHud penult [chartAspectHud (so ^. #chartAspect)]-        & maybe-          id-          (\x -> frameChart x (fromMaybe 0 (so ^. #innerPad)))-          (so ^. #chartFrame)-    cs'' =-      foldMap (\c -> [Chart (RectA (blob c)) [RectXY rect']]) (so ^. #background) <> cs'-    Point w h = NH.width rect'-    size' = Point ((so ^. #svgHeight) / h * w) (so ^. #svgHeight)-    penult = case so ^. #chartAspect of-      FixedAspect _ -> styleBoxesS cs-      CanvasAspect _ -> dataBoxesS cs-      ChartAspect -> styleBoxesS cs-      UnadjustedAspect -> dataBoxesS cs---- | render charts with the supplied svg options and huds-renderHudChart :: SvgOptions -> [Hud Double] -> [Chart Double] -> Text-renderHudChart so hs cs = renderChartsWith so (runHud (initialCanvas (so ^. #chartAspect) cs) hs cs)---- | Render a chart using the supplied svg and hud config.------ >>> chartSvg mempty--- "<svg height=\"300.0\" width=\"300.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.52 -0.52 1.04 1.04\"></svg>"-chartSvg :: ChartSvg -> Text-chartSvg (ChartSvg so ho hs cs) = renderHudChart so (hs <> hs') (cs <> cs')-  where-    (hs', cs') = makeHud (padBox $ dataBoxes cs) ho---- | Render a chart using the default svg options and no hud.------ >>> chartSvgDefault [] == chartSvg mempty--- True-chartSvgDefault :: [Chart Double] -> Text-chartSvgDefault cs = chartSvg $ mempty & #chartList .~ cs---- | Render a chart using default svg and hud options.------ >>> chartSvgHud [] == (chartSvg $ mempty & #hudOptions .~ defaultHudOptions)--- True-chartSvgHud :: [Chart Double] -> Text-chartSvgHud cs =-  chartSvg $-    mempty-      & #hudOptions .~ defaultHudOptions-      & #chartList .~ cs---- | Write to a file.-writeChartSvg :: FilePath -> ChartSvg -> IO ()-writeChartSvg fp cs =-  writeFile fp (unpack $ chartSvg cs)---- | Write a chart to a file with default svg options and no hud.-writeChartSvgDefault :: FilePath -> [Chart Double] -> IO ()-writeChartSvgDefault fp cs = writeChartSvg fp (mempty & #chartList .~ cs)---- | Write a chart to a file with default svg and hud options.-writeChartSvgHud :: FilePath -> [Chart Double] -> IO ()-writeChartSvgHud fp cs =-  writeChartSvg-    fp-    ( mempty-        & #chartList .~ cs-        & #hudOptions .~ defaultHudOptions-    )---- | Rectangle svg-svgRect :: Rect Double -> Lucid.Html ()-svgRect (Rect x z y w) =-  terms-    "rect"-    [ width_ (pack $ show $ z - x),-      height_ (pack $ show $ w - y),-      term "x" (pack $ show x),-      term "y" (pack $ show $ -w)-    ]---- | Text svg-svgText :: TextStyle -> Text -> Point Double -> Lucid.Html ()-svgText s t p@(Point x y) =-  term-    "text"-    ( [ term "x" (pack $ show x),-        term "y" (pack $ show $ -y)-      ]-        <> foldMap (\x' -> [term "transform" (toRotateText x' p)]) (s ^. #rotation)-    )-    (toHtmlRaw t)---- | line svg-svgLine :: [Point Double] -> Lucid.Html ()-svgLine [] = mempty-svgLine xs = terms "polyline" [term "points" (toPointsText xs)]-  where-    toPointsText xs' = Text.intercalate "\n" $ (\(Point x y) -> pack (show x <> "," <> show (-y))) <$> xs'---- | GlyphShape to svg Tree-svgShape :: GlyphShape -> Double -> Point Double -> Lucid.Html ()-svgShape CircleGlyph s (Point x y) =-  terms-    "circle"-    [ term "cx" (pack $ show x),-      term "cy" (pack $ show $ -y),-      term "r" (pack $ show $ 0.5 * s)-    ]-svgShape SquareGlyph s p =-  svgRect (move p ((s *) <$> one))-svgShape (RectSharpGlyph x') s p =-  svgRect (move p (NH.scale (Point s (x' * s)) one))-svgShape (RectRoundedGlyph x' rx ry) s p =-  terms-    "rect"-    [ term "width" (pack $ show $ z - x),-      term "height" (pack $ show $ w - y),-      term "x" (pack $ show x),-      term "y" (pack $ show $ -w),-      term "rx" (pack $ show rx),-      term "ry" (pack $ show ry)-    ]-  where-    (Rect x z y w) = move p (NH.scale (Point s (x' * s)) one)-svgShape (TriangleGlyph (Point xa ya) (Point xb yb) (Point xc yc)) s p =-  terms-    "polygon"-    [ term "transform" (toTranslateText p),-      term "points" (pack $ show (s * xa) <> "," <> show (-(s * ya)) <> " " <> show (s * xb) <> "," <> show (-(s * yb)) <> " " <> show (s * xc) <> "," <> show (-(s * yc)))-    ]-svgShape (EllipseGlyph x') s (Point x y) =-  terms-    "ellipse"-    [ term "cx" ((pack . show) x),-      term "cy" ((pack . show) $ -y),-      term "rx" ((pack . show) $ 0.5 * s),-      term "ry" ((pack . show) $ 0.5 * s * x')-    ]-svgShape (VLineGlyph _) s (Point x y) =-  terms "polyline" [term "points" (pack $ show x <> "," <> show (-(y - s / 2)) <> "\n" <> show x <> "," <> show (-(y + s / 2)))]-svgShape (HLineGlyph _) s (Point x y) =-  terms "polyline" [term "points" (pack $ show (x - s / 2) <> "," <> show (-y) <> "\n" <> show (x + s / 2) <> "," <> show (-y))]-svgShape (PathGlyph path) s p =-  terms "path" [term "d" path, term "transform" (toTranslateText p <> " " <> toScaleText s)]---- | GlyphStyle to svg Tree-svgGlyph :: GlyphStyle -> Point Double -> Lucid.Html ()-svgGlyph s p =-  svgShape (s ^. #shape) (s ^. #size) p-    & maybe id (\r -> term "g" [term "transform" (toRotateText r p)]) (s ^. #rotation)---- | Path svg-svgPath :: [PathInfo Double] -> [Point Double] -> Lucid.Html ()-svgPath _ [] = mempty-svgPath _ [_] = mempty-svgPath infos ps =-  terms "path" [term "d" (toPathAbsolutes (zip infos ps))]--svgAtts :: Annotation -> [Attribute]-svgAtts (TextA s _) = attsText s-svgAtts (GlyphA s) = attsGlyph s-svgAtts (LineA s) = attsLine s-svgAtts (RectA s) = attsRect s-svgAtts (PathA s _) = attsPath s-svgAtts BlankA = mempty--svgHtml :: Chart Double -> Lucid.Html ()-svgHtml (Chart (TextA s ts) xs) =-  mconcat $ zipWith (\t p -> svgText s t (toPoint p)) ts xs-svgHtml (Chart (GlyphA s) xs) =-  mconcat $ svgGlyph s . toPoint <$> xs-svgHtml (Chart (LineA _) xs) =-  svgLine $ toPoint <$> xs-svgHtml (Chart (RectA _) xs) =-  mconcat $ svgRect . toRect <$> xs-svgHtml (Chart (PathA _ infos) xs) =-  svgPath infos $ toPoint <$> xs-svgHtml (Chart BlankA _) = mempty---- | Low-level conversion of a Chart to svg-svg :: Chart Double -> Lucid.Html ()-svg c = term "g" (svgAtts $ c ^. #annotation) (svgHtml c)---- | Make Lucid Html given term and attributes-terms :: Text -> [Lucid.Attribute] -> Lucid.Html ()-terms t = with $ makeXmlElementNoEnd t---- | RectStyle to Attributes-attsRect :: RectStyle -> [Lucid.Attribute]-attsRect o =-  [ term "stroke-width" (pack $ show $ o ^. #borderSize),-    term "stroke" (hex $ o ^. #borderColor),-    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),-    term "fill" (hex $ o ^. #color),-    term "fill-opacity" (pack $ show $ opac $ o ^. #color)-  ]---- | TextStyle to Attributes-attsText :: TextStyle -> [Lucid.Attribute]-attsText o =-  [ term "stroke-width" "0.0",-    term "stroke" "none",-    term "fill" (toHex $ o ^. #color),-    term "fill-opacity" (pack $ show $ opac $ o ^. #color),-    term "font-size" (pack $ show $ o ^. #size),-    term "text-anchor" (toTextAnchor $ o ^. #anchor)-  ]-  where-    toTextAnchor :: Anchor -> Text-    toTextAnchor AnchorMiddle = "middle"-    toTextAnchor AnchorStart = "start"-    toTextAnchor AnchorEnd = "end"---- | GlyphStyle to Attributes-attsGlyph :: GlyphStyle -> [Lucid.Attribute]-attsGlyph o =-  [ term "stroke-width" (pack $ show $ o ^. #borderSize),-    term "stroke" (toHex $ o ^. #borderColor),-    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),-    term "fill" (toHex $ o ^. #color),-    term "fill-opacity" (pack $ show $ opac $ o ^. #color)-  ]-    <> foldMap ((: []) . term "transform" . toTranslateText) (o ^. #translate)---- | LineStyle to Attributes-attsLine :: LineStyle -> [Lucid.Attribute]-attsLine o =-  [ term "stroke-width" (pack $ show $ o ^. #width),-    term "stroke" (toHex $ o ^. #color),-    term "stroke-opacity" (pack $ show $ opac $ o ^. #color),-    term "fill" "none"-  ]-    <> foldMap (\x -> [term "stroke-linecap" (fromLineCap x)]) (o ^. #linecap)-    <> foldMap (\x -> [term "stroke-linejoin" (fromLineJoin x)]) (o ^. #linejoin)-    <> foldMap (\x -> [term "stroke-dasharray" (fromDashArray x)]) (o ^. #dasharray)-    <> foldMap (\x -> [term "stroke-dashoffset" (pack $ show x)]) (o ^. #dashoffset)---- | PathStyle to Attributes-attsPath :: PathStyle -> [Lucid.Attribute]-attsPath o =-  [ term "stroke-width" (pack $ show $ o ^. #borderSize),-    term "stroke" (hex $ o ^. #borderColor),-    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),-    term "fill" (hex $ o ^. #color),-    term "fill-opacity" (pack $ show $ opac $ o ^. #color)-  ]---- | includes a flip of the y dimension.-toTranslateText :: Point Double -> Text-toTranslateText (Point x y) =-  pack $-    "translate(" <> show x <> ", " <> show (-y) <> ")"---- | includes reference changes:------ - from radians to degrees------ - from counter-clockwise is a positive rotation to clockwise is positive------ - flip y dimension-toRotateText :: Double -> Point Double -> Text-toRotateText r (Point x y) =-  pack $-    "rotate(" <> show (-r * 180 / pi) <> ", " <> show x <> ", " <> show (-y) <> ")"--toScaleText :: Double -> Text-toScaleText x =-  pack $-    "scale(" <> show x <> ")"
+ src/Chart/Style.hs view
@@ -0,0 +1,354 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE OverloadedStrings #-}+{-# OPTIONS_GHC -Wall #-}++-- | Stylistic or syntactical options for chart elements.+--+module Chart.Style+  ( -- * RectStyle+    RectStyle (..),+    defaultRectStyle,+    blob,+    clear,+    border,++    -- * TextStyle+    TextStyle (..),+    defaultTextStyle,+    styleBoxText,+    ScaleX (..),++    -- * GlyphStyle+    GlyphStyle (..),+    defaultGlyphStyle,+    styleBoxGlyph,+    gpalette1,+    ScaleBorder (..),+    GlyphShape (..),+    glyphText,++    -- * LineStyle+    LineStyle (..),+    defaultLineStyle,+    LineCap (..),+    fromLineCap,+    toLineCap,+    LineJoin (..),+    fromLineJoin,+    toLineJoin,+    fromDashArray,+    Anchor (..),+    fromAnchor,+    toAnchor,++    -- * PathStyle+    PathStyle (..),+    defaultPathStyle,+  )+where++import Chart.Data+import Data.Colour+import qualified Data.List as List+import Data.Maybe+import Data.Path+import Data.Path.Parser+import Data.String+import Data.Text (Text, pack)+import qualified Data.Text as Text+import GHC.Generics+import Optics.Core+import Text.HTML.TagSoup (maybeTagText, parseTags)+import Prelude++-- $setup+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings+-- >>> import Chart+-- >>> import Optics.Core++-- | Rectangle styling+--+-- >>> defaultRectStyle+-- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.02 0.73 0.80 0.10}+--+-- ![unit example](other/unit.svg)+data RectStyle = RectStyle+  { borderSize :: Double,+    borderColor :: Colour,+    color :: Colour+  }+  deriving (Show, Eq, Generic)++-- | the style+defaultRectStyle :: RectStyle+defaultRectStyle = RectStyle 0.01 (palette1a 1 1) (palette1a 0 0.1)++-- | solid rectangle, no border+--+-- >>> blob black+-- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 1.00}+blob :: Colour -> RectStyle+blob = RectStyle 0 transparent++-- | transparent rect+--+-- >>> clear+-- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}+clear :: RectStyle+clear = RectStyle 0 transparent transparent++-- | transparent rectangle, with border+--+-- >>> border 0.01 transparent+-- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}+border :: Double -> Colour -> RectStyle+border s c = RectStyle s c transparent++-- | Text styling+--+-- >>> defaultTextStyle+-- TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.45, vsize = 1.1, vshift = -0.25, rotation = Nothing, scalex = ScaleX, frame = Nothing}+data TextStyle = TextStyle+  { size :: Double,+    color :: Colour,+    anchor :: Anchor,+    hsize :: Double,+    vsize :: Double,+    vshift :: Double,+    rotation :: Maybe Double,+    scalex :: ScaleX,+    frame :: Maybe RectStyle+  }+  deriving (Show, Eq, Generic)++-- | Whether to scale text given X-axis scaling+data ScaleX = ScaleX | NoScaleX deriving (Eq, Show, Generic)++-- | position anchor+data Anchor = AnchorMiddle | AnchorStart | AnchorEnd deriving (Eq, Show, Generic)++-- | text+fromAnchor :: (IsString s) => Anchor -> s+fromAnchor AnchorMiddle = "Middle"+fromAnchor AnchorStart = "Start"+fromAnchor AnchorEnd = "End"++-- | from text+toAnchor :: (Eq s, IsString s) => s -> Anchor+toAnchor "Middle" = AnchorMiddle+toAnchor "Start" = AnchorStart+toAnchor "End" = AnchorEnd+toAnchor _ = AnchorMiddle++-- | the offical text style+defaultTextStyle :: TextStyle+defaultTextStyle =+  TextStyle 0.12 dark AnchorMiddle 0.45 1.1 (-0.25) Nothing ScaleX Nothing++-- | the extra area from text styling+styleBoxText ::+  TextStyle ->+  Text ->+  Point Double ->+  Rect Double+styleBoxText o t p = mpad $ move p $ maybe flat (`rotationBound` flat) (o ^. #rotation)+  where+    flat = Rect ((-x' / 2.0) + x' * a') (x' / 2 + x' * a') (-y' / 2 + n1') (y' / 2 + n1')+    s = o ^. #size+    h = o ^. #hsize+    v = o ^. #vsize+    n1 = o ^. #vshift+    x' = s * h * fromIntegral (sum $ maybe 0 Text.length . maybeTagText <$> parseTags t)+    y' = s * v+    n1' = -s * n1+    a' = case o ^. #anchor of+      AnchorStart -> 0.5+      AnchorEnd -> -0.5+      AnchorMiddle -> 0.0+    mpad = case view #frame o of+      Nothing -> id+      Just f -> padRect (0.5 * view #borderSize f * view #size o)++-- | Glyph styling+--+-- >>> defaultGlyphStyle+-- GlyphStyle {size = 3.0e-2, color = Colour 0.02 0.73 0.80 0.20, borderColor = Colour 0.02 0.29 0.48 1.00, borderSize = 3.0e-3, shape = SquareGlyph, rotation = Nothing, translate = Nothing}+--+-- ![glyph example](other/glyphs.svg)+data GlyphStyle = GlyphStyle+  { -- | glyph radius+    size :: Double,+    -- | fill color+    color :: Colour,+    -- | stroke color+    borderColor :: Colour,+    -- | stroke width (adds a bit to the bounding box)+    borderSize :: Double,+    shape :: GlyphShape,+    rotation :: Maybe Double,+    translate :: Maybe (Point Double)+  }+  deriving (Show, Eq, Generic)++-- | the offical glyph style+defaultGlyphStyle :: GlyphStyle+defaultGlyphStyle =+  GlyphStyle+    0.03+    (palette1a 0 0.2)+    (set lightness' 0.4 $ palette1a 1 1)+    0.003+    SquareGlyph+    Nothing+    Nothing++-- | Should glyph borders be scaled?+data ScaleBorder = ScaleBorder | NoScaleBorder deriving (Show, Eq, Generic)++-- | glyph shapes+data GlyphShape+  = CircleGlyph+  | SquareGlyph+  | EllipseGlyph Double+  | RectSharpGlyph Double+  | RectRoundedGlyph Double Double Double+  | -- | line width is determined by borderSize+    TriangleGlyph (Point Double) (Point Double) (Point Double)+  | VLineGlyph+  | HLineGlyph+  | PathGlyph Text ScaleBorder+  deriving (Show, Eq, Generic)++-- | textifier+glyphText :: GlyphShape -> Text+glyphText sh =+  case sh of+    CircleGlyph -> "Circle"+    SquareGlyph -> "Square"+    TriangleGlyph {} -> "Triangle"+    EllipseGlyph _ -> "Ellipse"+    RectSharpGlyph _ -> "RectSharp"+    RectRoundedGlyph {} -> "RectRounded"+    VLineGlyph -> "VLine"+    HLineGlyph -> "HLine"+    PathGlyph _ _ -> "Path"++-- | the extra area from glyph styling+styleBoxGlyph :: GlyphStyle -> Rect Double+styleBoxGlyph s = move p' $+  rot' $+    sw $ case sh of+      CircleGlyph -> (sz *) <$> one+      SquareGlyph -> (sz *) <$> one+      EllipseGlyph a -> scale (Point sz (a * sz)) one+      RectSharpGlyph a -> scale (Point sz (a * sz)) one+      RectRoundedGlyph a _ _ -> scale (Point sz (a * sz)) one+      VLineGlyph -> scale (Point (s ^. #borderSize) sz) one+      HLineGlyph -> scale (Point sz (s ^. #borderSize)) one+      TriangleGlyph a b c -> (sz *) <$> unsafeSpace1 ([a, b, c] :: [Point Double])+      PathGlyph path' _ -> maybe zero (fmap (sz *)) (pathBoxes . svgToPathData $ path')+  where+    sh = s ^. #shape+    sz = s ^. #size+    sw = padRect (0.5 * s ^. #borderSize)+    p' = fromMaybe (Point 0.0 0.0) (s ^. #translate)+    rot' = maybe id rotationBound (view #rotation s)++-- | Infinite list of glyph shapes+--+-- >>> gpalette1 0+-- CircleGlyph+gpalette1 :: Int -> GlyphShape+gpalette1 x = cycle gpalette1_ List.!! x++-- | finite list of glyphs+gpalette1_ :: [GlyphShape]+gpalette1_ =+  [ CircleGlyph,+    SquareGlyph,+    RectSharpGlyph 0.75,+    RectRoundedGlyph 0.75 0.01 0.01,+    EllipseGlyph 0.75,+    VLineGlyph,+    HLineGlyph,+    TriangleGlyph (Point 0.0 0.0) (Point 1 1) (Point 1 0),+    PathGlyph "M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z" ScaleBorder+  ]++-- | line cap style+data LineCap = LineCapButt | LineCapRound | LineCapSquare deriving (Eq, Show, Generic)++-- | textifier+fromLineCap :: (IsString s) => LineCap -> s+fromLineCap LineCapButt = "butt"+fromLineCap LineCapRound = "round"+fromLineCap LineCapSquare = "square"++-- | readifier+toLineCap :: (Eq s, IsString s) => s -> LineCap+toLineCap "butt" = LineCapButt+toLineCap "round" = LineCapRound+toLineCap "square" = LineCapSquare+toLineCap _ = LineCapButt++-- | line cap style+data LineJoin = LineJoinMiter | LineJoinBevel | LineJoinRound deriving (Eq, Show, Generic)++-- | textifier+fromLineJoin :: (IsString s) => LineJoin -> s+fromLineJoin LineJoinMiter = "miter"+fromLineJoin LineJoinBevel = "bevel"+fromLineJoin LineJoinRound = "round"++-- | readifier+toLineJoin :: (Eq s, IsString s) => s -> LineJoin+toLineJoin "miter" = LineJoinMiter+toLineJoin "bevel" = LineJoinBevel+toLineJoin "round" = LineJoinRound+toLineJoin _ = LineJoinMiter++-- | Convert a dash representation from a list to text+fromDashArray :: [Double] -> Text+fromDashArray xs = Text.intercalate " " $ pack . show <$> xs++-- | line style+--+-- >>> defaultLineStyle+-- LineStyle {size = 1.2e-2, color = Colour 0.05 0.05 0.05 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}+--+-- ![line example](other/line.svg)+--+-- See also <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute>+data LineStyle = LineStyle+  { size :: Double,+    color :: Colour,+    linecap :: Maybe LineCap,+    linejoin :: Maybe LineJoin,+    dasharray :: Maybe [Double],+    dashoffset :: Maybe Double+  }+  deriving (Show, Eq, Generic)++-- | the official default line style+defaultLineStyle :: LineStyle+defaultLineStyle = LineStyle 0.012 dark Nothing Nothing Nothing Nothing++-- | Path styling+--+-- >>> defaultPathStyle+-- PathStyle {borderSize = 1.0e-2, borderColor = Colour 0.02 0.29 0.48 1.00, color = Colour 0.66 0.07 0.55 1.00}+data PathStyle = PathStyle+  { borderSize :: Double,+    borderColor :: Colour,+    color :: Colour+  }+  deriving (Show, Eq, Generic)++-- | the style+defaultPathStyle :: PathStyle+defaultPathStyle =+  PathStyle 0.01 (palette1 1) (palette1 2)
src/Chart/Surface.hs view
@@ -1,14 +1,12 @@-{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE RebindableSyntax #-}+{-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -Wall #-}  -- | Surface chart combinators. ----- A common chart is to present a set of rectangles on the XY plane with colour representing values of the underlying data; a surface chart (often called a heatmap).+-- A common chart is to present a set of rectangles on the XY plane with colour representing values of the underlying data. This library uses the term /surface/ chart but it is often referred to as a heatmap. ----- 'SurfaceData', the rectangle and the color value, is a different shape to the usual data elements of a chart, so there is a bit more wrangling to do compared with other chart types. module Chart.Surface   ( SurfaceData (..),     SurfaceOptions (..),@@ -21,20 +19,23 @@     surfacefl,     SurfaceLegendOptions (..),     defaultSurfaceLegendOptions,+    surfaceAxisOptions,   ) where -import Chart.Types-import Control.Lens+import Chart.Data+import Chart.Hud+import Chart.Primitive+import Chart.Style import Data.Bifunctor+import Data.Bool import Data.Colour+import Data.Foldable import Data.FormatN-import Data.Generics.Labels () import Data.Text (Text) import GHC.Generics-import GHC.OverloadedLabels-import NumHask.Prelude-import NumHask.Space+import Optics.Core+import Prelude  -- | Options for a Surface chart. data SurfaceOptions = SurfaceOptions@@ -52,10 +53,10 @@ defaultSurfaceOptions =   SurfaceOptions defaultSurfaceStyle (Point 10 10) one --- | A surface chart is a specialization of a 'RectA' chart+-- | A surface chart is a specialization of a 'RectChart' -- -- >>> defaultSurfaceStyle--- SurfaceStyle {surfaceColors = [Colour 0.69 0.35 0.16 1.00,Colour 0.65 0.81 0.89 1.00], surfaceRectStyle = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 1.00}}+-- SurfaceStyle {surfaceColors = [Colour 0.02 0.73 0.80 1.00,Colour 0.02 0.29 0.48 1.00], surfaceRectStyle = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 1.00}} -- -- ![surface example](other/surface.svg) data SurfaceStyle = SurfaceStyle@@ -68,7 +69,7 @@ -- | The official surface style. defaultSurfaceStyle :: SurfaceStyle defaultSurfaceStyle =-  SurfaceStyle (take 2 palette1_) (blob dark)+  SurfaceStyle (palette1 <$> [0 .. 1]) (blob dark)  -- | Main surface data elements data SurfaceData = SurfaceData@@ -80,42 +81,45 @@   deriving (Show, Eq, Generic)  -- | surface chart without any hud trimmings-surfaces :: RectStyle -> [SurfaceData] -> [Chart Double]+surfaces :: RectStyle -> [SurfaceData] -> [Chart] surfaces rs ps =   ( \(SurfaceData r c) ->-      Chart-        (RectA (rs & #color .~ c))-        [RectXY r]+      RectChart+        (rs & #color .~ c)+        [r]   )     <$> ps --- | create surface data from a function on a Point+-- | Create surface data from a function on a Point mkSurfaceData ::   (Point Double -> Double) ->   Rect Double ->   Grid (Rect Double) ->   [Colour] ->   ([SurfaceData], Range Double)-mkSurfaceData f r g cs = ((\(x, y) -> SurfaceData x (blends y cs)) <$> ps', space1 rs)+mkSurfaceData f r g cs = ((\(x, y) -> SurfaceData x (mixes y cs)) <$> ps', unsafeSpace1 rs)   where     ps = gridF f r g     rs = snd <$> ps-    rs' = project (space1 rs :: Range Double) (Range 0 1) <$> rs+    rs' = project (unsafeSpace1 rs :: Range Double) (Range 0 1) <$> rs     ps' = zip (fst <$> ps) rs' --- | create a surface chart from a function.-surfacef :: (Point Double -> Double) -> SurfaceOptions -> ([Chart Double], Range Double)+-- | Create a surface chart from a function.+surfacef :: (Point Double -> Double) -> SurfaceOptions -> ([Chart], Range Double) surfacef f cfg =-  first (surfaces (cfg ^. #soStyle . #surfaceRectStyle)) $+  first (surfaces (cfg ^. #soStyle % #surfaceRectStyle)) $     mkSurfaceData       f       (cfg ^. #soRange)       (cfg ^. #soGrain)-      (cfg ^. #soStyle . #surfaceColors)+      (toList $ cfg ^. #soStyle % #surfaceColors)  -- | Create a surface chart and accompanying legend from a function.-surfacefl :: (Point Double -> Double) -> SurfaceOptions -> SurfaceLegendOptions -> ([Chart Double], [Hud Double])-surfacefl f po slo = (cs, [legendHud (slo ^. #sloLegendOptions) (surfaceLegendChart dr slo)])+surfacefl :: (Point Double -> Double) -> SurfaceOptions -> SurfaceLegendOptions -> ([Chart], [Hud])+surfacefl f po slo =+  ( cs,+    [Hud 10 (legendHud (slo ^. #sloLegendOptions) (surfaceLegendChart dr slo))]+  )   where     (cs, dr) = surfacef f po @@ -132,93 +136,87 @@   }   deriving (Eq, Show, Generic) -surfaceAxisOptions :: AxisOptions-surfaceAxisOptions =+-- | 'AxisOptions' for a surface chart.+surfaceAxisOptions :: Colour -> AxisOptions+surfaceAxisOptions c =   AxisOptions     Nothing     Nothing-    ( Tick-        (TickRound (FormatPrec (Just 3)) 4 NoTickExtend)-        (Just (defaultGlyphTick & #color .~ dark & #shape .~ VLineGlyph 0.005, 0.01))-        (Just (defaultTextTick, 0.03))+    ( Ticks+        (TickRound (FormatN FSPrec (Just 3) True) 4 NoTickExtend)+        (Just (defaultGlyphTick & #borderColor .~ c & #color .~ c & #shape .~ VLineGlyph, 0.01))+        (Just (defaultTextTick & #color .~ c, 0.03))         Nothing     )     PlaceRight  -- | official surface legend options-defaultSurfaceLegendOptions :: Text -> SurfaceLegendOptions-defaultSurfaceLegendOptions t =-  SurfaceLegendOptions defaultSurfaceStyle t 0.05 100 surfaceAxisOptions surfaceLegendOptions+defaultSurfaceLegendOptions :: Colour -> Text -> SurfaceLegendOptions+defaultSurfaceLegendOptions c t =+  SurfaceLegendOptions defaultSurfaceStyle t 0.05 100 (surfaceAxisOptions c) surfaceLegendOptions  surfaceLegendOptions :: LegendOptions surfaceLegendOptions =   defaultLegendOptions-    & #lplace .~ PlaceRight-    & #lscale .~ 0.7-    & #lsize .~ 0.5+    & #place .~ PlaceRight+    & #overallScale .~ 0.9+    & #size .~ 0.5     & #vgap .~ 0.05     & #hgap .~ 0.01     & #innerPad .~ 0.05     & #outerPad .~ 0.02-    & #ltext . #hsize .~ 0.5-    & #legendFrame .~ Nothing+    & #textStyle % #hsize .~ 0.5+    & #textStyle % #size .~ 0.1+    & #frame .~ Nothing  -- | Creation of the classical heatmap glyph within a legend context.-surfaceLegendChart :: Range Double -> SurfaceLegendOptions -> [Chart Double]+surfaceLegendChart :: Range Double -> SurfaceLegendOptions -> ChartTree surfaceLegendChart dataRange l =-  padChart (l ^. #sloLegendOptions . #outerPad)-    . maybe id (\x -> frameChart x (l ^. #sloLegendOptions . #innerPad)) (l ^. #sloLegendOptions . #legendFrame)-    $ hs+  legendFrame (view #sloLegendOptions l) hs   where-    a = makeSurfaceTick l pchart+    a = makeSurfaceTick l (named "pchart" pchart)     pchart-      | l ^. #sloLegendOptions . #lplace == PlaceBottom-          || l ^. #sloLegendOptions . #lplace == PlaceTop =+      | l ^. #sloLegendOptions % #place == PlaceBottom+          || l ^. #sloLegendOptions % #place == PlaceTop =         vertGlyph       | otherwise = horiGlyph-    t = Chart (TextA (l ^. #sloLegendOptions . #ltext & #anchor .~ AnchorStart) [l ^. #sloTitle]) [zero]-    hs = vert (l ^. #sloLegendOptions . #vgap) [a, [t]]-    vertGlyph :: [Chart Double]+    t = TextChart (l ^. #sloLegendOptions % #textStyle & #anchor .~ AnchorStart) [(l ^. #sloTitle, zero)]+    hs = vert (l ^. #sloLegendOptions % #vgap) [a, unnamed [t]]+    vertGlyph :: [Chart]     vertGlyph =       zipWith-        (\r c -> Chart (RectA $ blob c) [RectXY r])+        (\r c -> RectChart (blob c) [r])         ( (\xr -> Ranges xr (Range 0 (l ^. #sloWidth)))             <$> gridSpace               dataRange               (l ^. #sloResolution)         )-        ( (\x -> blends x (l ^. #sloStyle . #surfaceColors))+        ( (\x -> mixes x (toList $ l ^. #sloStyle % #surfaceColors))             <$> grid MidPos (Range 0 1) (l ^. #sloResolution)         )-    horiGlyph :: [Chart Double]+    horiGlyph :: [Chart]     horiGlyph =       zipWith-        (\r c -> Chart (RectA $ blob c) [RectXY r])+        (\r c -> RectChart (blob c) [r])         ( (\yr -> Ranges (Range 0 (l ^. #sloWidth)) yr)             <$> gridSpace               dataRange               (l ^. #sloResolution)         )-        ( (\x -> blends x (l ^. #sloStyle . #surfaceColors))+        ( (\x -> mixes x (toList $ l ^. #sloStyle % #surfaceColors))             <$> grid MidPos (Range 0 1) (l ^. #sloResolution)         )  isHori :: SurfaceLegendOptions -> Bool isHori l =-  l ^. #sloLegendOptions . #lplace == PlaceBottom-    || l ^. #sloLegendOptions . #lplace == PlaceTop+  l ^. #sloLegendOptions % #place == PlaceBottom+    || l ^. #sloLegendOptions % #place == PlaceTop -makeSurfaceTick :: SurfaceLegendOptions -> [Chart Double] -> [Chart Double]-makeSurfaceTick l pchart = phud-  where-    r = fromMaybe one (styleBoxes pchart)-    r' = bool (Rect 0 (l ^. #sloWidth) 0 (l ^. #sloLegendOptions . #lsize)) (Rect 0 (l ^. #sloLegendOptions . #lsize) 0 (l ^. #sloWidth)) (isHori l)-    (hs, _) =-      makeHud-        r-        ( mempty & #hudAxes-            .~ [ l ^. #sloAxisOptions-                   & #place .~ bool PlaceRight PlaceBottom (isHori l)-               ]-        )-    phud = runHudWith r' r hs pchart+makeSurfaceTick :: SurfaceLegendOptions -> ChartTree -> ChartTree+makeSurfaceTick l pchart = case view styleBox' pchart of+  Nothing -> pchart+  Just r' -> phud+    where+      r'' = bool (Rect 0 (l ^. #sloWidth) 0 (l ^. #sloLegendOptions % #size)) (Rect 0 (l ^. #sloLegendOptions % #size) 0 (l ^. #sloWidth)) (isHori l)+      (hs, db) = toHuds (mempty & set #chartAspect ChartAspect & set #axes [(9, l ^. #sloAxisOptions & #place .~ bool PlaceRight PlaceBottom (isHori l))]) r'+      phud = runHudWith r'' db hs pchart
+ src/Chart/Svg.hs view
@@ -0,0 +1,471 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE QuasiQuotes #-}+{-# OPTIONS_GHC -Wall #-}++-- | Conversion from a chart to SVG.+--+module Chart.Svg+  ( -- * ChartSvg+    ChartSvg (..),+    toChartTree,+    writeChartSvg,+    chartSvg,+    initialCanvas,++    -- * SVG Options+    SvgOptions (..),+    defaultSvgOptions,++    -- * SVG Style primitives+    CssOptions (..),+    defaultCssOptions,+    CssShapeRendering (..),+    CssPreferColorScheme (..),+    cssShapeRendering,+    cssPreferColorScheme,+  )+where++import Chart.Data+import Chart.Hud+import Chart.Primitive+import Chart.Style+import Data.Colour+import Data.Maybe+import Data.Path+import Data.Path.Parser+import Data.Text (Text, pack, unpack)+import qualified Data.Text as Text+import qualified Data.Text.Lazy as Lazy+import Data.Tree+import GHC.Generics+import Lucid+import Lucid.Base+import NeatInterpolation+import Optics.Core+import Prelude++-- $setup+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings+-- >>> import Chart+-- >>> import Optics.Core++-- helpers+--+draw :: Chart -> Html ()+draw (RectChart _ a) = mconcat $ svgRect_ <$> a+draw (TextChart s a) = mconcat $ uncurry (svgText_ s) <$> a+draw (LineChart _ as) = svgLine_ as+draw (GlyphChart s a) = mconcat $ svgGlyph_ s <$> a+draw (PathChart _ a) = svgPath_ a+draw (BlankChart _) = mempty++atts :: Chart -> [Attribute]+atts (RectChart s _) = attsRect s+atts (TextChart s _) = attsText s+atts (LineChart s _) = attsLine s+atts (GlyphChart s _) = attsGlyph s+atts (PathChart s _) = attsPath s+atts (BlankChart _) = mempty++svgChartTree :: ChartTree -> Lucid.Html ()+svgChartTree cs+  | isNothing label && null cs' = mconcat $ svgChartTree . ChartTree <$> xs+  | otherwise = term "g" (foldMap (\x -> [term "class" x]) label) content'+  where+    (ChartTree (Node (label, cs') xs)) = filterChartTree (not . isEmptyChart) cs+    content' = (mconcat $ svg <$> cs') <> (mconcat $ svgChartTree . ChartTree <$> xs)++-- ** ChartSvg++-- | Specification of a chart ready to be rendered to SVG includes:+--+-- - svg options+--+-- - hud options+--+-- - any extra hud elements beyond the usual options+--+-- - an underlying chart tree.+--+-- See Data.Examples for usage.+data ChartSvg = ChartSvg+  { svgOptions :: SvgOptions,+    hudOptions :: HudOptions,+    extraHuds :: [Hud],+    charts :: ChartTree+  }+  deriving (Generic)++instance Semigroup ChartSvg where+  (<>) (ChartSvg _ o h c) (ChartSvg s' o' h' c') =+    ChartSvg s' (o <> o') (h <> h') (c <> c')++instance Monoid ChartSvg where+  mempty = ChartSvg defaultSvgOptions mempty mempty mempty++-- * rendering++-- | @svg@ element + svg 2 attributes+svg2Tag :: Term [Attribute] (s -> t) => s -> t+svg2Tag m =+  svg_+    [ makeAttribute "xmlns" "http://www.w3.org/2000/svg",+      makeAttribute "xmlns:xlink" "http://www.w3.org/1999/xlink"+    ]+    m++renderToText :: Html () -> Text+renderToText = Lazy.toStrict . renderText++renderToSvg :: SvgOptions -> ChartTree -> Html ()+renderToSvg so cs =+  with+    (svg2Tag (cssText (view #cssOptions so) <> svgChartTree cs))+    [ width_ (pack $ show w''),+      height_ (pack $ show h''),+      makeAttribute "viewBox" (pack $ show x <> " " <> show (-w) <> " " <> show (z - x) <> " " <> show (w - y))+    ]+  where+    r@(Rect x z y w) = singletonGuard (view styleBox' cs)+    Point w' h' = width r+    Point w'' h'' = Point ((so ^. #svgHeight) / h' * w') (so ^. #svgHeight)++-- | Low-level conversion of a Chart to svg+svg :: Chart -> Lucid.Html ()+svg (BlankChart _) = mempty+svg c = term "g" (atts c) (draw c)++cssText :: CssOptions -> Html ()+cssText csso =+  style_ [] $+    cssShapeRendering (csso ^. #shapeRendering)+      <> cssPreferColorScheme (light, dark) (csso ^. #preferColorScheme)+      <> csso ^. #cssExtra++-- | CSS shape rendering text snippet+cssShapeRendering :: CssShapeRendering -> Text+cssShapeRendering UseGeometricPrecision = "svg { shape-rendering: geometricPrecision; }"+cssShapeRendering UseCssCrisp = "svg { shape-rendering: crispEdges; }"+cssShapeRendering NoShapeRendering = mempty++-- | CSS prefer-color-scheme text snippet+cssPreferColorScheme :: (Colour, Colour) -> CssPreferColorScheme -> Text+cssPreferColorScheme (cl, cd) PreferHud =+  [trimming|+svg {+  color-scheme: light dark;+}+{+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: $hexDark;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: $hexDark;+  }+  .legendBorder g {+    fill: $hexLight;+  }+}+@media (prefers-color-scheme:dark) {+  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {+    fill: $hexLight;+  }+  .ticklines g, .tickglyph g, .legendBorder g {+    stroke: $hexLight;+  }+  .legendBorder g {+    fill: $hexDark;+  }+}+|]+  where+    hexLight = hex cl+    hexDark = hex cd+cssPreferColorScheme (bglight, _) PreferLight =+  [trimming|+    svg {+      color-scheme: light dark;+    }+    @media (prefers-color-scheme:dark) {+      svg {+        background-color: $c;+      }+    }+  |]+  where+    c = hex bglight+cssPreferColorScheme (_, bgdark) PreferDark =+  [trimming|+    svg {+      color-scheme: light dark;+    }+    @media (prefers-color-scheme:light) {+      svg {+        background-color: $c;+      }+    }+  |]+  where+    c = hex bgdark+cssPreferColorScheme _ PreferNormal = mempty++-- | consume the huds transforming a 'ChartSvg' to a 'ChartTree'+toChartTree :: ChartSvg -> ChartTree+toChartTree cs =+  runHudWith+    (initialCanvas (view (#hudOptions % #chartAspect) cs) (view #charts cs))+    db'+    hs'+    (view #charts cs <> blank db')+  where+    (hs, db') = toHuds (view #hudOptions cs) (singletonGuard $ view (#charts % box') cs)+    hs' =+      hs+        <> view #extraHuds cs++-- | The initial canvas before applying Huds+--+-- >>> initialCanvas (FixedAspect 1.5) (unnamed [RectChart defaultRectStyle [one]])+-- Rect -0.75 0.75 -0.5 0.5+initialCanvas :: ChartAspect -> ChartTree -> CanvasBox+initialCanvas (FixedAspect a) _ = aspect a+initialCanvas (CanvasAspect a) _ = aspect a+initialCanvas ChartAspect cs = singletonGuard $ view box' cs++-- | Render a chart using the supplied svg and hud config.+--+-- >>> chartSvg mempty+-- "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"450.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"-0.75 -0.5 1.5 1.0\" height=\"300.0\"><style>svg {\n  color-scheme: light dark;\n}\n{\n  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n    fill: #0d0d0d;\n  }\n  .ticklines g, .tickglyph g, .legendBorder g {\n    stroke: #0d0d0d;\n  }\n  .legendBorder g {\n    fill: #f0f0f0;\n  }\n}\n@media (prefers-color-scheme:dark) {\n  .canvas g, .title g, .axisbar g, .ticktext g, .tickglyph g, .ticklines g, .legendContent g text {\n    fill: #f0f0f0;\n  }\n  .ticklines g, .tickglyph g, .legendBorder g {\n    stroke: #f0f0f0;\n  }\n  .legendBorder g {\n    fill: #0d0d0d;\n  }\n}</style><g class=\"chart\"></g><g class=\"hud\"></g></svg>"+chartSvg :: ChartSvg -> Text+chartSvg cs = renderToText (renderToSvg (view #svgOptions cs) (toChartTree cs))++-- | Write to a file.+writeChartSvg :: FilePath -> ChartSvg -> IO ()+writeChartSvg fp cs =+  writeFile fp (unpack $ chartSvg cs)++-- | Make Lucid Html given term and attributes+terms :: Text -> [Lucid.Attribute] -> Lucid.Html ()+terms t = with $ makeXmlElementNoEnd t++-- | Rectangle svg+svgRect_ :: Rect Double -> Lucid.Html ()+svgRect_ (Rect x z y w) =+  terms+    "rect"+    [ width_ (pack $ show $ z - x),+      height_ (pack $ show $ w - y),+      term "x" (pack $ show x),+      term "y" (pack $ show $ -w)+    ]++-- | Text svg+svgText_ :: TextStyle -> Text -> Point Double -> Lucid.Html ()+svgText_ s t p@(Point x y) =+  term+    "text"+    ( [ term "x" (pack $ show x),+        term "y" (pack $ show $ -y)+      ]+        <> foldMap (\x' -> [term "transform" (toRotateText x' p)]) (s ^. #rotation)+    )+    (toHtmlRaw t)+    <> case view #frame s of+      Nothing -> mempty+      Just f -> svg (RectChart (f & over #borderSize (* view #size s)) [styleBoxText s t p])++-- | line svg+svgLine_ :: [[Point Double]] -> Lucid.Html ()+svgLine_ xss =+  mconcat $+    (\xs -> terms "polyline" [term "points" (toPointsText xs)]) <$> xss+  where+    toPointsText xs' = Text.intercalate "\n" $ (\(Point x y) -> pack (show x <> "," <> show (-y))) <$> xs'++-- | GlyphShape to svg Tree+svgShape_ :: GlyphShape -> Double -> Point Double -> Lucid.Html ()+svgShape_ CircleGlyph s (Point x y) =+  terms+    "circle"+    [ term "cx" (pack $ show x),+      term "cy" (pack $ show $ -y),+      term "r" (pack $ show $ 0.5 * s)+    ]+svgShape_ SquareGlyph s p =+  svgRect_ (move p ((s *) <$> one))+svgShape_ (RectSharpGlyph x') s p =+  svgRect_ (move p (scale (Point s (x' * s)) one))+svgShape_ (RectRoundedGlyph x' rx ry) s p =+  terms+    "rect"+    [ term "width" (pack $ show $ z - x),+      term "height" (pack $ show $ w - y),+      term "x" (pack $ show x),+      term "y" (pack $ show $ -w),+      term "rx" (pack $ show rx),+      term "ry" (pack $ show ry)+    ]+  where+    (Rect x z y w) = move p (scale (Point s (x' * s)) one)+svgShape_ (TriangleGlyph (Point xa ya) (Point xb yb) (Point xc yc)) s p =+  terms+    "polygon"+    [ term "transform" (toTranslateText p),+      term "points" (pack $ show (s * xa) <> "," <> show (-(s * ya)) <> " " <> show (s * xb) <> "," <> show (-(s * yb)) <> " " <> show (s * xc) <> "," <> show (-(s * yc)))+    ]+svgShape_ (EllipseGlyph x') s (Point x y) =+  terms+    "ellipse"+    [ term "cx" ((pack . show) x),+      term "cy" ((pack . show) $ -y),+      term "rx" ((pack . show) $ 0.5 * s),+      term "ry" ((pack . show) $ 0.5 * s * x')+    ]+svgShape_ VLineGlyph s (Point x y) =+  terms "polyline" [term "points" (pack $ show x <> "," <> show (-(y - s / 2)) <> "\n" <> show x <> "," <> show (-(y + s / 2)))]+svgShape_ HLineGlyph s (Point x y) =+  terms "polyline" [term "points" (pack $ show (x - s / 2) <> "," <> show (-y) <> "\n" <> show (x + s / 2) <> "," <> show (-y))]+svgShape_ (PathGlyph path _) s p =+  terms "path" [term "d" path, term "transform" (toTranslateText p <> " " <> toScaleText s)]++-- | GlyphStyle to svg Tree+svgGlyph_ :: GlyphStyle -> Point Double -> Lucid.Html ()+svgGlyph_ s p =+  svgShape_ (s ^. #shape) (s ^. #size) p+    & maybe id (\r -> term "g" [term "transform" (toRotateText r p)]) (s ^. #rotation)++-- | Path svg+svgPath_ :: [PathData Double] -> Lucid.Html ()+svgPath_ ps =+  terms "path" [term "d" (pathDataToSvg ps)]++-- | RectStyle to Attributes+attsRect :: RectStyle -> [Lucid.Attribute]+attsRect o =+  [ term "stroke-width" (pack $ show $ o ^. #borderSize),+    term "stroke" (showRGB $ o ^. #borderColor),+    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),+    term "fill" (showRGB $ o ^. #color),+    term "fill-opacity" (pack $ show $ opac $ o ^. #color)+  ]++-- | TextStyle to Attributes+attsText :: TextStyle -> [Lucid.Attribute]+attsText o =+  [ term "stroke-width" "0.0",+    term "stroke" "none",+    term "fill" (showRGB $ o ^. #color),+    term "fill-opacity" (pack $ show $ opac $ o ^. #color),+    term "font-size" (pack $ show $ o ^. #size),+    term "text-anchor" (toTextAnchor $ o ^. #anchor)+  ]+  where+    toTextAnchor :: Anchor -> Text+    toTextAnchor AnchorMiddle = "middle"+    toTextAnchor AnchorStart = "start"+    toTextAnchor AnchorEnd = "end"++-- | GlyphStyle to Attributes+attsGlyph :: GlyphStyle -> [Lucid.Attribute]+attsGlyph o =+  [ term "stroke-width" (pack $ show sw),+    term "stroke" (showRGB $ o ^. #borderColor),+    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),+    term "fill" (showRGB $ o ^. #color),+    term "fill-opacity" (pack $ show $ opac $ o ^. #color)+  ]+    <> foldMap ((: []) . term "transform" . toTranslateText) (o ^. #translate)+  where+    sw = case o ^. #shape of+      PathGlyph _ NoScaleBorder -> o ^. #borderSize+      PathGlyph _ ScaleBorder -> min 0.2 (o ^. #borderSize / o ^. #size)+      _ -> o ^. #borderSize++-- | LineStyle to Attributes+attsLine :: LineStyle -> [Lucid.Attribute]+attsLine o =+  [ term "stroke-width" (pack $ show $ o ^. #size),+    term "stroke" (showRGB $ o ^. #color),+    term "stroke-opacity" (pack $ show $ opac $ o ^. #color),+    term "fill" "none"+  ]+    <> foldMap (\x -> [term "stroke-linecap" (fromLineCap x)]) (o ^. #linecap)+    <> foldMap (\x -> [term "stroke-linejoin" (fromLineJoin x)]) (o ^. #linejoin)+    <> foldMap (\x -> [term "stroke-dasharray" (fromDashArray x)]) (o ^. #dasharray)+    <> foldMap (\x -> [term "stroke-dashoffset" (pack $ show x)]) (o ^. #dashoffset)++-- | PathStyle to Attributes+attsPath :: PathStyle -> [Lucid.Attribute]+attsPath o =+  [ term "stroke-width" (pack $ show $ o ^. #borderSize),+    term "stroke" (showRGB $ o ^. #borderColor),+    term "stroke-opacity" (pack $ show $ opac $ o ^. #borderColor),+    term "fill" (showRGB $ o ^. #color),+    term "fill-opacity" (pack $ show $ opac $ o ^. #color)+  ]++-- | includes a flip of the y dimension.+toTranslateText :: Point Double -> Text+toTranslateText (Point x y) =+  pack $+    "translate(" <> show x <> ", " <> show (-y) <> ")"++-- | includes reference changes:+--+-- - from radians to degrees+--+-- - from counter-clockwise is a positive rotation to clockwise is positive+--+-- - flip y dimension+toRotateText :: Double -> Point Double -> Text+toRotateText r (Point x y) =+  pack $+    "rotate(" <> show (-r * 180 / pi) <> ", " <> show x <> ", " <> show (-y) <> ")"++toScaleText :: Double -> Text+toScaleText x =+  pack $+    "scale(" <> show x <> ")"++-- | SVG tag options.+--+-- >>> defaultSvgOptions+-- SvgOptions {svgHeight = 300.0, cssOptions = CssOptions {shapeRendering = NoShapeRendering, preferColorScheme = PreferHud, cssExtra = ""}}+data SvgOptions = SvgOptions+  { svgHeight :: Double,+    cssOptions :: CssOptions+  }+  deriving (Eq, Show, Generic)++-- | The official svg options+defaultSvgOptions :: SvgOptions+defaultSvgOptions = SvgOptions 300 defaultCssOptions++-- | CSS shape rendering options+data CssShapeRendering = UseGeometricPrecision | UseCssCrisp | NoShapeRendering deriving (Show, Eq, Generic)++-- | CSS prefer-color-scheme options+data CssPreferColorScheme+  = -- | includes css that switches approriate hud elements between light and dark.+    PreferHud+  | PreferDark+  | PreferLight+  | PreferNormal+  deriving (Show, Eq, Generic)++-- | css options+--+-- >>> defaultCssOptions+-- CssOptions {shapeRendering = NoShapeRendering, preferColorScheme = PreferHud, cssExtra = ""}+data CssOptions = CssOptions {shapeRendering :: CssShapeRendering, preferColorScheme :: CssPreferColorScheme, cssExtra :: Text} deriving (Show, Eq, Generic)++-- | No special shape rendering and default hud responds to user color scheme preferences.+defaultCssOptions :: CssOptions+defaultCssOptions = CssOptions NoShapeRendering PreferHud mempty
− src/Chart/Types.hs
@@ -1,1685 +0,0 @@-{-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE NegativeLiterals #-}-{-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE RebindableSyntax #-}-{-# LANGUAGE TypeFamilies #-}-{-# OPTIONS_GHC -Wall #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}-{-# OPTIONS_GHC -fno-warn-type-defaults #-}---- | Chart API-module Chart.Types-  ( -- * Chart-    Chart (..),-    moveChart,-    projectXYs,-    projectXYsWith,-    projectArcPosition,--    -- * Annotation-    Annotation (..),-    annotationText,-    scaleAnn,-    scaleOpacAnn,-    colourAnn,-    padRect,--    -- * Styles-    RectStyle (..),-    defaultRectStyle,-    blob,-    clear,-    border,-    TextStyle (..),-    defaultTextStyle,-    GlyphStyle (..),-    defaultGlyphStyle,-    GlyphShape (..),-    glyphText,-    LineStyle (..),-    defaultLineStyle,-    LineCap (..),-    fromLineCap,-    toLineCap,-    LineJoin (..),-    fromLineJoin,-    toLineJoin,-    fromDashArray,-    Anchor (..),-    fromAnchor,-    toAnchor,-    PathStyle (..),-    toPathChart,-    defaultPathStyle,--    -- * Hud types-    ChartDims (..),-    HudT (..),-    Hud,-    simulHud,-    HudOptions (..),-    defaultHudOptions,-    colourHudOptions,-    scaleOpacHudOptions,-    defaultCanvas,-    runHudWith,-    runHud,-    makeHud,-    ChartAspect (..),-    toChartAspect,-    fromChartAspect,-    initialCanvas,-    chartAspectHud,-    canvas,-    title,-    tick,--    -- * Hud primitives-    AxisOptions (..),-    defaultAxisOptions,-    flipAxis,-    Place (..),-    placeText,-    AxisBar (..),-    defaultAxisBar,-    Title (..),-    defaultTitle,-    Tick (..),-    defaultGlyphTick,-    defaultTextTick,-    defaultLineTick,-    defaultTick,-    TickStyle (..),-    defaultTickStyle,-    tickStyleText,-    TickExtend (..),-    adjustTick,-    makeTickDates,-    makeTickDatesContinuous,-    Adjustments (..),-    defaultAdjustments,-    LegendOptions (..),-    defaultLegendOptions,-    legendHud,-    Orientation (..),-    fromOrientation,-    toOrientation,--    -- * SVG primitives-    CssOptions (..),-    SvgOptions (..),-    defaultSvgOptions,-    defaultSvgFrame,--    -- * Chart manipulation-    padChart,-    frameChart,-    frameAllCharts,-    hori,-    vert,-    stack,--    -- * Bounding box calculation-    padBox,-    dataBox,-    dataBoxes,-    dataBoxesS,-    styleBox,-    styleBoxes,-    styleBoxesS,-    styleBoxText,-    styleBoxGlyph,-  )-where--import Control.Lens-import Control.Monad.State.Lazy-import Data.Bifunctor-import Data.Bool-import Data.Colour-import Data.Foldable hiding (sum)-import Data.FormatN-import Data.Generics.Labels ()-import Data.List.NonEmpty (NonEmpty (..))-import Data.Maybe-import Data.Path-import Data.String-import Data.Text (Text, pack)-import qualified Data.Text as Text-import Data.Time-import GHC.Generics-import GHC.OverloadedLabels-import NumHask.Prelude-import NumHask.Space as NH hiding (Element)-import Text.HTML.TagSoup hiding (Attribute)---- $setup------ >>> :set -XOverloadedLabels--- >>> import Control.Lens--- >>> import Chart--- >>> import Chart.Render--- >>> import Data.Colour---- * Chart---- | A `Chart` is annotated xy-data.-data Chart a = Chart-  { -- | annotation style for the data-    annotation :: Annotation,-    -- | list of data elements, either points or rectangles.-    xys :: [XY a]-  }-  deriving (Eq, Show, Generic)---- | How data will be represented onscreen.------ The definition of what might be an Annotation type is opinionated.------ More complex combinations across Annotations can be constructed from combining charts.  See 'Chart.Example.glinesExample', 'Chart.Examples.lglyphExample' and "Chart.Bar" for examples.------ There may be exceptions, but the approximate magnitude of annotation values are in reference to the size of the screen.  For example, a size of 0.01 (say), will means about 1% of the height and/or width of the screen height or width.-data Annotation-  = RectA RectStyle-  | TextA TextStyle [Text]-  | GlyphA GlyphStyle-  | LineA LineStyle-  | PathA PathStyle [PathInfo Double]-  | BlankA-  deriving (Eq, Show, Generic)---- | textifier-annotationText :: Annotation -> Text-annotationText (RectA _) = "RectA"-annotationText TextA {} = "TextA"-annotationText (GlyphA _) = "GlyphA"-annotationText (LineA _) = "LineA"-annotationText PathA {} = "PathA"-annotationText BlankA = "BlankA"---- | dim (or brighten) the opacity of an Annotation by a scale-scaleOpacAnn :: Double -> Annotation -> Annotation-scaleOpacAnn x (RectA s) = RectA s'-  where-    s' = s & #color %~ scaleOpac x & #borderColor %~ scaleOpac x-scaleOpacAnn x (TextA s ts) = TextA s' ts-  where-    s' = s & #color %~ scaleOpac x-scaleOpacAnn x (LineA s) = LineA s'-  where-    s' = s & #color %~ scaleOpac x-scaleOpacAnn x (GlyphA s) = GlyphA s'-  where-    s' = s & #color %~ scaleOpac x & #borderColor %~ scaleOpac x-scaleOpacAnn x (PathA s pis) = PathA s' pis-  where-    s' = s & #color %~ scaleOpac x & #borderColor %~ scaleOpac x-scaleOpacAnn _ BlankA = BlankA--scaleOpac :: Double -> Colour -> Colour-scaleOpac x (Colour r g b o') = Colour r g b (o' * x)---- | select a main colour-colourAnn :: Colour -> Annotation -> Annotation-colourAnn c (RectA s) = RectA s'-  where-    s' = s & #color %~ mix c & #borderColor %~ mix c-colourAnn c (TextA s ts) = TextA s' ts-  where-    s' = s & #color %~ mix c-colourAnn c (LineA s) = LineA s'-  where-    s' = s & #color %~ mix c-colourAnn c (GlyphA s) = GlyphA s'-  where-    s' = s & #color %~ mix c & #borderColor %~ mix c-colourAnn c (PathA s pis) = PathA s' pis-  where-    s' = s & #color %~ mix c & #borderColor %~ mix c-colourAnn _ BlankA = BlankA---- | Rectangle styling------ >>> defaultRectStyle--- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}------ ![unit example](other/unit.svg)-data RectStyle = RectStyle-  { borderSize :: Double,-    borderColor :: Colour,-    color :: Colour-  }-  deriving (Show, Eq, Generic)---- | the style-defaultRectStyle :: RectStyle-defaultRectStyle = RectStyle 0.01 (palette1 1) (palette1 2)---- | solid rectangle, no border------ >>> blob black--- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 1.00}-blob :: Colour -> RectStyle-blob = RectStyle 0 transparent---- | transparent rect------ >>> clear--- RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}-clear :: RectStyle-clear = RectStyle 0 transparent transparent---- | transparent rectangle, with border------ >>> border 0.01 transparent--- RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.00 0.00 0.00 0.00}-border :: Double -> Colour -> RectStyle-border s c = RectStyle s c transparent---- | Text styling------ >>> defaultTextStyle--- TextStyle {size = 8.0e-2, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing}------ >>> import qualified Data.Text as Text--- >>> let t = zipWith (\x y -> Chart (TextA (defaultTextStyle & (#size .~ (0.05 :: Double))) [x]) [PointXY y]) (fmap Text.singleton ['a' .. 'y']) [Point (sin (x * 0.1)) x | x <- [0 .. 25]]------ ![text example](other/text.svg)-data TextStyle = TextStyle-  { size :: Double,-    color :: Colour,-    anchor :: Anchor,-    hsize :: Double,-    vsize :: Double,-    nudge1 :: Double,-    rotation :: Maybe Double-  }-  deriving (Show, Eq, Generic)---- | position anchor-data Anchor = AnchorMiddle | AnchorStart | AnchorEnd deriving (Eq, Show, Generic)---- | text-fromAnchor :: (IsString s) => Anchor -> s-fromAnchor AnchorMiddle = "Middle"-fromAnchor AnchorStart = "Start"-fromAnchor AnchorEnd = "End"---- | from text-toAnchor :: (Eq s, IsString s) => s -> Anchor-toAnchor "Middle" = AnchorMiddle-toAnchor "Start" = AnchorStart-toAnchor "End" = AnchorEnd-toAnchor _ = AnchorMiddle---- | the offical text style-defaultTextStyle :: TextStyle-defaultTextStyle =-  TextStyle 0.08 dark AnchorMiddle 0.5 1.45 -0.2 Nothing---- | Glyph styling------ >>> defaultGlyphStyle--- GlyphStyle {size = 3.0e-2, color = Colour 0.65 0.81 0.89 1.00, borderColor = Colour 0.12 0.47 0.71 1.00, borderSize = 3.0e-3, shape = SquareGlyph, rotation = Nothing, translate = Nothing}------ ![glyph example](other/glyphs.svg)-data GlyphStyle = GlyphStyle-  { -- | glyph radius-    size :: Double,-    -- | fill color-    color :: Colour,-    -- | stroke color-    borderColor :: Colour,-    -- | stroke width (adds a bit to the bounding box)-    borderSize :: Double,-    shape :: GlyphShape,-    rotation :: Maybe Double,-    translate :: Maybe (Point Double)-  }-  deriving (Show, Eq, Generic)---- | the offical glyph style-defaultGlyphStyle :: GlyphStyle-defaultGlyphStyle =-  GlyphStyle-    0.03-    (palette1 1)-    (palette1 2)-    0.003-    SquareGlyph-    Nothing-    Nothing---- | glyph shapes-data GlyphShape-  = CircleGlyph-  | SquareGlyph-  | EllipseGlyph Double-  | RectSharpGlyph Double-  | RectRoundedGlyph Double Double Double-  | TriangleGlyph (Point Double) (Point Double) (Point Double)-  | VLineGlyph Double-  | HLineGlyph Double-  | PathGlyph Text-  deriving (Show, Eq, Generic)---- | textifier-glyphText :: GlyphShape -> Text-glyphText sh =-  case sh of-    CircleGlyph -> "Circle"-    SquareGlyph -> "Square"-    TriangleGlyph {} -> "Triangle"-    EllipseGlyph _ -> "Ellipse"-    RectSharpGlyph _ -> "RectSharp"-    RectRoundedGlyph {} -> "RectRounded"-    VLineGlyph _ -> "VLine"-    HLineGlyph _ -> "HLine"-    PathGlyph _ -> "Path"---- | line cap style-data LineCap = LineCapButt | LineCapRound | LineCapSquare deriving (Eq, Show, Generic)---- | textifier-fromLineCap :: (IsString s) => LineCap -> s-fromLineCap LineCapButt = "butt"-fromLineCap LineCapRound = "round"-fromLineCap LineCapSquare = "square"---- | readifier-toLineCap :: (Eq s, IsString s) => s -> LineCap-toLineCap "butt" = LineCapButt-toLineCap "round" = LineCapRound-toLineCap "square" = LineCapSquare-toLineCap _ = LineCapButt---- | line cap style-data LineJoin = LineJoinMiter | LineJoinBevel | LineJoinRound deriving (Eq, Show, Generic)---- | textifier-fromLineJoin :: (IsString s) => LineJoin -> s-fromLineJoin LineJoinMiter = "miter"-fromLineJoin LineJoinBevel = "bevel"-fromLineJoin LineJoinRound = "round"---- | readifier-toLineJoin :: (Eq s, IsString s) => s -> LineJoin-toLineJoin "miter" = LineJoinMiter-toLineJoin "bevel" = LineJoinBevel-toLineJoin "round" = LineJoinRound-toLineJoin _ = LineJoinMiter---- | Convert a dash representation from a list to text-fromDashArray :: [Double] -> Text-fromDashArray xs = Text.intercalate " " $ pack . show <$> xs---- | line style------ >>> defaultLineStyle--- LineStyle {width = 1.2e-2, color = Colour 0.05 0.05 0.05 1.00, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing}------ ![line example](other/line.svg)------ See also <https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute>-data LineStyle = LineStyle-  { width :: Double,-    color :: Colour,-    linecap :: Maybe LineCap,-    linejoin :: Maybe LineJoin,-    dasharray :: Maybe [Double],-    dashoffset :: Maybe Double-  }-  deriving (Show, Eq, Generic)---- | the official default line style-defaultLineStyle :: LineStyle-defaultLineStyle = LineStyle 0.012 dark Nothing Nothing Nothing Nothing---- | Path styling------ >>> defaultPathStyle--- PathStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}-data PathStyle = PathStyle-  { borderSize :: Double,-    borderColor :: Colour,-    color :: Colour-  }-  deriving (Show, Eq, Generic)---- | the style-defaultPathStyle :: PathStyle-defaultPathStyle =-  PathStyle 0.01 (palette1 1) (palette1 2)---- | Convert from a path command list to a PathA chart-toPathChart :: PathStyle -> [(PathInfo Double, Point Double)] -> Chart Double-toPathChart ps xs = Chart (PathA ps (fst <$> xs)) (PointXY . snd <$> xs)---- | Verticle or Horizontal-data Orientation = Vert | Hori deriving (Eq, Show, Generic)---- | textifier-fromOrientation :: (IsString s) => Orientation -> s-fromOrientation Hori = "Hori"-fromOrientation Vert = "Vert"---- | readifier-toOrientation :: (Eq s, IsString s) => s -> Orientation-toOrientation "Hori" = Hori-toOrientation "Vert" = Vert-toOrientation _ = Hori---- | additive padding-padRect :: (Subtractive a) => a -> Rect a -> Rect a-padRect p (Rect x z y w) = Rect (x - p) (z + p) (y - p) (w + p)---- |-data CssOptions = UseGeometricPrecision | UseCssCrisp | NoCssOptions deriving (Show, Eq, Generic)---- | The basis for the x-y ratio of the final chart------ Default style features tend towards assuming that the usual height of the overall svg image is around 1, and ChartAspect is based on this assumption, so that a ChartAspect of "FixedAspect 1.5", say, means a height of 1 and a width of 1.5.-data ChartAspect-  = -- | Rescale charts to a fixed x-y ratio, inclusive of hud and style features-    FixedAspect Double-  | -- | Rescale charts to an overall height of 1, preserving the x-y ratio of the data canvas.-    CanvasAspect Double-  | -- | Rescale charts to a height of 1, preserving the existing x-y ratio of the underlying charts, inclusive of hud and style.-    ChartAspect-  | -- | Do not rescale.-    UnadjustedAspect-  deriving (Show, Eq, Generic)---- | textifier-fromChartAspect :: (IsString s) => ChartAspect -> s-fromChartAspect (FixedAspect _) = "FixedAspect"-fromChartAspect (CanvasAspect _) = "CanvasAspect"-fromChartAspect ChartAspect = "ChartAspect"-fromChartAspect UnadjustedAspect = "UnadjustedAspect"---- | readifier-toChartAspect :: (Eq s, IsString s) => s -> Double -> ChartAspect-toChartAspect "FixedAspect" a = FixedAspect a-toChartAspect "CanvasAspect" a = CanvasAspect a-toChartAspect "ChartAspect" _ = ChartAspect-toChartAspect "UnadjustedAspect" _ = UnadjustedAspect-toChartAspect _ _ = ChartAspect---- | calculation of the canvas given the 'ChartAspect'-initialCanvas :: ChartAspect -> [Chart Double] -> Rect Double-initialCanvas (FixedAspect a) _ = aspect a-initialCanvas (CanvasAspect a) _ = aspect a-initialCanvas ChartAspect cs = aspect $ ratio $ styleBoxesS cs-initialCanvas UnadjustedAspect cs = dataBoxesS cs---- | SVG tag options.------ >>> defaultSvgOptions--- SvgOptions {svgHeight = 300.0, outerPad = Just 2.0e-2, innerPad = Nothing, chartFrame = Nothing, cssOptions = NoCssOptions, chartAspect = FixedAspect 1.5, background = Nothing}--------- ![svgoptions example](other/svgoptions.svg)-data SvgOptions = SvgOptions-  { svgHeight :: Double,-    outerPad :: Maybe Double,-    innerPad :: Maybe Double,-    chartFrame :: Maybe RectStyle,-    cssOptions :: CssOptions,-    chartAspect :: ChartAspect,-    background :: Maybe Colour-  }-  deriving (Eq, Show, Generic)---- | The official svg options-defaultSvgOptions :: SvgOptions-defaultSvgOptions = SvgOptions 300 (Just 0.02) Nothing Nothing NoCssOptions (FixedAspect 1.5) Nothing---- | frame style-defaultSvgFrame :: RectStyle-defaultSvgFrame = border 0.01 dark---- | Dimensions that are tracked in the 'HudT':------ - chartDim: the rectangular dimension of the physical representation of a chart on the screen so that new hud elements can be appended. Adding a hud piece tends to expand the chart dimension.------ - canvasDim: the rectangular dimension of the canvas on which data will be represented. At times appending a hud element will cause the canvas dimension to shift.------ - dataDim: the rectangular dimension of the data being represented. Adding hud elements can cause this to change.-data ChartDims a = ChartDims-  { chartDim :: Rect a,-    canvasDim :: Rect a,-    dataDim :: Rect a-  }-  deriving (Eq, Show, Generic)---- | Hud monad transformer-newtype HudT m a = Hud {unhud :: [Chart a] -> StateT (ChartDims a) m [Chart a]}---- | Heads-Up-Display for a 'Chart'-type Hud = HudT Identity--instance (Monad m) => Semigroup (HudT m a) where-  (<>) (Hud h1) (Hud h2) = Hud $ h1 >=> h2--instance (Monad m) => Monoid (HudT m a) where-  mempty = Hud pure---- | run two hud's simultaneously (using the same original ChartDims state) rather than sequentially (which is the <> operation).-simulHud :: (Ord a, Monad m) => HudT m a -> HudT m a -> HudT m a-simulHud (Hud fa) (Hud fb) = Hud $ \cs -> do-  s <- get-  (cs', ChartDims ch ca d) <- lift $ runStateT (fa cs) s-  (cs'', ChartDims ch' ca' d') <- lift $ runStateT (fb cs') s-  put (ChartDims (ch <> ch') (ca <> ca') (d <> d'))-  pure cs''---- | Project the chart data given the ChartAspect-chartAspectHud :: (Monad m) => ChartAspect -> HudT m Double-chartAspectHud fa = Hud $ \cs -> do-  canvasd <- use #canvasDim-  chartd <- use #chartDim-  case fa of-    FixedAspect a -> pure $ projectXYs (aspect a) cs-    CanvasAspect a ->-      pure $-        projectXYs (aspect (a * ratio canvasd / ratio chartd)) cs-    ChartAspect -> pure $ projectXYs (aspect $ ratio chartd) cs-    UnadjustedAspect -> pure cs---- | Combine huds and charts to form a new Chart using the supplied initial canvas and data dimensions. Note that chart data is transformed by this computation (and the use of a linear type is an open question).-runHudWith ::-  -- | initial canvas dimension-  Rect Double ->-  -- | initial data dimension-  Rect Double ->-  -- | huds to add-  [Hud Double] ->-  -- | underlying chart-  [Chart Double] ->-  -- | integrated chart list-  [Chart Double]-runHudWith ca xs hs cs =-  evalState-    ((unhud $ mconcat hs) cs')-    (ChartDims ca' da' xs)-  where-    da' = fromMaybe one $ dataBoxes cs'-    ca' = fromMaybe one $ styleBoxes cs'-    cs' = projectXYsWith ca xs cs---- | Combine huds and charts to form a new [Chart] using the supplied canvas and the actual data dimension.------ Note that the original chart data are transformed and irrevocably lost by this computation.-runHud ::-  -- | initial canvas dimension-  Rect Double ->-  -- | huds-  [Hud Double] ->-  -- | underlying charts-  [Chart Double] ->-  -- | integrated chart list-  [Chart Double]-runHud ca hs cs = runHudWith ca (padBox $ dataBoxes cs) hs cs---- | Typical configurable hud elements. Anything else can be hand-coded as a 'HudT'.------ ![hud example](other/hudoptions.svg)-data HudOptions = HudOptions-  { hudCanvas :: Maybe RectStyle,-    hudTitles :: [Title],-    hudAxes :: [AxisOptions],-    hudLegend :: Maybe (LegendOptions, [(Annotation, Text)])-  }-  deriving (Eq, Show, Generic)--instance Semigroup HudOptions where-  (<>) (HudOptions c t a l) (HudOptions c' t' a' l') =-    HudOptions (listToMaybe $ catMaybes [c, c']) (t <> t') (a <> a') (listToMaybe $ catMaybes [l, l'])--instance Monoid HudOptions where-  mempty = HudOptions Nothing [] [] Nothing---- | The official hud options.-defaultHudOptions :: HudOptions-defaultHudOptions =-  HudOptions-    (Just defaultCanvas)-    []-    [ defaultAxisOptions,-      defaultAxisOptions & #place .~ PlaceLeft-    ]-    Nothing---- | alter the colour-colourHudOptions :: Colour -> HudOptions -> HudOptions-colourHudOptions c ho =-  ho-    & #hudCanvas %~ fmap (#color %~ mix c)-    & #hudTitles %~ fmap (#style . #color %~ mix c)-    & #hudAxes %~ fmap (#axisBar %~ fmap (#rstyle . #color %~ mix c))-    & #hudAxes %~ fmap (#axisTick . #gtick %~ fmap (first ((#color %~ mix c) . (#borderColor %~ mix c))))-    & #hudAxes %~ fmap (#axisTick . #ttick %~ fmap (first (#color %~ mix c)))-    & #hudAxes %~ fmap (#axisTick . #ltick %~ fmap (first (#color %~ mix c)))-    & #hudLegend %~ fmap (first (#ltext %~ (#color %~ mix c)))-    & #hudLegend %~ fmap (first (#legendFrame %~ fmap ((#color %~ mix c) . (#borderColor %~ mix c))))---- | adjust the opacity of HudOptions up or down geometrically (scaling by (*o))-scaleOpacHudOptions :: HudOptions -> Double -> HudOptions-scaleOpacHudOptions ho o =-  ho-    & #hudCanvas %~ fmap (#color %~ scaleOpac o)-    & #hudTitles %~ fmap (#style . #color %~ scaleOpac o)-    & #hudAxes %~ fmap (#axisBar %~ fmap (#rstyle . #color %~ scaleOpac o))-    & #hudAxes %~ fmap (#axisTick . #gtick %~ fmap (first ((#color %~ scaleOpac o) . (#borderColor %~ scaleOpac o))))-    & #hudAxes %~ fmap (#axisTick . #ttick %~ fmap (first (#color %~ scaleOpac o)))-    & #hudAxes %~ fmap (#axisTick . #ltick %~ fmap (first (#color %~ scaleOpac o)))-    & #hudLegend %~ fmap (first (#ltext %~ (#color %~ scaleOpac o)))-    & #hudLegend %~ fmap (first (#legendFrame %~ fmap ((#color %~ scaleOpac o) . (#borderColor %~ scaleOpac o))))-    & #hudLegend %~ fmap (second (fmap (first (scaleOpacAnn o))))---- | colour reset but scaling opacity-mix :: Colour -> Colour -> Colour-mix (Colour r g b o') (Colour _ _ _ o) = Colour r g b (o' * o)---- | The official hud canvas-defaultCanvas :: RectStyle-defaultCanvas = blob (setOpac 0.05 dark)---- | Placement of elements around (what is implicity but maybe shouldn't just be) a rectangular canvas-data Place-  = PlaceLeft-  | PlaceRight-  | PlaceTop-  | PlaceBottom-  | PlaceAbsolute (Point Double)-  deriving (Show, Eq, Generic)---- | textifier-placeText :: Place -> Text-placeText p =-  case p of-    PlaceTop -> "Top"-    PlaceBottom -> "Bottom"-    PlaceLeft -> "Left"-    PlaceRight -> "Right"-    PlaceAbsolute _ -> "Absolute"---- | axis options-data AxisOptions = AxisOptions-  { axisBar :: Maybe AxisBar,-    adjust :: Maybe Adjustments,-    axisTick :: Tick,-    place :: Place-  }-  deriving (Eq, Show, Generic)---- | The official axis-defaultAxisOptions :: AxisOptions-defaultAxisOptions = AxisOptions (Just defaultAxisBar) (Just defaultAdjustments) defaultTick PlaceBottom---- | The bar on an axis representing the x or y plane.------ >>> defaultAxisBar--- AxisBar {rstyle = RectStyle {borderSize = 0.0, borderColor = Colour 0.00 0.00 0.00 0.00, color = Colour 0.05 0.05 0.05 0.40}, wid = 4.0e-3, buff = 1.0e-2}-data AxisBar = AxisBar-  { rstyle :: RectStyle,-    wid :: Double,-    buff :: Double-  }-  deriving (Show, Eq, Generic)---- | The official axis bar-defaultAxisBar :: AxisBar-defaultAxisBar = AxisBar (RectStyle 0 transparent (setOpac 0.4 dark)) 0.004 0.01---- | Options for titles.  Defaults to center aligned, and placed at Top of the hud------ >>> defaultTitle "title"--- Title {text = "title", style = TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing}, place = PlaceTop, anchor = AnchorMiddle, buff = 4.0e-2}-data Title = Title-  { text :: Text,-    style :: TextStyle,-    place :: Place,-    anchor :: Anchor,-    buff :: Double-  }-  deriving (Show, Eq, Generic)---- | The official hud title-defaultTitle :: Text -> Title-defaultTitle txt =-  Title-    txt-    ( defaultTextStyle-        & #size .~ 0.12-    )-    PlaceTop-    AnchorMiddle-    0.04---- | xy coordinate markings------ >>> defaultTick--- Tick {tstyle = TickRound (FormatComma (Just 2)) 8 TickExtend, gtick = Just (GlyphStyle {size = 3.0e-2, color = Colour 0.05 0.05 0.05 0.40, borderColor = Colour 0.05 0.05 0.05 0.40, borderSize = 2.0e-3, shape = VLineGlyph 5.0e-3, rotation = Nothing, translate = Nothing},1.25e-2), ttick = Just (TextStyle {size = 5.0e-2, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing},1.5e-2), ltick = Just (LineStyle {width = 5.0e-3, color = Colour 0.05 0.05 0.05 0.05, linecap = Nothing, linejoin = Nothing, dasharray = Nothing, dashoffset = Nothing},0.0)}-data Tick = Tick-  { tstyle :: TickStyle,-    gtick :: Maybe (GlyphStyle, Double),-    ttick :: Maybe (TextStyle, Double),-    ltick :: Maybe (LineStyle, Double)-  }-  deriving (Show, Eq, Generic)---- | The official glyph tick-defaultGlyphTick :: GlyphStyle-defaultGlyphTick =-  defaultGlyphStyle-    & #borderSize .~ 0.002-    & #shape .~ VLineGlyph 0.005-    & #color .~ setOpac 0.4 dark-    & #borderColor .~ setOpac 0.4 dark---- | The official text tick-defaultTextTick :: TextStyle-defaultTextTick =-  defaultTextStyle & #size .~ 0.05---- | The official line tick-defaultLineTick :: LineStyle-defaultLineTick =-  defaultLineStyle-    & #width .~ 5.0e-3-    & #color %~ setOpac 0.05---- | The official tick-defaultTick :: Tick-defaultTick =-  Tick-    defaultTickStyle-    (Just (defaultGlyphTick, 0.0125))-    (Just (defaultTextTick, 0.015))-    (Just (defaultLineTick, 0))---- | Style of tick marks on an axis.-data TickStyle-  = -- | no ticks on axis-    TickNone-  | -- | specific labels (equidistant placement)-    TickLabels [Text]-  | -- | sensibly rounded ticks, a guide to how many, and whether to extend beyond the data bounding box-    TickRound FormatN Int TickExtend-  | -- | exactly n equally spaced ticks-    TickExact FormatN Int-  | -- | specific labels and placement-    TickPlaced [(Double, Text)]-  deriving (Show, Eq, Generic)---- | The official tick style-defaultTickStyle :: TickStyle-defaultTickStyle = TickRound (FormatComma (Just 2)) 8 TickExtend---- | textifier-tickStyleText :: TickStyle -> Text-tickStyleText TickNone = "TickNone"-tickStyleText TickLabels {} = "TickLabels"-tickStyleText TickRound {} = "TickRound"-tickStyleText TickExact {} = "TickExact"-tickStyleText TickPlaced {} = "TickPlaced"---- | Whether Ticks are allowed to extend the data range-data TickExtend = TickExtend | NoTickExtend deriving (Eq, Show, Generic)---- | options for prettifying axis decorations------ >>> defaultAdjustments--- Adjustments {maxXRatio = 8.0e-2, maxYRatio = 6.0e-2, angledRatio = 0.12, allowDiagonal = True}-data Adjustments = Adjustments-  { maxXRatio :: Double,-    maxYRatio :: Double,-    angledRatio :: Double,-    allowDiagonal :: Bool-  }-  deriving (Show, Eq, Generic)---- | The official hud adjustments.-defaultAdjustments :: Adjustments-defaultAdjustments = Adjustments 0.08 0.06 0.12 True---- | Legend options------ >>> defaultLegendOptions--- LegendOptions {lsize = 0.3, vgap = 0.2, hgap = 0.1, ltext = TextStyle {size = 0.12, color = Colour 0.05 0.05 0.05 1.00, anchor = AnchorMiddle, hsize = 0.5, vsize = 1.45, nudge1 = -0.2, rotation = Nothing}, lmax = 10, innerPad = 0.1, outerPad = 2.0e-2, legendFrame = Just (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.05 0.05 0.05 1.00, color = Colour 0.05 0.05 0.05 0.00}), lplace = PlaceRight, lscale = 0.25}------ ![legend example](other/legend.svg)-data LegendOptions = LegendOptions-  { lsize :: Double,-    vgap :: Double,-    hgap :: Double,-    ltext :: TextStyle,-    lmax :: Int,-    innerPad :: Double,-    outerPad :: Double,-    legendFrame :: Maybe RectStyle,-    lplace :: Place,-    lscale :: Double-  }-  deriving (Show, Eq, Generic)---- | The official legend options-defaultLegendOptions :: LegendOptions-defaultLegendOptions =-  LegendOptions-    0.3-    0.2-    0.1-    ( defaultTextStyle-        & #size .~ 0.12-    )-    10-    0.1-    0.02-    (Just (RectStyle 0.01 (setOpac 1 dark) (setOpac 0 dark)))-    PlaceRight-    0.25---- | Generically scale an Annotation.-scaleAnn :: Double -> Annotation -> Annotation-scaleAnn x (LineA a) = LineA $ a & #width %~ (* x)-scaleAnn x (RectA a) = RectA $ a & #borderSize %~ (* x)-scaleAnn x (TextA a txs) = TextA (a & #size %~ (* x)) txs-scaleAnn x (GlyphA a) = GlyphA (a & #size %~ (* x))-scaleAnn x (PathA a pxs) = PathA (a & #borderSize %~ (* x)) pxs-scaleAnn _ BlankA = BlankA---- | Translate the data in a chart.-moveChart :: (Additive a) => XY a -> [Chart a] -> [Chart a]-moveChart sp = fmap (#xys %~ fmap (sp +))---- | Make huds from a HudOptions.------ Some huds, such as the creation of tick values, can extend the data dimension of a chart, so we return a blank chart with the new data dimension.--- The complexity internally to this function is due to the creation of ticks and, specifically, 'gridSensible', which is not idempotent. As a result, a tick calculation that does extends the data area, can then lead to new tick values when applying TickRound etc.-makeHud :: Rect Double -> HudOptions -> ([Hud Double], [Chart Double])-makeHud xs cfg =-  ([axes] <> can <> titles <> l, xsext)-  where-    xs' = padBox (Just xs)-    can = foldMap (\x -> [canvas x]) (cfg ^. #hudCanvas)-    titles = title <$> (cfg ^. #hudTitles)-    ticks =-      (\a -> freezeTicks (a ^. #place) xs' (a ^. #axisTick . #tstyle))-        <$> (cfg ^. #hudAxes)-    hudaxes =-      zipWith-        (\c t -> c & #axisTick . #tstyle .~ fst t)-        (cfg ^. #hudAxes)-        ticks-    tickRects = catMaybes (snd <$> ticks)-    xsext = bool [Chart BlankA (RectXY <$> tickRects)] [] (null tickRects)-    axes =-      foldr simulHud mempty $-        ( \x ->-            maybe mempty (makeAxisBar (x ^. #place)) (x ^. #axisBar)-              <> makeTick x-        )-          <$> hudaxes-    l =-      foldMap-        (\(lo, ats) -> [legendHud lo (legendChart ats lo)])-        (cfg ^. #hudLegend)---- | convert TickRound to TickPlaced-freezeTicks :: Place -> Rect Double -> TickStyle -> (TickStyle, Maybe (Rect Double))-freezeTicks pl xs' ts@TickRound {} = maybe (ts, Nothing) (\x -> (TickPlaced (zip ps ls), Just x)) ((\x -> replaceRange pl x xs') <$> ext)-  where-    (TickComponents ps ls ext) = makeTicks ts (placeRange pl xs')-    replaceRange :: Place -> Range Double -> Rect Double -> Rect Double-    replaceRange pl' (Range a0 a1) (Rect x z y w) = case pl' of-      PlaceRight -> Rect x z a0 a1-      PlaceLeft -> Rect x z a0 a1-      _ -> Rect a0 a1 y w-freezeTicks _ _ ts = (ts, Nothing)---- | flip an axis from being an X dimension to a Y one or vice-versa.-flipAxis :: AxisOptions -> AxisOptions-flipAxis ac = case ac ^. #place of-  PlaceBottom -> ac & #place .~ PlaceLeft-  PlaceTop -> ac & #place .~ PlaceRight-  PlaceLeft -> ac & #place .~ PlaceBottom-  PlaceRight -> ac & #place .~ PlaceTop-  PlaceAbsolute _ -> ac--addToRect :: (Ord a) => Rect a -> Maybe (Rect a) -> Rect a-addToRect r r' = sconcat $ r :| maybeToList r'---- | Make a canvas hud element.-canvas :: (Monad m) => RectStyle -> HudT m Double-canvas s = Hud $ \cs -> do-  a <- use #canvasDim-  let c = Chart (RectA s) [RectXY a]-  #canvasDim .= addToRect a (styleBox c)-  pure $ c : cs--axisBar_ :: Place -> AxisBar -> Rect Double -> Rect Double -> Chart Double-axisBar_ pl b (Rect x z y w) (Rect x' z' y' w') =-  case pl of-    PlaceTop ->-      Chart-        (RectA (rstyle b))-        [ R-            x-            z-            (w' + b ^. #buff)-            (w' + b ^. #buff + b ^. #wid)-        ]-    PlaceBottom ->-      Chart-        (RectA (rstyle b))-        [ R-            x-            z-            (y' - b ^. #wid - b ^. #buff)-            (y' - b ^. #buff)-        ]-    PlaceLeft ->-      Chart-        (RectA (rstyle b))-        [ R-            (x' - b ^. #wid - b ^. #buff)-            (x' - b ^. #buff)-            y-            w-        ]-    PlaceRight ->-      Chart-        (RectA (rstyle b))-        [ R-            (z' + (b ^. #buff))-            (z' + (b ^. #buff) + (b ^. #wid))-            y-            w-        ]-    PlaceAbsolute (Point x'' _) ->-      Chart-        (RectA (rstyle b))-        [ R-            (x'' + (b ^. #buff))-            (x'' + (b ^. #buff) + (b ^. #wid))-            y-            w-        ]--makeAxisBar :: (Monad m) => Place -> AxisBar -> HudT m Double-makeAxisBar pl b = Hud $ \cs -> do-  da <- use #chartDim-  ca <- use #canvasDim-  let c = axisBar_ pl b ca da-  #chartDim .= addChartBox c da-  pure $ c : cs--title_ :: Title -> Rect Double -> Chart Double-title_ t a =-  Chart-    ( TextA-        ( style'-            & #rotation ?~ rot-        )-        [t ^. #text]-    )-    [PointXY (placePos' a + alignPos a)]-  where-    style'-      | t ^. #anchor == AnchorStart =-        #anchor .~ AnchorStart $ t ^. #style-      | t ^. #anchor == AnchorEnd =-        #anchor .~ AnchorEnd $ t ^. #style-      | otherwise = t ^. #style-    rot-      | t ^. #place == PlaceRight = pi / 2-      | t ^. #place == PlaceLeft = -pi / 2-      | otherwise = 0-    placePos' (Rect x z y w) = case t ^. #place of-      PlaceTop -> Point ((x + z) / 2.0) (w + (t ^. #buff))-      PlaceBottom ->-        Point-          ((x + z) / 2.0)-          ( y - (t ^. #buff)-              - 0.5-              * (t ^. #style . #vsize)-              * (t ^. #style . #size)-          )-      PlaceLeft -> Point (x - (t ^. #buff)) ((y + w) / 2.0)-      PlaceRight -> Point (z + (t ^. #buff)) ((y + w) / 2.0)-      PlaceAbsolute p -> p-    alignPos (Rect x z y w)-      | t ^. #anchor == AnchorStart-          && t ^. #place `elem` [PlaceTop, PlaceBottom] =-        Point ((x - z) / 2.0) 0.0-      | t ^. #anchor == AnchorStart-          && t ^. #place == PlaceLeft =-        Point 0.0 ((y - w) / 2.0)-      | t ^. #anchor == AnchorStart-          && t ^. #place == PlaceRight =-        Point 0.0 ((w - y) / 2.0)-      | t ^. #anchor == AnchorEnd-          && t ^. #place `elem` [PlaceTop, PlaceBottom] =-        Point ((-x + z) / 2.0) 0.0-      | t ^. #anchor == AnchorEnd-          && t ^. #place == PlaceLeft =-        Point 0.0 ((-y + w) / 2.0)-      | t ^. #anchor == AnchorEnd-          && t ^. #place == PlaceRight =-        Point 0.0 ((y - w) / 2.0)-      | otherwise = Point 0.0 0.0---- | Add a title to a chart. The logic used to work out placement is flawed due to being able to freely specify text rotation.  It works for specific rotations (Top, Bottom at 0, Left at 90, Right @ 270)-title :: (Monad m) => Title -> HudT m Double-title t = Hud $ \cs -> do-  ca <- use #chartDim-  let c = title_ t ca-  #chartDim .= addChartBox c ca-  pure $ c : cs--placePos :: Place -> Double -> Rect Double -> Point Double-placePos pl b (Rect x z y w) = case pl of-  PlaceTop -> Point 0 (w + b)-  PlaceBottom -> Point 0 (y - b)-  PlaceLeft -> Point (x - b) 0-  PlaceRight -> Point (z + b) 0-  PlaceAbsolute p -> p--placeRot :: Place -> Maybe Double-placeRot pl = case pl of-  PlaceRight -> Just (pi / 2)-  PlaceLeft -> Just (pi / 2)-  _ -> Nothing--textPos :: Place -> TextStyle -> Double -> Point Double-textPos pl tt b = case pl of-  PlaceTop -> Point 0 b-  PlaceBottom -> Point 0 (-b - 0.5 * (tt ^. #vsize) * (tt ^. #size))-  PlaceLeft ->-    Point-      (-b)-      ((tt ^. #nudge1) * (tt ^. #vsize) * (tt ^. #size))-  PlaceRight ->-    Point-      b-      ((tt ^. #nudge1) * (tt ^. #vsize) * (tt ^. #size))-  PlaceAbsolute p -> p--placeRange :: Place -> Rect Double -> Range Double-placeRange pl (Rect x z y w) = case pl of-  PlaceRight -> Range y w-  PlaceLeft -> Range y w-  _ -> Range x z--placeOrigin :: Place -> Double -> Point Double-placeOrigin pl x-  | pl `elem` [PlaceTop, PlaceBottom] = Point x 0-  | otherwise = Point 0 x--placeTextAnchor :: Place -> (TextStyle -> TextStyle)-placeTextAnchor pl-  | pl == PlaceLeft = #anchor .~ AnchorEnd-  | pl == PlaceRight = #anchor .~ AnchorStart-  | otherwise = id--placeGridLines :: Place -> Rect Double -> Double -> Double -> [XY Double]-placeGridLines pl (Rect x z y w) a b-  | pl `elem` [PlaceTop, PlaceBottom] = [P a (y - b), P a (w + b)]-  | otherwise = [P (x - b) a, P (z + b) a]---- | compute tick values and labels given options, ranges and formatting-ticksR :: TickStyle -> Range Double -> Range Double -> [(Double, Text)]-ticksR s d r =-  case s of-    TickNone -> []-    TickRound f n e -> zip (project r d <$> ticks0) (formatNs f ticks0)-      where-        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)-    TickExact f n -> zip (project r d <$> ticks0) (formatNs f ticks0)-      where-        ticks0 = grid OuterPos r n-    TickLabels ls ->-      zip-        ( project (Range 0 (fromIntegral $ length ls)) d-            <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])-        )-        ls-    TickPlaced xs -> zip (project r d . fst <$> xs) (snd <$> xs)--data TickComponents = TickComponents-  { positions :: [Double],-    labels :: [Text],-    extension :: Maybe (Range Double)-  }-  deriving (Eq, Show, Generic)---- | compute tick components given style, ranges and formatting-makeTicks :: TickStyle -> Range Double -> TickComponents-makeTicks s r =-  case s of-    TickNone -> TickComponents [] [] Nothing-    TickRound f n e ->-      TickComponents-        ticks0-        (formatNs f ticks0)-        (bool (Just $ space1 ticks0) Nothing (e == NoTickExtend))-      where-        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)-    TickExact f n -> TickComponents ticks0 (formatNs f ticks0) Nothing-      where-        ticks0 = grid OuterPos r n-    TickLabels ls ->-      TickComponents-        ( project (Range 0 (fromIntegral $ length ls)) r-            <$> ((\x -> x - 0.5) . fromIntegral <$> [1 .. length ls])-        )-        ls-        Nothing-    TickPlaced xs -> TickComponents (fst <$> xs) (snd <$> xs) Nothing---- | compute tick values given placement, canvas dimension & data range-ticksPlaced :: TickStyle -> Place -> Rect Double -> Rect Double -> TickComponents-ticksPlaced ts pl d xs = TickComponents (project (placeRange pl xs) (placeRange pl d) <$> ps) ls ext-  where-    (TickComponents ps ls ext) = makeTicks ts (placeRange pl xs)--tickGlyph_ :: Place -> (GlyphStyle, Double) -> TickStyle -> Rect Double -> Rect Double -> Rect Double -> Chart Double-tickGlyph_ pl (g, b) ts ca da xs =-  Chart-    (GlyphA (g & #rotation .~ placeRot pl))-    ( PointXY . (placePos pl b ca +) . placeOrigin pl-        <$> positions-          (ticksPlaced ts pl da xs)-    )---- | aka marks-tickGlyph ::-  (Monad m) =>-  Place ->-  (GlyphStyle, Double) ->-  TickStyle ->-  HudT m Double-tickGlyph pl (g, b) ts = Hud $ \cs -> do-  a <- use #chartDim-  d <- use #canvasDim-  xs <- use #dataDim-  let c = tickGlyph_ pl (g, b) ts a d xs-  #chartDim .= addToRect a (styleBox c)-  pure $ c : cs--tickText_ ::-  Place ->-  (TextStyle, Double) ->-  TickStyle ->-  Rect Double ->-  Rect Double ->-  Rect Double ->-  [Chart Double]-tickText_ pl (txts, b) ts ca da xs =-  zipWith-    ( \txt sp ->-        Chart-          ( TextA-              (placeTextAnchor pl txts)-              [txt]-          )-          [PointXY sp]-    )-    (labels $ ticksPlaced ts pl da xs)-    ( (placePos pl b ca + textPos pl txts b +) . placeOrigin pl-        <$> positions (ticksPlaced ts pl da xs)-    )---- | aka tick labels-tickText ::-  (Monad m) =>-  Place ->-  (TextStyle, Double) ->-  TickStyle ->-  HudT m Double-tickText pl (txts, b) ts = Hud $ \cs -> do-  ca <- use #chartDim-  da <- use #canvasDim-  xs <- use #dataDim-  let c = tickText_ pl (txts, b) ts ca da xs-  #chartDim .= addChartBoxes c ca-  pure $ c <> cs---- | aka grid lines-tickLine ::-  (Monad m) =>-  Place ->-  (LineStyle, Double) ->-  TickStyle ->-  HudT m Double-tickLine pl (ls, b) ts = Hud $ \cs -> do-  da <- use #canvasDim-  xs <- use #dataDim-  let c =-        Chart (LineA ls) . (\x -> placeGridLines pl da x b)-          <$> positions (ticksPlaced ts pl da xs)-  #chartDim %= addChartBoxes c-  pure $ c <> cs---- | Create tick glyphs (marks), lines (grid) and text (labels)-tick ::-  (Monad m) =>-  Place ->-  Tick ->-  HudT m Double-tick pl t =-  maybe mempty (\x -> tickGlyph pl x (t ^. #tstyle)) (t ^. #gtick)-    <> maybe mempty (\x -> tickText pl x (t ^. #tstyle)) (t ^. #ttick)-    <> maybe mempty (\x -> tickLine pl x (t ^. #tstyle)) (t ^. #ltick)-    <> extendData pl t---- | compute an extension to the Range if a tick went over the data bounding box-computeTickExtension :: TickStyle -> Range Double -> Maybe (Range Double)-computeTickExtension s r =-  case s of-    TickNone -> Nothing-    TickRound _ n e -> bool Nothing (Just (space1 ticks0 <> r)) (e == TickExtend)-      where-        ticks0 = gridSensible OuterPos (e == NoTickExtend) r (fromIntegral n :: Integer)-    TickExact _ _ -> Nothing-    TickLabels _ -> Nothing-    TickPlaced xs -> Just $ r <> space1 (fst <$> xs)---- | Create a style extension for the data, if ticks extend beyond the existing range-tickExtended ::-  Place ->-  Tick ->-  Rect Double ->-  Rect Double-tickExtended pl t xs =-  maybe-    xs-    (rangeext xs)-    (computeTickExtension (t ^. #tstyle) (ranged xs))-  where-    ranged xs' = case pl of-      PlaceTop -> rangex xs'-      PlaceBottom -> rangex xs'-      PlaceLeft -> rangey xs'-      PlaceRight -> rangey xs'-      PlaceAbsolute _ -> rangex xs'-    rangex (Rect x z _ _) = Range x z-    rangey (Rect _ _ y w) = Range y w-    rangeext (Rect x z y w) (Range a0 a1) = case pl of-      PlaceTop -> Rect a0 a1 y w-      PlaceBottom -> Rect a0 a1 y w-      PlaceLeft -> Rect x z a0 a1-      PlaceRight -> Rect x z a0 a1-      PlaceAbsolute _ -> Rect a0 a1 y w--extendData :: (Monad m) => Place -> Tick -> HudT m Double-extendData pl t = Hud $ \cs -> do-  #dataDim %= tickExtended pl t-  pure cs---- | adjust Tick for sane font sizes etc-adjustTick ::-  Adjustments ->-  Rect Double ->-  Rect Double ->-  Place ->-  Tick ->-  Tick-adjustTick (Adjustments mrx ma mry ad) vb cs pl t-  | pl `elem` [PlaceBottom, PlaceTop] =-    if ad-      then-        ( case adjustSizeX > 1 of-            True ->-              ( case pl of-                  PlaceBottom -> #ttick . _Just . _1 . #anchor .~ AnchorEnd-                  PlaceTop -> #ttick . _Just . _1 . #anchor .~ AnchorStart-                  _ -> #ttick . _Just . _1 . #anchor .~ AnchorEnd-              )-                . (#ttick . _Just . _1 . #size %~ (/ adjustSizeA))-                $ (#ttick . _Just . _1 . #rotation ?~ pi / 4) t-            False -> (#ttick . _Just . _1 . #size %~ (/ adjustSizeA)) t-        )-      else t & #ttick . _Just . _1 . #size %~ (/ adjustSizeX)-  | otherwise -- pl `elem` [PlaceLeft, PlaceRight]-    =-    (#ttick . _Just . _1 . #size %~ (/ adjustSizeY)) t-  where-    max' [] = 1-    max' xs = maximum xs-    ra (Rect x z y w)-      | pl `elem` [PlaceTop, PlaceBottom] = Range x z-      | otherwise = Range y w-    asp = ra vb-    r = ra cs-    tickl = snd <$> ticksR (t ^. #tstyle) asp r-    maxWidth :: Double-    maxWidth =-      maybe-        1-        ( \tt ->-            max' $-              (\(Rect x z _ _) -> z - x)-                . (\x -> styleBoxText (fst tt) x (Point 0 0))-                <$> tickl-        )-        (t ^. #ttick)-    maxHeight =-      maybe-        1-        ( \tt ->-            max' $-              (\(Rect _ _ y w) -> w - y)-                . (\x -> styleBoxText (fst tt) x (Point 0 0))-                <$> tickl-        )-        (t ^. #ttick)-    adjustSizeX :: Double-    adjustSizeX = max' [(maxWidth / (upper asp - lower asp)) / mrx, 1]-    adjustSizeY = max' [(maxHeight / (upper asp - lower asp)) / mry, 1]-    adjustSizeA = max' [(maxHeight / (upper asp - lower asp)) / ma, 1]--makeTick :: (Monad m) => AxisOptions -> HudT m Double-makeTick c = Hud $ \cs -> do-  vb <- use #chartDim-  xs <- use #dataDim-  let adjTick =-        maybe-          (c ^. #axisTick)-          (\x -> adjustTick x vb xs (c ^. #place) (c ^. #axisTick))-          (c ^. #adjust)-  unhud (tick (c ^. #place) adjTick) cs---- | Convert a UTCTime list into sensible ticks, placed exactly-makeTickDates :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Int, Text)]-makeTickDates pc fmt n dates =-  lastOnes (\(_, x0) (_, x1) -> x0 == x1) . fst $ placedTimeLabelDiscontinuous pc fmt n dates-  where-    lastOnes :: (a -> a -> Bool) -> [a] -> [a]-    lastOnes _ [] = []-    lastOnes _ [x] = [x]-    lastOnes f (x : xs) = (\(x0, x1) -> reverse $ x0 : x1) $ foldl' step (x, []) xs-      where-        step (a0, rs) a1 = if f a0 a1 then (a1, rs) else (a1, a0 : rs)---- | Convert a UTCTime list into sensible ticks, placed on the (0,1) space-makeTickDatesContinuous :: PosDiscontinuous -> Maybe Text -> Int -> [UTCTime] -> [(Double, Text)]-makeTickDatesContinuous pc fmt n dates =-  placedTimeLabelContinuous pc fmt n (space1 dates)---- | Make a legend hud element taking into account the chart.-legendHud :: LegendOptions -> [Chart Double] -> Hud Double-legendHud l lcs = Hud $ \cs -> do-  ca <- use #chartDim-  let cs' = cs <> movedleg ca scaledleg-  #chartDim .= fromMaybe one (styleBoxes cs')-  pure cs'-  where-    scaledleg =-      (#annotation %~ scaleAnn (l ^. #lscale))-        . (#xys %~ fmap (fmap (* l ^. #lscale)))-        <$> lcs-    movedleg ca' leg =-      maybe id (moveChart . PointXY . placel (l ^. #lplace) ca') (styleBoxes leg) leg-    placel pl (Rect x z y w) (Rect x' z' y' w') =-      case pl of-        PlaceTop -> Point ((x + z) / 2.0) (w + (w' - y') / 2.0)-        PlaceBottom -> Point ((x + z) / 2.0) (y - (w' - y' / 2.0))-        PlaceLeft -> Point (x - (z' - x') / 2.0) ((y + w) / 2.0)-        PlaceRight -> Point (z + (z' - x') / 2.0) ((y + w) / 2.0)-        PlaceAbsolute p -> p--legendEntry ::-  LegendOptions ->-  Annotation ->-  Text ->-  (Chart Double, Chart Double)-legendEntry l a t =-  ( Chart ann sps,-    Chart (TextA (l ^. #ltext & #anchor .~ AnchorStart) [t]) [zero]-  )-  where-    (ann, sps) = case a of-      RectA rs ->-        ( RectA rs,-          [R 0 (l ^. #lsize) 0 (l ^. #lsize)]-        )-      TextA ts txts ->-        ( TextA (ts & #size .~ (l ^. #lsize)) (take 1 txts),-          [zero]-        )-      GlyphA gs ->-        ( GlyphA (gs & #size .~ (l ^. #lsize)),-          [P (0.5 * l ^. #lsize) (0.33 * l ^. #lsize)]-        )-      LineA ls ->-        ( LineA (ls & #width %~ (/ (l ^. #lscale))),-          [P 0 (1 * l ^. #lsize), P (2 * l ^. #lsize) (1 * l ^. #lsize)]-        )-      PathA ps _ ->-        ( let cs =-                singletonCubic-                  ( CubicPosition-                      (Point 0 0)-                      (Point (0.33 * l ^. #lsize) (0.33 * l ^. #lsize))-                      (Point 0 (0.33 * l ^. #lsize))-                      (Point (0.33 * l ^. #lsize) 0)-                  )-           in (PathA (ps & #borderSize .~ (l ^. #lsize)) (fst <$> cs), PointXY . snd <$> cs)-        )-      BlankA ->-        ( BlankA,-          [zero]-        )--legendChart :: [(Annotation, Text)] -> LegendOptions -> [Chart Double]-legendChart lrs l =-  padChart (l ^. #outerPad)-    . maybe id (\x -> frameChart x (l ^. #innerPad)) (l ^. #legendFrame)-    . vert (l ^. #hgap)-    $ (\(a, t) -> hori ((l ^. #vgap) + twidth - gapwidth t) [[t], [a]])-      <$> es-  where-    es = reverse $ uncurry (legendEntry l) <$> lrs-    twidth = maybe 0 (\(Rect _ z _ _) -> z) . foldRect $ catMaybes (styleBox . snd <$> es)-    gapwidth t = maybe 0 (\(Rect _ z _ _) -> z) (styleBox t)---- | Project the xys of a chart to a new XY Space.------ > projectXYs (dataBox cs) cs == cs if cs is non-empty-projectXYs :: Rect Double -> [Chart Double] -> [Chart Double]-projectXYs _ [] = []-projectXYs new cs = projectXYsWith new old cs-  where-    old = fromMaybe one (dataBoxes cs)---- | Project chart xys to a new XY Space from an old XY Space------ The projections needed are:------ - project the 'xys'------ - project the control points of bezier curves------ - project aspect changes only to radii of ellipticals.------ > projectXYsWith x x == id-projectXYsWith :: Rect Double -> Rect Double -> [Chart Double] -> [Chart Double]-projectXYsWith new old cs = cs'-  where-    xss = fmap (projectOn new old) . xys <$> cs-    ss = projectAnn <$> cs-    cs' = zipWith Chart ss xss-    projectAnn (Chart (PathA ps ips) xys) =-      PathA ps (projectControls ips xys)-    projectAnn x = annotation x--    projectControls pis xys =-      (reverse . snd) (foldl' (\(prevp, l) (i, xy) -> (xy, projectControl prevp xy i : l)) (zero, []) (zip pis xys))--    projectControl _ _ (CubicI c1 c2) =-      CubicI (projectOnP new old c1) (projectOnP new old c2)-    projectControl _ _ (QuadI c) =-      QuadI (projectOnP new old c)-    projectControl p1 p2 (ArcI ai) = ArcI $ projectArcPosition new old (ArcPosition (toPoint p1) (toPoint p2) ai)-    projectControl _ _ x = x---- | project an ArcPosition given new and old Rects------ The radii of the ellipse can be represented as:------ Point rx 0 & Point 0 ry------ These two points are firstly rotated by p and then undergo scaling...-projectArcPosition :: Rect Double -> Rect Double -> ArcPosition Double -> ArcInfo Double-projectArcPosition new old (ArcPosition _ _ (ArcInfo (Point rx ry) phi l cl)) = ArcInfo (Point rx'' ry'') phi l cl-  where-    rx' = rotateP phi (Point rx zero)-    rx'' = norm $ rx' * NH.width new / NH.width old-    ry' = rotateP phi (Point zero ry)-    ry'' = norm $ ry' * NH.width new / NH.width old---- | pad a Rect to remove singleton dimensions-padBox :: Maybe (Rect Double) -> Rect Double-padBox = maybe one singletonUnit-  where-    singletonUnit (Rect x z y w)-      | x == z && y == w = Rect (x - 0.5) (x + 0.5) (y - 0.5) (y + 0.5)-      | x == z = Rect (x - 0.5) (x + 0.5) y w-      | y == w = Rect x z (y - 0.5) (y + 0.5)-      | otherwise = Rect x z y w---- | 'Rect' of a 'Chart', not including style-dataBox :: Chart Double -> Maybe (Rect Double)-dataBox c =-  case c ^. #annotation of-    PathA _ path' -> pathBoxes $ zip path' (toPoint <$> c ^. #xys)-    _ -> foldRect $ fmap toRect (c ^. #xys)---- | 'Rect' of charts, not including style-dataBoxes :: [Chart Double] -> Maybe (Rect Double)-dataBoxes cs = foldRect $ catMaybes $ dataBox <$> cs---- | 'Rect' of charts, not including style, with defaults for Nothing and singleton dimensions if any.-dataBoxesS :: [Chart Double] -> Rect Double-dataBoxesS cs = padBox $ foldRect $ catMaybes $ dataBox <$> cs---- | the extra area from text styling-styleBoxText ::-  TextStyle ->-  Text ->-  Point Double ->-  Rect Double-styleBoxText o t p = move p $ maybe flat (`rotationBound` flat) (o ^. #rotation)-  where-    flat = Rect ((-x' / 2.0) + x' * a') (x' / 2 + x' * a') ((-y' / 2) - n1') (y' / 2 - n1')-    s = o ^. #size-    h = o ^. #hsize-    v = o ^. #vsize-    n1 = o ^. #nudge1-    x' = s * h * fromIntegral (sum $ maybe 0 Text.length . maybeTagText <$> parseTags t)-    y' = s * v-    n1' = s * n1-    a' = case o ^. #anchor of-      AnchorStart -> 0.5-      AnchorEnd -> -0.5-      AnchorMiddle -> 0.0---- | the extra area from glyph styling-styleBoxGlyph :: GlyphStyle -> Rect Double-styleBoxGlyph s = move p' $-  sw $ case sh of-    CircleGlyph -> (sz *) <$> one-    SquareGlyph -> (sz *) <$> one-    EllipseGlyph a -> NH.scale (Point sz (a * sz)) one-    RectSharpGlyph a -> NH.scale (Point sz (a * sz)) one-    RectRoundedGlyph a _ _ -> NH.scale (Point sz (a * sz)) one-    VLineGlyph _ -> NH.scale (Point ((s ^. #borderSize) * sz) sz) one-    HLineGlyph _ -> NH.scale (Point sz ((s ^. #borderSize) * sz)) one-    TriangleGlyph a b c -> (sz *) <$> sconcat (toRect . PointXY <$> (a :| [b, c]) :: NonEmpty (Rect Double))-    PathGlyph path' -> (sz *) <$> fromMaybe one (pathBoxes . toPathXYs . parsePath $ path')-  where-    sh = s ^. #shape-    sz = s ^. #size-    sw = padRect (0.5 * s ^. #borderSize)-    p' = fromMaybe (Point 0.0 0.0) (s ^. #translate)---- | the geometric dimensions of a Chart inclusive of style geometry, but excluding PathA effects-styleBox :: Chart Double -> Maybe (Rect Double)-styleBox (Chart (TextA s ts) xs) = foldRect $ zipWith (\t x -> styleBoxText s t (toPoint x)) ts xs-styleBox (Chart (GlyphA s) xs) = foldRect $ (\x -> move (toPoint x) (styleBoxGlyph s)) <$> xs-styleBox (Chart (RectA s) xs) = foldRect (padRect (0.5 * s ^. #borderSize) . toRect <$> xs)-styleBox (Chart (LineA s) xs) = foldRect (padRect (0.5 * s ^. #width) . toRect <$> xs)-styleBox c@(Chart (PathA s _) _) = padRect (0.5 * s ^. #borderSize) <$> dataBox c-styleBox (Chart BlankA xs) = foldRect (toRect <$> xs)---- | the extra geometric dimensions of a [Chart]-styleBoxes :: [Chart Double] -> Maybe (Rect Double)-styleBoxes xss = foldRect $ catMaybes (styleBox <$> xss)---- | the extra geometric dimensions of a [Chart], adjusted for Nothing or singleton dimensions.-styleBoxesS :: [Chart Double] -> Rect Double-styleBoxesS xss = padBox $ foldRect $ catMaybes (styleBox <$> xss)---- | additively pad a [Chart]------ >>> import NumHask.Prelude (one)--- >>> padChart 0.1 [Chart (RectA defaultRectStyle) [RectXY one]]--- [Chart {annotation = RectA (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}), xys = [R -0.5 0.5 -0.5 0.5]},Chart {annotation = BlankA, xys = [R -0.605 0.605 -0.605 0.605]}]-padChart :: Double -> [Chart Double] -> [Chart Double]-padChart p cs = cs <> [Chart BlankA (maybeToList (RectXY . padRect p <$> styleBoxes cs))]---- | overlay a frame on some charts with some additive padding between------ >>> frameChart defaultRectStyle 0.1 [Chart BlankA []]--- [Chart {annotation = RectA (RectStyle {borderSize = 1.0e-2, borderColor = Colour 0.65 0.81 0.89 1.00, color = Colour 0.12 0.47 0.71 1.00}), xys = []},Chart {annotation = BlankA, xys = []}]-frameChart :: RectStyle -> Double -> [Chart Double] -> [Chart Double]-frameChart rs p cs = [Chart (RectA rs) (maybeToList (RectXY . padRect p <$> styleBoxes cs))] <> cs---- | useful for testing bounding boxes-frameAllCharts :: [Chart Double] -> [Chart Double]-frameAllCharts cs = mconcat $ frameChart (border 0.004 light) 0.004 . (: []) <$> cs---- | horizontally stack a list of list of charts (proceeding to the right) with a gap between-hori :: Double -> [[Chart Double]] -> [Chart Double]-hori _ [] = []-hori gap cs = foldl' step [] cs-  where-    step x a = x <> (a & fmap (#xys %~ fmap (\s -> P (widthx x) (aligny x - aligny a) + s)))-    widthx xs = maybe 0 (\(Rect x' z' _ _) -> z' - x' + gap) (styleBoxes xs)-    aligny xs = maybe 0 (\(Rect _ _ y' w') -> (y' + w') / 2) (styleBoxes xs)---- | vertically stack a list of charts (proceeding upwards), aligning them to the left-vert :: Double -> [[Chart Double]] -> [Chart Double]-vert _ [] = []-vert gap cs = foldl' step [] cs-  where-    step x a = x <> (a & fmap (#xys %~ fmap (\s -> P (alignx x - alignx a) (widthy x) + s)))-    widthy xs = maybe 0 (\(Rect _ _ y' w') -> w' - y' + gap) (styleBoxes xs)-    alignx xs = maybe 0 (\(Rect x' _ _ _) -> x') (styleBoxes xs)---- | stack a list of charts horizontally, then vertically-stack :: Int -> Double -> [[Chart Double]] -> [Chart Double]-stack _ _ [] = []-stack n gap cs = vert gap (hori gap <$> group' cs [])-  where-    group' [] acc = reverse acc-    group' x acc = group' (drop n x) (take n x : acc)--addChartBox :: Chart Double -> Rect Double -> Rect Double-addChartBox c r = sconcat (r :| maybeToList (styleBox c))--addChartBoxes :: [Chart Double] -> Rect Double -> Rect Double-addChartBoxes c r = sconcat (r :| maybeToList (styleBoxes c))
− src/Chart/Various.hs
@@ -1,325 +0,0 @@-{-# LANGUAGE OverloadedLabels #-}-{-# LANGUAGE OverloadedStrings #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}---- | Various common chart patterns.-module Chart.Various-  ( -- * sub-chart patterns-    xify,-    xify',-    yify,-    yify',-    addLineX,-    addLineY,-    stdLineChart,-    stdLines,-    lineLegend,-    tsAxes,-    titlesHud,-    gpalette,-    gpaletteStyle,-    blendMidLineStyles,--    -- * chart patterns-    quantileChart,-    digitChart,-    scatterChart,-    histChart,-    quantileHistChart,-    digitSurfaceChart,-    tableChart,-  )-where--import Chart-import Control.Lens-import Data.Bifunctor-import Data.Foldable-import qualified Data.HashMap.Strict as HashMap-import Data.Maybe-import Data.Text (Text)-import Data.Time (UTCTime (..))-import NumHask.Prelude (one)-import NumHask.Space---- | convert from [a] to [Point a], by adding the index as the x axis-xify :: [Double] -> [Point Double]-xify ys =-  zipWith Point [0 ..] ys---- | convert from [a] to [XY a], by adding the index as the x axis-xify' :: [Double] -> [XY Double]-xify' ys =-  zipWith P [0 ..] ys---- | convert from [a] to [Point a], by adding the index as the y axis-yify :: [Double] -> [Point Double]-yify xs =-  zipWith Point xs [0 ..]---- | convert from [a] to [XY a], by adding the index as the y axis-yify' :: [Double] -> [XY Double]-yify' xs =-  zipWith P xs [0 ..]---- | add a horizontal line at y-addLineX :: Double -> LineStyle -> [Chart Double] -> [Chart Double]-addLineX y ls cs = cs <> [l]-  where-    l = Chart (LineA ls) (PointXY <$> [Point lx y, Point ux y])-    (Rect lx ux _ _) = fromMaybe one $ foldRect $ mconcat $ fmap toRect . xys <$> cs---- | add a verticle line at x-addLineY :: Double -> LineStyle -> [Chart Double] -> [Chart Double]-addLineY x ls cs = cs <> [zeroLine]-  where-    zeroLine = Chart (LineA ls) (PointXY <$> [Point x ly, Point x uy])-    (Rect _ _ ly uy) = fromMaybe one $ foldRect $ mconcat $ fmap toRect . xys <$> cs---- | interpret a [[Double]] as a series of lines with x coordinates of [0..]-stdLineChart :: Double -> [Colour] -> [[Double]] -> [Chart Double]-stdLineChart w p xss =-  zipWith-    ( \c xs ->-        Chart-          (LineA (defaultLineStyle & #color .~ c & #width .~ w))-          (xify' xs)-    )-    p-    xss---- | Can of the main palette-stdLines :: Double -> [LineStyle]-stdLines w = (\c -> defaultLineStyle & #color .~ c & #width .~ w) <$> palette1_---- | Legend template for a line chart.-lineLegend :: Double -> [Text] -> [Colour] -> (LegendOptions, [(Annotation, Text)])-lineLegend w rs cs =-  ( defaultLegendOptions-      & #ltext . #size .~ 0.3-      & #lplace .~ PlaceBottom-      & #legendFrame .~ Just (RectStyle 0.02 (palette1 5) (palette1 4)),-    zipWith-      (\a r -> (LineA a, r))-      ((\c -> defaultLineStyle & #color .~ c & #width .~ w) <$> cs)-      rs-  )---- | Create a hud that has time as the x-axis, based on supplied days, and a rounded yaxis.-tsAxes :: [UTCTime] -> [AxisOptions]-tsAxes ds =-  [ defaultAxisOptions-      & #axisTick . #tstyle .~ TickRound (FormatPrec (Just 3)) 6 TickExtend-      & #place .~ PlaceLeft,-    defaultAxisOptions & #axisTick . #tstyle-      .~ TickPlaced-        ( first fromIntegral-            <$> makeTickDates PosIncludeBoundaries Nothing 8 ds-        )-  ]---- | common pattern of chart title, x-axis title and y-axis title-titlesHud :: Text -> Text -> Text -> HudOptions-titlesHud t x y =-  defaultHudOptions-    & #hudTitles-    .~ [ defaultTitle t,-         defaultTitle x & #place .~ PlaceBottom & #style . #size .~ 0.08,-         defaultTitle y & #place .~ PlaceLeft & #style . #size .~ 0.08-       ]---- | GlyphStyle palette-gpaletteStyle :: Double -> [GlyphStyle]-gpaletteStyle s = zipWith (\c g -> defaultGlyphStyle & #size .~ s & #color .~ c & #shape .~ fst g & #borderSize .~ snd g) palette1_ gpalette---- | Glyph palette-gpalette :: [(GlyphShape, Double)]-gpalette =-  [ (CircleGlyph, 0.01 :: Double),-    (SquareGlyph, 0.01),-    (RectSharpGlyph 0.75, 0.01),-    (RectRoundedGlyph 0.75 0.01 0.01, 0.01),-    (EllipseGlyph 0.75, 0),-    (VLineGlyph 0.005, 0.01),-    (HLineGlyph 0.005, 0.01),-    (TriangleGlyph (Point 0.0 0.0) (Point 1 1) (Point 1 0), 0.01),-    (PathGlyph "M0.05,-0.03660254037844387 A0.1 0.1 0.0 0 1 0.0,0.05 0.1 0.1 0.0 0 1 -0.05,-0.03660254037844387 0.1 0.1 0.0 0 1 0.05,-0.03660254037844387 Z", 0.01)-  ]---- * charts---- | Chart template for quantiles.-quantileChart ::-  Text ->-  [Text] ->-  [LineStyle] ->-  [AxisOptions] ->-  [[Double]] ->-  ChartSvg-quantileChart title names ls as xs =-  mempty & #hudOptions .~ hudOptions & #chartList .~ chart'-  where-    hudOptions =-      defaultHudOptions-        & #hudTitles .~ [defaultTitle title]-        & ( #hudLegend-              .~ Just-                ( defaultLegendOptions-                    & #ltext . #size .~ 0.1-                    & #vgap .~ 0.05-                    & #innerPad .~ 0.2-                    & #lplace .~ PlaceRight,-                  extractAnns names chart'-                )-          )-        & #hudAxes .~ as-    extractAnns = zipWith (\t c -> (c ^. #annotation, t))--    chart' =-      zipWith-        (\l c -> Chart (LineA l) c)-        ls-        (zipWith P [0 ..] <$> xs)---- | /blendMidLineStyle n w/ produces n lines of width w interpolated between two colors.-blendMidLineStyles :: Int -> Double -> (Colour, Colour) -> [LineStyle]-blendMidLineStyles l w (c1, c2) = lo-  where-    m = (fromIntegral l - 1) / 2 :: Double-    cs = (\x -> 1 - abs (fromIntegral x - m) / m) <$> [0 .. (l - 1)]-    bs = (\x -> blend x c1 c2) <$> cs-    lo = (\c -> defaultLineStyle & #width .~ w & #color .~ c) <$> bs---- | No idea what this is really.-digitChart ::-  Text ->-  [UTCTime] ->-  [Double] ->-  ChartSvg-digitChart title utcs xs =-  mempty & #hudOptions .~ hudOptions & #chartList .~ [c]-  where-    hudOptions =-      defaultHudOptions-        & #hudTitles .~ [defaultTitle title]-        & #hudAxes .~ tsAxes utcs-    c =-      Chart-        ( GlyphA-            ( defaultGlyphStyle-                & #color .~ Colour 0 0 1 1-                & #shape .~ CircleGlyph-                & #size .~ 0.01-            )-        )-        (xify' xs)---- | scatter chart-scatterChart ::-  [[Point Double]] ->-  [Chart Double]-scatterChart xss = zipWith (\gs xs -> Chart (GlyphA gs) (PointXY <$> xs)) (gpaletteStyle 0.02) xss---- | histogram chart-histChart ::-  Text ->-  Maybe [Text] ->-  Range Double ->-  Int ->-  [Double] ->-  ChartSvg-histChart title names r g xs =-  barChart defaultBarOptions barData-    & (#hudOptions . #hudTitles .~ [defaultTitle title])-  where-    barData = BarData [hr] names Nothing-    hcuts = grid OuterPos r g-    h = fill hcuts xs-    hr =-      (\(Rect x x' _ _) -> (x + x') / 2)-        <$> makeRects (IncludeOvers (NumHask.Space.width r / fromIntegral g)) h---- | a chart drawing a histogram based on quantile information-quantileHistChart ::-  Text ->-  Maybe [Text] ->-  -- | quantiles-  [Double] ->-  -- | quantile values-  [Double] ->-  ChartSvg-quantileHistChart title names qs vs =-  mempty & #hudOptions .~ hudOptions & #chartList .~ [chart']-  where-    hudOptions =-      defaultHudOptions-        & #hudTitles-        .~ [defaultTitle title]-        & #hudAxes-        .~ [ maybe-               ( defaultAxisOptions & #axisTick . #tstyle-                   .~ TickRound (FormatPrec (Just 3)) 8 TickExtend-               )-               ( \x ->-                   defaultAxisOptions & #axisTick . #tstyle-                     .~ TickPlaced (zip vs x)-               )-               names-           ]-    chart' = Chart (RectA defaultRectStyle) (RectXY <$> hr)-    hr =-      zipWith-        (\(y, w) (x, z) -> Rect x z 0 ((w - y) / (z - x)))-        (zip qs (drop 1 qs))-        (zip vs (drop 1 vs))---- | pixel chart of digitized vs digitized counts-digitSurfaceChart ::-  SurfaceStyle ->-  SurfaceLegendOptions ->-  (Text, Text, Text) ->-  [Text] ->-  [(Int, Int)] ->-  [Chart Double]-digitSurfaceChart pixelStyle plo ts names ps =-  runHud (aspect 1) (hs0 <> hs1) (cs0 <> cs1)-  where-    l = length names-    pts = Point l l-    gr :: Rect Double-    gr = fromIntegral <$> Rect 0 l 0 l-    mapCount = foldl' (\m x -> HashMap.insertWith (+) x 1.0 m) HashMap.empty ps-    f :: Point Double -> Double-    f (Point x y) = fromMaybe 0 $ HashMap.lookup (floor x, floor y) mapCount-    (hs0, cs0) = makeHud gr (qvqHud ts names)-    (cs1, hs1) =-      surfacefl-        f-        (SurfaceOptions pixelStyle pts gr)-        plo---- style helpers-qvqHud :: (Text, Text, Text) -> [Text] -> HudOptions-qvqHud ts labels =-  defaultHudOptions-    & #hudTitles .~ makeTitles ts-    & #hudAxes-      .~ [ defaultAxisOptions-             & #axisTick . #tstyle .~ TickPlaced (zip ((0.5 +) <$> [0 ..]) labels)-             & #place .~ PlaceLeft,-           defaultAxisOptions-             & #axisTick . #tstyle .~ TickPlaced (zip ((0.5 +) <$> [0 ..]) labels)-             & #place .~ PlaceBottom-         ]--makeTitles :: (Text, Text, Text) -> [Title]-makeTitles (t, xt, yt) =-  reverse-    [ defaultTitle t,-      defaultTitle xt & #place .~ PlaceBottom & #style . #size .~ 0.06,-      defaultTitle yt & #place .~ PlaceLeft & #style . #size .~ 0.06-    ]---- | Chart for double list of Text.-tableChart :: [[Text]] -> [Chart Double]-tableChart tss = zipWith (\ts x -> Chart (TextA defaultTextStyle ts) (P x <$> take (length ts) [0 ..])) tss [0 ..]
src/Data/Colour.hs view
@@ -1,61 +1,120 @@-{-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE GeneralisedNewtypeDeriving #-}+{-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE QuasiQuotes #-}+{-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wall #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}-{-# OPTIONS_GHC -fno-warn-type-defaults #-} --- | Colour representations and combinations, based on <https://hackage.haskell.org/package/Color>+-- | Colour representations and combinations.+-- module Data.Colour-  ( Colour,+  ( -- * Colour+    Colour,     pattern Colour,+    validColour,+    validate,+    trimColour,+    showRGBA,+    showRGB,+    opac',     opac,-    setOpac,     hex,-    blend,-    blends,+    rgb,     toHex,     fromHex,     unsafeFromHex,++    -- * Palette colours     palette1,-    palette1_,+    palette1a,     transparent,     black,     white,     light,     dark,+    grey,++    -- * LCH model+    LCH (..),+    pattern LCH,+    lLCH',+    cLCH',+    hLCH',+    LCHA (..),+    pattern LCHA,+    lch',+    alpha',+    RGB3 (..),+    pattern RGB3,+    rgbd',+    rgb32colour',+    LAB (..),+    pattern LAB,+    lcha2colour',+    xy2ch',++    -- * mixins+    mix,+    mixTrim,+    mixLCHA,+    mixes,+    greyed,+    lightness',+    chroma',+    hue',+    showSwatch,+    showSwatches,+    rvRGB3,+    rvColour,+    paletteR,   ) where +import Chart.Data import qualified Data.Attoparsec.Text as A import Data.Bifunctor+import Data.Bool (bool) import Data.Char import Data.Either import Data.FormatN-import Data.Generics.Labels ()+import Data.Functor.Rep import qualified Data.List as List import Data.Text (Text, pack) import qualified Data.Text as Text+import GHC.Exts import GHC.Generics hiding (prec)-import Graphics.Color.Model+import Graphics.Color.Model as M hiding (LCH)+import qualified Graphics.Color.Space as S+import NeatInterpolation+import NumHask.Algebra.Metric+import NumHask.Array.Fixed+import Optics.Core+import System.Random+import System.Random.Stateful --- | Wrapper for 'Color'.+-- $setup+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings+-- >>> import Chart+-- >>> import Optics.Core++-- | Colour type for the library, wrapping 'Color'.+-- newtype Colour = Colour'   { color' :: Color (Alpha RGB) Double   }   deriving (Eq, Generic)  -- | Constructor pattern.+--+-- > Colour red green blue alpha+-- pattern Colour :: Double -> Double -> Double -> Double -> Colour pattern Colour r g b a = Colour' (ColorRGBA r g b a) @@ -73,48 +132,65 @@         <> " "         <> fixed (Just 2) a --- | opac+-- | CSS-style representation+showRGBA :: Colour -> Text+showRGBA (Colour r' g' b' a') =+  [trimming|rgba($r, $g, $b, $a)|]+  where+    r = percent (fixedSF (Just 0)) (Just 2) r'+    g = percent (fixedSF (Just 0)) (Just 2) g'+    b = percent (fixedSF (Just 0)) (Just 2) b'+    a = fixed (Just 2) a'++-- | CSS-style representation+showRGB :: Colour -> Text+showRGB (Colour r' g' b' _) =+  [trimming|rgb($r, $g, $b)|]+  where+    r = percent (fixedSF (Just 0)) (Just 2) r'+    g = percent (fixedSF (Just 0)) (Just 2) g'+    b = percent (fixedSF (Just 0)) (Just 2) b'++-- | Is Colour in-gamut?+--+-- >>> validColour (Colour 1 1 1.01 1)+-- False+validColour :: Colour -> Bool+validColour (Colour r g b o) = r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1 && o >= 0 && o <= 1++-- | Trim colour back to gamut.+--+-- >>> trimColour (Colour 1 1 1.01 1)+-- Colour 1.00 1.00 1.00 1.00+trimColour :: Colour -> Colour+trimColour (Colour r g b a) = Colour (trim r) (trim g) (trim b) (trim a)+  where+    trim x = max 0 $ min 1 x++-- | Validate that the Colout is in-gamut.+--+-- >>> validate (Colour 1 1 1.01 1)+-- Nothing+validate :: Colour -> Maybe Colour+validate c = bool Nothing (Just c) (validColour c)++-- | Opacity or alpha opac :: Colour -> Double opac (Colour _ _ _ o) = o --- | set opacity-setOpac :: Double -> Colour -> Colour-setOpac o (Colour r g b _) = Colour r g b o+-- | lens for opacity (or alpha channel)+opac' :: Lens' Colour Double+opac' = lens opac (\(Colour r g b _) o -> Colour r g b o) --- |+-- | Convert to CSS hex representation. hex :: Colour -> Text hex c = toHex c --- | interpolate between 2 colors-blend :: Double -> Colour -> Colour -> Colour-blend c (Colour r g b a) (Colour r' g' b' a') = Colour r'' g'' b'' a''-  where-    r'' = r + c * (r' - r)-    g'' = g + c * (g' - g)-    b'' = b + c * (b' - b)-    a'' = a + c * (a' - a)---- | interpolate across a list of Colours, with input being in Range 0 1------ >>> blends 0 [black, (Colour 0.2 0.6 0.8 0.5), white] == black--- True------ >>> blends 1 [black, (Colour 0.2 0.6 0.8 0.5), white] == white--- True------ >>> blends 0.6 [black, (Colour 0.2 0.6 0.8 0.5), white]--- Colour 0.36 0.68 0.84 0.60-blends :: Double -> [Colour] -> Colour-blends _ [] = light-blends _ [c] = c-blends x cs = blend r (cs List.!! i) (cs List.!! (i + 1))-  where-    l = length cs - 1-    x' = x * fromIntegral l-    i = max 0 (min (floor x') (l - 1))-    r = x' - fromIntegral i+-- | Sets RGB color but not opacity+rgb :: Colour -> Colour -> Colour+rgb (Colour r g b _) (Colour _ _ _ o) = Colour r g b o --- |+-- | Parse CSS hex text. parseHex :: A.Parser (Color RGB Double) parseHex =   fmap toDouble@@ -125,15 +201,15 @@     . (`divMod` 256)     <$> (A.string "#" *> A.hexadecimal) --- |+-- | Convert CSS hex to Colour fromHex :: Text -> Either Text (Color RGB Double) fromHex = first pack . A.parseOnly parseHex --- |+-- | Convert CSS hex to Colour, unsafely. unsafeFromHex :: Text -> Color RGB Double unsafeFromHex t = fromRight (ColorRGB 0 0 0) $ A.parseOnly parseHex t --- | convert from 'Colour' to #xxxxxx+-- | Convert from 'Colour' to CSS hex (#xxxxxx) toHex :: Colour -> Text toHex c =   "#"@@ -163,46 +239,48 @@ i2d :: Int -> Char i2d i = chr (ord '0' + i) --- | select a Colour from the palette+-- | Select a Colour from the palette -- -- >>> palette1 0--- Colour 0.69 0.35 0.16 1.00+-- Colour 0.02 0.73 0.80 1.00+--+-- ![wheel](other/wheel.svg) palette1 :: Int -> Colour palette1 x = cycle palette1_ List.!! x --- | finite list of Colours+palette1LCHA_ :: [LCHA]+palette1LCHA_ = [LCHA 0.72 0.123 207 1, LCHA 0.40 0.10 246 1, LCHA 0.50 0.21 338 1, LCHA 0.8 0.15 331 1, LCHA 0.83 0.14 69 1, LCHA 0.57 0.15 50 1, LCHA 0.38 0.085 128 1, LCHA 0.60 0.08 104 1]++-- | Finite list of Colours+--+-- Swatched to the oklab color model:+--+-- ![palette1](other/palette1.svg) palette1_ :: [Colour]-palette1_ =-  [ Colour 0.69 0.35 0.16 1.00,-    Colour 0.65 0.81 0.89 1.00,-    Colour 0.12 0.47 0.71 1.00,-    Colour 0.89 0.10 0.11 1.00,-    Colour 0.70 0.87 0.54 1.00,-    Colour 0.20 0.63 0.17 1.00,-    Colour 0.98 0.60 0.60 1.00,-    Colour 0.99 0.75 0.44 1.00,-    Colour 1.00 0.50 0.00 1.00,-    Colour 0.99 0.99 0.99 1.00,-    Colour 0.00 0.00 0.00 1.00,-    Colour 1.00 1.00 0.60 1.00,-    Colour 0.69 0.35 0.16 1.00-  ]+palette1_ = trimColour . view lcha2colour' <$> palette1LCHA_ --- |+-- | Select a Colour from the palette with a specified opacity --+-- >>> palette1a 0 0.5+-- Colour 0.02 0.73 0.80 0.50+palette1a :: Int -> Double -> Colour+palette1a x a = set opac' a $ cycle palette1_ List.!! x++-- | black+-- -- >>> black -- Colour 0.00 0.00 0.00 1.00 black :: Colour black = Colour 0 0 0 1 --- |+-- | white -- -- >>> white -- Colour 0.99 0.99 0.99 1.00 white :: Colour white = Colour 0.99 0.99 0.99 1 --- |+-- | light -- -- For lighter huds against a dark background ... --@@ -213,7 +291,7 @@ light :: Colour light = Colour 0.94 0.94 0.94 1 --- |+-- | dark -- -- dark is hardcoded in most of the default options. --@@ -222,9 +300,409 @@ dark :: Colour dark = Colour 0.05 0.05 0.05 1 --- | zero opacity black+-- | Grey(scale) colour inputting lightness and opacity. --+-- >>> grey 0.5 0.4+-- Colour 0.50 0.50 0.50 0.40+grey :: Double -> Double -> Colour+grey g a = Colour g g g a++-- | Zero-opacity black+-- -- >>> transparent -- Colour 0.00 0.00 0.00 0.00 transparent :: Colour transparent = Colour 0 0 0 0++-- | LCH colour representation+--+-- oklab is a colour space being written into CSS specifications, that attempts to be ok at human-consistent colour representation. See:+--+-- - <https://bottosson.github.io/posts/oklab/ A perceptual color space for image processing>+-- - <https://www.w3.org/TR/css-color-5/#colorcontrast CSS Color Module Level 5>+-- - <https://www.w3.org/TR/css-color-4/#rgb-functions CSS Color Module Level 4>+--+-- The type is represented by three elements:+--+-- L: Lightness ranging from 0 (@LCH 0 _ _@ is black) to 1 (@LCH 1 _ _@ is white)+--+-- C: Chromacity, which ranges from 0 to around 0.32 or so.+--+-- H: Hue, which ranges from 0 to 360+newtype LCH a = LCH' {lchArray :: Array '[3] a} deriving (Eq, Show, IsList, Functor)++-- | LCH colour pattern+pattern LCH :: a -> a -> a -> LCH a+pattern LCH l c h <-+  LCH' [l, c, h]+  where+    LCH l c h = LCH' [l, c, h]++{-# COMPLETE LCH #-}++-- | Lightness lens for LCH+lLCH' :: Lens' (LCH Double) Double+lLCH' = lens (\(LCH l _ _) -> l) (\(LCH _ c h) l -> LCH l c h)++-- | Chromacity lens for LCH+cLCH' :: Lens' (LCH Double) Double+cLCH' = lens (\(LCH _ c _) -> c) (\(LCH l _ h) c -> LCH l c h)++-- | Hue lens for LCH+hLCH' :: Lens' (LCH Double) Double+hLCH' = lens (\(LCH _ _ h) -> h) (\(LCH l c _) h -> LCH l c h)++-- | LCHA representation, including an alpha channel.+data LCHA = LCHA' {_lch :: LCH Double, _alpha :: Double} deriving (Eq, Show)++-- | LCH lens for LCHA+lch' :: Lens' LCHA (LCH Double)+lch' = lens (\(LCHA' lch _) -> lch) (\(LCHA' _ a) lch -> LCHA' lch a)++-- | Alpha lens for LCHA+alpha' :: Lens' LCHA Double+alpha' = lens (\(LCHA' _ a) -> a) (\(LCHA' lch _) a -> LCHA' lch a)++-- | LCHA pattern+pattern LCHA :: Double -> Double -> Double -> Double -> LCHA+pattern LCHA l c h a <-+  LCHA' (LCH' [l, c, h]) a+  where+    LCHA l c h a = LCHA' (LCH' [l, c, h]) a++{-# COMPLETE LCHA #-}++-- * RGB colour representation++-- | A type to represent the RGB triple, useful as an intermediary between 'Colour' and 'LCHA'+newtype RGB3 a = RGB3' {rgb3Array :: Array '[3] a} deriving (Eq, Show, IsList, Functor)++-- | The RGB3 pattern+pattern RGB3 :: a -> a -> a -> RGB3 a+pattern RGB3 r g b <-+  RGB3' [r, g, b]+  where+    RGB3 r g b = RGB3' [r, g, b]++{-# COMPLETE RGB3 #-}++-- | Lens for conversion between Double and Word8 RGB triples.+rgbd' :: Iso' (RGB3 Double) (RGB3 Word8)+rgbd' = iso (fmap (floor . (* 256))) (fmap (\x -> fromIntegral x / 256.0))++-- | Lens for conversion between an (RGB3, alpha) pair and Colour+rgb32colour' :: Iso' (RGB3 Double, Double) Colour+rgb32colour' = iso (\(RGB3 r g b, a) -> Colour r g b a) (\(Colour r g b a) -> (RGB3 r g b, a))++-- * LAB colour representation++-- | LAB colour representation. a is green-red and b is blue-yellow+newtype LAB a = LAB' {labArray :: Array '[3] a} deriving (Eq, Show, IsList, Functor)++-- | LAB pattern+pattern LAB :: a -> a -> a -> LAB a+pattern LAB l a b <-+  LAB' [l, a, b]+  where+    LAB l a b = LAB' [l, a, b]++{-# COMPLETE LAB #-}++-- * Colour conversions++-- * lcha to colour++-- | LCHA to Colour lens+--+-- >>> c0 = Colour 0.78 0.36 0.02 1.00+-- >>> view (re lcha2colour') c0+-- LCHA' {_lch = LCH' {lchArray = [0.5969891006896103, 0.15793931531669247, 49.191113810479784]}, _alpha = 1.0}+--+-- >>> view (re lcha2colour' % lcha2colour') c0+-- Colour 0.78 0.36 0.02 1.00+--+-- >>> c1 = Colour 0.49 0.14 0.16 1+-- >>> view (re lcha2colour') c1+-- LCHA' {_lch = LCH' {lchArray = [0.40115567099848914, 0.12279066817938503, 21.51476756026837]}, _alpha = 1.0}+--+-- >>> view (re lcha2colour' % lcha2colour') c1+-- Colour 0.49 0.14 0.16 1.00+lcha2colour' :: Iso' LCHA Colour+lcha2colour' =+  iso+    (\(LCHA' lch a) -> let (RGB3 r g b) = view (re lab2lch' % re rgb2lab') lch in Colour r g b a)+    (\c@(Colour _ _ _ a) -> LCHA' (view (re rgb32colour' % _1 % rgb2lab' % lab2lch') c) a)++-- * lab to lch++-- | Lens between generic XY color representations and CH ones, which are polar version of the XY.+xy2ch' :: Iso' (Double, Double) (Double, Double)+xy2ch' =+  iso+    (\(x, y) -> (norm (Point x y), 180 / pi * mod_ (angle (Point x y)) (2 * pi)))+    (\(c, h) -> let (Point x y) = coord (Polar c (pi / 180 * h)) in (x, y))++mod_ :: Double -> Double -> Double+mod_ x d = x - fromIntegral (floor (x / d) :: Integer) * d++-- | Lens between LAB and LCH+lab2lch' :: Iso' (LAB Double) (LCH Double)+lab2lch' =+  iso+    (\(LAB l a b) -> let (c, h) = view xy2ch' (a, b) in LCH l c h)+    (\(LCH l c h) -> let (a, b) = view (re xy2ch') (c, h) in LAB l a b)++-- * rgb to lab++-- | Lens between RGB3 and LAB+rgb2lab' :: Iso' (RGB3 Double) (LAB Double)+rgb2lab' =+  iso+    (\(RGB3' a) -> LAB' . xyz2lab_ . rgb2xyz_ $ a)+    (\(LAB' a) -> RGB3' . xyz2rgb_ . lab2xyz_ $ a)++-- * rgb to xyz++xyz2rgb_ :: Array '[3] Double -> Array '[3] Double+xyz2rgb_ a = fromList [r, g, b]+  where+    (S.ColorSRGB r g b) = S.xyz2rgb (S.ColorXYZ (a `index` [0]) (a `index` [1]) (a `index` [2])) :: Color (S.SRGB 'S.NonLinear) Double++-- >>> rgb2xyz_ [1,1,1]+-- [0.9505, 1.0, 1.089]+rgb2xyz_ :: Array '[3] Double -> Array '[3] Double+rgb2xyz_ a = fromList [x, y, z]+  where+    (S.ColorXYZ x y z) = S.rgb2xyz (S.ColorSRGB (a `index` [0]) (a `index` [1]) (a `index` [2])) :: Color (S.XYZ S.D65) Double++-- * xyz to lab++m1 :: Array '[3, 3] Double+m1 =+  [ 0.8189330101,+    0.3618667424,+    -0.1288597137,+    0.0329845436,+    0.9293118715,+    0.0361456387,+    0.0482003018,+    0.2643662691,+    0.6338517070+  ]++m2 :: Array '[3, 3] Double+m2 =+  [ 0.2104542553,+    0.7936177850,+    -0.0040720468,+    1.9779984951,+    -2.4285922050,+    0.4505937099,+    0.0259040371,+    0.7827717662,+    -0.8086757660+  ]++cubicroot :: (Floating a, Ord a) => a -> a+cubicroot x = bool (-1 * (-x) ** (1 / 3.0)) (x ** (1 / 3.0)) (x >= 0)++-- >>> xyz2lab_ [0.95, 1, 1.089]+-- [0.9999686754143632, -2.580058168537569e-4, -1.1499756458199784e-4]+--+-- >>> xyz2lab_ [1,0,0]+-- [0.4499315814860224, 1.2357102101076207, -1.9027581087245393e-2]+--+-- >>> xyz2lab_ [0,1,0]+-- [0.921816758286376, -0.6712376131199635, 0.2633235500611929]+--+-- >>> xyz2lab_ [1,0,1]+-- [0.5081033967278659, 1.147837087146462, -0.36768466477695416]+--+-- >>> xyz2lab_ [0,0,1]+-- [0.15260258004008057, -1.4149965510120839, -0.4489272035597538]+xyz2lab_ :: Array '[3] Double -> Array '[3] Double+xyz2lab_ xyz =+  dot sum (*) m2 (cubicroot <$> dot sum (*) m1 xyz)++m1' :: Array '[3, 3] Double+m1' =+  [ 1.227013851103521026,+    -0.5577999806518222383,+    0.28125614896646780758,+    -0.040580178423280593977,+    1.1122568696168301049,+    -0.071676678665601200577,+    -0.076381284505706892869,+    -0.42148197841801273055,+    1.5861632204407947575+  ]++m2' :: Array '[3, 3] Double+m2' =+  [ 0.99999999845051981432,+    0.39633779217376785678,+    0.21580375806075880339,+    1.0000000088817607767,+    -0.1055613423236563494,+    -0.063854174771705903402,+    1.0000000546724109177,+    -0.089484182094965759684,+    -1.2914855378640917399+  ]++lab2xyz_ :: Array '[3] Double -> Array '[3] Double+lab2xyz_ lab =+  dot sum (*) m1' ((** 3.0) <$> dot sum (*) m2' lab)++-- * mixins++-- | Mix 2 colours, using the oklch model.+--+-- This may not always be what you expect. One example is mixing black and another colour:+--+-- >>> mix 0.8 (Colour 0 0 0 1) (Colour 0.2 0.6 0.8 0.5)+-- Colour -0.09 0.48 0.45 0.60+--+-- The mix has gone out of gamut because we are swishing through hue mixes.+--+-- In this case, settting the hue on the black colour within the LCH contruct helps:+-- >>> betterblack = set (lch' % hLCH') (view hue' (Colour 0.2 0.6 0.8 0.5)) (review lcha2colour' black)+-- >>> view lcha2colour' $ mixLCHA 0.8 betterblack (review lcha2colour' $ Colour 0.2 0.6 0.8 0.5)+-- Colour 0.14 0.44 0.59 0.60+mix :: Double -> Colour -> Colour -> Colour+mix x c0 c1 = view lcha2colour' (mixLCHA x (review lcha2colour' c0) (review lcha2colour' c1))++-- | Mix 2 colours, using the oklch model, trimming the reult back to in-gamut.+--+-- >>> mixTrim 0.8 (Colour 0 0 0 1) (Colour 0.2 0.6 0.8 0.5)+-- Colour 0.00 0.48 0.45 0.60+mixTrim :: Double -> Colour -> Colour -> Colour+mixTrim x c0 c1 = trimColour (mix x c0 c1)++-- | Mix two LCHA specified colours.+mixLCHA :: Double -> LCHA -> LCHA -> LCHA+mixLCHA x (LCHA l c h a) (LCHA l' c' h' a') = LCHA l'' c'' h'' a''+  where+    l'' = l + x * (l' - l)+    c'' = c + x * (c' - c)+    h'' = h + x * (h' - h)+    a'' = a + x * (a' - a)++-- | Interpolate across a list of Colours, with input being in Range 0 1+--+-- >>> mixes 0 [black, (Colour 0.2 0.6 0.8 0.5), white]+-- Colour 0.00 0.00 0.00 1.00+--+-- >>> mixes 1 [black, (Colour 0.2 0.6 0.8 0.5), white]+-- Colour 0.99 0.99 0.99 1.00+--+-- >>> mixes 0.6 [black, (Colour 0.2 0.6 0.8 0.5), white]+-- Colour 0.42 0.67 0.86 0.60+mixes :: Double -> [Colour] -> Colour+mixes _ [] = light+mixes _ [c] = c+mixes x cs = mix r (cs List.!! i) (cs List.!! (i + 1))+  where+    l = length cs - 1+    x' = x * fromIntegral l+    i = max 0 (min (floor x') (l - 1))+    r = x' - fromIntegral i++-- * Colour manipulation++-- | Convert a colour to grayscale with the same lightness.+--+-- >>> greyed (Colour 0.4 0.7 0.8 0.4)+-- Colour 0.65 0.65 0.65 0.40+greyed :: Colour -> Colour+greyed = over chroma' (const 0)++-- | Lightness lens+--+-- >>> over lightness' (*0.8) (Colour 0.4 0.7 0.8 0.4)+-- Colour 0.22 0.52 0.62 0.40+lightness' :: Lens' Colour Double+lightness' = re lcha2colour' % lch' % lLCH'++-- | Chromacity lens+--+-- >>> over chroma' (*0.8) (Colour 0.4 0.7 0.8 0.4)+-- Colour 0.46 0.69 0.77 0.40+chroma' :: Lens' Colour Double+chroma' = re lcha2colour' % lch' % cLCH'++-- | Hue lens+--+-- >>> over hue' (+180) (Colour 0.4 0.7 0.8 0.4)+-- Colour 0.83 0.58 0.49 0.40+hue' :: Lens' Colour Double+hue' = re lcha2colour' % lch' % hLCH'++-- | Html element to display colours+--+-- >>> showSwatch "swatch" dark+-- "<div class=swatch style=\"background:rgba(5%, 5%, 5%, 1.00);\">swatch</div>"+showSwatch :: Text -> Colour -> Text+showSwatch label c =+  [trimming|<div class=swatch style="background:$rgba;">$label</div>|]+  where+    rgba = showRGBA c++-- | Show multiple colors with embedded text.+showSwatches :: Text -> Text -> [(Text, Colour)] -> Text+showSwatches pref suff hs =+  [trimming|<div>+$pref+$divs+$suff+</div>+|]+  where+    divs = Text.intercalate "\n" (uncurry showSwatch <$> hs)++-- * random colors++instance Uniform (RGB3 Double) where+  uniformM gen = do+    r <- uniformRM (0, 1) gen+    g <- uniformRM (0, 1) gen+    b <- uniformRM (0, 1) gen+    pure (RGB3 r g b)++instance Uniform Colour where+  uniformM gen = do+    r <- uniformRM (0, 1) gen+    g <- uniformRM (0, 1) gen+    b <- uniformRM (0, 1) gen+    a <- uniformRM (0, 1) gen+    pure (Colour r g b a)++-- | Random variates of a uniform+rvs :: (Uniform a) => [a]+rvs = go g0+  where+    g0 = mkStdGen 42+    go g = let (x, g') = uniform g in x : go g'++-- | Random list of RGB3s+rvRGB3 :: [RGB3 Double]+rvRGB3 = rvs++-- | Random list of Colours+rvColour :: [Colour]+rvColour = rvs++-- | Random Colours with an opacity of 1 that are not too extreme in terms of lightness or chromacity.+paletteR :: [Colour]+paletteR = go g0+  where+    g0 = mkStdGen 42+    go g = let (x, g') = runStateGen g rvSensible in x : go g'++-- | A random Colour generator that provides a (hopefully) pleasant colour not too light, dark, over-saturated or dull.+rvSensible :: StatefulGen g m => g -> m Colour+rvSensible gen = do+  l <- uniformRM (0.3, 0.75) gen+  c <- uniformRM (0.05, 0.24) gen+  h <- uniformRM (0, 360) gen+  pure ((trimColour . view lcha2colour') (LCHA l c h 1))
− src/Data/FormatN.hs
@@ -1,242 +0,0 @@-{-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE StrictData #-}-{-# LANGUAGE TypeFamilies #-}-{-# OPTIONS_GHC -Wall #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}-{-# OPTIONS_GHC -fno-warn-type-defaults #-}---- | Formatting of numeric values.-module Data.FormatN-  ( FormatN (..),-    defaultFormatN,-    fromFormatN,-    toFormatN,-    fixed,-    decimal,-    prec,-    comma,-    expt,-    dollar,-    percent,-    formatN,-    precision,-    formatNs,-    showOr,-    roundSig,-  )-where--import Data.Bifunctor-import Data.Bool-import Data.Containers.ListUtils (nubOrd)-import Data.Foldable-import Data.Generics.Labels ()-import Data.Scientific-import Data.String-import Data.Text (Text, pack)-import qualified Data.Text as Text-import GHC.Generics hiding (prec)-import Prelude---- $setup---- | Number formatting options.------ >>> defaultFormatN--- FormatComma (Just 2)-data FormatN-  = FormatFixed (Maybe Int)-  | FormatDecimal (Maybe Int)-  | FormatComma (Maybe Int)-  | FormatExpt (Maybe Int)-  | FormatPrec (Maybe Int)-  | FormatDollar (Maybe Int)-  | FormatPercent (Maybe Int)-  | FormatNone-  deriving (Eq, Show, Generic)---- | The official format-defaultFormatN :: FormatN-defaultFormatN = FormatComma (Just 2)---- | textifier-fromFormatN :: (IsString s) => FormatN -> s-fromFormatN (FormatFixed _) = "Fixed"-fromFormatN (FormatDecimal _) = "Decimal"-fromFormatN (FormatComma _) = "Comma"-fromFormatN (FormatExpt _) = "Expt"-fromFormatN (FormatPrec _) = "Prec"-fromFormatN (FormatDollar _) = "Dollar"-fromFormatN (FormatPercent _) = "Percent"-fromFormatN FormatNone = "None"---- | readifier-toFormatN :: (Eq s, IsString s) => s -> Maybe Int -> FormatN-toFormatN "Fixed" n = FormatFixed n-toFormatN "Decimal" n = FormatDecimal n-toFormatN "Comma" n = FormatComma n-toFormatN "Expt" n = FormatExpt n-toFormatN "Prec" n = FormatPrec n-toFormatN "Dollar" n = FormatDollar n-toFormatN "Percent" n = FormatPercent n-toFormatN "None" _ = FormatNone-toFormatN _ _ = FormatNone---- | to x decimal places------ >>> fixed (Just 2) 1--- "1.00"------ >>> fixed (Just 2) 0.001--- "0.00"-fixed :: Maybe Int -> Double -> Text-fixed x n = pack $ formatScientific Fixed x (fromFloatDigits n)---- | scientific exponential------ >>> expt (Just 2) 1234--- "1.23e3"-expt :: Maybe Int -> Double -> Text-expt x n = pack $ formatScientific Exponent x (fromFloatDigits n)---- | round to n significant figures------ >>> roundSig 2 1234--- 1230.0------ >>> roundSig 2 0.001234--- 1.23e-3-roundSig :: Int -> Double -> Scientific-roundSig n x = scientific r' (e - length ds0)-  where-    (ds, e) = toDecimalDigits $ fromFloatDigits x-    (ds0, ds1) = splitAt (n + 1) ds-    r =-      (fromIntegral $ foldl' (\x a -> x * 10 + a) 0 ds0 :: Double)-        + fromIntegral (foldl' (\x a -> x * 10 + a) 0 ds1) / (10.0 ^ length ds1)-    r' = round r :: Integer---- | format numbers between 0.001 and 1,000,000 using digit and comma notation and exponential outside this range, with x significant figures.--- > prec (Just 1) 0.00234--- "0.0023"------ > prec (Just 1) 0.000023--- "2.3e-5"------ > prec (Just 1) 123--- "120"------ > prec (Just 1) 123456--- "120,000"------ >>> prec (Just 1) 1234567--- "1.2e6"-prec :: Maybe Int -> Double -> Text-prec n x-  | x < 0 = "-" <> prec n (-x)-  | x == 0 = decimal n (toRealFloat x')-  | x < 0.001 = expt n x-  | x > 1e6 = expt n x-  | otherwise = decimal n (toRealFloat x')-  where-    x' = maybe fromFloatDigits roundSig n x---- | round to n significant figures and always use decimal notation--- >>> decimal (Just 2) 0.000001234--- "0.00000123"------ >>> decimal (Just 2) 1234567--- "1230000"-decimal :: Maybe Int -> Double -> Text-decimal n x = x''-  where-    x' = pack $ formatScientific Fixed Nothing $ maybe fromFloatDigits roundSig n x-    x'' = (\x -> bool x' (fst x) (snd x == ".0")) $ Text.breakOn "." x'---- | add commas format for numbers above 1,000 but below 1 million, otherwise use prec.------ >>> comma Nothing 1234.567--- "1,234.567"------ >>> comma (Just 2) 1234--- "1,230"-comma :: Maybe Int -> Double -> Text-comma n x-  | x < 0 = "-" <> comma n (-x)-  | x < 1000 || x > 1e6 = prec n x-  | otherwise = case n of-    Nothing -> addcomma (pack $ show x)-    Just _ -> addcomma (prec n x)-  where-    addcomma :: Text -> Text-    addcomma x = uncurry (<>) . first (Text.reverse . Text.intercalate "," . Text.chunksOf 3 . Text.reverse) $ Text.breakOn "." x---- | dollars and cents, always decimal notation------ >>> dollar (Just 2) 1234--- "$1,230"------ >>> dollar (Just 2) 0.01234--- "$0.0123"-dollar :: Maybe Int -> Double -> Text-dollar n x-  | x < 0 = "-" <> dollar n (-x)-  | otherwise = "$" <> comma n x---- | fixed percent, always decimal notation------ >>> percent (Just 2) 0.001234--- "0.123%"-percent :: Maybe Int -> Double -> Text-percent n x = (<> "%") $ decimal n (100 * x)---- | make text-formatN :: FormatN -> Double -> Text-formatN (FormatFixed n) x = fixed n x-formatN (FormatDecimal n) x = decimal n x-formatN (FormatPrec n) x = prec n x-formatN (FormatComma n) x = comma n x-formatN (FormatExpt n) x = expt n x-formatN (FormatDollar n) x = dollar n x-formatN (FormatPercent n) x = percent n x-formatN FormatNone x = pack (show x)---- | Provide formatted text for a list of numbers so that they are just distinguished.  'precision commas (Just 2) ticks' means use as much precision as is needed for them to be distinguished, but with at least 2 significant figures.-precision :: (Maybe Int -> Double -> Text) -> Maybe Int -> [Double] -> [Text]-precision f Nothing xs = f Nothing <$> xs-precision f (Just n0) xs =-  precLoop f n0 xs-  where-    precLoop f' n xs' =-      let s = f' (Just n) <$> xs'-       in if s == nubOrd s || n > 4-            then s-            else precLoop f' (n + 1) xs'---- | Consistently format a list of doubles.-formatNs :: FormatN -> [Double] -> [Text]-formatNs (FormatFixed n) xs = precision fixed n xs-formatNs (FormatDecimal n) xs = precision decimal n xs-formatNs (FormatPrec n) xs = precision prec n xs-formatNs (FormatComma n) xs = precision comma n xs-formatNs (FormatExpt n) xs = precision expt n xs-formatNs (FormatDollar n) xs = precision dollar n xs-formatNs (FormatPercent n) xs = precision percent n xs-formatNs FormatNone xs = pack . show <$> xs---- | Format with the shorter of show and formatN.-showOr :: FormatN -> Double -> Text-showOr f x = bool (bool f' (pack s') (Text.length (pack s') < Text.length f')) "0" (x < 1e-6 && x > -1e-6)-  where-    f' = formatN f x-    s' = show x
src/Data/Path.hs view
@@ -1,25 +1,24 @@-{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE NegativeLiterals #-}-{-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RebindableSyntax #-}-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}-{-# OPTIONS_GHC -fno-warn-type-defaults #-}+{-# OPTIONS_GHC -Wno-incomplete-patterns #-}  -- | SVG path manipulation module Data.Path-  ( -- * Path fundamental+  ( -- * Svg Paths     -- $path-    PathInfo (..),+    PathData (..),+    pointPath,+    movePath,+    scalePath,+    projectPaths,+    pathBoxes,+    pathBox,++    -- * Path maths     ArcInfo (..),     ArcPosition (..),-    parsePath,-    toPathAbsolute,-    toPathCommand,-    toPathAbsolutes,-    toPathXYs,     ArcCentroid (..),     arcCentroid,     arcPosition,@@ -44,42 +43,25 @@     singletonQuad,     singletonArc,     singletonPie,-    singletonPie',-    toSingletonArc,-    pathBoxes,-    pathBox,   ) where +import Chart.Data import qualified Control.Foldl as L-import Control.Lens hiding ((...))-import qualified Data.Attoparsec.Text as A-import Data.Bifunctor-import Data.Either-import Data.FormatN-import Data.Generics.Labels ()-import Data.Text (Text, pack)-import qualified Data.Text as Text+import Control.Monad.State.Lazy import GHC.Generics-import GHC.OverloadedLabels import qualified Geom2D.CubicBezier as B-import Graphics.SvgTree (Origin (..), PathCommand (..))-import qualified Graphics.SvgTree as SvgTree-import Graphics.SvgTree.PathParser-import qualified Linear import NumHask.Prelude-import NumHask.Space  -- $setup--- FIXME:--- :set -XRebindableSyntax gets timed out by cabal-docspec here, but NoImplicitPrelude works.--- >>> :set -XNoImplicitPrelude--- >>> :set -XNegativeLiterals+--+-- >>> :set -XOverloadedLabels+-- >>> :set -XOverloadedStrings -- >>> import Chart--- >>> import NumHask.Prelude+-- >>> import Optics.Core  -- $path--- Every element of an svg path can be thought of as exactly two points in space, with instructions of how to draw a curve between them.  From this point of view, one which this library adopts, a path chart is thus very similar to a line chart.  There's just a lot more information about the style of this line to deal with.+-- Every element of an SVG path can be thought of as exactly two points in space, with instructions of how to draw a curve between them.  From this point of view, one which this library adopts, a path chart is thus very similar to a line chart.  There's just a lot more information about the style to deal with. -- -- References: --@@ -87,284 +69,87 @@ -- -- [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) --- | parse a raw path string------ >>> let outerseg1 = "M-1.0,0.5 A0.5 0.5 0.0 1 1 0.0,-1.2320508075688774 1.0 1.0 0.0 0 0 -0.5,-0.3660254037844387 1.0 1.0 0.0 0 0 -1.0,0.5 Z"--- >>> parsePath outerseg1--- [MoveTo OriginAbsolute [V2 (-1.0) 0.5],EllipticalArc OriginAbsolute [(0.5,0.5,0.0,True,True,V2 0.0 (-1.2320508075688774)),(1.0,1.0,0.0,False,False,V2 (-0.5) (-0.3660254037844387)),(1.0,1.0,0.0,False,False,V2 (-1.0) 0.5)],EndPath]------ https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d-parsePath :: Text -> [PathCommand]-parsePath t = fromRight [] $ A.parseOnly pathParser t---- | To fit in with the requirements of the library design, specifically the separation of what a chart is into XY data Points from representation of these points, path instructions need to be decontructed into:------ - define a single chart element as a line.------ - split a single path element into the start and end points of the line, which become the 'Chart.Types.xys' of a 'Chart.Types.Chart', and the rest of the information, which is called 'PathInfo' and incorporated into the 'Chart.Types.Chart' 'Chart.Types.annotation'.------ An arc path is variant to affine transformations of the 'Chart.Types.xys' points: angles are not presevred in the new reference frame.-data PathInfo a-  = StartI-  | LineI-  | CubicI (Point a) (Point a)-  | QuadI (Point a)-  | ArcI (ArcInfo a)+-- | Representation of a single SVG path data point+data PathData a+  = -- | Starting position+    StartP (Point a)+  | -- | line (from previous position)+    LineP (Point a)+  | -- | cubic bezier curve+    CubicP (Point a) (Point a) (Point a)+  | -- | quad bezier curve+    QuadP (Point a) (Point a)+  | -- arc+    ArcP (ArcInfo a) (Point a)   deriving (Show, Eq, Generic) --- | convert from a path info, start point, end point triple to a path text clause.------ Note that morally,------ > toPathsAbsolute . toInfos . parsePath == id------ but the round trip destroys much information, including:------ - path text spacing------ - "Z", which is replaced by a LineI instruction from the end point back to the original start of the path.------ - Sequences of the same instruction type are uncompressed------ - As the name suggests, relative paths are translated to absolute ones.------ - implicit L's in multiple M instructions are separated.------ In converting between chart-svg and SVG there are two changes in reference:------ - arc rotation is expressed as positive degrees for a clockwise rotation in SVG, and counter-clockwise in radians for chart-svg------ - A positive y-direction is down for SVG and up for chart-svg-toPathAbsolute ::-  -- | (info, start, end)-  (PathInfo Double, Point Double) ->-  -- | path text-  Text-toPathAbsolute (StartI, p) = "M " <> pp p-toPathAbsolute (LineI, p) = "L " <> pp p-toPathAbsolute (CubicI c1 c2, next) =-  "C "-    <> pp c1-    <> " "-    <> pp c2-    <> " "-    <> pp next-toPathAbsolute (QuadI control, next) =-  "Q "-    <> pp control-    <> " "-    <> pp next-toPathAbsolute (ArcI (ArcInfo (Point x y) phi' l sw), x2) =-  "A "-    <> (pack . show) x-    <> " "-    <> (pack . show) y-    <> " "-    <> (pack . show) (-phi' * 180 / pi)-    <> " "-    <> bool "0" "1" l-    <> " "-    <> bool "0" "1" sw-    <> " "-    <> pp x2---- | render a point (including a flip of the y dimension).-pp :: Point Double -> Text-pp (Point x y) =-  showOr (FormatFixed (Just 4)) x <> ","-    <> showOr (FormatFixed (Just 4)) (bool (-y) y (y == zero))---- | convert an (info, point) list to an svg d path text.-toPathAbsolutes :: [(PathInfo Double, Point Double)] -> Text-toPathAbsolutes = L.fold (L.Fold step begin done)-  where-    done = Text.intercalate " " . reverse-    begin = []-    step ts (info, next) = toPathAbsolute (info, next) : ts---- | Convert from PathInfo to PathCommand-toPathCommand ::-  (PathInfo Double, Point Double) ->-  -- | path text-  PathCommand-toPathCommand (StartI, p) = MoveTo OriginAbsolute [toV2 p]-toPathCommand (LineI, p) = LineTo OriginAbsolute [toV2 p]-toPathCommand (CubicI c1 c2, p) = CurveTo OriginAbsolute [(toV2 c1, toV2 c2, toV2 p)]-toPathCommand (QuadI c, p) = QuadraticBezier OriginAbsolute [(toV2 c, toV2 p)]-toPathCommand (ArcI (ArcInfo (Point rx ry) phi' l sw), p) =-  EllipticalArc OriginAbsolute [(rx, ry, phi', l, sw, toV2 p)]--toV2 :: Point a -> Linear.V2 a-toV2 (Point x y) = Linear.V2 x y+-- | View the Point part of a PathData+pointPath :: PathData a -> Point a+pointPath (StartP p) = p+pointPath (LineP p) = p+pointPath (CubicP _ _ p) = p+pointPath (QuadP _ p) = p+pointPath (ArcP _ p) = p -data StateInfo = StateInfo-  { -- | previous position-    cur :: Point Double,-    -- | start point (to close out the path)-    start :: Point Double,-    -- | last control point-    infoControl :: Point Double-  }-  deriving (Eq, Show, Generic)+-- | Move the Point part of a PathData+movePath :: (Additive a) => Point a -> PathData a -> PathData a+movePath x (StartP p) = StartP (p + x)+movePath x (LineP p) = LineP (p + x)+movePath x (CubicP c1 c2 p) = CubicP (c1 + x) (c2 + x) (p + x)+movePath x (QuadP c p) = QuadP (c + x) (p + x)+movePath x (ArcP i p) = ArcP i (p + x) -stateInfo0 :: StateInfo-stateInfo0 = StateInfo zero zero zero+-- | Multiplicatively scale a PathData+scalePath :: (Multiplicative a) => a -> PathData a -> PathData a+scalePath x (StartP p) = StartP (fmap (x *) p)+scalePath x (LineP p) = LineP (fmap (x *) p)+scalePath x (CubicP c1 c2 p) = CubicP (fmap (x *) c1) (fmap (x *) c2) (fmap (x *) p)+scalePath x (QuadP c p) = QuadP (fmap (x *) c) (fmap (x *) p)+scalePath x (ArcP i p) = ArcP i (fmap (x *) p) --- | Convert a path command fragment to an instruction + point.------ flips the y-dimension of points.-toInfo :: StateInfo -> SvgTree.PathCommand -> (StateInfo, [(PathInfo Double, Point Double)])-toInfo s (MoveTo _ []) = (s, [])-toInfo _ (MoveTo OriginAbsolute (x : xs)) = L.fold (L.Fold step begin (second reverse)) (fromV2 <$> xs)-  where-    x0 = fromV2 x-    begin = (StateInfo x0 x0 zero, [(StartI, x0)])-    step (s, p) a = (s & #cur .~ a, (LineI, a) : p)-toInfo s (MoveTo OriginRelative (x : xs)) = L.fold (L.Fold step begin (second reverse)) (fromV2 <$> xs)-  where-    x0 = s ^. #cur + fromV2 x-    begin = (StateInfo x0 x0 zero, [(StartI, x0)])-    step (s, p) a = let a' = a + s ^. #cur in (s & #cur .~ a', (LineI, a') : p)-toInfo s EndPath = (s, [(LineI, s ^. #start)])-toInfo s (LineTo OriginAbsolute xs) = L.fold (L.Fold step (s, []) (second reverse)) (fromV2 <$> xs)-  where-    step (s, p) a = (s & #cur .~ a, (LineI, a) : p)-toInfo s (LineTo OriginRelative xs) = L.fold (L.Fold step (s, []) (second reverse)) (fromV2 <$> xs)-  where-    step (s, p) a = let a' = a + s ^. #cur in (s & #cur .~ a', (LineI, a') : p)-toInfo s (HorizontalTo OriginAbsolute xs) = L.fold (L.Fold step (s, []) (second reverse)) xs-  where-    step (s@(StateInfo (Point _ cy) _ _), p) a =-      let a' = Point a cy in (s & #cur .~ a', (LineI, a') : p)-toInfo s (HorizontalTo OriginRelative xs) = L.fold (L.Fold step (s, []) (second reverse)) xs-  where-    step (s@(StateInfo (Point cx cy) _ _), p) a =-      let a' = Point (a + cx) cy in (s & #cur .~ a', (LineI, a') : p)-toInfo s (VerticalTo OriginAbsolute xs) = L.fold (L.Fold step (s, []) (second reverse)) xs-  where-    step (s@(StateInfo (Point cx _) _ _), p) a =-      let a' = Point cx a in (s & #cur .~ a', (LineI, a') : p)-toInfo s (VerticalTo OriginRelative xs) = L.fold (L.Fold step (s, []) (second reverse)) xs-  where-    step (s@(StateInfo (Point cx cy) _ _), p) a =-      let a' = Point cx (a + cy) in (s & #cur .~ a', (LineI, a') : p)-toInfo s (CurveTo OriginAbsolute xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = (\(c1, c2, x2) -> (fromV2 c1, fromV2 c2, fromV2 x2)) <$> xs-    step (s, p) (c1, c2, x2) =-      (s & #cur .~ x2 & #infoControl .~ c2, (CubicI c1 c2, x2) : p)-toInfo s (CurveTo OriginRelative xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = (\(c1, c2, x2) -> (fromV2 c1, fromV2 c2, fromV2 x2)) <$> xs-    step (s, p) (c1, c2, x2) =-      (s & #cur .~ (x2 + s ^. #cur) & #infoControl .~ (c2 + s ^. #cur), (CubicI (c1 + s ^. #cur) (c2 + s ^. #cur), x2 + s ^. #cur) : p)-toInfo s (SmoothCurveTo OriginAbsolute xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = bimap fromV2 fromV2 <$> xs-    step (s, p) (c2, x2) =-      (s & #cur .~ x2, (CubicI (s ^. #cur - (s ^. #infoControl - s ^. #cur)) c2, x2) : p)-toInfo s (SmoothCurveTo OriginRelative xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = bimap fromV2 fromV2 <$> xs-    step (s, p) (c2, x2) =-      ( s-          & #cur .~ (x2 + s ^. #cur)-          & #infoControl .~ (c2 + s ^. #cur),-        (CubicI (s ^. #cur - (s ^. #infoControl - s ^. #cur)) (c2 + s ^. #cur), x2 + s ^. #cur) : p-      )-toInfo s (QuadraticBezier OriginAbsolute xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = bimap fromV2 fromV2 <$> xs-    step (s, p) (c1, x2) =-      ( s-          & #cur .~ x2-          & #infoControl .~ c1,-        (QuadI c1, x2) : p-      )-toInfo s (QuadraticBezier OriginRelative xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = bimap fromV2 fromV2 <$> xs-    step (s, p) (c1, x2) =-      (s & #cur .~ x2 & #infoControl .~ (c1 + s ^. #cur), (QuadI (c1 + s ^. #cur), x2 + s ^. #cur) : p)-toInfo s (SmoothQuadraticBezierCurveTo OriginAbsolute xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = fromV2 <$> xs-    step (s, p) x2 =-      ( s-          & #cur .~ x2-          & #infoControl .~ (s ^. #cur - (s ^. #infoControl - s ^. #cur)),-        (QuadI (s ^. #cur - (s ^. #infoControl - s ^. #cur)), x2) : p-      )-toInfo s (SmoothQuadraticBezierCurveTo OriginRelative xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = fromV2 <$> xs-    step (s, p) x2 =-      ( s-          & #cur .~ (x2 + s ^. #cur)-          & #infoControl .~ (s ^. #cur - (s ^. #infoControl - s ^. #cur)),-        (QuadI (s ^. #cur - (s ^. #infoControl - s ^. #cur)), x2 + s ^. #cur) : p+-- | Project a list of connected PathDatas from one Rect (XY plave) to a new one.+projectPaths :: Rect Double -> Rect Double -> [PathData Double] -> [PathData Double]+projectPaths new old ps =+  flip evalState zero $+    sequence $+      ( \p -> do+          x <- get+          let d = projectPath new old x p+          put (pointPath d)+          pure d       )-toInfo s (EllipticalArc OriginAbsolute xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = (\(x, y, r, l, sw, x2) -> (x, y, r, l, sw, fromV2 x2)) <$> xs-    step (s, p) a@(_, _, _, _, _, x2) =-      (s & #cur .~ x2, (fromPathEllipticalArc (s ^. #cur) a, x2) : p)-toInfo s (EllipticalArc OriginRelative xs) =-  L.fold (L.Fold step (s, []) (second reverse)) xs'-  where-    xs' = (\(x, y, r, l, sw, x2) -> (x, y, r, l, sw, fromV2 x2)) <$> xs-    step (s, p) a@(_, _, _, _, _, x2) =-      let x2' = x2 + s ^. #cur-       in (s & #cur .~ x2', (fromPathEllipticalArc (s ^. #cur) a, x2') : p)--fromPathEllipticalArc :: Point a -> (a, a, a, Bool, Bool, Point a) -> PathInfo a-fromPathEllipticalArc _ (x, y, r, l, s, _) = ArcI (ArcInfo (Point x y) r l s)--fromV2 :: (Subtractive a) => Linear.V2 a -> Point a-fromV2 (Linear.V2 x y) = Point x (-y)---- | Convert from a path command list to a PathA specification-toPathXYs :: [SvgTree.PathCommand] -> [(PathInfo Double, Point Double)]-toPathXYs [] = []-toPathXYs xs =-  snd (foldl' (\(x, l) a -> second (l <>) $ toInfo x a) (stateInfo0, []) xs)---- | convert cubic position to path info.-singletonCubic :: CubicPosition Double -> [(PathInfo Double, Point Double)]-singletonCubic (CubicPosition s e c1 c2) = [(StartI, s), (CubicI c1 c2, e)]+        <$> ps --- | convert quad position to path info.-singletonQuad :: QuadPosition Double -> [(PathInfo Double, Point Double)]-singletonQuad (QuadPosition s e c) = [(StartI, s), (QuadI c, e)]+-- | Project a PathData from one Rect (XY plave) to a new one.+projectPath ::+  Rect Double ->+  Rect Double ->+  Point Double ->+  PathData Double ->+  PathData Double+projectPath new old _ (CubicP c1 c2 p) =+  CubicP (projectOnP new old c1) (projectOnP new old c2) (projectOnP new old p)+projectPath new old _ (QuadP c p) =+  QuadP (projectOnP new old c) (projectOnP new old p)+projectPath new old p1 (ArcP ai p2) = ArcP (projectArcPosition new old (ArcPosition p1 p2 ai)) (projectOnP new old p2)+projectPath new old _ (LineP p) = LineP (projectOnP new old p)+projectPath new old _ (StartP p) = StartP (projectOnP new old p) --- | convert arc position to path info.-singletonArc :: ArcPosition Double -> [(PathInfo Double, Point Double)]-singletonArc (ArcPosition s e i) = [(StartI, s), (ArcI i, e)]+-- | Convert cubic position to path data.+singletonCubic :: CubicPosition Double -> [PathData Double]+singletonCubic (CubicPosition s e c1 c2) = [StartP s, CubicP c1 c2 e] --- | convert arc position to a pie slice.-singletonPie :: ArcPosition Double -> [(PathInfo Double, Point Double)]-singletonPie p@(ArcPosition s e i) = [(StartI, c), (LineI, s), (ArcI i, e), (LineI, c)]-  where-    ac = arcCentroid p-    c = ac ^. #centroid+-- | Convert quad position to path data.+singletonQuad :: QuadPosition Double -> [PathData Double]+singletonQuad (QuadPosition s e c) = [StartP s, QuadP c e] --- | convert arc position to a pie slice, with a specific center.-singletonPie' :: Point Double -> ArcPosition Double -> [(PathInfo Double, Point Double)]-singletonPie' c (ArcPosition s e i) = [(StartI, c), (LineI, s), (ArcI i, e), (LineI, c)]+-- | Convert arc position to path data.+singletonArc :: ArcPosition Double -> [PathData Double]+singletonArc (ArcPosition s e i) = [StartP s, ArcP i e] --- | convert path info to an ArcPosition.-toSingletonArc :: [(PathInfo Double, Point Double)] -> Maybe (ArcPosition Double)-toSingletonArc ((StartI, s) : (ArcI i, e) : _) = Just $ ArcPosition s e i-toSingletonArc _ = Nothing+-- | Convert arc position to a pie slice, with a specific center.+singletonPie :: Point Double -> ArcPosition Double -> [PathData Double]+singletonPie c (ArcPosition s e i) = [StartP c, LineP s, ArcP i e, LineP c]  -- * Arc types @@ -412,32 +197,32 @@ -- >>> let p = ArcPosition (Point 0 0) (Point 1 0) (ArcInfo (Point 1 0.5) (pi/4) False True) -- >>> arcCentroid p -- ArcCentroid {centroid = Point 0.20952624903444356 -0.48412291827592724, radius = Point 1.0 0.5, cphi = 0.7853981633974483, ang0 = 1.3753858999692936, angdiff = -1.823476581936975}-arcCentroid :: (FromInteger a, Ord a, TrigField a, ExpField a) => ArcPosition a -> ArcCentroid a-arcCentroid (ArcPosition p1@(Point x1 y1) p2@(Point x2 y2) (ArcInfo rad phi large clockwise)) = ArcCentroid c (Point rx ry) phi ang1 angd+arcCentroid :: (Ord a, FromInteger a, TrigField a, ExpField a) => ArcPosition a -> ArcCentroid a+arcCentroid (ArcPosition p1@(Point x1 y1) p2@(Point x2 y2) (ArcInfo rad phi' large' clockwise')) = ArcCentroid c (Point rx ry) phi' ang1 angd   where-    (Point x1' y1') = rotateP (-phi) ((p1 - p2) /. two)+    (Point x1' y1') = rotateP (-phi') ((p1 - p2) /. two)     (Point rx' ry') = rad     l = x1' ** 2 / rx' ** 2 + y1' ** 2 / ry' ** 2     (rx, ry) = bool (rx', ry') (rx' * sqrt l, ry' * sqrt l) (l > 1)     snumer = max 0 $ (rx * rx * ry * ry) - (rx * rx * y1' * y1') - (ry * ry * x1' * x1')     s =-      bool -1 1 (large == clockwise)+      bool (-1) 1 (large' == clockwise')         * sqrt           (snumer / (rx * rx * y1' * y1' + ry * ry * x1' * x1'))     cx' = s * rx * y1' / ry     cy' = s * (-ry) * x1' / rx-    cx = (x1 + x2) / 2 + cos phi * cx' - sin phi * cy'-    cy = (y1 + y2) / 2 + sin phi * cx' + cos phi * cy'+    cx = (x1 + x2) / 2 + cos phi' * cx' - sin phi' * cy'+    cy = (y1 + y2) / 2 + sin phi' * cx' + cos phi' * cy'     c = Point cx cy     ang1 = angle (Point (-(cx' - x1') / rx) (-(cy' - y1') / ry))     ang2 = angle (Point (-(cx' + x1') / rx) (-(cy' + y1') / ry))     angd' = ang2 - ang1     angd =-      bool 0 (2 * pi) (not clockwise && angd' < 0)-        + bool 0 (-2 * pi) (clockwise && angd' > 0)+      bool 0 (2 * pi) (not clockwise' && angd' < 0)+        + bool 0 (-2 * pi) (clockwise' && angd' > 0)         + angd' --- | convert from an ArcCentroid to an ArcPosition specification.+-- | Convert from an ArcCentroid to an ArcPosition specification. -- -- Morally, -- > arcPosition . arcCentroid == id@@ -448,15 +233,15 @@ -- -- - radii are less than they should be and thus get scaled up. arcPosition :: (Ord a, Signed a, TrigField a) => ArcCentroid a -> ArcPosition a-arcPosition (ArcCentroid c r phi ang1 angd) =-  ArcPosition p1 p2 (ArcInfo r phi large clockwise)+arcPosition (ArcCentroid c r phi' ang1 angd) =+  ArcPosition p1 p2 (ArcInfo r phi' large' clockwise')   where-    p1 = ellipse c r phi ang1-    p2 = ellipse c r phi (ang1 + angd)-    large = abs angd > pi-    clockwise = angd < zero+    p1 = ellipse c r phi' ang1+    p2 = ellipse c r phi' (ang1 + angd)+    large' = abs angd > pi+    clockwise' = angd < zero --- | ellipse formulae+-- | Ellipse formulae -- -- >>> ellipse zero (Point 1 2) (pi/6) pi -- Point -0.8660254037844388 -0.4999999999999997@@ -471,19 +256,20 @@ -- -- See also: [wolfram](https://mathworld.wolfram.com/Ellipse.html) ellipse :: (Direction b a, Affinity b a, TrigField a) => b -> b -> a -> a -> b-ellipse c r phi theta = c + (rotate phi |. (r * ray theta))+ellipse c r phi' theta = c + (rotate phi' |. (r * ray theta))  -- | compute the bounding box for an arcBox ----- > let p = ArcPosition (Point 0 0) (Point 1 0) (ArcInfo (Point 1 0.5) (pi/4) False True)--- > arcBox p--- Rect -8.326672684688674e-17 0.9999999999999998 -5.551115123125783e-17 0.30644649676616753+-- >>> let p = ArcPosition (Point 0 0) (Point 1 0) (ArcInfo (Point 1 0.5) (pi/4) False True)+-- >>> import Data.FormatN+-- >>> fmap (fixed (Just 3)) (arcBox p)+-- Rect "-0.000" "1.000" "-0.000" "0.306" arcBox :: ArcPosition Double -> Rect Double-arcBox p = space1 pts+arcBox p = unsafeSpace1 pts   where-    (ArcCentroid c r phi ang0 angd) = arcCentroid p-    (x', y') = arcDerivs r phi-    angr = ang0 ... (ang0 + angd) :: Range Double+    (ArcCentroid c r phi' ang0' angd) = arcCentroid p+    (x', y') = arcDerivs r phi'+    angr = ang0' ... (ang0' + angd) :: Range Double     angs =       filter         (|.| angr)@@ -495,22 +281,20 @@           y' - 2 * pi,           y' + pi,           y' - pi,-          ang0,-          ang0 + angd+          ang0',+          ang0' + angd         ]-    pts = ellipse c r phi <$> angs+    pts = ellipse c r phi' <$> angs --- | potential arc turning points.+-- | Potential arc turning points. -- -- >>> arcDerivs (Point 1 0.5) (pi/4) -- (-0.4636476090008061,0.4636476090008062) arcDerivs :: Point Double -> Double -> (Double, Double)-arcDerivs (Point rx ry) phi = (thetax1, thetay1)+arcDerivs (Point rx ry) phi' = (thetax1, thetay1)   where-    thetax1 = atan2 (-sin phi * ry) (cos phi * rx)-    thetay1 = atan2 (cos phi * ry) (sin phi * rx)---- * bezier+    thetax1 = atan2 (-sin phi' * ry) (cos phi' * rx)+    thetay1 = atan2 (cos phi' * ry) (sin phi' * rx)  -- | Quadratic bezier curve expressed in positional terms. data QuadPosition a = QuadPosition@@ -536,12 +320,12 @@  -- | Convert from a positional to a polar representation of a cubic bezier. ----- >>> quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))+-- >>> quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))) -- QuadPolar {qpolStart = Point 0.0 0.0, qpolEnd = Point 1.0 1.0, qpolControl = Polar {magnitude = 2.1213203435596424, direction = -0.7853981633974483}}-quadPolar :: (Eq a, ExpField a, TrigField a) => QuadPosition a -> QuadPolar a-quadPolar (QuadPosition start end control) = QuadPolar start end control'+quadPolar :: (Eq a, TrigField a, ExpField a) => QuadPosition a -> QuadPolar a+quadPolar (QuadPosition start' end control) = QuadPolar start' end control'   where-    mp = (start + end) /. two+    mp = (start' + end) /. two     control' = polar (control - mp)  -- | Convert from a polar to a positional representation of a quadratic bezier.@@ -549,45 +333,45 @@ -- > quadPosition . quadPolar == id -- > quadPolar . quadPosition == id ----- >>> quadPosition $ quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))+-- >>> quadPosition $ quadPolar (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))) -- QuadPosition {qposStart = Point 0.0 0.0, qposEnd = Point 1.0 1.0, qposControl = Point 2.0 -0.9999999999999998}-quadPosition :: (ExpField a, TrigField a) => QuadPolar a -> QuadPosition a-quadPosition (QuadPolar start end control) = QuadPosition start end control'+quadPosition :: (TrigField a) => QuadPolar a -> QuadPosition a+quadPosition (QuadPolar start' end control) = QuadPosition start' end control'   where-    control' = coord control + (start + end) /. two+    control' = coord control + (start' + end) /. two  -- | The quadratic bezier equation ----- >>> quadBezier (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1)) 0.33333333+-- >>> quadBezier (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))) 0.33333333 -- Point 0.9999999933333332 -0.33333333333333326-quadBezier :: (ExpField a, FromInteger a) => QuadPosition a -> a -> Point a-quadBezier (QuadPosition start end control) theta =-  (1 - theta) ^ 2 .* start+quadBezier :: (FromInteger a, ExpField a) => QuadPosition a -> a -> Point a+quadBezier (QuadPosition start' end control) theta =+  (1 - theta) ^ 2 .* start'     + 2 * (1 - theta) * theta .* control     + theta ^ 2 .* end  -- | QuadPosition turning points. ----- >>> quadDerivs (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))+-- >>> quadDerivs (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))) -- [0.6666666666666666,0.3333333333333333] quadDerivs :: QuadPosition Double -> [Double]-quadDerivs (QuadPosition start end control) = [x', y']+quadDerivs (QuadPosition start' end control) = [x', y']   where-    (Point detx dety) = start - 2 .* control + end-    x' = bool ((_x start - _x control) / detx) (2 * (_x control - _x start)) (detx == 0)-    y' = bool ((_y start - _y control) / dety) (2 * (_y control - _y start)) (dety == 0)+    (Point detx dety) = start' - 2 .* control + end+    x' = bool ((_x start' - _x control) / detx) (2 * (_x control - _x start')) (detx == 0)+    y' = bool ((_y start' - _y control) / dety) (2 * (_y control - _y start')) (dety == 0)  -- | Bounding box for a QuadPosition ----- >>> quadBox (QuadPosition (Point 0 0) (Point 1 1) (Point 2 -1))+-- >>> quadBox (QuadPosition (Point 0 0) (Point 1 1) (Point 2 (-1))) -- Rect 0.0 1.3333333333333335 -0.33333333333333337 1.0 quadBox :: QuadPosition Double -> Rect Double-quadBox p = space1 pts+quadBox p = unsafeSpace1 pts   where     ts = quadDerivs p     pts = quadBezier p <$> ([0, 1] <> ts) --- | cubic bezier curve+-- | Cubic bezier curve -- -- Note that the ordering is different to the svg standard. data CubicPosition a = CubicPosition@@ -620,42 +404,42 @@ -- > cubicPosition . cubicPolar == id -- > cubicPolar . cubicPosition == id ----- >>> cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))+-- >>> cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2)) -- CubicPolar {cpolStart = Point 0.0 0.0, cpolEnd = Point 1.0 1.0, cpolControl1 = Polar {magnitude = 1.1180339887498947, direction = -1.2490457723982544}, cpolControl2 = Polar {magnitude = 1.1180339887498947, direction = 1.8925468811915387}} cubicPolar :: (Eq a, ExpField a, TrigField a) => CubicPosition a -> CubicPolar a-cubicPolar (CubicPosition start end control1 control2) = CubicPolar start end control1' control2'+cubicPolar (CubicPosition start' end control1 control2) = CubicPolar start' end control1' control2'   where-    mp = (start + end) /. two-    control1' = polar $ (control1 - mp) /. norm (end - start)-    control2' = polar $ (control2 - mp) /. norm (end - start)+    mp = (start' + end) /. two+    control1' = polar $ (control1 - mp) /. norm (end - start')+    control2' = polar $ (control2 - mp) /. norm (end - start')  -- | Convert from a polar to a positional representation of a cubic bezier. -- -- > cubicPosition . cubicPolar == id -- > cubicPolar . cubicPosition == id ----- >>> cubicPosition $ cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))+-- >>> cubicPosition $ cubicPolar (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2)) -- CubicPosition {cposStart = Point 0.0 0.0, cposEnd = Point 1.0 1.0, cposControl1 = Point 1.0 -1.0, cposControl2 = Point 1.6653345369377348e-16 2.0}-cubicPosition :: (Eq a, ExpField a, TrigField a) => CubicPolar a -> CubicPosition a-cubicPosition (CubicPolar start end control1 control2) = CubicPosition start end control1' control2'+cubicPosition :: (Eq a, TrigField a, ExpField a) => CubicPolar a -> CubicPosition a+cubicPosition (CubicPolar start' end control1 control2) = CubicPosition start' end control1' control2'   where-    control1' = norm (end - start) .* coord control1 + (start + end) /. two-    control2' = norm (end - start) .* coord control2 + (start + end) /. two+    control1' = norm (end - start') .* coord control1 + (start' + end) /. two+    control2' = norm (end - start') .* coord control2 + (start' + end) /. two  -- | The cubic bezier equation ----- >>> cubicBezier (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2)) 0.8535533905932737+-- >>> cubicBezier (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2)) 0.8535533905932737 -- Point 0.6767766952966369 1.2071067811865475-cubicBezier :: (ExpField a, FromInteger a) => CubicPosition a -> a -> Point a-cubicBezier (CubicPosition start end control1 control2) theta =-  (1 - theta) ^ 3 .* start+cubicBezier :: (FromInteger a, TrigField a) => CubicPosition a -> a -> Point a+cubicBezier (CubicPosition start' end control1 control2) theta =+  (1 - theta) ^ 3 .* start'     + 3 * (1 - theta) ^ 2 * theta .* control1     + 3 * (1 - theta) * theta ^ 2 .* control2     + theta ^ 3 .* end  -- | Turning point positions for a CubicPosition (0,1 or 2) ----- >>> cubicDerivs (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))+-- >>> cubicDerivs (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2)) -- [0.8535533905932737,0.14644660940672624,0.5] cubicDerivs :: CubicPosition Double -> [Double] cubicDerivs@@ -676,10 +460,10 @@  -- | Bounding box for a CubicPosition ----- >>> cubicBox (CubicPosition (Point 0 0) (Point 1 1) (Point 1 -1) (Point 0 2))+-- >>> cubicBox (CubicPosition (Point 0 0) (Point 1 1) (Point 1 (-1)) (Point 0 2)) -- Rect 0.0 1.0 -0.20710678118654752 1.2071067811865475 cubicBox :: CubicPosition Double -> Rect Double-cubicBox p = space1 pts+cubicBox p = unsafeSpace1 pts   where     ts = cubicDerivs p     pts =@@ -689,25 +473,37 @@           ([0, 1] <> ts)  -- | Bounding box for a list of path XYs.-pathBoxes :: [(PathInfo Double, Point Double)] -> Maybe (Rect Double)+pathBoxes :: [PathData Double] -> Maybe (Rect Double) pathBoxes [] = Nothing pathBoxes (x : xs) =-  L.fold (L.Fold step begin (Just . snd)) xs+  Just $+    L.fold (L.Fold step begin snd) xs   where     begin :: (Point Double, Rect Double)-    begin = (snd x, singleton (snd x))-    step ::-      (Point Double, Rect Double) ->-      (PathInfo Double, Point Double) ->-      (Point Double, Rect Double)-    step (start, r) a = (snd a, pathBox start a <> r)+    begin = (pointPath x, singleton (pointPath x))+    step (start', r) a = (pointPath a, pathBox start' a <> r)  -- | Bounding box for a path info, start and end Points.-pathBox :: Point Double -> (PathInfo Double, Point Double) -> Rect Double-pathBox start (info, end) =+pathBox :: Point Double -> PathData Double -> Rect Double+pathBox start' info =   case info of-    StartI -> singleton end-    LineI -> space1 [start, end]-    CubicI c1 c2 -> cubicBox (CubicPosition start end c1 c2)-    QuadI c -> quadBox (QuadPosition start end c)-    ArcI i -> arcBox (ArcPosition start end i)+    StartP p -> singleton p+    LineP p -> unsafeSpace1 [start', p]+    CubicP c1 c2 p -> cubicBox (CubicPosition start' p c1 c2)+    QuadP c p -> quadBox (QuadPosition start' p c)+    ArcP i p -> arcBox (ArcPosition start' p i)++-- | project an ArcPosition given new and old Rects+--+-- The radii of the ellipse can be represented as:+--+-- Point rx 0 & Point 0 ry+--+-- These two points are firstly rotated by p and then undergo scaling...+projectArcPosition :: Rect Double -> Rect Double -> ArcPosition Double -> ArcInfo Double+projectArcPosition new old (ArcPosition _ _ (ArcInfo (Point rx ry) phi' l cl)) = ArcInfo (Point rx'' ry'') phi' l cl+  where+    rx' = rotateP phi' (Point rx zero)+    rx'' = norm $ rx' * width new / width old+    ry' = rotateP phi' (Point zero ry)+    ry'' = norm $ ry' * width new / width old
+ src/Data/Path/Parser.hs view
@@ -0,0 +1,425 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedLabels #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RebindableSyntax #-}+{-# OPTIONS_GHC -Wall #-}++-- | SVG path manipulation+module Data.Path.Parser+  ( -- * Parsing+    -- $parsing+    parsePath,+    svgToPathData,+    pathDataToSvg,+    PathCommand (..),+    Origin (..),+  )+where++import Chart.Data+import Control.Applicative+import Control.Monad.State.Lazy+import qualified Data.Attoparsec.Text as A+import Data.Either+import Data.FormatN+import Data.Functor+import Data.Path+import Data.Scientific (toRealFloat)+import Data.Text (Text, pack)+import qualified Data.Text as Text+import GHC.Generics+import GHC.OverloadedLabels+import NumHask.Prelude+import Optics.Core hiding ((<|))++-- import qualified Data.List as List++-- $parsing+-- Every element of an svg path can be thought of as exactly two points in space, with instructions of how to draw a curve between them.  From this point of view, one which this library adopts, a path chart is thus very similar to a line chart.  There's just a lot more information about the style of this line to deal with.+--+-- References:+--+-- [SVG d](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d)+--+-- [SVG path](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths)++-- | Parse a raw path string.+--+-- >>> let outerseg1 = "M-1.0,0.5 A0.5 0.5 0.0 1 1 0.0,-1.2320508075688774 1.0 1.0 0.0 0 0 -0.5,-0.3660254037844387 1.0 1.0 0.0 0 0 -1.0,0.5 Z"+-- >>> parsePath outerseg1+-- Right [MoveTo OriginAbsolute [Point -1.0 0.5],EllipticalArc OriginAbsolute [(0.5,0.5,0.0,True,True,Point 0.0 -1.2320508075688774),(1.0,1.0,0.0,False,False,Point -0.5 -0.3660254037844387),(1.0,1.0,0.0,False,False,Point -1.0 0.5)],EndPath]+--+-- https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d+parsePath :: Text -> Either String [PathCommand]+parsePath = A.parseOnly pathParser++commaWsp :: A.Parser ()+commaWsp = A.skipSpace *> A.option () (A.string "," $> ()) <* A.skipSpace++point :: A.Parser (Point Double)+point = Point <$> num <* commaWsp <*> num++points :: A.Parser [Point Double]+points = fromList <$> point `A.sepBy1` commaWsp++pointPair :: A.Parser (Point Double, Point Double)+pointPair = (,) <$> point <* commaWsp <*> point++pointPairs :: A.Parser [(Point Double, Point Double)]+pointPairs = fromList <$> pointPair `A.sepBy1` commaWsp++pathParser :: A.Parser [PathCommand]+pathParser = fromList <$> (A.skipSpace *> A.many1 command)++num :: A.Parser Double+num = realToFrac <$> (A.skipSpace *> plusMinus <* A.skipSpace)+  where+    doubleNumber :: A.Parser Double+    doubleNumber = toRealFloat <$> A.scientific <|> shorthand++    plusMinus =+      negate <$ A.string "-" <*> doubleNumber+        <|> A.string "+" *> doubleNumber+        <|> doubleNumber++    shorthand = process' <$> (A.string "." *> A.many1 A.digit)+    process' = fromRight 0 . A.parseOnly doubleNumber . pack . (++) "0."++nums :: A.Parser [Double]+nums = num `A.sepBy1` commaWsp++flag :: A.Parser Bool+flag = fmap (/= '0') A.digit++command :: A.Parser PathCommand+command =+  MoveTo OriginAbsolute <$ A.string "M" <*> points+    <|> MoveTo OriginRelative <$ A.string "m" <*> points+    <|> LineTo OriginAbsolute <$ A.string "L" <*> points+    <|> LineTo OriginRelative <$ A.string "l" <*> points+    <|> HorizontalTo OriginAbsolute <$ A.string "H" <*> nums+    <|> HorizontalTo OriginRelative <$ A.string "h" <*> nums+    <|> VerticalTo OriginAbsolute <$ A.string "V" <*> nums+    <|> VerticalTo OriginRelative <$ A.string "v" <*> nums+    <|> CurveTo OriginAbsolute <$ A.string "C" <*> fmap fromList (manyComma curveToArgs)+    <|> CurveTo OriginRelative <$ A.string "c" <*> fmap fromList (manyComma curveToArgs)+    <|> SmoothCurveTo OriginAbsolute <$ A.string "S" <*> pointPairs+    <|> SmoothCurveTo OriginRelative <$ A.string "s" <*> pointPairs+    <|> QuadraticBezier OriginAbsolute <$ A.string "Q" <*> pointPairs+    <|> QuadraticBezier OriginRelative <$ A.string "q" <*> pointPairs+    <|> SmoothQuadraticBezierCurveTo OriginAbsolute <$ A.string "T" <*> points+    <|> SmoothQuadraticBezierCurveTo OriginRelative <$ A.string "t" <*> points+    <|> EllipticalArc OriginAbsolute <$ A.string "A" <*> manyComma ellipticalArgs+    <|> EllipticalArc OriginRelative <$ A.string "a" <*> manyComma ellipticalArgs+    <|> EndPath <$ A.string "Z" <* commaWsp+    <|> EndPath <$ A.string "z" <* commaWsp+  where+    curveToArgs =+      (,,) <$> (point <* commaWsp)+        <*> (point <* commaWsp)+        <*> point+    manyComma a = fromList <$> a `A.sepBy1` commaWsp++    numComma = num <* commaWsp+    flagComma = flag <* commaWsp+    ellipticalArgs =+      (,,,,,) <$> numComma+        <*> numComma+        <*> numComma+        <*> flagComma+        <*> flagComma+        <*> point++-- | Path command definition (ripped from reanimate-svg).+data PathCommand+  = -- | M or m command+    MoveTo !Origin ![Point Double]+  | -- | Line to, L or l Svg path command.+    LineTo !Origin ![Point Double]+  | -- | Equivalent to the H or h svg path command.+    HorizontalTo !Origin ![Double]+  | -- | Equivalent to the V or v svg path command.+    VerticalTo !Origin ![Double]+  | -- | Cubic bezier, C or c command+    CurveTo !Origin ![(Point Double, Point Double, Point Double)]+  | -- | Smooth cubic bezier, equivalent to S or s command+    SmoothCurveTo !Origin ![(Point Double, Point Double)]+  | -- | Quadratic bezier, Q or q command+    QuadraticBezier !Origin ![(Point Double, Point Double)]+  | -- | Quadratic bezier, T or t command+    SmoothQuadraticBezierCurveTo !Origin ![Point Double]+  | -- | Elliptical arc, A or a command.+    EllipticalArc !Origin ![(Double, Double, Double, Bool, Bool, Point Double)]+  | -- | Close the path, Z or z svg path command.+    EndPath+  deriving (Eq, Show, Generic)++-- | Tell if a path command is absolute (in the current+-- user coordiante) or relative to the previous point.+data Origin+  = -- | Next point in absolute coordinate+    OriginAbsolute+  | -- | Next point relative to the previous+    OriginRelative+  deriving (Eq, Show, Generic)++-- | To fit in with the requirements of the library design, specifically the separation of what a chart is into XY data Points from representation of these points, path instructions need to be decontructed into:+--+-- - define a single chart element as a line.+--+-- - split a single path element into the start and end points of the line, which become the 'Chart.Types.xys' of a 'Chart.Types.Chart', and the rest of the information, which is called 'PathInfo' and incorporated into the 'Chart.Types.Chart' 'Chart.Types.annotation'.+--+-- An arc path is variant to affine transformations of the 'Chart.Types.xys' points: angles are not presevred in the new reference frame.+data PathInfo a+  = StartI+  | LineI+  | CubicI (Point a) (Point a)+  | QuadI (Point a)+  | ArcI (ArcInfo a)+  deriving (Show, Eq, Generic)++pointToSvgCoords :: Point Double -> Point Double+pointToSvgCoords (Point x y) = Point x (-y)++svgCoords :: PathData Double -> PathData Double+svgCoords (CubicP a b p) = CubicP (pointToSvgCoords a) (pointToSvgCoords b) (pointToSvgCoords p)+svgCoords (QuadP a p) = QuadP (pointToSvgCoords a) (pointToSvgCoords p)+svgCoords (StartP p) = StartP (pointToSvgCoords p)+svgCoords (LineP p) = LineP (pointToSvgCoords p)+svgCoords (ArcP i p) = ArcP i (pointToSvgCoords p)++-- | Convert from a path info, start point, end point triple to a path text clause.+--+-- Note that morally,+--+-- > toPathsAbsolute . toInfos . parsePath == id+--+-- but the round trip destroys much information, including:+--+-- - path text spacing+--+-- - "Z", which is replaced by a LineI instruction from the end point back to the original start of the path.+--+-- - Sequences of the same instruction type are uncompressed+--+-- - As the name suggests, relative paths are translated to absolute ones.+--+-- - implicit L's in multiple M instructions are separated.+--+-- In converting between chart-svg and SVG there are two changes in reference:+--+-- - arc rotation is expressed as positive degrees for a clockwise rotation in SVG, and counter-clockwise in radians for chart-svg+--+-- - A positive y-direction is down for SVG and up for chart-svg+toPathAbsolute ::+  PathData Double ->+  -- | path text+  Text+toPathAbsolute (StartP p) = "M " <> pp p+toPathAbsolute (LineP p) = "L " <> pp p+toPathAbsolute (CubicP c1 c2 p) =+  "C "+    <> pp c1+    <> " "+    <> pp c2+    <> " "+    <> pp p+toPathAbsolute (QuadP control p) =+  "Q "+    <> pp control+    <> " "+    <> pp p+toPathAbsolute (ArcP (ArcInfo (Point x y) phi' l sw) x2) =+  "A "+    <> (pack . show) x+    <> " "+    <> (pack . show) y+    <> " "+    <> (pack . show) (-phi' * 180 / pi)+    <> " "+    <> bool "0" "1" l+    <> " "+    <> bool "0" "1" sw+    <> " "+    <> pp x2++-- | Render a point (including conversion to SVG Coordinates).+pp :: Point Double -> Text+pp (Point x y) =+  formatOrShow (FixedStyle 4) Nothing x <> ","+    <> formatOrShow (FixedStyle 4) Nothing (bool (-y) y (y == zero))++data PathCursor = PathCursor+  { -- | previous position+    curPrevious :: Point Double,+    -- | start point (to close out the path)+    curStart :: Point Double,+    -- | last control point+    curControl :: Maybe (Point Double)+  }+  deriving (Eq, Show, Generic)++stateCur0 :: PathCursor+stateCur0 = PathCursor zero zero Nothing++-- | Convert an SVG d path text snippet to a [PathData Double]+svgToPathData :: Text -> [PathData Double]+svgToPathData = toPathDatas . either error id . parsePath++-- | Convert [PathData] to an SVG d path text.+pathDataToSvg :: [PathData Double] -> Text+pathDataToSvg xs = Text.intercalate " " $ fmap toPathAbsolute xs++-- | Convert from a path command list to a PathA specification+toPathDatas :: [PathCommand] -> [PathData Double]+toPathDatas xs = fmap svgCoords $ mconcat $ flip evalState stateCur0 $ sequence $ toInfo <$> xs++-- | Convert relative points to absolute points+relToAbs :: (Additive a) => a -> [a] -> [a]+relToAbs p xs = accsum (p : xs)++moveTo :: [Point Double] -> State PathCursor [PathData Double]+moveTo xs = do+  put (PathCursor (last xs) (head xs) Nothing)+  pure (StartP (head xs) : (LineP <$> tail xs))++lineTo :: [Point Double] -> State PathCursor [PathData Double]+lineTo xs = do+  modify ((#curPrevious .~ last xs) . (#curControl .~ Nothing))+  pure $ LineP <$> xs++horTo :: [Double] -> State PathCursor [PathData Double]+horTo xs = do+  (PathCursor (Point _ y) _ _) <- get+  lineTo (fmap (`Point` y) xs)++verTo :: [Double] -> State PathCursor [PathData Double]+verTo ys = do+  (PathCursor (Point x _) _ _) <- get+  lineTo (fmap (Point x) ys)++curveTo :: [(Point Double, Point Double, Point Double)] -> State PathCursor [PathData Double]+curveTo xs = do+  modify+    ( (#curPrevious .~ (\(_, _, p) -> p) (last xs))+        . (#curControl ?~ (\(_, c2, _) -> c2) (last xs))+    )+  pure $ (\(c1, c2, x2) -> CubicP c1 c2 x2) <$> xs++-- | Convert relative points to absolute points+relToAbs3 :: Additive a => a -> [(a, a, a)] -> [(a, a, a)]+relToAbs3 p xs = xs'+  where+    x1 = (\(x, _, _) -> x) <$> xs+    x2 = (\(_, x, _) -> x) <$> xs+    x3 = (\(_, _, x) -> x) <$> xs+    x1' = fmap (p +) (accsum x1)+    x2' = fmap (p +) (accsum x2)+    x3' = fmap (p +) (accsum x3)+    xs' = zip3 x1' x2' x3'++reflControlPoint :: State PathCursor (Point Double)+reflControlPoint = do+  (PathCursor p _ c) <- get+  case c of+    Nothing -> pure p+    Just c' -> pure (p - (c' - p))++smoothCurveToStep :: (Point Double, Point Double) -> State PathCursor (PathData Double)+smoothCurveToStep (c2, x2) = do+  c1 <- reflControlPoint+  modify ((#curControl ?~ c2) . (#curPrevious .~ x2))+  pure (CubicP c1 c2 x2)++smoothCurveTo :: [(Point Double, Point Double)] -> State PathCursor [PathData Double]+smoothCurveTo xs =+  sequence (smoothCurveToStep <$> xs)++-- | Convert relative points to absolute points+relToAbs2 :: Additive a => a -> [(a, a)] -> [(a, a)]+relToAbs2 p xs = xs'+  where+    x1 = fst <$> xs+    x2 = snd <$> xs+    x1' = fmap (p +) (accsum x1)+    x2' = fmap (p +) (accsum x2)+    xs' = zip x1' x2'++quad :: [(Point Double, Point Double)] -> State PathCursor [PathData Double]+quad xs = do+  modify+    ( (#curPrevious .~ snd (last xs))+        . (#curControl ?~ fst (last xs))+    )+  pure $ uncurry QuadP <$> xs++smoothQuadStep :: Point Double -> State PathCursor (PathData Double)+smoothQuadStep x2 = do+  c1 <- reflControlPoint+  modify ((#curControl ?~ c1) . (#curPrevious .~ x2))+  pure (QuadP c1 x2)++smoothQuad :: [Point Double] -> State PathCursor [PathData Double]+smoothQuad xs =+  sequence (smoothQuadStep <$> xs)++arcTo :: [(Double, Double, Double, Bool, Bool, Point Double)] -> State PathCursor [PathData Double]+arcTo xs = do+  modify ((#curPrevious .~ (\(_, _, _, _, _, p) -> p) (last xs)) . (#curControl .~ Nothing))+  pure $ fromPathEllipticalArc <$> xs++fromPathEllipticalArc :: (a, a, a, Bool, Bool, Point a) -> PathData a+fromPathEllipticalArc (x, y, r, l, s, p) = ArcP (ArcInfo (Point x y) r l s) p++-- | Convert relative points to absolute points+relToAbsArc :: Additive a => Point a -> [(a, a, a, Bool, Bool, Point a)] -> [(a, a, a, Bool, Bool, Point a)]+relToAbsArc p xs = xs'+  where+    ps = (\(_, _, _, _, _, pt) -> pt) <$> xs+    ps' = fmap (p +) (accsum ps)+    xs' = zipWith (\(x0, x1, x2, x3, x4, _) pt -> (x0, x1, x2, x3, x4, pt)) xs ps'++-- | Convert a path command fragment to PathData+--+-- flips the y-dimension of points.+toInfo :: PathCommand -> State PathCursor [PathData Double]+toInfo (MoveTo OriginAbsolute xs) = moveTo xs+toInfo (MoveTo OriginRelative xs) = do+  (PathCursor p _ _) <- get+  moveTo (relToAbs p xs)+toInfo EndPath = do+  (PathCursor _ s _) <- get+  pure [LineP s]+toInfo (LineTo OriginAbsolute xs) = lineTo xs+toInfo (LineTo OriginRelative xs) = do+  (PathCursor p _ _) <- get+  lineTo (relToAbs p xs)+toInfo (HorizontalTo OriginAbsolute xs) = horTo xs+toInfo (HorizontalTo OriginRelative xs) = do+  (PathCursor (Point x _) _ _) <- get+  horTo (relToAbs x xs)+toInfo (VerticalTo OriginAbsolute xs) = verTo xs+toInfo (VerticalTo OriginRelative ys) = do+  (PathCursor (Point _ y) _ _) <- get+  verTo (relToAbs y ys)+toInfo (CurveTo OriginAbsolute xs) = curveTo xs+toInfo (CurveTo OriginRelative xs) = do+  (PathCursor p _ _) <- get+  curveTo (relToAbs3 p xs)+toInfo (SmoothCurveTo OriginAbsolute xs) = smoothCurveTo xs+toInfo (SmoothCurveTo OriginRelative xs) = do+  (PathCursor p _ _) <- get+  smoothCurveTo (relToAbs2 p xs)+toInfo (QuadraticBezier OriginAbsolute xs) = quad xs+toInfo (QuadraticBezier OriginRelative xs) = do+  (PathCursor p _ _) <- get+  quad (relToAbs2 p xs)+toInfo (SmoothQuadraticBezierCurveTo OriginAbsolute xs) = smoothQuad xs+toInfo (SmoothQuadraticBezierCurveTo OriginRelative xs) = do+  (PathCursor p _ _) <- get+  smoothQuad (relToAbs p xs)+toInfo (EllipticalArc OriginAbsolute xs) = arcTo xs+toInfo (EllipticalArc OriginRelative xs) = do+  (PathCursor p _ _) <- get+  arcTo (relToAbsArc p xs)