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 +0/−55
- chart-svg.cabal +40/−55
- other/arc.svg +0/−145
- other/arcflags.svg +1240/−1201
- other/arrow.svg +58/−23
- other/bar.svg +53/−29
- other/compound.svg +0/−5
- other/cubic.svg +126/−101
- other/date.svg +53/−0
- other/debug.svg +68/−0
- other/ellipse.svg +261/−233
- other/ellipse2.svg +261/−0
- other/glines.svg +0/−5
- other/glyphs.svg +27/−3
- other/gradient.svg +25/−0
- other/hudoptions.svg +69/−45
- other/label.svg +0/−1
- other/legend.svg +0/−46
- other/lglyph.svg +0/−1
- other/line.svg +65/−44
- other/path.svg +68/−35
- other/quad.svg +170/−145
- other/rect.svg +36/−23
- other/surface.svg too large to diff
- other/svgoptions.svg +0/−5
- other/text.svg +68/−1
- other/textlocal.svg +0/−1
- other/unit.svg +69/−1
- other/usage.svg +65/−0
- other/venn.svg +53/−29
- other/wave.svg +63/−1
- other/wheel.svg +63/−0
- src/Chart.hs +70/−154
- src/Chart/Bar.hs +99/−93
- src/Chart/Data.hs +71/−0
- src/Chart/Examples.hs +546/−428
- src/Chart/Hud.hs +1071/−0
- src/Chart/Primitive.hs +441/−0
- src/Chart/Reanimate.hs +0/−355
- src/Chart/Render.hs +0/−411
- src/Chart/Style.hs +354/−0
- src/Chart/Surface.hs +69/−71
- src/Chart/Svg.hs +471/−0
- src/Chart/Types.hs +0/−1685
- src/Chart/Various.hs +0/−325
- src/Data/Colour.hs +556/−78
- src/Data/FormatN.hs +0/−242
- src/Data/Path.hs +184/−388
- src/Data/Path/Parser.hs +425/−0
− 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 .- +  .- 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 ----- +--  -- $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 -- --  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. -- --  hudOptionsExample :: ChartSvg hudOptionsExample = mempty- & #hudOptions .~ colourHudOptions dark defaultHudOptions- & #chartList .~ [Chart BlankA [one]]---- | 'SvgOptions' example.------ -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--- --  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 -- --  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 -- --  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.------ -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------ -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------ -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------ -compoundExample :: ChartSvg-compoundExample = lglyphExample <> glinesExample---- | label example.------ -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------ -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 -- --  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: -- -- -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 ----- -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.+--+-- +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.+-- --  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'.+--+-- +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.+--+-- +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+--+-- -- +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.+--+-- -- +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'.+--+-- +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]+--+-- +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}+--+-- +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}+--+-- +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}+--+-- +--+-- 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}} -- --  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}------ -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]]------ -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}------ -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}------ ------ 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}--------- -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'.------ -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}------ -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+--+--  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_ :: [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)