From f047c6b2ba8811a6da1693426df3f168809b8c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Mon, 5 Oct 2026 14:57:28 -0400 Subject: [PATCH] WIP charts2 parts 2 --- chart_brush.go | 19 +-- chart_brush_test.go | 123 ++++++++++++++++++ chart_empty_state_test.go | 61 +++++++++ chart_export_test.go | 73 +++++++++++ pie_chart.go | 5 +- .../snapshots/darwin/chart_brush-dark.png | Bin 0 -> 10462 bytes .../snapshots/darwin/chart_brush-light.png | Bin 0 -> 10240 bytes .../darwin/chart_empty_state-dark.png | Bin 0 -> 9269 bytes .../darwin/chart_empty_state-light.png | Bin 0 -> 9085 bytes .../snapshots/darwin/chart_export-dark.png | Bin 0 -> 15523 bytes .../snapshots/darwin/chart_export-light.png | Bin 0 -> 15096 bytes 11 files changed, 271 insertions(+), 10 deletions(-) create mode 100644 chart_brush_test.go create mode 100644 chart_empty_state_test.go create mode 100644 chart_export_test.go create mode 100644 testdata/snapshots/darwin/chart_brush-dark.png create mode 100644 testdata/snapshots/darwin/chart_brush-light.png create mode 100644 testdata/snapshots/darwin/chart_empty_state-dark.png create mode 100644 testdata/snapshots/darwin/chart_empty_state-light.png create mode 100644 testdata/snapshots/darwin/chart_export-dark.png create mode 100644 testdata/snapshots/darwin/chart_export-light.png diff --git a/chart_brush.go b/chart_brush.go index edaad4f..08070e0 100644 --- a/chart_brush.go +++ b/chart_brush.go @@ -75,20 +75,21 @@ func ChartBrush(c *ui.Context, value *[2]float64, opts ChartBrushOptions) Choice track.Draw(func(p *ui.Painter, r ui.Rect) { brushPaint(p, r, *value, opts, k) }) track.Children(func() { x0, x1 := at(value[0]), at(value[1]) - window := ui.Box(c).Absolute().Left(x0).Top(0).Width(max(x1-x0, 1)).Height(h).Focusable(). - Role(ui.RoleGroup).Label(fmt.Sprintf(msg(c, "chart_brush.window"), opts.Label, val(value[0]), val(value[1]))) - internal.Ring(window, k.Focus, theme.ControlRadius) - ends := [2]*ui.Element{} - for i, x := range []float32{x0, x1} { - end := ui.Box(c).Absolute().Left(x - theme.MinHitSize/2).Top(0).Size(theme.MinHitSize, h).Focusable(). + end := func(i int, x float32) *ui.Element { + e := ui.Box(c).Absolute().Left(x - theme.MinHitSize/2).Top(0).Size(theme.MinHitSize, h).Focusable(). Role(ui.RoleSlider).Label(fmt.Sprintf(msg(c, []string{"chart_brush.start", "chart_brush.end"}[i]), val(value[i]))) - internal.Ring(end, k.Focus, theme.ControlRadius) - end.Draw(func(p *ui.Painter, r ui.Rect) { + internal.Ring(e, k.Focus, theme.ControlRadius) + return e.Draw(func(p *ui.Painter, r ui.Rect) { cx := internal.Snap(p, r.X+r.W/2) p.Fill(ui.Rect{X: cx - 3, Y: r.Y + r.H/2 - 10, W: 6, H: 20}, k.Text, 2) }) - ends[i] = end } + // Tab order runs start, window, end. + ends := [2]*ui.Element{end(0, x0)} + window := ui.Box(c).Absolute().Left(x0 + theme.MinHitSize/2).Top(0).Width(max(x1-x0-theme.MinHitSize, 1)).Height(h).Focusable(). + Role(ui.RoleGroup).Label(fmt.Sprintf(msg(c, "chart_brush.window"), opts.Label, val(value[0]), val(value[1]))) + internal.Ring(window, k.Focus, theme.ControlRadius) + ends[1] = end(1, x1) if res.Element.IsDisabled() { return } diff --git a/chart_brush_test.go b/chart_brush_test.go new file mode 100644 index 0000000..17c9490 --- /dev/null +++ b/chart_brush_test.go @@ -0,0 +1,123 @@ +package mujica + +import ( + "fmt" + "testing" + + "github.com/egoist/mygo/ui" +) + +type brushHarness struct { + value [2]float64 + changes int + disabled bool + el *ui.Element +} + +func (h *brushHarness) view(c *ui.Context) { + Use(c, Settings{Mode: Light}) + ui.Column(c).Padding(10).Width(420).Children(func() { + r := ChartBrush(c, &h.value, ChartBrushOptions{Label: "Months", Min: 0, Max: 100, Step: 1, Disabled: h.disabled}) + h.el = r.Element + if r.Changed() { + h.changes++ + } + }) +} + +func TestChartBrushKeyboard(t *testing.T) { + h := &brushHarness{value: [2]float64{20, 40}} + tt := ui.NewTester(h.view, 460, 200) + tabTo(t, tt, "Months: 20 to 40") + tt.Key(0, ui.KeyRight) + tt.Key(0, ui.KeyRight) + if h.value != [2]float64{22, 42} || h.changes != 2 { + t.Fatalf("window moved to %v (%d)", h.value, h.changes) + } + tt.Key(0, ui.KeyTab) + if !tt.Focused("Range end 42") { + t.Fatal("Tab did not reach the end handle") + } + tt.Key(0, ui.KeyPageUp) + tt.Key(0, ui.KeyEnd) + if h.value != [2]float64{22, 100} { + t.Fatalf("end handle: %v", h.value) + } + tt.Key(ui.Shift, ui.KeyTab) + tt.Key(ui.Shift, ui.KeyTab) + tt.Key(0, ui.KeyEnd) // the start cannot pass the end + if h.value != [2]float64{99, 100} || !tt.HasText("99 – 100") { + t.Fatalf("start to End: %v %q", h.value, tt.Texts()) + } +} + +func TestChartBrushDrag(t *testing.T) { + h := &brushHarness{value: [2]float64{20, 40}} + tt := ui.NewTester(h.view, 460, 200) + b := h.el.Bounds() + x := func(v float32) float32 { return b.X + 400*v/100 } + y := b.Y + 24 + tt.Press(x(30), y) // inside the window + tt.Move(x(40), y) + tt.Move(x(50), y) + tt.Release(x(50), y) + if h.value != [2]float64{40, 60} { + t.Fatalf("window drag: %v", h.value) + } + tt.Press(x(60), y) // the end handle + tt.Move(x(70), y) + tt.Move(x(75), y) + tt.Release(x(75), y) + if h.value != [2]float64{40, 75} { + t.Fatalf("end drag: %v", h.value) + } + tt.Press(x(85), y) // outside: a new range + tt.Move(x(90), y) + tt.Move(x(95), y) + tt.Release(x(95), y) + if h.value != [2]float64{85, 95} { + t.Fatalf("new range: %v", h.value) + } +} + +func TestChartBrushDisabledAndBad(t *testing.T) { + h := &brushHarness{value: [2]float64{20, 40}, disabled: true} + tt := ui.NewTester(h.view, 460, 200) + b := h.el.Bounds() + tt.Press(b.X+120, b.Y+24) + tt.Move(b.X+200, b.Y+24) + tt.Release(b.X+200, b.Y+24) + for range 3 { + tt.Key(0, ui.KeyTab) + tt.Key(0, ui.KeyRight) + } + if h.value != [2]float64{20, 40} || h.changes != 0 { + t.Fatalf("disabled brush moved: %v", h.value) + } + for _, v := range [][2]float64{{50, 40}, {-1, 10}} { + func() { + defer func() { + if recover() == nil { + t.Errorf("%v: no panic", v) + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ChartBrush(c, &v, ChartBrushOptions{Label: "x", Max: 100}) + }, 300, 100) + }() + } +} + +func TestChartBrushSnapshot(t *testing.T) { + vals := make([]float64, 60) + for i := range vals { + vals[i] = float64((i*7)%13) + float64(i)/6 + } + snapshot(t, "chart_brush", 460, 110, func(c *ui.Context) { + v := [2]float64{18, 42} + ui.Column(c).Padding(16).Children(func() { + ChartBrush(c, &v, ChartBrushOptions{Label: "Months", Min: 0, Max: 59, Step: 1, Values: vals, Format: func(f float64) string { return fmt.Sprintf("week %.0f", f) }}) + }) + }) +} diff --git a/chart_empty_state_test.go b/chart_empty_state_test.go new file mode 100644 index 0000000..2a94b95 --- /dev/null +++ b/chart_empty_state_test.go @@ -0,0 +1,61 @@ +package mujica + +import ( + "testing" + + "github.com/egoist/mygo/ui" +) + +func TestChartEmptyStateKeepsSizeAndRetries(t *testing.T) { + status := DataReady + retries, disabled := 0, false + var heights []float32 + var el *ui.Element + tt := ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + ui.Column(c).Width(400).Disabled(disabled).Children(func() { + r := ChartEmptyState(c, status, ChartEmptyStateOptions{Height: 180, Empty: "No hymns this week", Error: "The choir did not answer"}) + el = r.Element + if r.Changed() { + retries++ + } + }) + }, 440, 300) + heights = append(heights, el.Bounds().H) + if !tt.HasText("No hymns this week") { + t.Fatalf("empty: %q", tt.Texts()) + } + status = DataLoading + tt.Frame() + heights = append(heights, el.Bounds().H) + if !tt.HasText("Loading") { + t.Fatalf("loading: %q", tt.Texts()) + } + status = DataFailed + tt.Frame() + heights = append(heights, el.Bounds().H) + if err := tt.Click("Retry"); err != nil || retries != 1 || !tt.HasText("The choir did not answer") { + t.Fatalf("retry: %v %d", err, retries) + } + if heights[0] != 180 || heights[1] != 180 || heights[2] != 180 { + t.Fatalf("heights %v", heights) + } + disabled = true + tt.Frame() + _ = tt.Click("Retry") + if retries != 1 { + t.Fatal("disabled retry fired") + } +} + +func TestChartEmptyStateSnapshot(t *testing.T) { + snapshot(t, "chart_empty_state", 640, 220, func(c *ui.Context) { + ui.Row(c).Padding(16).Gap(16).Children(func() { + for _, st := range []DataStatus{DataReady, DataLoading, DataFailed} { + ui.Column(c).Width(192).Border(1, Tokens(c).Border).Children(func() { + ChartEmptyState(c, st, ChartEmptyStateOptions{Height: 180}) + }) + } + }) + }) +} diff --git a/chart_export_test.go b/chart_export_test.go new file mode 100644 index 0000000..14eef3f --- /dev/null +++ b/chart_export_test.go @@ -0,0 +1,73 @@ +package mujica + +import ( + "bytes" + "image/color" + "image/png" + "testing" + + "github.com/egoist/mygo/ui" + + "mujicaui/theme" +) + +func TestChartExportPNGInTheme(t *testing.T) { + for _, mode := range []Mode{Light, Dark} { + var out []byte + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{Mode: mode}) + if out != nil { + return + } + b, err := ChartExport(c, func(c *ui.Context) { + BarChart(c, barCats, barSeries(), BarChartOptions{Frame: ChartFrame{Label: "Tithes", Height: 160}}) + }, ChartExportOptions{Width: 300, Height: 220, Scale: 1.5}) + if err != nil { + t.Fatal(err) + } + out = b + }, 100, 100) + img, err := png.Decode(bytes.NewReader(out)) + if err != nil { + t.Fatal(err) + } + if b := img.Bounds(); b.Dx() != 450 || b.Dy() != 330 { + t.Fatalf("%v: size %v", mode, b) + } + k := theme.Light() + if mode == Dark { + k = theme.Dark() + } + if got := color.RGBAModel.Convert(img.At(3, 3)).(color.RGBA); got != toRGBA(k.Surface) { + t.Fatalf("%v: corner %v, want the theme's Surface", mode, got) + } + } +} + +func TestChartExportBad(t *testing.T) { + defer func() { + if recover() == nil { + t.Fatal("no panic for a zero size") + } + }() + ui.NewTester(func(c *ui.Context) { + Use(c, Settings{}) + _, _ = ChartExport(c, func(*ui.Context) {}, ChartExportOptions{}) + }, 100, 100) +} + +func TestChartExportSnapshot(t *testing.T) { + snapshot(t, "chart_export", 340, 300, func(c *ui.Context) { + b, err := ChartExport(c, func(c *ui.Context) { + PieChart(c, pieSlices, PieChartOptions{Frame: ChartFrame{Label: "Stores", Height: 150}, Donut: true, MinAngle: 20}) + }, ChartExportOptions{Width: 300, Height: 260, Scale: 1}) + if err != nil { + t.Fatal(err) + } + bmp, err := ui.DecodeBitmap(b) + if err != nil { + t.Fatal(err) + } + ui.Column(c).Padding(20).Children(func() { ui.Image(c, bmp).Size(300, 260) }) + }) +} diff --git a/pie_chart.go b/pie_chart.go index dba6d1d..ae5b479 100644 --- a/pie_chart.go +++ b/pie_chart.go @@ -105,7 +105,10 @@ func PieChart(c *ui.Context, slices []ChartSlice, opts PieChartOptions) ChartRes mx, my := internal.Polar(cx, cy, (r0+r1)/2+float32(chartBool(r0 == 0))*r1*0.12, (a0+a1)/2) ink := chartInk(k, keys[i].Color) internal.Marker(p, i, mx, my-8, 9, ink) - chartText(p, share(i), mx, my+2, size, ink, 0.5, 0) + // The percent shows where the ring is wide enough to hold it. + if w, _ := p.MeasureText(0, ui.Span{Text: share(i), Size: size}); r1-r0 >= w+6 { + chartText(p, share(i), mx, my+2, size, ink, 0.5, 0) + } } } if opts.Donut { diff --git a/testdata/snapshots/darwin/chart_brush-dark.png b/testdata/snapshots/darwin/chart_brush-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..37a558eb17b00cfe8d6f8891799eb8c725f9e0c2 GIT binary patch literal 10462 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 KWy^u4!T$y4C;^TD literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/chart_brush-light.png b/testdata/snapshots/darwin/chart_brush-light.png new file mode 100644 index 0000000000000000000000000000000000000000..b29cac655c4b9558fa85e2fa34abec6e3c49dca4 GIT binary patch literal 10240 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 UE2)TlvkygGSx2c+!7}Q90Ph8tLI3~& literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/chart_empty_state-dark.png b/testdata/snapshots/darwin/chart_empty_state-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..719b5e1380876d728c0a61f64cb258d575c5e977 GIT binary patch literal 9269 zcmd6NWl&t(()K_IA?O76Flg|>-7UCVaF@YDfCL5z5G1$?q1!y=jrYhrlul?g-(hN006M$UrK8L0LcD``2rd; zVs!Qi83h1nZsnyVw7k;yWY<- zvps2P={$!UVF0En;1O{v02SieZ!hTb$C>bH2>Ffp$qk&q|xsUUNQJ*?eag&=>M%ak&k?k ze9ArP)szh%C|goMKs2C7K#rNFp&B6)(hqxypiohi$1=q^I>!{z)#p`Z^Mx~)ujX46 zVf)WYjEW&ueqVJ^il_Rb{QY%yBx$IHo>?(~dN=&mHY8hvlpQc`MK9BNFZufGo=A$_ z4K;B+dPbl_~HD0|+*dW0>e*o|%Leo%6@38GcGo*K(D4Yi{N%X{-X%i||DG_r+i| zViaL%MiJ8wPyWQz%ET!KWAtBPt;(1xkqrY+Cb;sd&Y(6qDMZ3?W$d3EuRNBrjc z{Y0@E|Bfafk04eeMY;yu;miRAB6(Ub40Dc@SkYz!WTLK;#cv|_AzT9bUKoF}{2}BD z9C)1T@>0k?sijkjK{9@Dm&36xMV>qonY^sYWjq5}?w&F;??H)of#Gvxfbfs8%N z_NneFB(C=m0y07~Ytv8+BNTy#rZ$rxZ>eG2%ajKZG2kWYa5yEyf20ff;x8rASWBLJ z$4K8N*?#Fap4%HlKk=_a_)?aEurJEpOw4u*=ZC)8!2@ z6uT3dN*DGleLRL$$^oPfa`1nKqwuUp^iR!;&TDhZpA^AL-$~HME|iqItKEedBY=xR^k-+>SR*lo}VC^BP6l`9R zCbR#Vyr5@8%S~MZ4%WH4Vsm@r`E6sVr1ax(zi3((Y}ouq%SBQwrFWaVE>6Q!gD78U zK@o0NA(?%51n^@jk4@dBLust*=K9U^axN7so3q#HR4dP@SCXyYvSXuz`FPB1Yujm( z`#+pV`>EX1@oO8!8eQ?64#`dUYll~0!1C2TX6a4DIz zwM<02{NgN4a6fS5Xsz!g4X6KxO9goJ68NnFc6y`D?4l}yiQ3UV;C@#`P~zx#{ejPg z1OO1HX}RO*`7#uxWARKfVD6RSPt;|r;HL(Dv(1Y&OqA3?b3%eiLudC76%SqW-Zbry zsk{0)o+mB%igXN|<3kU_4PJ_Tf_Y<;Pg-nkA<8}d_nZ6sry1#oTH3OMsWe|2^g3Fzr>dA+=e0_IYKt963Z-a?_!*A*W?A@Xt9 zhOqdn8N%3~so9nXmJB}9&uvLxtMrOM@W!VD2_tzpHh=DnUMgMsrGG<%c(J#iTzqP) zs{BfT-ZJK35(Jb{H=z(PX2y48Wo;C(Uf~1)aw%@);}HhXQ=%_rJWd6VdI!)PFq(0s zAZQ<%`@G+ZbBja@#tNYl;Sc(MfgGQ$j?Lu}ig?eZ=xpbVp?Fd5&(e+4O5mc5f;0tm zHY@CNSz+}!@-ddt7GE^z<=2c60-hGlvQxYw;_^#&~kY^c~w)u{5V^@jZt!s(2M*%LX@_Er^ zqTz{ppQ17BUzB>iNbX1YI3(5*u2H6$W+K*PMHbjrYou-FXwKO+6J)%zX(xsRa&IV- zymcoahF+6`ES=kaz%{Ak+!Ln7PAb#H**y^YvI!eBe#eoHi_$R52+4Q^WswIu@p{x~ zPZ@06L)N41N4U4dZKmtGQt7&mQ?`u1c0jVR=ixA}ES!ad5{(MxAG3;T} z*+*qF-J}lLW37{ynNGaq!}wr~9c7lelu8NCu^Xt0#Ii;WX7=&9W^>Atk-_Oj#QqNP z)<+*(fB_&BDYRfJ1IlT;d zCixiW;JI?kj-`n2a37Da%6M7wQnLChM_{8KZ<1^-^VtrM2miP%Ikm$4rO9UdjwCRO z@O3u31+k5NpDA$jJbL3K6Lrkydnay~^wd73KE3=-g&vlp_w%20uS7odWQ@AWy1WWA^sVc(LL3$`)t-`!-!#v-j$pB&n-oaEtk#KG|6 z;@8H}ekPtU7R_%@k~&_*PTN9matf4qVW*(1%$5wR za)yr;Ev3zIjKi8kJktF*s8*2B^o}2Nc9Jk>=1(L8163X--kgftx{Op@OuF+UqRVd} zwz<#r*`(*Ny&}a7@`QaOgy^IL=yk z)Fl7KPKQy}C_z1iP_4;1Edoe#mzW=akC?C^DWsM7B-R88ZB{3CmirANZHd0k(Z66- ztaqpLdhfUQ;MBn*quA)BKiQ06gHq?dP*zPvk){0h!V`^flb)9T(xoK3k_E&;a*6mI zkj)U|pT&nn6GV$EzgOVxg7cer6YQV08FR<-AK>#FLbgyL@$uDA1tH&Utx5WQ#`%mB zqB!F6l$1@PgU+@V1uHpw75A)_O`-t4aRP5?bkqOYXZ5+37ceGwtjRC_8}I%Lj8ZoG z`w4qef;M(H?M$8P1l!88-3n!E0jx>5=%u=Y65B&II{5rwcr+H|OsT zkp2d^#pGKb%npTDQtRis{W!B}%cW*|fR_AUsnC03Kxi`fn?JN2CYu!=bV_m`uvx0! zL{IC&nx~5RVU=Ij#MPdmNPniO=hH)^M9m9Zw$rL4P%%lsmaQ>JQi#cs z8mB4wXG7z#>}pw-SWFMJch%9;7s^@j2^l0BUxE+-9mv!pELj}MSKL`-X+ zU|#w!UwO9zfsar>NUB?d$pkNbLFC11vk=@Qr0_vlA+=)J`?Q*P{)K^}om8Zo_y0;e zew*R88ts$h=Yen4Jd;zAjaj#ipEF%tRDa#f3;6Olk6tVfnY;yu?i*QgboGoZclQr; z)~df4=GJuIW}s zx2=v30wc5zOC%RoqzoMk?h)^sos6JToj>|XQfARW1Xi0e?_U=WbW;a8(b21>@`GrY zf4L1{oe&}YmGxXjJ_DOAAEU~meHMR0loDvQ>I^3)t^K6%IS7?a77c5vjg;ja3#Ow0 zX4y7oQZyRuU({B2orpc+np!UjfIkssd!e*$IrB>O%Ee4go}}zs?ZoT)*DDS!1u{Qe z!+PTx^mn&y`M7zhgFayf=c9(J6lfOWD_3_Fr*QegEfW%s^JnLq9?I$v5^FJ?kH>7% z%Leyej=h?n^Re*)r$ppv%ouK*JFsz1zFWYDC|b$TCkl=^lPZ9Vo7H=I`&8GrV&44W z$X-DhwVJJdeAph<3JM?1gf0k^lR!ap^D^TZh4kB)uVwl@z%dW zrrC`nCD1mv#Ad(Q)6G(NO)7n_j%es#6@k6GYw6p?M*m=*-ErZPj`HVg(S#DQ?nRzV zQ>7aX`k5(_*C<69z{@#O26Lv`3kR;ba1{s%5R?9d3;VWDnLd6zU|yl8lz(Q%ARr(h zn2`@FAxQqjLKyx`GE!MtHIpzkmAL8Zo96v^`_SRn?5}8`yrP_(oZ=v0-->lFCM$0E zuT0cNrUZf%nuX>dXqcb5RREmnV{Q-npTXe(|Jy*Do$5)byk2K*WpJE=wncJ8nQ(2g zx)!)nUe8^izBV`4o2+!mLNMcC^MI6`yDYz&?ZM7W*(l?~Eb%r?uoh{e0zvq%3%_R^ zjMLcVQi>2}$iN-_0`cUe<5`wBi10ClTTTw4FWERQm{Tc&*y<70U%$Lc$!jPa;|-FgR=3iw`cg;o zK@vo3Z*8t*YzI*2^BNPH;<6dBUe^_=6r%4q?_Z1VJ;3>8XNv zhp^|ouan1$6v|yqzjCLB!0_}XCwZ#Ko$|A4;E1H5bTMLDP51Ql!pBfeZ+S$|K-byY zd~bVaffj%0)Gu22k;qFwZpc;y!E=@^Yq;R7s#ziIS^PKDyz0_>g*|1z=Vdexvmo3s z67<7X;2DHG;IFd73d*f+D>z;Di*GGBv{-y$Z=or~m*0JF;DyJ8Ej$pqvWWecah_Sv5mS9842LU1q4Mt)60jS{i?cZ(Qe}mLc@Yr0jH!_}GNJ z!LKKV{y4GxS0rz1@&rdo9B*3~c>C;5#_Q_2h$b7ZKW!oUHl_d?Gn- z`at#j;($H0zllP|Vww_ICaRRE+)kQg>j}fdv*k8Y#iZJ|Zn)pH4>z-2Q(>W=!P!UnrQj79-Qs$1a|{;Fwa^E;t5m{6TWU%Pj8G zGnb^&a|*wZze^8B^WsMtu;gsM^{Fb0ZqQ>H8e|qnyY^}*F|K0SJP16jK1f^LK5;|h zB1YfZ%C~%ad>yc}^Q!#cA>fbjR4azWl@c+|fb$hr=rmjXVDC=;oq{k?0U?BO#k;qi z*EEkG|4>$zEcX^uB6hy+c<_j$v)kAtC^mY2fr}N*!C~0!u)59FvL(j2HwkD26bI26 zJyn#KSJ!Ru{!C5HJxkj8u~tevzT~_6vCqsAIj?XC*09N8Fq|fxUCgAUH2>x>k&NA_ znQcA-x8n#t42!<^sxB;?^(~5A%hJ=m?iuA$OfEBM5ZyaTBuh%NPV3-}VZF;PDG?Z- zSJu@{EB41E=0ublS}UN9jf({#5BRRXR4#9>%(6RpC-l@LCu! z3>wK0vYWyyp`TaD(_kbHW`6}-SzmYJf5k4u@UU0c^Q(}&A@a)yeowsvVz zQ5)FD$^Wnm3*;`yO3%AAFyVE003PR%rK1y8c}Fk#LWG7{6!aLBmz%q7>MZ1&F0)Xw zk-p&bKHEIMhAh^jVq$V(F}<&^ueV>N?Ay&D&ux2dR;^QODZ^MuXYbPTRAbR)7da#>K_O!fk*i zk?&{qLIbIXmYlV(jJ)wIU8zvNGcU%nh5o@Gi$B7?pt1+=!7qiL5 z=*`qr^;gAd_S>_T6s|>V3Q-d1ep1c!*)AWhGs9A1Qv<4BZGO&LoqL6%HUW{1H<8V+ zPcvS8d~!^QZmjf~w*pivu}mvb*uAq^eg?;FYqQNu>Z9K+tGK!KcF1%}5=`~RnzWMY zQP550?Et z364H&y&adUaklADQ=6%J0K2ZGCid^qH!(YAs}0?f>$k7#YAKlb zy%U_XrkACli2GEFBF3)TEDpp=_6HUfl?wRWY6|)At8ZYisJIzJ;P-N7OXT<|BbTrdZ-}Fsnp!JZDN3b4gHgHNIz_)sc9}Ml z)i*YC{R4IEivyh#?`Fz+!B^G1c*7YjFXk~&P=s?HM*sznH9LnmOoCYq%I)Ua%CSjE zeojyF0WW0GTx(MhAPW=g>@}qrs3Cjw=G~ifEKWzUmvCHU!Z2w%;pRI_GN@68x>9gz zk-f4b#aj)&fR75*sLU@+3DbUiNkg(f3}lCyCAa zdN3wFK3tX9iy-R4LmdJ!IIF6?BpS?EKZM@j{>WJ?|M(Hk%F1d`z26Ovko?RqsFc)8 z4C=IGiV1;+Mb#02yKOXo7I2d~(ngDQ&=woVe*;P?E4Sm>&{Xowh9f`f5tL5O4fpm5 zpo!W(GtM&F_<460JJd5hws5j(<7=FGa^jXa3`^^U&iz{1Jg7g8kLf*pRZ~@S+9!9A zfC2ynhX)7Kn_uxcoMw(FH)U?hprsH;8#meOD>)!%Jwz0f0WdpoD6tDP3L(0FLBM)f zuF*cXz2>H6l!4>fx;t3llWN>u`^4kCLsLW*B4c}BHghgqF4_%cm}$RYPMGnag9T_HhxQj6seQ0l$#ul~8DG&w- zMf)&VXt%APkgHRQHZ?JktTPCIo$zQV5GdLz<|VrN_0 z21S~Tv~Bq2_xlI=Uq5Z_-qrHUL!K3t#5)D9A8lbCq!C{Xfw z*-b$4L09{N7Ry0sUFJvuC5kZa;|MeUU{A4k6H`;ZXA^ZJSdh?Jq%VypQr#+pS-a26 zx%FrXZQ!E!tCnSqBWRy<;>z*h)LYlTf?2Sf>>QO}Ht(+P1g*~G7N>i+h*f4etn*vB zk+j^}sdGep9t)tmdX8~E>5U7&x6N$W%R5(SJ3O~wqc z#Vp&%g(|)!?P7d>ds!R09vRLrE$y3CzkgV>Yu3X2vE+es zkP&NLs|G3x__M2f1p(+P>+%>a4ZM?mToRxo0n64N2`|mIDna^h`@a9U(+mHVLS>XI zPlP-ikj2pg%@P9BB;21cGhb#6Fg?=KBQ`0*Jn9I<`RAS2_^&kn?+&0GKDmmvS+{SQ_vYY(g+T%Y0)vKN!6A4UCXfm48eD@r!2`iUa0@mB5ANrVHb+qchi`kbeqneI?Ud1-tc3LF3cfDd~GRR#c1{gCx} zAS&`|=M_8#0MJ8WPzhD{)ZJNH9KRPJ48>@{kg>Jf5yJ|gYYG!*FH`~_cfTb)*XD8; zS3JUd4+@25TVII)@C*QGu1x(Z$MdwKZ9wFR)aG4@8*0D=06G1ZwD{w{Ik6L51aJ=TXVwE zyimL<+%}Zt(%yl6_nWan^kE>vKoG?!owAjpeBoDB65X=Xrs}taEp~Hm29I?%omH%? zMrK?+a`9GYgxJrjW+ro7GA8`l1C#wi45D*FK(h=VIzg*@9lB46HVxk22Nwm={&CwVHNU;j1&?+>KJ}EY`prD0DWrwv!fy*^PkNT6l z+J*gpKW6~q{L_t^2}Qtcoorvc$mXq~gJ8+~%G3{fz>Kp3ZMB@DtoB3_!&djdqY>kTErCbz{{b~-W%Q2F1VJ)xVD6awwm`2dbY1Qwr`Q{GH^ut z_fUUXXbiG9R`-#xzAI=q7#y<7BlnLAyx?yJ3{69Nwr zRO4E6_7NMUZL3!7ft1GWTYhha?)-*d0qNE*qe$~vyshhQTlko;Z!_$}kDmWmcCOEBM8)HZ1%1|Ugb4;!B{B-`=+P0Dl#B_vDW`6qdmk>S)e7`Mp>OHbmyC|j+Z^hv=fDx z3K(;j2lDj^W95x|Os-OU8kfyf0;0J?GH6x-bm&dDG@q&qOU|y&i8mzI-9eK8sp#gh z;p&s#Sa6o0065#Z#&WEUExvmp#yA~_Jeb3>-}LiGG*XtFN~r0DgOY{BL1eNrOA*Dn zVBoeY6`5O4S$(SCR`~bagbI4`QIA_m-&_5FT$wkEAKauH&LW-#64kOzz@FXuEXnvl zLl%1`kE@D=`f_x=yg0ogk!Idr&T*YR=UbyhvqA!?CXl3hU`#(!);008*4$m)yq=MNY3 zQ;;IwukL@u^|t73nxCAnIT@WZ^NqDmI2kxV)1UcNOVD$ApzLrs$2^0kj{`5zJNI~k1x&XyYJY5qg#bH@qqp*^=i<88bvYsp&xp~z>~KHlZpUSl ze2B7WvFJ>|XAnG86p|ayi%4VXWqk#EjSa*rtEL11i1Ei`pTH`b3rNX|24}^}NahOP zV#he!JGBSil~L9A*iscw$6E83Xj!s0?r*Km#=?IDfLShgq1UHEP2QZU@q9e#p-^*Fu6XJ7kXaYHhBUVKS^N+z6%`sXeI!kqdDXA)~D~o*Ws@_ znooW>g#4lo56}h;{_>Q}H={t=Y;Z`$9)etJ$@TOukuwp3usj>0-&mSVEt)#WCgD6_9hIxgZRBL?v63!dr{oE&lQM^u%zi5?789n+-=ntH-V$fi6S5hrc|JQNzgOA&L2L0`D$1()_1hd`X z!b9VU?ajSU6vx%C2yPTEcE5&)Yh7-S*@dRhsc_Vjob>P?@IA3{63r7mj-2MjmqR8X zM=PayQqhN~EQ6r?UpqStiCrTtdafskM>1re5gzRGx~FqhQguE#Cj;n5m8Gm29@Fc%TT!}ah z5XUx)aJx0JUfv6&-J%!49{bY-{TOMqp#A*tT-ZuS=}@IE>2+jrz#a1wUyP>OqBPO z+gBKW;dx@b!}ey{O;bDD7U7`38TpeVRXWI5t+AVp!YM1L7mDv(giVniF$mA2GY{;` zlGx|a4q3^Ej-e7dB>J+V0hZ*KD{br1>|P@UM7M)k%N+Zn04;W~c2!S&vX)<|;LiIK7 zciOMN|3ql4qP~`aHBPqFJir1N(5(^@RY6Yde&Jr~d>j~zlnx?0?!>)Z4!rT!>s^f1 zH5U8S&c~40CoXsa%VprPx24f<6VTvhOk#l9`dT*D8|j@jHRYYdkYaDJ?1_VyK+*A! zvX5L8jd3;!l!46s8z@Nqb_gXt^gG13VH`*>NgW8erg<;XL`Ve zQ3kwQqv+?T65b~qsx9B@4v-yoY6Py5B3}$R!6G`;Bren9cy;}QWJc|=DV|A0?h-jG+AAXQ z2yzJuay^=sYJ>XVVEuq2K7A4Wk$2Tm4uSrZ;>ALS+~Xc!5fnRjiJVPGSOTVsZEW zxntE_TkZ12y|6`nQMs{AD5JW2E>90pkYiu$Cu<0d^O(%54UuJ``RqpnWH6*geYa!p zNJkT*{I=NZ-go+^*x~|HXvycr%d_X*GMcaq#gp^%NZ{S;(1Mq(^IZ>8tSoK&WQTV5 zw$pkGUtr=r;xuWCLXkvP4tL-vu~8Yf&NlQ90;RlXpII2@+Aoq_hZOdW-Bw(SWBWpY zY6%)Rl^+x+(m{Ox23~qg&Pgs(@(|~xn^mKb&)EP?z;#1-uzW|%gvb=vI*~?ez(Vq` z1pE;xX^mhYzz?MjU;y9*kOOY8u*x7Ab?Gj*u$-B9myjnd`5f5zId%??wi|F_pY(ed zvk(D7Pi#JZUb7riH4QbMB-s|xMUGwqar*2fb%_>EeY)tfS!)h`4knGf_KmIYBhz=@ ztBXXTAM6m*G{erGnzx+G5J*=7kS|DkFpn?TUd?frVk z%h#99jzpnr&7+NL@}WQQgxxsYRs#Oh)b9ZDJi9kA49M5RbS;HPvR|JIYJj|DxxRp) zU`b#zTY#{TkUUs;$bj<(_0~jLOV1Uq`;0)FNL5FL(wBB&&qhE2JQ5?!=&;zG^f{^Q zbf(+wV=M=waHC+OXFVAy3F#v9)Z}<~MECACa)us}lehH*q-cLD&GsBVuS&P{WxvYXY`0e*Y60AeJy^58JnyDI>l;4h!0xEqa$#_8yB5E@#7n?uH2+Y9< zg|3V&N$-UasfEpW>{4pjX=>>dYc~5s=>+SadspAHuEYoRxg-?oM}Z-)-nW~bMYy`S4_7(xLuyL|`CNo=8`q9fMg4BA%> zESM>EGji5M>iYWN__LEmw)l_n>)yxTR=(lpaoE>Ac9L;Ii)jB5)9CJ7r~3>sx0E|( z33d4VRCT@mz~rN&7J9&YeC_j-ldpHc0`7}RN)PzrL@P)$2z?;R;L$e*4oSM`SCZS; zzInvstrs;fRi!7guod3(bMwFbYNuGdSp0B0rq85=@cgWJPFK>lYbu1%P-eqpxEsq2 z#y~V3r9)ppyDzm8Y?S#t0xuk|&*V6~Pyn-ZltaLGdm9sQZwtU|&CiX%^J`y%amz1a zX_Pl}I6i=%-JXcPaiY(3^y*tb{&@Yc>!DG(riiDWnYP*d<#Vt&I7u}Do@%>kAe}Y# zna%9wyO(OF4<*y0qhm4@pT^DB{2H9-QdQwmvC`S`*TIN5)2+;A#5s5enI8s#pNvvp-C{&G(sH4Yw^W9J^uS^BTY(9)U$b1N% zBkKOI<%6r|+2+T;H zGv!FRySlnY79tG=z8_{DNZ;=7+X|)0KVc1ya&~s%_h~3EtPFdd^KGljuN$R+093)o zU;$H9aElDebtL43^d{Ifo)6U|J&N%y|d8jDl2)cFAFv{625Mw$s`6TKb=W1M?*tHl{kBU8!Rc=;Vz;>8YZ|4 zUoI#p&|3q))}>WZiEVpv-#bL9#&eint;!-ND~tW$!RWYgy0> z%TJFZ`*_S|Y-TC)q1XGOatg^Up`y^HhbC<*9B4gm_@7!q_bdWULqq-S?9UiWUeJIn zxEVnv?Di~4a(Nq&ap+m zn)a?c>Wh6sJ#zNrUOOD5UHx<9pe5{Ka&mHPj4~2yNJu0V6_wd=s>7ut_d@;5^mJls z+{)VSt0sP=CERFIKue3aczAdWZ(if*KNKr68V$z}*Rs@_RGXB25^Fbdj(hCsiq=Y@ zB2rzvNsfm(5*3L@IzGGtWy8!TJ{Lyf^;HXpo_cp6Q;1P5u%o;Nh-##Sqhak4nec;M3pA zLOSj0>auQvd$7o=e|^^o%oxubt{+LcUe{w=d{Z|%JuuE8tW)P`T8C(=zdomOOh1pv z$_j7{=BwGCbz-vM-Q_Ilrjw~g~2;RWe`Ntb0A7#NNnSeKCT5Ahh>v)S8}hmU{zh6BX5uzf4v z5SRVBXaxRTMk5O=5VM-McFk=4t-?6G)!;63=_PY0bI+5WXO+5DpS7#`s*lK4ek{2D zIyqviS0OrolNy?YO_|I2Ngxmf9W|VhfWU3C{IT)nN;i0LP!@r4m>;{@YvQP{pRW5% z+}Rx*F<4RI>2c*TSF=aMuS>tk-l#CoCF>t=E7e4XwC zfO`QNx%h%t#C7VxQQ{E$P%yQ)p1SVT)b|?OaiJR;XPkIC5+E7`HE0-(jh$uh=dL!m z-Y0pO*BWkk-!}42+&J+4dsAP%9+-oJo~Ga)M42nYxj8r3zJv85~nVweTjiu-Vj-CON;xN?Q6Ka|@B_kD0XCYB9wTpm{SkuR) zgj}BjCEeP)6Eg>{*XSc`slH21E`A#uJCYj|@aL6q(>Ui%v((nshQ=DQus;hICDBn; zgk~t>J;xmJwf)Vb4t#Qy1CQ9)+0PClBLu75G^rr*@dQQ>sIl?!`FVI4jaFH?9gSte z*4Fwe$)y8G8K3A0I&FBVskz(`B#LaX_xAQefsY%Uf#ws?u&saQ&Jqt&@<<|S?@q81-V z+xh33V3KT&$56k^&Yk1RMgGgX3?(Jc`>S@(fy8@k-^FU*cN$Lz=gMduC(!b+@{BNQ zYHK<4M5159?P9*tqp8dX=#iHl`pn*X7|{xjz!Q@a9=VAPBSxg3#OE;O%?ZxrJL;-Y zN+bj9#=lL((D$}y0xh}9<7&T_^^VP!*Ok>>NmR#IKU9Ao1#i*ozQwuuBJdpsSL#qjX(tTN3}HN7PGzNxB+Hq0;-%b%Nmin!%6x?mTk(dQq5*M zc4l_|C+aFHPIvy7{;DY0(QHL*W+Q27vC*+f$(Ck@W}60i{V|&!gK{w0%d_6v6!E#; z?Nw%vL!j`+EB%V#G$Gg6A_rKcHe05q)uc7;1LoId_TvjheLfQ>L z-CW3&7o_vQWgq`4nP-7NIT{Rg!FS07qP~A&_XQ8XKHd9_*@18JC3P$I@8E1->f`@U z$@SNd=D$MTNAPvxyO!qXNJ77~~2rVsdgtNn)1Z!Q(_%K=X6O=l!R^ydxjruYA+0|tdy7wr*LDF9H10r~pU8F;u~s;t%twGhw1(9kQNyN!TA z>>qjZ;lB&1|5qn9TEI)<@bI1LuATX#N&!z~k*Tk>iy&=9XP1x}C93*gJ~rh>|M!lK j9P0d&9e&~BHw_5(KPe)hayR<@-zn^+JhTL2;Qv1WvVeV9 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/chart_export-dark.png b/testdata/snapshots/darwin/chart_export-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..617329642b86f9a85ab0a759d7d4e43602384fe6 GIT binary patch literal 15523 zcmc(`bx<3B)IN$9ibJ7Lw0LoMNpXkb?i6>|;837If#O!6Kyil>99pcndvKTF1VZxT z`~GqNyK`sm%zf`nlKt$?ZuXq>Jjb#pai7!`aIwg-kdTmYl@w*QkdTmdUf%4OC@)9e zgs-V1A&EOG$x7+?=bf$x>AYF&#(?1Nq9ZF|65yZ_6u*x^lhPy%d-cm!HbQzt4DvVVwAhQy<|NbNDAp=e=;6A?%gP0$VexZ<@U z7Jd#1g<9Wj$nXw8M#fHUI56qe#tG0+peJ$^=18zG8VD+|7ykhnu!-@%xl@%;7{-Oe zpd%3yOo$SWBb}2|`aqWl-5SHU0}5YP`R)I&O7s700tEI>oA3S@`1jY34ECGt?*{;) zujaxLJGewCQCxW9uB|09&oG&d+@3M(vZ^zCC2i~UpLjHsGew7*hJx0(iP;h~HIqND zS_OmuO3D;{%T}Eo96UhyNtqWOi%nKZGb}7DY>nqV{@iyk&ZVRYE-?`Ef(df++2-b~ z)WcxQNPkX1Q-)Wl`{aU?7T?7wceMUA-Pvxzr6DDL+|sPQXl-@It2j zS*6k*k~V4Ee3~q31#VcjI&~2)SP8DsxjU& zVsiaZ=h*vXmV$oW&^-o*PWLO*J#(BFYBEev#Wn~_-d+T&Vtyq{C$7pRGBn9{B#rFlh#^Wm*_B5 z{#m4oFPg>eS#Jwr_~-0oGZx!NK}1wnW6*k-cI!kS?a+p%f&zc4eNSOd>YxWSmyjqa zT~9IWbnphzZp6Y!$7f%loSyCzi;=}dI}=c8$1HmJK#MR6otc$jc7xKr+{1|U3R+%d ze0)OT8+}m6Z#oB#P2`ZA9fS0Ui2YI9dDJC`rd7 zpBuiEl650?semUZ@|7x*;JEeT;RFdT2}u^@8zMEg#-yEF`oQ7;=>^``wEW8;8}IY^B4PmiG1@5|Z?o*cv`QzI8H?p8rMW z%n%(6y5VzrCY-)qiGd#v!TX-)nIKEIvSg5|$WT_%AkU<2#$rN+K*z^=em-z;aG;Ia z_YXKe(u_}_p^w`2Z2#3cW5=oC(^Io2HhH3H`8r$GidT(tFbV35Xc()elo=r8JUXNKwueb$wdTt79-r77H4got5CWK!($~5u>s??4dAsM(c69^Zw|5Y_qc)QtC*j zP4hA1Qz=zDdM6$9G)<&5Fumh}S@gRpGc|2iCvtdt8i)vg6CGVji)hOkx8)(b`DJSS zDdkB5_2O~K!K+@fJ;Z##pUVYFM<=6IJ0xYEG#4)`(W~S zUgtv(@$sxtpImAf*n^#58Y7+oLs5pF$}2CLJ>Ai;ak4bEH1wPACeEk@wcSUUshAf! z3ip3BxxJ$ORmo$QJz~Qf{_zXJ=-d6bZ++Co&o;cigz|Xk&-pD?$L3ZwZDB_K%8E2J z6v5~QI5=843k|j&bfd!I5K;-korF4`C<)#s&n4%Ky2;bBeY^Gmbd>NZpNQF?N}Rg$ z0#+U^FV~-?6oNs0$vys7;e~C-ozad!#7=Be=GU+G4GpB^aOcy&N=R#a2xc zM((;tDLqk_Rh@a;=vDk1tBKLoT~x9&aRSEA?Ez4D!v6A#fk*yO{(<=sImko%ecFhv zYGHrw5p5;G0V#1MNYm%`I(vdyKx1`v_44g;;J>P01aB~(O+9{Po7G)+oTEIlRx~To zIn>va#rb&?=Z+KU-oT%R1Su#O2{21^guXVE-#vRncQ@8kmL~7k{CdGOaIc8w%#~wY z%k<1l@XE^LR%O`fsY$y@K|z3qerBV0gSqW~NYqrZoTSNthvn9)?fB~l+H*RsXytih zVQ@!jser{13hstG-VbV$jGWxu7xA~KhTRJEot&Hu+xHJxo``Cbf~z?pbz|FV*my>q zl?2%4SygVXKwmyJ?t}v#rwoNfhaN=WW#UKrBcGT$CwN_9ppF4=f{>biX0anJ`S_Ie z@gId~#s}eM`CC&Sd zOcf@le_ljQtQ&zG;Fy(8NYts7f$xW#5X?R%k(?GfwtW&2WcD}|5Ly$HR*UhHB6W^ zp)M?3N|c(JpJPc|uV&{+t=;H-+AyUQW-4&)0*m>B3`N`@bNMAg_9GZ`TTW;~3wf7) zKnJ_)(}b^H%?Zy36l=2TvaTKkPFipuJ{)r~a&ghn5>vNMtc-3)rYFp5K`D)$g58Cq ze>B*Ue^M_sW&6dBpC^i%yTukrC&{cBR0^wQLyVlisTbpq`u6cXr4vBZI4gkwM2Tox zbe?=htZmH97#Zj&mn4!Ma1SCv3Tsk$@M%bBL_PP@k|Uw8Kef4_@c9c8M!Rk(rCZl` zFq<;Suj>s%fuEl~ zki<{yA?r(BYG3>?=)4V7(jawxa=cgQW4pUp4JQbM88kx^@|W@xWM|w(;FWb3lyoWn zu-$gj5KO|l?AFy6pi5V<0WYcQ}XfpN>JJAyIYR*7QP{eR^yrOYsZ3XbHh8|JZN~^uL!uu0-6gmC&U9-=TadX8IB#O|nvqY4nbY zhN{%(IAPk#XK-T1(4~cIwSh}Ne`R4_&$#AnF1mGY6sKm+C`*%V_=)z_D1Gl2`HyG} zTPeE}{kxwwUJa{BFCoriJMOzij8J-lCM2K4k$_<|n-~ws|67}J96+S3#MWYAvl>BE zW=F5awl^Xb;&lxn!V7LBiDZ~YvgD@VSpuz=wVpF6{hWP=hqxrTM1jd!`E|>e@Oe#|eK4dJnV0#)w^p*O7}Z~{G*GUT;8^J! z>`NAiya2`y6YWV~fD*cH;CKCgNHoPxr0uy1_0#4|w@#k2_bv>{kCnJqV#@g0^*FKh z`)o#uh!XWbDuV4Fp#5>dnQ?(J9;e8no~-2^`{f8fo~p{<)wQbvv0;$GjcH$72`F zZDE$A4C?ynda_$@xWw0HfHSC_EGs{1D*=VCt|Qcf-@LfdkO=I4tNepw-(YFDrdJ#_ z-}PJPB$jp)$nwz|#DXVbq<0IM;npkVv7JCh+*0$}-BUee@2tu2D0cE$Mdiri{S^5t zl%iEPj&*p;(>6+pOkipq4L80aNs+U?8i;$pe3mv!Z!F)BA6PE?p`YhJYJeds^bx*! z{?j4xWEg=C6OG)0h1Yw_{XsQU!h$h-XWM}`C*~k?3}GAyDr^TIE@zyf;9@#qgPR`8 zv34Vt4%*r6NpQDtPWWq6_5wrg=PIQrMOhRW65=6(CgrDuUw@^<$!F{ccjr%Puk&f$ zeI&iiYMt%>Ht^Ja?kmC&a-P=|{Z9^a$aS87L!HZIDs;OS^=2t)UX;VHY|7V|$NVZ$2g+&sMf1~(%2j!(7(b@Ot}pjF#=Ny`y7R!ZBoq+L;T!-(-h z1S-rnnueC)$^(3NbWIs8pp(QV-O(ac!TDGmylH<1|csQ&W%<$dz+3UU0uP_Q>Tl(!L5j)==oE?NM zH3H*d94j>Rii=XEwhEN~8xh3=Qy8kVXv|U|dZA_;vWTcKgT#HM?1u;#*ctlb(RdGp zN>|YlH8f}E8j>D89meK0{4t?rR89-2Q^&b#ETsRQHYlD3?YuTjd(Z{Zc~{FmBK3%D zwpp*%1Y3qoiuW)>1Nl-B5a#03<-4Ib*Pz9-)l`w|2Y*;0+KUSqhXHI4atf@Uo=0fj zBJk@HT%BE?nD#{RmcH9qjTEU}VoJd^g5da&Sv*8B$G@P3>lSjCJ`Ka?5g~}VS4Y_| zlps`p zgoae}nFruM;#XRWyJVjJW}{Hn3vgiL{mpz2`m^al^*H!dQ0#4D?!Zb+%{r+9?_;;6 z;axRL(M)9ouda6T5$Jvd|4Uxva}fi9NQT`gHdYnAbSJua5GA!TtB+lQNdQlkk=b

YC-%POhH&muFde4O2m;4-qO?PUDUw-pDbBDBiwF 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 literal 0 HcmV?d00001 diff --git a/testdata/snapshots/darwin/chart_export-light.png b/testdata/snapshots/darwin/chart_export-light.png new file mode 100644 index 0000000000000000000000000000000000000000..1bb86bf50575f11e251d978ad68737ec6c59e5ae GIT binary patch literal 15096 zcmc(`Wl&tr6F#~LL4vyzG{GH$y9NkuK?A|v9Tq1*2*KUmAq1Dj-QC^Y*@cC@`~E)M zPxsTUy8l}>yE}X8oSN=_p6=l(+CJctLB* z0DvIqi?oEMSLWHex2}fH2J#i2G)dJYh~Lij(~fGXD&vlG$M8j7(VIPXXTdFB+X zh&%(Hj#FLH*(Wo2Jz%E-Abcv$}o3=9x-LvjPRV{fMG28m6p7Mg($XNyud0$ko0QH|y*vNbMS1S^BqzjnF6Lr({IpXcaF1)< zA+6`fdpI<6pYlMNcbi53`Qd0yAmFZ$xrO}kilR*mK{DVKQXJOe|Me^DdLyNV=BHOL zOM?i?TCJE!oL z$j|@4dFg_MezCoG_M^2m2`e`pAK&EKT4eflXVxf^Mby7$u^7FXIYLU}(wNeztz^)G`Vw5Z-1 zsA8Ge@jX~NLpiRh_B9Ea?OGL*{(ctbX2nLG@qPQw$?V2jnuR`4J3G5yzn18e6ju3O z3mSv^a$YHNJbXE2P&oN=$_ok-QalasN0dj+>a#+7^s6kH>4joP&G966c9ea`pp^P# z4?BV4bzn7bNJtvDg}H?hZD?VUdHepohn5z>`euc)kIzDHR0K|(kkVIr8!Ia>p9$Tj z0DGlhC*E>2WtjrKZPnGk9abN2+G;$1sxSK)IR*V5`tr(XXqc7EmL>*+O`yeViAb87 z{;o8lV8V?oY4bkcAh-`Ns2Bg^1~sPF3G;i}-T^7qd#Kw>%U`eix^6tU)*kw|K5&Og zN<2RO9aa`qXJn!d)r?a3n~-z6wDjb9w)7qg>oIp9R#Q=7`#qPEv~^`=h3mr1PfDtn z<+3I8PuT052tBsJ&_8(eI|i8|#ckf#Dw#G_YfLP9z&l565_TEMZM?1SU!iORd42nZ5JN43Wf)W;%tWDV3+WJr2%iy5~6vf0` zfsZO9)8BhwVGbI(Y=H^5TI6gEmidI5nVT;zEL?k$&j(_Yk)8HQzp*CC6mVUb?lxje z(a{u!9+%`4+) zKjoANhWLj>9byvFnYeNi(wL8-iAl-RJ>Q4dS~|U3Am--#q1dmH8n*}IBnmpHmd_Kd zUe|vO*oY$g_#9C>EWI15@g0_1<9f{-jP$EYzEz=Px;WL^b~HXg#xpK1PIgbnErbXN z){FnMg@kW}t%OchW#!t`QJThgGb>#^y@Br>MnHcq>OQv_Y5$kT`?CgHsk3wY5UFIm z9tO5f&)tFX^z?KLvIXTVn?~o|r+odU(NRk1!%`4P2pUePVbw&WVGkBK3l2VAUT!In zBO@jwYiYijnc=RlceOt+wzjbuG5b57c|i1O|W8uVbA#Psre zNmW%=nm4O}Kv=H{3Gq==Vq{RzoApq5k3b(d@S9@RBLHJ?#B5!}`Hmw?^sotpc2xW| zlmD8pBzJDkjfO%bfs+-s+8cqjI6a*_Y}W62p-?pc;9;OoMi?s;g6#r(We16PY+YiC zc@Do_Iq%n89p>hpo}U--<6l?~lS8Siug8i0@B-cy_@Hyol9I~6@2l-}HPxBX(>~>1 zv6@ozn?l6F&JG{%MP)y*`deCtN{6!)1EJW9^j1%p=8qq=6cqM)N1iZ|xJ{3?ha4c& z#q(?lo}InDlG3NCzb9(TgM&iH(6GHid`e?Sy?~-)x3C)jmzoR<2b1LVr@I2=uzbi) z5%a-;#Xs>@?=WK0-@II0?OK{sue)bsMG5b~zM(+e$!QV(z~9*eBK*1Zl=rU9mC zhI&^O6&0@h%0wFM@GA@ZZl5%I`^?&#?kh9s| zn9XWY=QTMJiFwa>J)D7PX&+eiA8@iR;qs@bpqSKWg=3I4o}My@!65$@2q`zey_IlL zR_;tmp|9#_P23zlJ*gKld1$#2@^+j1LdfdF&U~xachQlQq-9#?rN8tLZ>&J{T62=z zYsSUP8?k?IFl#R~;FGSUm2`JBy$g3QS`piaGtZCl3W5;dD8X}drM2JXx;!1`W}Og?X+&qI(NU{P zW7vy-afI)4Mk|r6#jdPORodn}{<#P4r-T-mcwag%*+$xFjq1?--Carz%AGNoE$j06 zpAE2%9l}BU3o+mpGl1-Te_z7ZzV08-;>^t7y1I*VZnTi;RrXys++D^8U<_M+!AAec zi0R>?@dbJ;ztdK(`j@dWqs=zQ#nAV=@2RCCFb)45b+BfDnmsRH>#H4OCDdx7Z)nuFU*obwj>bOQ8%wnulb-)HE>Trr+i)cLoH=xGPOUPAX}#^ z9029lJK8MVWcdk-|99TIl|6bXih+TV{h>315BN}=BImh^vGcP(c5Z%N?)O=<^y1oI z<-+2H^@2K0y{f9J`IpZj5V8QE8B`v0Fw@UW_Sr67*j(N2Oaduny5w2*)EXgRixL1; zFT1<`5g8dd+!f&V7Rvq$7`S;`@Dh;Wpm>A=d6B`e{2n+72u4>8qyz{3KQ(0PS6Hp* zg^8M$Epd(rQFTb}7rLK+Jn>}|5F}7E(D(4m@U1M$Qj<+gK9=?in7g2Kw`caXQ!~jf zac2D>IS5TRMG>SSl4$AsHEhmi5bo@hy8J9WTl;7A2-|lOefN5C zT4(|U1X6AxgWvq0`ng9F3)(fj=(=nMDjR61=^H|IlC*v6B{e@DL3QQ2wV2Wu$WC+7 z!EejjzB0M<1yykPJY&dU-1`N5>ufF#?l#jRG)nwDH&STIJ1HOiBbJ|Ed5s%Lz-8rz z)a!Hfo$Q(V$J=&J^m>Yi!WUv4xyOf7W@iHB2>h3D#c8Z71nBzqCA#0VIVOnZQdvO7 zK;sLxR}(!Yqd`&pLS&(Pew$3zMOSZa9&J{Z2>oxbf%P9o&mW=he*Zw~C`N_biP9J> zlv=~ms%iAcFksi9p!TH)qLz^3SX!gacnyN6c;ZR?WCG`-ie5g?((~EXxw{dQZSg*Y z9T)hO;4u%_Q${T9G z(;DW-cpX<_o&8sAQQHyG`X%V+(CbNhE7_SMj`(-rJUnYWA}&5pFaOn;*t_d5Juz@ z01Y?xK_t<;heEBATlS5$R_4A%*SN&;%-yQdH_$lcC;FBp`VKF|}2?3Ksq! zMcufe~XBXQ#O@JC>Mwbr9ZKFR;Q2~kiSSNN&030{-d-p zGT76Zi{`U`Go49?dRZn#U3R!hsa%Du@(r25Fjm7K4i?oWka8TVz}k31NPSaD`O3;4 zWY>Vy+ulsjX=V-;3VJUp(+DnT)%dl6Ew7Ij(qeljd^FIy7pfi29y!_)^9Bj4Ps^Xu|iC_MxcsPVFiGk$E$8d(hc{DMjXd&5!F) zXU}@RrrjW@)+9*ExH#2Abf*E%6OCETQYb!X-3jaSTd*Z zBA1)^jfriX32ONSyOQBukPk0l5RM$oIS6RIBOBn4VI!hf1RWtuYNGc6@r=z=co$Q> zsqv}+HkYc4Z%MPS!^L*wy25*>Hd2%RGVKz1*X=Dts8M1S9fRDs+iasP&BCQ5%_=$E z-9JrC!F@IP1|9?wdyGGUcRMJI<@dSFrVhqavsxYMDOQn4^gh}pni1`_{CXrk#|ae1 zi);UqF1*Wo&n}nwAE9PLLG%z#oY6u47Qc=I4MXsz8-G#NS56_CMtyY9d;GL!ljui3 zwU3ksFrN$<0`w`6a`0L&l7ZjDT;+zhuDT#g_NWI~A$h&tQb`{kb91F1C_D=v!^dk` zP#3ni`Xq+_PZUYd!}vpktLve6faMLZjNGedwtUL)B_fNLlf!1>98F@^6KG=r_9no; z3uLm{IAQxNGJJ^#6AF-T`oJ@H+HXF@!T8>*-`cVAqtn|RSm|#V0+=yEOw?cH@WqcX zp`}Z#mL75*=}D1Q664!vu@R}b_9PprGNf=SAr)t-4#xp%J*#Xl^$u<*1OzyHJer6* zKNsD=&6NmSR`g&Ers^D9f{o6P4o#I$VxF6(e*;hIhoEcBHjGiK5lANypDuR9p7;}v zj=d|%+DjhVe+;=$*ir_yX`BQ3;8|{PKW1^M)ht^Rxb}7 zGv5!W9i^g>KFS*}d6YnPYB??bNk{TS2ydDIO~THDkZ;YEC+ z2osVVx+J1Zp+>{gAj*>IY*E)u?XpCN+2B7V2`7$PNzShC+IMa?Z~j;UmSbJKpS@7C z`a>B58yUrc6Sr^*b=3@yIiL9v+T62YzzWE-o)tQa?TkA%e1iw`z+u7qkRgqd3m4L3 zoKBCNq6Yh>Hh(vE3W&#E%y_a#$V{@IZk8v4`-zqYQKv8;8*0OU-gLChUdo^knFqOj zt7-hPszi2JJt_<;LHbswLVrehmc#N1 zOmZk6ATcgEIm#vUl!{smj4)9%eLeq&1z*YtGOnS?o`r*$xxS$>7zgWEoLrKo{Rr|S z5CE46r$?n=nvLLEHHoQ(pWh_`^WE2sAoO1O`j-QK>oueeMx7eQp<;zFayFO^PF@c@ zcx)1H!$YK$R{1{~Iu>pRW(n@<=Esl7O}{X%WLeAIK3lV|LBH&b=WrwzV(jn72SIOJq- zVLEEjW>qNfxmTL}?af`RsN7G1=F0-5sBo;q!*h&{qcsvdM*6$!{KFi@DQsseVQT+i za$9{ZS=NRu{|SW;r7Wh)XG$~G*CW}k&SsOTe{I^^B8=Jrdcj^u;-U9q!<1c{>|kf| z$qsL+wY8tSM31YahD#NS;i*9R+9@1%_=tgU3=cP%Bw4u#4#WnxIQ?GO zeO_JEswh3;h zw>X74Fz))ssPU4|wLN<(_Y#;OP);w_;Cr=%%EIym`_S88U$VEk51&*5JpK^q)7aZ2 z-=8-7N}ByU)hKo%;|n)oLA%A7Y$eL15}=MKud;7G4DIgC@fqXxyQhz!tjC%RZjDkN z#DrzS{5^tvTz${3WL&e;xCV~br@}77*(%FhTpw00mls``FHom;JC0yyS)K-(IxB;h zSp#EJLSsKUcn~!u>vN?UqwIO}4;rdSzp!|J{KngE!E5@trnT=uZ4p<@(Ierjwkb6! zHm@vW-Hh8?R1}5+8X0j!i|?sEo09~XJNzhPnL__={a*zp1-OamAnO`AhgPhqE-~~^ zNN*geIQkZ&?JeGlz~sKHd~Lc8>XPaW;5p+vs|9WxTr!^;t@nnQq^3l_k?XJ2x5#a|+Z*+R z5gmNgJ<}ty#ec-AfDZ@y-yMb$oi{qW$W(O&Zqa}pZ-x1FuPDxh5kmy(#70&(g}k44 zfl6OH7ef3+eHCZLRM60`-5Wk1&N%6HNN2vvX+KdeHz}YdG7$(M_g;^Mhy}%BiFe+l zqes2a{M^EJ zzhOCrkuU)4yGpFu;{`#8pb}fkV5Om$wdvkW5#>ZC4zH`MruDI{6zJD4W|KUPf&&)a z_M?#NZWG@JasVs#mTqcGgqw4ygcO8090Q9|3@$|1Y+>VFo?g{Vsq~KAPKg54jr3gY zKKg@S9$BRimR=KkoV=;n>c4<>*}7C=ompppVwS>2kvoj@@S@e?@#%d z@a-)fZEb9Rh^^Aa$sbI{MnTMCs;b7P9XmyU7dlt=DEtseU_K$azc5eYW;IZbGS;K1 zfLC*V>PVz55<8MI(%AF*2k}E?-h2FQD(mEqmfI3CHCIBqk3~v3obFF|@~U!r0k7+h zpqGFn)soo~VAQJJ4_zk!QrKNbAbNEP7H=#uygr@UKR=xF z@Ny%%7Z#PgRBKl(Rz;g|r4`1SaB@}%kWcK-xuN&sqxL5;>#VP@=jU4_*b^UYeFxbs z$A^c9!v_noJVN}v>yiC-t2>W}77rgs1c4QN+`L6!?t>JC&9U93D)xx%_p@G`_O*W~@C9BIF3nPcOW?bL2 zwA_~!!*0R9bHjK&PX;>~^gcAzm?&*qJ# z=`QcxX6rn%@Ygve0@8;96Ocs2i_`hBD<^~cPuj`4(pvc<^=ToN*u}YphR?iF!<%{4 z4-Lmk_N)-ut!pDP%p+@ZR}Iz%K-j#%agaP1cZaCF(TF zQ59TqoGi=?;qtkOU=XntWq#EZ(s!(+gC zZ8&oBJBPzMZn+?OVLey-no;v8*=EJBZ! zh9*(Dgp%K>`9*UwFJyDb?637~@t^5+Hy>%~qXM~DJe4eKF~rP2PBSYjOjd3HFQj+E zy;LPk&R1N0QSZ}l3k1Xj4j&2m18K;65JWZ>(1+XG!)pv0c80cL(NTK*haF=32OG+Y z&+Drhm3E^sb?zD#784KW#)q3Nqq_px!q@c%Y_JNlMBA}FoQ$(d6 z6^SRa*m-qwrJFb&F8|MlL-?I&c|e`hDOOiVS02VKR2UZ zZ#y)yC@ickqHUqHb0%Ir&EVpMX=(`)VmgC#U0tUJzkBcyW=`w$_5nz|lx?AMzV{&u`oeyx@-Ew`_SY|6S+ih(V3tMSXD;542-fg` zR0gBNKR9%4UaOnV{PG5<^9?7SEIdsD#LMH)OeRC&6{UYtq9_ZfA~AVpd(BP}CH zuIJ6*_0AkwR|rBSI)l{&eA-`6zlE=@jWqtV3{%-x1?Q&{yjW@TQSGYC&%O&a!TC?ls?+bUM?z4k>;4;En>RX~Xg8fkcJ{7cRG_5Q7y=TiSAVP=VK1q}~KhOE1v_bBc? zdY#wSXK#0w6Ay}u(@RupiY)*AhNUSXMfc;b)9(tIv2r0LSle3C<0x{~7$F#kyJsuU@-pi+UN?1g*W#b~PpX>6 zL~8!_afOrpYQPtrHnjd`yM-_j<}~zj?bN0lz}>01AZc{JkH!*MamDD! zfQ?`zWlkib+Rya^bbB~ASav=HIRX(q1hj?Uu?q&E-K&l4MOaEBV3B4g3@`^C($3Q%>YbpogA*oY|}Jv$#R9I6+i!J#Yxj}DiTP#)3`9Am?wKjsQ*$;n)Q@O35+zwPMdoPQ~)9z!L` z)5dc`h`_*-z-GnR`9b+YpeY_=KITqFi6YE%Cf6Gfg7r+|wsLb^5QL0Trc~!KIr(A; z+4JH0O<%oQ9M5c25hig&KPrv`2Mom57i+S#Hl>z}k^skR%LsXiS#yJt&>VGJ>~X)$ zNcF#z>+<6@H;J1*8lJ*iWRpu;((FqU%46H;?WQK2U*5?5SEty$v3*z?P#*FeoHGpJ z)FJ#4&>8LJWFWD`cVgPPJ$7jCjjnlg<)HBeQh;kozPo7FBIFM^FEWR!HmQDayZJ#| zWSGqdy4-C>Dx*>|=0qCcH=Z2v4H$@;y2azCj-GyXDzq(E@#0hU(DVWVtEb}0wiu0{ zY9np5h8H6fxI0>GX}QmIY&O%jCL4b?Nn|cPLf)e{WEviN_rWYY3@L<0l6~shXg&6^ zu|OLSG5XwSAV{(G@a@{Qf!o*G$)?NWKMaH6=?@t)s$lT;+gBRmS-!)-#Rx0I?E*cB z)W&u3)o}gi{BD1KCq zY_I>iH~gG*ymD22C;fvu&iZmRz3?jR7D2o8*C;8MjR< z`HXLJ#i0Zz7hxed*aae%%Zw%^f{T;7Eyxoj{(gCRP3j)M`b; z9&+e;@9|$#7snHA@1)jDeHArge3<^siHHf)rbmIH6Sd?c&)~Brw@-Mz4gd19jSsUa zBPsua^>tpOC>Q;RfoolIH!XJBXZce@oV^l=W~l5&UpCs2eLh#Sp%3n&0ueBA#c+X} zgusfd78lFKI-V_(#5jlFaBO4pmG#A-I6pr-9DZ~;{#HGjj;rQ;660d>=5DpY z$E?v|f?0(!kCQ~i-#j1LO<&!>=i> z3i+SntmR#Pe~d{b@wjc%m_c&ZI7d@U#=dxg2ufLUiYW-2?VczV%&Jbt`nXWZ=EUtE&9;OQ9<~s%{-`HgCg|P+PDWBhEq4uYuKUKb`MOpzx`P>45 zNDMTkZzFT`uJPXCv@y(0CSWmP8}5?xyF4Wm2UGc6>WIU&UDSu}Y4P(1SoOA>NS%vQ z?AXI8%<}BauI%d`iT$57LHJ@2`hc{c=eBXQs`2Jr%sdJ_{R%AHhdB1HiTNs*`2O>KnXk`?Vac{sngiLy5V{KECgBzYqPVLfL zI9qww%zJX#L~mlAv|y@}8rZKAfjQ%a-2_|F+{n5eHL4 zdnp3Yk-AMdGfaD21D3u^@llTD3zHQrt=h4-@moLppnpKlnY=uN_@TgRLqLbTPCN8y zges^#yR}wh(X1>V_$=<*c}su`5N>KHb^r>vxmlFwa1O=4%POipxBTY?jT*T*E z+rv4=Prh>pshi3Hr$8!s+!W$tExFaRF{Qf{as~Qx^~l4Hd@!-Z2nb9Zm62oL@aY5I zv@3q^QmQ)Y`Ks` zN`C!76OJ}Wy(IU%>vtsM3FtVIgbPdx_9aD2)Hym<9}aR|F)3c!PY5{4fN3kwAuV%&;*K7UtvC{A?(bSW_tDpU@7HyD6K*fE3({o}ISR}v0(9vH0C1Qj4(?57m)GRBceb>a?RW2b zkP~KT8O+YGS)F5#JcSX4^pnmq7NeIdf*IaPj8(Ccu#soz81Rbz^cg$cmTC^U!M^As zy<57q6L~<-$5%)(aj6tlIQ6!VcPL|yegoKAuNsI$aYH5~g*5GPksyVHH62B4u|B=I zUP9OgT5m^uCP!~QC2hTE&CLz3r23BtVxj->FXDd~{{Qng2laI!IXS)D_h@13ko#_w zDrHnLI;v2ek(A?~rjFt44VbePahvkyYOu=SWg<#zMFo<@#dDBWy5$ovE`mWv;5jl; zNGbQ@wd2)YR0NG%*BmT2TsR}9oP+Z|3;>9fzPatZ411fWoKBtZO0SZfl$fuNP&^PG z-af|ShSu2x+}c>JQDrdQ{k&Am!yff1Vc2SndwRV6l z!UX(GOFxwY0^}$ZT8%gVxWa2J?a)a9+muw`q%JbDjP&$;eTC8Sv9b2d>FEj2`>V`) zr_Q)I8~_zN_vy+$Gqmxu4%TB!G-3Sk9y1Z!jlO=tkAt^>D90CfT6V|&)&@h|FE^KR zmx+nkUkZOZt8MS*PZ@N_8DnbeXfG_z!Hd#5JKUpPbQ6XHo{tY#KYm1K9+hEE*5^ta zK`=Krez{f26X%%O1X_$4RMC^)mpF3X9n8+pyR&eX{j0@}?nep_RmviXp&AP6xQ0JE z(?io(fB-KpVf^*t7FDXsvhpVzpx>m; zw`NoC*_Q!4M#lRFcMq0@y`y7gHnuh~h}#1cLQX$8)03}ZJ-7h_sc;aFMJB>4z;>Mz z=<^04`UK{l8nGV?|N11cMiIcHSZD1bn4O($jmuUlwMY@Vow*X=>s z98aY5-yf&Gwx2tH^qZZWXP&4C<-qO_g+k;a%#4PAeruny?fcnDFluk3@Omyk`|^xW zYX5Y`C(_Z;(1z7E8sNToru{`Et&)LRQBfW>mbA_8JbfW~@O=bk!FU?>=g+2)m8Hhy zg&*%D0f0JrI&74=G}@1(0bXxSj!)(RfvNq`!IE+nJ>u@>`!h@PqOSpr zAj-I({qQPKvCHRdSb9d&S{-9nY83IB%wqTgPx74d4KEd zpU16imQ9>I9rD9Pfohp8-#{Jzneh(j(&{pollYN|`3=ClsEP73AK%;pBPb@~Heb#V95a;zzt zKK2nRS%9xrK@AO^jSk1@^Apt$KFpt4sUruzS8lfUuaDjiu_F_p_Sb%ZJo?os-iuMi z%eOuH>*(o{W0MOj@D`5w*lzF{pT!TGeGChG?UpF$O{ATSU()*ecv;|ksz8U&gs-s3 zL;La~`}CaGtxzyyC5<~gww7sPUbco5C|d#&HRl3s&0j4}ls%bW8v`MTND%Nd0wDjB z^3de47QJdlp6T7VrIK`C>Q9s~NovCAZ+4#_yAgD-JOSc;;A_!0uPdM?OOrVZt3l2< z9Ea==Bcu71l{bI6gc@JYcj6I8Q(Bta-T+Q)ZN0x@O$nnbh`6VCC{|TgHC-$fqaw&4 zB62DcuDbF+kSkl8sKLXttv-e(N-&4L9RQ%M#H^vA5hwo+kcvxTKWU=Bx?*P3*|Y0X zq+TY^kSS_Oh}1on$>+H`FkZ#Vs!95FcVM<>XB6B42)wAih_1|MyF_zjLbxJwZ(x298#_{JBhrl>vv@Hk+P15eWrC* zE=A);SA;Rje42HqO?K)zpMFaBG$^JB2?>smjZYayP(qm(s^p=)}o>p27DS--kYP~eHv;(nHKkkNtC8z!J)Qe^u zv@W-`lXTXG#^=FQC(dff01nMxoe*I=2j$oE$JP_l7K7ud2|m@`?uEHCO1+h--z!q8 z40CLe(pS<{_$a9h3*{VL{~7~G!S-io11i~xPGB9Uqbn4#O%m4wDwLzMGvQiK%Jg?r zM;&Y{&*`mnaPIt6N>(TuH>g%+@bg?>wG#H4TdS-hDbw^3W^Ae5N>-)nGOhEl^X<6L zUEgzVaYK@d!3(BJR{9h>dXIt554>^HhgVv#Va0fz@1)f?vJgg(etQ!lrdHo z?03`E!isdJ^RTYIIiAlBy$KT&JsF6{Uxpi5l705(%3)}%s7a)p0c&LS8`20qUmQ87 zhKvN$;$^wGRvsWgmeM&#&kNZQ_xUCcl@{9NR3$202=p_PVI&Et>MK1CQpnK0OQfz6 zUEIH&wOBYGNH7cPZCky9cqNRM?R|`U$&7@^oHRe+8xysz_$ zvSu!uQCh6C?P!NVP0|F<$&uQ!M-FivpUCAnE+c-Ks>H7Gnb1g3|(Rby@(;QEk z+nM@-Iy-ZO=Gh!Z3dF4J5=ZwfV{`ajuCPf9csly0Y;hx(=H}+cdh+wn9Q+NlliT22&0;p@D01NKZ&W?WRE6`=>+<@#Kli0z?5L}ohx&ZGoVILu zTM9j9#4f*}!Q_OtO0b)B(ewd}9soaTZ!`8`Ha#FHXfQ#;U~PSPU;wse`71{MgXqcG z5yzasbZAFmlWAL98v!cfdVEl?X^lbi&tgPirl6sYAp)S;?KReyU_>js0%*hpaz%~- zddme+Acp_i`OJI%d}14EGt)-rK>+9yWB9qcboa98+eZ@@lXbqM1)q>;p?PIf zCa>ur|7%LSpWK|B*LM#Nw$>6F3^C$VN~wbT(k?bWrhk2Af~bCmBqT(Z9S`bn_HJKm zD;4|5XEvE#cfW}FH9OZEe7b#q_4sfvajQy77=cDcmgd8=O&v=lu0cfXt&_OWgfi;` z{1Ir8;!*MlA}OEeV=z1$FQ48RpRF&?58mCIvsKZQrg8pqR$e3aOd~eP%Fm(aS+xQAdHG+stX|Q}FUsmVHP6ku7SNBprVFU~<6Re=()tf&F8gyx=2k!>1$# zb9KhJxr)*e@ie6phc-IgcipA*`Tj*8&@m`v>?QN2hKA%FN#j)Eo{r8NVH7EypY1vQ zN_1~O-qv&peVPqY>0Fzy$Ib5iFOG&+I`%US0$bV-KZY2v=}_uC%fQdN8Lv+ED6+dv zV;H)D_Sjlu=}Yzu+CKX)RO-<7OmiIN>mTQn!54eL;cX!F2Ms%xy}jfEfN9 zchUqFcAhoHt?}g>M8tb_l>e8j!dD`cSD0lDrab^)LKQ{&KuI7I{PCxLuGZI$GX1T? zxE$yny%=OzCEzCE|9lsg0^Ha1n4I|de@lS3M+5@*vj<#98$);gKk8