From 70b4fd8912ad494f6edb9de4aee47aaf547a4a64 Mon Sep 17 00:00:00 2001 From: Bernard Xie Date: Tue, 28 Mar 2023 13:58:53 -0700 Subject: [PATCH] copy byte slice first --- d2renderers/d2fonts/d2fonts.go | 7 +- d2renderers/d2fonts/d2fonts_test.go | 10 +- .../d2fonts/testdata/d2fonts/cut.exp.txt | Bin 4904 -> 4184 bytes .../testdata/all_shapes/sketch.exp.svg | 2 +- .../testdata/all_shapes_dark/sketch.exp.svg | 2 +- .../d2sketch/testdata/animated/sketch.exp.svg | 4 +- .../testdata/animated_dark/sketch.exp.svg | 4 +- .../testdata/arrowheads/sketch.exp.svg | 4 +- .../testdata/arrowheads_dark/sketch.exp.svg | 4 +- .../d2sketch/testdata/basic/sketch.exp.svg | 2 +- .../testdata/basic_dark/sketch.exp.svg | 2 +- .../testdata/child_to_child/sketch.exp.svg | 4 +- .../child_to_child_dark/sketch.exp.svg | 4 +- .../d2sketch/testdata/class/sketch.exp.svg | 2 +- .../sketch.exp.svg | 4 +- .../testdata/class_dark/sketch.exp.svg | 2 +- .../testdata/connection_label/sketch.exp.svg | 4 +- .../connection_label_dark/sketch.exp.svg | 4 +- .../testdata/crows_feet/sketch.exp.svg | 2 +- .../testdata/crows_feet_dark/sketch.exp.svg | 2 +- .../d2sketch/testdata/dots-3d/sketch.exp.svg | 2 +- .../d2sketch/testdata/dots-all/sketch.exp.svg | 2 +- .../testdata/dots-multiple/sketch.exp.svg | 2 +- .../testdata/dots-real/sketch.exp.svg | 4 +- .../testdata/double-border/sketch.exp.svg | 4 +- .../testdata/elk_corners/sketch.exp.svg | 2 +- .../d2sketch/testdata/opacity/sketch.exp.svg | 6 +- .../testdata/opacity_dark/sketch.exp.svg | 6 +- .../d2sketch/testdata/overlay/sketch.exp.svg | 2 +- .../testdata/paper-real/sketch.exp.svg | 4 +- .../testdata/root-fill/sketch.exp.svg | 4 +- .../testdata/sql_tables/sketch.exp.svg | 2 +- .../testdata/sql_tables_dark/sketch.exp.svg | 2 +- .../d2sketch/testdata/terminal/sketch.exp.svg | 4 +- .../d2sketch/testdata/twitter/sketch.exp.svg | 6 +- .../testdata/twitter_dark/sketch.exp.svg | 6 +- .../diagram_wider_than_tooltip/sketch.exp.svg | 4 +- .../appendix/testdata/links/sketch.exp.svg | 2 +- .../testdata/links_dark/sketch.exp.svg | 2 +- .../testdata/tooltip_fill/sketch.exp.svg | 2 +- .../tooltip_wider_than_diagram/sketch.exp.svg | 2 +- .../testdata/all_shapes/dark_theme.exp.svg | 2 +- .../testdata/animated/dark_theme.exp.svg | 4 +- .../testdata/arrowheads/dark_theme.exp.svg | 4 +- .../testdata/basic/dark_theme.exp.svg | 2 +- .../child_to_child/dark_theme.exp.svg | 4 +- .../testdata/class/dark_theme.exp.svg | 2 +- .../testdata/code/dark_theme.exp.svg | 8 +- .../connection_label/dark_theme.exp.svg | 4 +- .../testdata/opacity/dark_theme.exp.svg | 6 +- .../testdata/overlay/dark_theme.exp.svg | 2 +- .../testdata/sql_tables/dark_theme.exp.svg | 2 +- .../testdata/twitter/dark_theme.exp.svg | 6 +- .../testdata/TestCLI_E2E/abspath.exp.svg | 2 +- .../testdata/TestCLI_E2E/animation.exp.svg | 4 +- .../testdata/TestCLI_E2E/center.exp.svg | 2 +- .../TestCLI_E2E/hello_world_png.exp.png | Bin 15366 -> 15387 bytes .../TestCLI_E2E/hello_world_png_pad.exp.png | Bin 73552 -> 73590 bytes .../hello_world_png_sketch.exp.png | Bin 28757 -> 28841 bytes .../TestCLI_E2E/internal_linked_pdf.exp.pdf | Bin 81313 -> 81770 bytes .../TestCLI_E2E/multiboard/life/index.exp.svg | 2 +- .../multiboard/life/layers/broker.exp.svg | 2 +- .../multiboard/life/layers/core.exp.svg | 2 +- .../multiboard/life/layers/stocks.exp.svg | 2 +- .../multiboard/life/scenarios/why.exp.svg | 2 +- .../multiboard/life_index_d2/index.exp.svg | 2 +- .../life_index_d2/layers/broker.exp.svg | 2 +- .../life_index_d2/layers/core.exp.svg | 2 +- .../life_index_d2/layers/stocks.exp.svg | 2 +- .../life_index_d2/scenarios/why.exp.svg | 2 +- .../testdata/TestCLI_E2E/stdin.exp.svg | 2 +- .../empty-markdown/dagre/sketch.exp.svg | 2 +- .../testdata/patterns/3d/dagre/sketch.exp.svg | 2 +- .../patterns/all_shapes/dagre/sketch.exp.svg | 2 +- .../patterns/multiple/dagre/sketch.exp.svg | 2 +- .../patterns/paper/dagre/sketch.exp.svg | 2 +- .../patterns/real-lines/dagre/sketch.exp.svg | 6 +- .../patterns/real/dagre/sketch.exp.svg | 4 +- .../root-dots-with-fill/dagre/sketch.exp.svg | 2 +- .../patterns/root-dots/dagre/sketch.exp.svg | 2 +- .../patterns/shape/dagre/sketch.exp.svg | 2 +- .../ampersand-escape/dagre/sketch.exp.svg | 2 +- .../ampersand-escape/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre-disconnect/dagre/sketch.exp.svg | 6 +- .../dagre-disconnect/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../dagre_broken_arrowhead/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre_special_ids/dagre/sketch.exp.svg | 2 +- .../dagre_special_ids/elk/sketch.exp.svg | 2 +- .../elk_alignment/dagre/sketch.exp.svg | 6 +- .../elk_alignment/elk/sketch.exp.svg | 6 +- .../elk_loop_panic/dagre/sketch.exp.svg | 4 +- .../elk_loop_panic/elk/sketch.exp.svg | 4 +- .../regression/elk_order/dagre/sketch.exp.svg | 4 +- .../regression/elk_order/elk/sketch.exp.svg | 4 +- .../empty_class_height/dagre/sketch.exp.svg | 2 +- .../empty_class_height/elk/sketch.exp.svg | 2 +- .../empty_sequence/dagre/sketch.exp.svg | 2 +- .../empty_sequence/elk/sketch.exp.svg | 2 +- .../regression/hex-fill/dagre/sketch.exp.svg | 2 +- .../regression/hex-fill/elk/sketch.exp.svg | 2 +- .../just-width/dagre/sketch.exp.svg | 2 +- .../regression/just-width/elk/sketch.exp.svg | 2 +- .../link_with_ampersand/dagre/sketch.exp.svg | 2 +- .../link_with_ampersand/elk/sketch.exp.svg | 2 +- .../md_h1_li_li/dagre/sketch.exp.svg | 4 +- .../regression/md_h1_li_li/elk/sketch.exp.svg | 4 +- .../nested_steps/dagre/sketch.exp.svg | 4 +- .../nested_steps/elk/sketch.exp.svg | 4 +- .../regression/no-lexer/dagre/sketch.exp.svg | 2 +- .../regression/no-lexer/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../opacity-on-label/dagre/sketch.exp.svg | 6 +- .../opacity-on-label/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../overlapping-edge-label/elk/sketch.exp.svg | 6 +- .../query_param_escape/dagre/sketch.exp.svg | 2 +- .../query_param_escape/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../sql_table_overflow/dagre/sketch.exp.svg | 2 +- .../sql_table_overflow/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../unconnected/dagre/sketch.exp.svg | 4 +- .../regression/unconnected/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../root/border-radius/dagre/sketch.exp.svg | 2 +- .../root/border-radius/elk/sketch.exp.svg | 2 +- .../root/double-border/dagre/sketch.exp.svg | 2 +- .../root/double-border/elk/sketch.exp.svg | 2 +- .../even-stroke-width/dagre/sketch.exp.svg | 2 +- .../root/even-stroke-width/elk/sketch.exp.svg | 2 +- .../testdata/root/fill/dagre/sketch.exp.svg | 2 +- .../testdata/root/fill/elk/sketch.exp.svg | 2 +- .../root/stroke-dash/dagre/sketch.exp.svg | 2 +- .../root/stroke-dash/elk/sketch.exp.svg | 2 +- .../root/stroke-no-width/dagre/sketch.exp.svg | 2 +- .../root/stroke-no-width/elk/sketch.exp.svg | 2 +- .../root/stroke-width/dagre/sketch.exp.svg | 2 +- .../root/stroke-width/elk/sketch.exp.svg | 2 +- .../sanity/1_to_2/dagre/sketch.exp.svg | 2 +- .../testdata/sanity/1_to_2/elk/sketch.exp.svg | 2 +- .../sanity/basic/dagre/sketch.exp.svg | 2 +- .../testdata/sanity/basic/elk/sketch.exp.svg | 2 +- .../child_to_child/dagre/sketch.exp.svg | 4 +- .../sanity/child_to_child/elk/sketch.exp.svg | 4 +- .../connection_label/dagre/sketch.exp.svg | 4 +- .../connection_label/elk/sketch.exp.svg | 4 +- .../3d_fill_and_stroke/dagre/sketch.exp.svg | 2 +- .../3d_fill_and_stroke/elk/sketch.exp.svg | 2 +- .../stable/all_shapes/dagre/sketch.exp.svg | 2 +- .../stable/all_shapes/elk/sketch.exp.svg | 2 +- .../all_shapes_multiple/dagre/sketch.exp.svg | 2 +- .../all_shapes_multiple/elk/sketch.exp.svg | 2 +- .../all_shapes_shadow/dagre/sketch.exp.svg | 2 +- .../all_shapes_shadow/elk/sketch.exp.svg | 2 +- .../stable/animated/dagre/sketch.exp.svg | 4 +- .../stable/animated/elk/sketch.exp.svg | 4 +- .../arrowhead_adjustment/dagre/sketch.exp.svg | 4 +- .../arrowhead_adjustment/elk/sketch.exp.svg | 4 +- .../arrowhead_labels/dagre/sketch.exp.svg | 4 +- .../arrowhead_labels/elk/sketch.exp.svg | 4 +- .../stable/binary_tree/dagre/sketch.exp.svg | 2 +- .../stable/binary_tree/elk/sketch.exp.svg | 2 +- .../stable/border-radius/dagre/sketch.exp.svg | 2 +- .../stable/border-radius/elk/sketch.exp.svg | 2 +- .../testdata/stable/br/dagre/sketch.exp.svg | 2 +- .../testdata/stable/br/elk/sketch.exp.svg | 2 +- .../stable/chaos2/dagre/sketch.exp.svg | 6 +- .../testdata/stable/chaos2/elk/sketch.exp.svg | 6 +- .../circle_arrowhead/dagre/sketch.exp.svg | 4 +- .../circle_arrowhead/elk/sketch.exp.svg | 4 +- .../circular_dependency/dagre/sketch.exp.svg | 2 +- .../circular_dependency/elk/sketch.exp.svg | 2 +- .../stable/class/dagre/sketch.exp.svg | 2 +- .../testdata/stable/class/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../stable/code_snippet/dagre/sketch.exp.svg | 8 +- .../stable/code_snippet/elk/sketch.exp.svg | 8 +- .../complex-layers/dagre/sketch.exp.svg | 2 +- .../stable/complex-layers/elk/sketch.exp.svg | 2 +- .../connected_container/dagre/sketch.exp.svg | 4 +- .../connected_container/elk/sketch.exp.svg | 4 +- .../constant_near_stress/dagre/sketch.exp.svg | 4 +- .../constant_near_stress/elk/sketch.exp.svg | 4 +- .../constant_near_title/dagre/sketch.exp.svg | 4 +- .../constant_near_title/elk/sketch.exp.svg | 4 +- .../container_edges/dagre/sketch.exp.svg | 4 +- .../stable/container_edges/elk/sketch.exp.svg | 4 +- .../crow_foot_arrowhead/dagre/sketch.exp.svg | 2 +- .../crow_foot_arrowhead/elk/sketch.exp.svg | 2 +- .../stable/dense/dagre/sketch.exp.svg | 2 +- .../testdata/stable/dense/elk/sketch.exp.svg | 2 +- .../different_subgraphs/dagre/sketch.exp.svg | 4 +- .../different_subgraphs/elk/sketch.exp.svg | 4 +- .../stable/direction/dagre/sketch.exp.svg | 4 +- .../stable/direction/elk/sketch.exp.svg | 4 +- .../elk_border_radius/dagre/sketch.exp.svg | 2 +- .../elk_border_radius/elk/sketch.exp.svg | 2 +- .../elk_container_height/dagre/sketch.exp.svg | 4 +- .../elk_container_height/elk/sketch.exp.svg | 4 +- .../stable/elk_shim/dagre/sketch.exp.svg | 6 +- .../stable/elk_shim/elk/sketch.exp.svg | 6 +- .../stable/font_colors/dagre/sketch.exp.svg | 4 +- .../stable/font_colors/elk/sketch.exp.svg | 4 +- .../stable/font_sizes/dagre/sketch.exp.svg | 4 +- .../stable/font_sizes/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../giant_markdown_test/dagre/sketch.exp.svg | 8 +- .../giant_markdown_test/elk/sketch.exp.svg | 8 +- .../stable/hexagon_3d/dagre/sketch.exp.svg | 2 +- .../stable/hexagon_3d/elk/sketch.exp.svg | 2 +- .../testdata/stable/hr/dagre/sketch.exp.svg | 4 +- .../testdata/stable/hr/elk/sketch.exp.svg | 4 +- .../icon-containers/dagre/sketch.exp.svg | 4 +- .../stable/icon-containers/elk/sketch.exp.svg | 4 +- .../stable/icon-label/dagre/sketch.exp.svg | 2 +- .../stable/icon-label/elk/sketch.exp.svg | 2 +- .../stable/images/dagre/sketch.exp.svg | 2 +- .../testdata/stable/images/elk/sketch.exp.svg | 2 +- .../stable/investigate/dagre/sketch.exp.svg | 6 +- .../stable/investigate/elk/sketch.exp.svg | 6 +- .../stable/large_arch/dagre/sketch.exp.svg | 4 +- .../stable/large_arch/elk/sketch.exp.svg | 4 +- .../stable/latex/dagre/sketch.exp.svg | 4 +- .../testdata/stable/latex/elk/sketch.exp.svg | 4 +- .../testdata/stable/li1/dagre/sketch.exp.svg | 4 +- .../testdata/stable/li1/elk/sketch.exp.svg | 4 +- .../testdata/stable/li2/dagre/sketch.exp.svg | 6 +- .../testdata/stable/li2/elk/sketch.exp.svg | 6 +- .../testdata/stable/li3/dagre/sketch.exp.svg | 4 +- .../testdata/stable/li3/elk/sketch.exp.svg | 4 +- .../testdata/stable/li4/dagre/sketch.exp.svg | 6 +- .../testdata/stable/li4/elk/sketch.exp.svg | 6 +- .../stable/links/dagre/sketch.exp.svg | 2 +- .../testdata/stable/links/elk/sketch.exp.svg | 2 +- .../stable/lone_h1/dagre/sketch.exp.svg | 4 +- .../stable/lone_h1/elk/sketch.exp.svg | 4 +- .../stable/markdown/dagre/sketch.exp.svg | 6 +- .../stable/markdown/elk/sketch.exp.svg | 6 +- .../markdown_stroke_fill/dagre/sketch.exp.svg | 4 +- .../markdown_stroke_fill/elk/sketch.exp.svg | 4 +- .../md_2space_newline/dagre/sketch.exp.svg | 2 +- .../md_2space_newline/elk/sketch.exp.svg | 2 +- .../md_backslash_newline/dagre/sketch.exp.svg | 2 +- .../md_backslash_newline/elk/sketch.exp.svg | 2 +- .../md_code_block_fenced/dagre/sketch.exp.svg | 6 +- .../md_code_block_fenced/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 6 +- .../md_code_block_indented/elk/sketch.exp.svg | 6 +- .../md_code_inline/dagre/sketch.exp.svg | 6 +- .../stable/md_code_inline/elk/sketch.exp.svg | 6 +- .../stable/mono-edge/dagre/sketch.exp.svg | 6 +- .../stable/mono-edge/elk/sketch.exp.svg | 6 +- .../stable/mono-font/dagre/sketch.exp.svg | 4 +- .../stable/mono-font/elk/sketch.exp.svg | 4 +- .../multiline_text/dagre/sketch.exp.svg | 2 +- .../stable/multiline_text/elk/sketch.exp.svg | 2 +- .../multiple_trees/dagre/sketch.exp.svg | 2 +- .../stable/multiple_trees/elk/sketch.exp.svg | 2 +- .../stable/n22_e32/dagre/sketch.exp.svg | 2 +- .../stable/n22_e32/elk/sketch.exp.svg | 2 +- .../stable/near-alone/dagre/sketch.exp.svg | 2 +- .../stable/near-alone/elk/sketch.exp.svg | 2 +- .../number_connections/dagre/sketch.exp.svg | 2 +- .../number_connections/elk/sketch.exp.svg | 2 +- .../one_container_loop/dagre/sketch.exp.svg | 4 +- .../one_container_loop/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../stable/ovals/dagre/sketch.exp.svg | 2 +- .../testdata/stable/ovals/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../testdata/stable/p/dagre/sketch.exp.svg | 4 +- e2etests/testdata/stable/p/elk/sketch.exp.svg | 4 +- .../stable/people/dagre/sketch.exp.svg | 2 +- .../testdata/stable/people/elk/sketch.exp.svg | 2 +- .../testdata/stable/pre/dagre/sketch.exp.svg | 6 +- .../testdata/stable/pre/elk/sketch.exp.svg | 6 +- .../self-referencing/dagre/sketch.exp.svg | 4 +- .../self-referencing/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 8 +- .../elk/sketch.exp.svg | 8 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../sequence_diagram_note/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../sequence_diagram_real/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../sequence_diagram_span/elk/sketch.exp.svg | 4 +- .../sequence_diagrams/dagre/sketch.exp.svg | 6 +- .../sequence_diagrams/elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../stable/sql_tables/dagre/sketch.exp.svg | 2 +- .../stable/sql_tables/elk/sketch.exp.svg | 2 +- .../stable/square_3d/dagre/sketch.exp.svg | 2 +- .../stable/square_3d/elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../stable/stylish/dagre/sketch.exp.svg | 4 +- .../stable/stylish/elk/sketch.exp.svg | 4 +- .../text_font_sizes/dagre/sketch.exp.svg | 6 +- .../stable/text_font_sizes/elk/sketch.exp.svg | 6 +- .../stable/tooltips/dagre/sketch.exp.svg | 2 +- .../stable/tooltips/elk/sketch.exp.svg | 2 +- .../transparent_3d/dagre/sketch.exp.svg | 2 +- .../stable/transparent_3d/elk/sketch.exp.svg | 2 +- .../unnamed_only_height/dagre/sketch.exp.svg | 6 +- .../unnamed_only_height/elk/sketch.exp.svg | 6 +- .../unnamed_only_width/dagre/sketch.exp.svg | 6 +- .../unnamed_only_width/elk/sketch.exp.svg | 6 +- .../stable/us_map/dagre/sketch.exp.svg | 2 +- .../testdata/stable/us_map/elk/sketch.exp.svg | 2 +- .../themes/terminal/dagre/sketch.exp.svg | 8 +- .../themes/terminal/elk/sketch.exp.svg | 8 +- .../terminal_grayscale/dagre/sketch.exp.svg | 4 +- .../terminal_grayscale/elk/sketch.exp.svg | 4 +- .../container_icon_label/dagre/sketch.exp.svg | 4 +- .../container_icon_label/elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 6 +- .../elk/sketch.exp.svg | 6 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 2 +- .../elk/sketch.exp.svg | 2 +- .../dagre/sketch.exp.svg | 4 +- .../elk/sketch.exp.svg | 4 +- .../dagre/sketch.exp.svg | 8 +- .../shape_set_width_height/elk/sketch.exp.svg | 8 +- .../unicode/chinese/dagre/sketch.exp.svg | 4 +- .../unicode/chinese/elk/sketch.exp.svg | 4 +- .../unicode/emojis/dagre/sketch.exp.svg | 2 +- .../unicode/emojis/elk/sketch.exp.svg | 2 +- .../japanese-basic/dagre/sketch.exp.svg | 2 +- .../unicode/japanese-basic/elk/sketch.exp.svg | 2 +- .../japanese-full/dagre/sketch.exp.svg | 4 +- .../unicode/japanese-full/elk/sketch.exp.svg | 4 +- .../japanese-mixed/dagre/sketch.exp.svg | 2 +- .../unicode/japanese-mixed/elk/sketch.exp.svg | 2 +- .../unicode/korean/dagre/sketch.exp.svg | 2 +- .../unicode/korean/elk/sketch.exp.svg | 2 +- .../mixed-language-2/dagre/sketch.exp.svg | 2 +- .../mixed-language-2/elk/sketch.exp.svg | 2 +- .../mixed-language/dagre/sketch.exp.svg | 4 +- .../unicode/mixed-language/elk/sketch.exp.svg | 4 +- .../unicode/with-style/dagre/sketch.exp.svg | 2 +- .../unicode/with-style/elk/sketch.exp.svg | 2 +- lib/font/cutFont.go | 876 ------------------ lib/font/{woff.go => font.go} | 0 393 files changed, 679 insertions(+), 1550 deletions(-) delete mode 100644 lib/font/cutFont.go rename lib/font/{woff.go => font.go} (100%) diff --git a/d2renderers/d2fonts/d2fonts.go b/d2renderers/d2fonts/d2fonts.go index 3863444c3..8fe6ca4e5 100644 --- a/d2renderers/d2fonts/d2fonts.go +++ b/d2renderers/d2fonts/d2fonts.go @@ -10,6 +10,8 @@ import ( "fmt" "strings" + "github.com/jung-kurt/gofpdf" + fontlib "oss.terrastruct.com/d2/lib/font" ) @@ -31,9 +33,10 @@ func (f FontFamily) Font(size int, style FontStyle) Font { } func (f Font) GetEncodedSubset(cutset string) string { + fontBuf := make([]byte, len(FontFaces[f])) + copy(fontBuf, FontFaces[f]) // gofpdf subset only accepts .ttf fonts - fontBuf := FontFaces[f] - fontBuf = fontlib.CutFont(fontBuf, cutset) + fontBuf = gofpdf.UTF8CutFont(fontBuf, cutset) fontBuf, err := fontlib.Sfnt2Woff(fontBuf) if err != nil { diff --git a/d2renderers/d2fonts/d2fonts_test.go b/d2renderers/d2fonts/d2fonts_test.go index 812d32918..0d28aece8 100644 --- a/d2renderers/d2fonts/d2fonts_test.go +++ b/d2renderers/d2fonts/d2fonts_test.go @@ -4,7 +4,8 @@ import ( "path/filepath" "testing" - "oss.terrastruct.com/d2/lib/font" + "github.com/jung-kurt/gofpdf" + "oss.terrastruct.com/util-go/assert" "oss.terrastruct.com/util-go/diff" ) @@ -12,10 +13,11 @@ import ( func TestCutFont(t *testing.T) { f := Font{ Family: SourceCodePro, - Style: FONT_STYLE_REGULAR, + Style: FONT_STYLE_BOLD, } - fontBuf := FontFaces[f] - fontBuf = font.CutFont(fontBuf, "a") + fontBuf := make([]byte, len(FontFaces[f])) + copy(fontBuf, FontFaces[f]) + fontBuf = gofpdf.UTF8CutFont(fontBuf, " 1") err := diff.Testdata(filepath.Join("testdata", "d2fonts", "cut"), ".txt", fontBuf) assert.Success(t, err) } diff --git a/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt b/d2renderers/d2fonts/testdata/d2fonts/cut.exp.txt index 0b0cd6e6272b4b8860cabe720cc5fdd339ac9989..358066a59c49de994965d28b17e733ba662a0b9b 100644 GIT binary patch literal 4184 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 jTQn;A1v}?^FQVcS?u7h5P{rqe{8S$G diff --git a/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg b/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg index 0abbbec2d..76b137580 100644 --- a/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg +++ b/d2renderers/d2sketch/testdata/all_shapes/sketch.exp.svg @@ -4,7 +4,7 @@ } @font-face { font-family: d2-1976235645-font-bold; - src: url("data:application/font-woff;base64,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"); + src: url("data:application/font-woff;base64,d09GRgABAAAAAB3oAA4AAAAAMawAAQKPAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAFwAAABgY8E/zmNtYXAAAAGgAAAAagAAAIoCDgLQY3Z0IAAAAgwAAAAyAAAASgVEEfRmcGdtAAACQAAABxAAAA4MYi79fGdhc3AAAAlQAAAACAAAAAgAAAAQZ2x5ZgAACVgAABERAAAbtIPlYgtoZWFkAAAabAAAADYAAAA2HceN7GhoZWEAABqkAAAAJAAAACQIDQG0aG10eAAAGsgAAABcAAAAXDOZBINsb2NhAAAbJAAAADAAAAAwUXBYnG1heHAAABtUAAAAIAAAACACPRPRbmFtZQAAG3QAAAG0AAAD5F+agdBwb3N0AAAdKAAAABwAAAAg/34AFHByZXAAAB1EAAAApAAAALJqvdaoeJxiYGEKZ9rDwMrAwNTFFMHAwOANoRnjGEQY7RiQwAIGhvoABgZvGN/d39+dYQED728m5pZ/ixgYWNYwZjEwME4GyTFxMK1gYGBQYGAGAAAA//8BAAD//1KODSd4nFTMSQ4BURgA4e95bW484/VERBBrHQ5jOIT7/UJsVFKbWhSSLKFWOaAoMtY2do7OGteIX9naO2lcIuIVz3jEPW4fv49/5pKWrNLW0dXTNzBUGxmbKKZmFpZWvAEAAP//AQAA//8enxbSAAB4nGLADbIgkGkDAxfTN8Zn/3//ewZhMwmB2AwSEMh0ndEYhAEAAAD//wEAAP//nS0QQgAAeJysVml328YVnQFBaoksydZiN0jTh4yhusSAVlrHYWzGUTCiGEdNS8tyCzhNC4iUuy9JN3ffN+bP3KHaU/dbflrPG5Cs7Fju6TnlB7478+6bt2IACE0Q97JuTrT/SCzf2Ufj7v0M1wJcyYsHNLqXwYvKf82LeTEYqKMgDCFyCKN2x0IKU6QJpAYVDxJ4WoUqTFDTNDyprW+I1GDNUFGk1ls3qY1qBp45fEhYUvCMKYfw+w/HnueZIkV4/ELIu+PlDZm+QPCMSsdrcs0UqYLoZ8f5eFN6zqGvUYuxYTL2h01jJoSAhoSP+vC37o+vyHOmO+ii0c1C1KL84N0sVGEwygj9fhZiJw8IbUbtPCdbscshrvSzcLIibLN+m5kf9TN6QKNRSVjsZ0VAINYtMrrO6HoRFHmeB/AiLJkBxEEGsc/kEEsm2MeLjF7cLx+tigEzHtXFUZ4PyxwyzvNJBjkNsWlUmieoa+oS/KgcEuZMP8OcSjGv0iAMc8giQcOVG7WYhnbuKCVWcrpBFT7/wyu6A9SbIWHe0IhGkLHdrkfwt+5kRT8oD/JM5WFO2LmbQcYB12USSoI5jQUTj4VXtXleY0GliiBUWsI7egA5gCww10ywoImjXTaDR744Ij4BO0XOlGLXRbuoxwvLwnTTZjgbnOf044O0VJ0iYwVh4EcFdUeq5Ka6YouAGwIKsDMrGGqRKncrF+fOMMflfsbGO08zWtYuoZNzS6LW7WdhoMK8GSZY0dbzuhiWuwlWNWRBhBXzNh9AWFFpjlVeHWSEVdev85qw6opCj3wxGKkS501Bo4JwXqUqwQW9f5hZf7ibX8a5Y/UwwZrev5Pt3602gzC/jDW3v66tuGDuZfbCBQNZpjgf8yMHL0rtCv+telEKuakItaifWS4f/CgdjYjdrjZDBVlOcVDp2cSL3E6OFdPDqukV8B5v1hkttEKsqV1IA3FrLKV03drQwgqve5jhgkqpi2WV4pyCV6RU/PPSJSnOizWRpilXYF2lkKVdn4/xYRy8lCfY1FZsxAkuaitZXtLWY/kJbWssn9fWZxloW2f5grYNlp/Udo7li9rOs/yUtgssY62m9Uej2D/MFLUg3+OnJYE+pdycKd+vlMkp5dZM+UGlJC2wEp+ZJ2T5jypVzvN0fqG2guIEL2krWSptPZaXta2xjLT1WW5pW2f5aW0bLK9oO8fyM9rOs2xqu8CypanjBvaqpgKXCjIKsjCupbJAi2d2W+NqjKvNBC9roh6d0U1VthVf7M9kBJz9Z6cttsuNLk8cXm7autzoZtu5y/Jzp8pzFueapldc5K9oMeF0P+4TMn5qLLwvNv8u+Ld7S7XtNbnBuV7X1KHeGfFDmLKd4FXduthJ0P5vVEgzaCd4TVtPbEbUoh5fCfCi26NRT/VUSdlRwLeuSsdtKTfWmwluaIhNXFQp/Ah+5Gh2SaR4zsTHo5Yi6ozaCW4+TqNWdR4aKp2yCQXfKTt3shOf6hSc+Fv15/OUb9pFQyPlLNRegYZ58nEt+Lar3kq+KYYKdVMO+xl8Uwaom4JvuidtSkUEf0vtle1AYdHs8Rtr0TgvBT3Niaru1IYpuBn1qET9Y6fC3+IgIg6iFhXDyU36H195gs60FkSE+takFqrTTvD6TIVFp99TPXbKXbw1KyEnU1Ua4jBrUUeF7n072SSOa9IKNCLUo9unv12qJj5t2ifdUjzyb5yKxEzbVfAHzpMpT1u8oxW1uIp7uGiyfnCQZ9TJW3ZbrscJ3nxMexD0H9OmT7V9loXRuBE/y+Guxs14RNThGRu1z6aiYVrYjhN0Xco8n1tV5UssqbRKnQdUUYdaqj05f0/bRT9Kpyb/40j3/l9TzDnxPdZR7SA8NS9hPomzp624EU+r8pa24mYcqkldJtnMSnBbQ2xUj/1Y8BO+1sL1ZoK3z9jf11bI9TW82kzweY3Xmgne4Sp2FbVob6TKabW+oHmg8U6c4It6LMRenKCvx0IyuKPH0u0c6LF0O3eZ04sTHDKHwT3mMPgScxh8WZ8IIUycINMn/OkUJ8j1iaz27usTWe29yzzJ6CvMc+g95jn0VeY59DX22Y0TFOyTQck+GRyxTwYD5rwVJxgyh8Excxg8YA6Dr7u4duME33BxMfqmi4vRt1xcjL7t4mL0HRcXo++6uBh9z8XF6Pvais6sgT9wK+zECd6v4Jtxgg+46G6Vxgl+qK2ccH5UQeb82HHkhPMTbcXrs1N/6lbO4mEF2eJnFWT6z7WVE8IvKsiEX1aQCb/SVtyanfdrt3L031SQ6b+tINN/p62cEH5fQSb8oYJM+KO24o3ZeX9yK0f/cwWZ/pcKMv2v2soJ4W8VZMKogkz4UI+fc1+2aARj36t1MxUGYZ6nMeaPUbvcfzh9WSf/BgAA//8BAAD//2NMAUcAAQAB//8AD3icjHlriBzZefZ7bnWqqruruuvaXdVdfanuqr73TPd092guPS3N6PJpZ6RZe73SaG3Ls5Z3V76j9Rdng1nLBhsMJiYQMCQQCGsnBPLDxjeCk/yKIcEmv0z+JYYkLPkRnBicxXHYUaiq7tFo1loCA1LVeY7Qec/zPs/z1gCFJgD6J/xbwCEFKrjw/vkRw5iA6xTytmUaupZLMSogjDDZB0oYoewhRwwThl8HAEKBvAwYIXwLMEZ3BYQwuplOA6TVtKpkUrIkAgeui4LdGYW5adXO8UY1V9Vz1Vxjak/DachDbvMVUUTflKSTe+j3Tz7uo5snv7rzgn7njv7CHf3OHQl/WJbe/kMxi9/39k9w9u3/3H3jjdo3vul/4xv+G38CABiGj97CAW5DAOvwo3lKQQzVKKYM7z/zLfnw9rwOGMMxETCAeQCMoWNAyDngiNLla7jhPvOt9OHteQkwdt4NpB3enlfPgYAQbYEUUAKclwEBo4jdB4zJ8TsRR0dHc7sZIlgdhOvN9XJJy6YkCFAgcqtj14IgHK/N8GhoWfZkMhpapiGYhmWahuBHi6GCw+EMj9eCwK8p2DQs6+f9w4nYvP7SdqFRVsVivmQyOVdybU5obTzf9neGRaXqVXeGnlqT21d7o/UHx5uajltuozj96Hr3g13TalQHOq2tVz/SubxfLYzq/asH5cKwCgCAYAIqzuEqNOF+UocGYMIIZg+BUcLo60DIsiLLk2pRLfzzOAQEI3L/LOporiOoVbyiqedUiUMTNTm3Oo1aEIzXogp4eHH25XlHw8l0NDQNhaDstePV3c/u2xcmfsXOB0G+OgnM1tVu62rd6LXm12bq1VcvPfP6gWQHnpUvFJqzy95oalZyPTcoKAJg8B79Ah8QHbqwAz9PTqcUEOAMEmAbMYHsu8sXaPHi6JlvZZMiYHLMKSbEPABBgGOEAJwDETG2fE+WzKmdASyJYcZQehzRw6QRcnh4ex4CAgGQ8BAABAbC/afB5/XzSBExjiijHzndQmK6mf0ewPqkt9PfgS50Os1cU+JOx+7jBdXs6YxME7aZQky3BdsC3xcEPyFcH8cXYFrWd4e71fW7r120OxZFlEuC6BUKqqLKqYJTTFOM6donrgrhtQtVMZ1hK8/vhmKgZnaeH1x87e56BmW0yeYka1cr+cKrP/vU6HisN0pdQ71w6aX23s26VG+64aXn+s1SNenxX6BfYg2asA4//t4YMQHtJyWtiIhF/ML3QRAW9KOIEDjmaNm0/cPbcy8qE0NxeRL8edQw1orowuiDJ8A0+scJgReX2Hnr6TAAcrQEE3hPVPhCuxX1eWu9vV6rlEtaThahiUKJWx0W8ztpdNNQsF8LwiAMAt/Do2HS9womw8lkvBYs6462r712Pbz+ysXuwSC49N4eX1FkAcuY9zZdPbSsittqzb3N0C85G6OKs6b2Pnxz68EHpv7uSv+5Sw1OsYBYKdRY3rXyIkKW3a+VasXuKE9pChD0Tt7EGtbgBvx4nr4yNonAswgLeFHwVeBUoDziG0YY0EOGKI155kT8x8eAsXkACInHEhJFS4xqmz+8PR+c3wiEIcoJvf+UbfMxUMYZ5Q+BC4wLrz/eGCvJU/YdHc1zAHADDlpBtREOaoHMvY4e0TyqqDUazvB0hsfjNd+PK37mBiK+R29NM4FNJklDWLZpKNT/VWlcrepWqZovdb0cirqMejs3RuFee/Khz183uuWqnS1njenRmliw+90gqwbZlKEUbBkztTI+vHDyplztFGzLdYOtPY8P1tKy6F9fbe61L3/l03tK2bGLcvbZj01rpdpolHMGjiK7Te2Z1iufeuW5YaLDm8DwNfxfMIW/SEwrJSOMyjoGivfd0ydCcaRREcAGhPRIlONqGQeE4USakxt1zy3HbsXQElI9vD0vAAZKML2fQM8C5sUoCVACD5/ALJYj/ucQrPQbvltQ0jBFU4FbnWktkvXxWjAeL8Q9F6lPXGnbNATBr/Vx2Kd+TeBC9POg6KoqLyh2KcsF5K6OL3aCaYV5VLedUppiRARZTeVqqbW7AzHPQmfrcxv3/vqek81U+n315LsCcvd22s25/1Mv6+dbWxs5HgwH5aK69/VrGSvOEc+CCr/Eb0EKBnD7B15WJZgsVcamCCBWl/j0xgFDGGv4hnt+BR8vVo7meiaNwMmnB5kBZ5BCqejgenzwxNBJLXH56YJ9piHw2NviHy4I3/S6a265M9rTDcY4x0TKW3mTYsw5QZjQIn4laDS8IKh7b/9p0/gC62xOs8ZK3a5pPs6IftU20vVSpqCouUIr4c6jt/AMP4LL8EZiX2mGMJkHlACOyHP6SDFeOpwDmADB8PDx6Sl7IhB5gEl082cQQGlCkVgvK0AQRgQ/BEwRjhJAQrhTSMKS9UnR0XIpCS6jy0KSg8ZjPfH/uDv5oneT+nGFcNO2LNsj9mk8CPsk9DkXhE9aJZ8WykWbSSiNK91ORuv2DdttGvJovmUyrnJ16/JmJuPZrp4fdHR5uruZpdSgJbli6OgT/2xOmsGasfHa1ZSaEyRbq9quKTKrYIuEcZlLzX4oyqar5SvFIMPr3WZK+rbhxHV+/6P/gX8hXXChMi/pCBDaB4TgGCfHRZBTwUUuWYS9uBeW5suX3vt7ts0RpkKK84aeyxNdkx1W7ufTtpy/94WvfnG1N5nMXv2HBysfWin7S22QCcUa3EPt+PJ+sBHmicDQvpv8jaOlJlSjsMCE+FajnMsYPiYoan8qnqpDNpZtgVEm0MfAWOyNxZ5EMaKrFNFZUemBwClfboPTXcD5b97kHN6et043EWA8UngMXMD8foyNK7jcMO+cYilwCq+/Y8sZ9FEctxHcet/+9d2L03GvUy3nVLiH7kmPxWi8Fjlv3J0etiO+WfZCkqwoG+FYpxJxCiJ0EMdvXyFcOKVeECmWgnn88stWlbEUZYZjOgonWKQ4U22NypWqIVNMU8Zo3qz0SopkGXYRE5pOS56XVTK87DpuhmI5JWNBkAwmWDrBet4gsimXrOqscqn1bDPtKkar3OupGU9BMrOnq5Vyz5LNVLa4u9rYmDk/Vf1CRfs+MSwm1jxn0B95Tq/U1qX2sJeSnLTUa3Ohv7ki6pWEOwb+DLZhBj9MIlMqhSiumUtfWTwtfEVb+Irzm30l2m9GhgCJIcDxmcUoaf0m14DjU1Opni5Hjn90HoTg2YWzjEdho+SqGZih2cJZnrCW5PZGsbl4xE5UIr6pOGfVYnfhCv5CIS8wQzJy5aKEUZSu9fZoFg6vrHgazztugWJBFDAxJano5sNSqtC0pWzRKHWM/vvbvfe0QlMNx1ZqXqTF+bp/4YWP3qsXrE7RklqrHdmYGma/1teahwN9tQ7J3AqAP42LYEAAB8uCno5QkY3AMV0qqLkcmp54fzTXLROBVzQDK0jLYCAjqkF1MTVNl4NTNC3GGXJ5YNOw0KVrn9vv7Na0oXPxt++ur9362P70xZ3NO4O8l88Wu8/NHuyvHd2oabnizsvXt+9dCz8V3twY7VWVfLZ0uXtlFp9h8+RNfIBnsAGH8MN5WhWxwFdJzJjkRGEyK3O+SIgSEgR6HEXGM/1swTIjdoAAFwiPxp0l7Klb5q0zaHYMjC3BcB57dDR3tzYR7F3aPNw67HXazapXsA0NNtCGnNhyGGtAnBKnCxGIRswZHp0J53E2NHhCGT2ZwJOMkkznlvXZrCEVuK6k8o1MTpNFLtuy6ORxd/bxvZXnPrGth4aEGEUIM0Qyha+1rq1XnlnTa+rUw07j5E1Nu3z8l/c+lkpns7pVeClr6I6eJoSzzu29rc9+eFMu7KylKBGUkqL6BfSV1u7NYLJCeH4zzDaMmzmdR/finXwdVzGBIezC/blywRUIob0OI4CWN1OM2+jLy+51DgS0IJ+JbrhzZ7G8aLyzi0dzc22EYHtztLu2a+ppGYZoGE3rKOLdWH9nquaWZSd+bQiCaRqjSfQWDWdkejrQo+806qmOWLr0/4LebrD50hevuBcHQkpVcS2FRUnEjNF6/sLJvxY3Ni+M86xh9j9wY2CcfD3YqtRQxxlWVm90rn7+eF1r1zPZNB9Upy+PpcF0kBJb7bTMiRcGK+jvm7Mr27rbaF+51St1lpkI/RUm0IevJiRMGWlMEI0aLtI9I40pTp4WuqfTuBoYJY26jELRXoMiAogcRWuJnJlPy8iny4mQ+dWKV7CzCvRRX3j8EehsSLafGFOiTlYIV/ArmiYQWRZd1bIkUSqNN+tay2tpaSvtb/cVSqP/TKoo56uZ6+uvTp2VgqsqhZqL9bqdLZlOXvZXTKk9HmrV7TDJEfVHv0B/hwlM4Q+W33ooi2gb6TFD+PWlocffMR5/90q03T8PXs5rZ6Hz5lNRAPhoicWR0s91BO1mUC+X1IzEoyGCxxVazHQeGcXy1qcJ5yLJ8/1E7EzDo5Fn/3fx2l7PKWmGajYq9rQZbF3aCoLtq1V9uFLpZ7y2m+7U4pfbd1UpvxI6oea4WspzbNcwK+N2uN7ISYbv9HMa04ycZeQb6+3t69W4Xv6jf0d/i/8YpvBHSWqSXURJHaHYOhcPjJ5magsowxgBRfeBkNzB4/pF01YJI8SAIYiyDUOUvfwEaF57vE4okKMzqLhmZFmzVlir5K20LImPaxa16NpkGkWW6M/pjC44JZhmkqsFP5K05SgiCD8rexJDBV/rp/XbuRRiBc80RUx+x8oLWeUhEihmFDHBMoKpHew8vI5oL1emBvUHfc+uqNi2SKVlUksnjLhVV59+cttolxZ5Fd9C/wE78Pxc2ug1hYiry5kLKEXHBCFkxCR78TQcmAQhoIDo/bPvz8SBrAI7aCeJA/1o0p9Mkuky0qJYq6Pxnsb+GEUC01zOD1EsiB3yJ50LlYwQzVxqQXNLKcozVLNyg/FkUOOipgwkRoxc0fbqsqBytWFUnpcbW1f9VdJaSSudTqli63U92A+Vbq175b03t9MppVvv3mptZp1Czq60itqFojPKNy9FdYBHD8j40Z9DBnrfFu7tzWvyYmYAQLcirbiLIzm+iUBkkEHpaHD4tgB7djJOVuOT+WtGRTfxP+bKWet302rKULPUTvp5Fbz4+9kQ/v/3OwX8eLC1ll+wkxrHweJxHrcAEfQlIJh86YnVuXt24bRd6bJd1ahdaxU1EzkDi7/j9nEcrhfTrxUPbJZpxEk76t7p6WVE7opyjUlYTOk+Uoq2qzIsSVI6m8GiyuVchnwwVSrkU4r6orrmteZXioOPr/GsaDW8dk5tNtKyIZNyWGHZgl3k/2aU7Er1kvejUi+pxfDRW5hgDW7C3yxy7qCIETlAyQgcP9HkaaH3DiCCCcIPI92PFU87I/v984jYT88iIk2sACWIJGpHYrU7j5t774AABoLvs8e/MogZ3gxi072JbgrJJ8Swj8M+jg2BR94bzZLJNBPXfDSMym3b0+nyVwnJeGIa0eRsxV970Z9ZTgqbFmOaxllOxaVMPTRbXrfnYap2TSXfzPtZXqlyRfqaaMmaxUWp0amLMmXMrTgkLWaysqmzWkPknqMbuJEJir3CsNeuKyLl3gUn17RbpazUacsK+5qIHUPVU1JzJeSyxCTGe+M204uamxGiOzr5NS7iDGzAZ77noXenq/WudLX+b3TtdYJ63oriIDv9SjOdkfF46Snxb2Ai4bAT7RgNEy1JouBPNK2YYqoqT693LY4lU2/YTOCYeW5lNazXO27PzKq1THO3LOYbJ7/2c5ULpUyr7WFCh/svfLCV6XS9ScUKbJn3V9LV1eHh0eFwWJuVSuul933njr3eBPhfAAAA//8BAAD//0hpfGQAAAAAAQAAAAECj3OmGgxfDzz1AA8D6AAAAADcdfC+AAAAAN2nVnn/iP6XBP4ErAABAAYAAgAAAAAAAAABAAADhP6iAAAFKf+I/dEE/gABAAAAAAAAAAAAAAAAAAAAFwIGACgCYQAyAkMANgKJAB4CKgAyAkgALQJrADsBBgBRAlwAOwEFAFwDQAA7AqIAOwKmADICawA7AlwAHgGVADsB9wAkAeUAIwKNADsDQAAAAhQAMQI+ADICQwAyAAAAZAEYAYYCVgMMA9wEiAT6Ba4F6gcIB8AIIgjuCYQKDgqmC0ILxgv2DHwNTg3aAAEAAAAXBKsACQC6AAUAAgAuAF0AjQAAAVkODAADAAF4nJyS32oTQRTGf7utpUXrA3g1hF5YsZtUsZT2qhVThEDUini7m8z+qWtm2ZltSK59Di98EPHRZI+TsikGRELYHztnzved7yywzw+2CLb3gJ/hN88BT8IbzyG7YeJ5i9PwmedtDsIdzw8YBr8879ALvnve5SBYet7r8EN6wWfPjzq8H/Q48fyYEyDH4aiwnNGnj2VCTUGFwxJhKSiJMNRk9BkzZMRHcgosiiGGGQ7FNYYUx5yYGo3yFSUFEzQzLJopioYZUzQ1Ckcutde8ZYRiTCW13c6jtQ7PUXyS2603I7XHRPJXHWfruis3MbfEMlNMQikncwrx0Z62uhe8F3acof4zobn8IhwLmaj14EQnYoLhKx8wJDJHO+MbcT9C04hCzhc0QxqWLFlwSUPiHVuOuMRQMv1rEgOOGXAu6TpSYhocRpL5k+hTbqXylIiXHHZ01D0ldafU7XzFmDFXnP+Dw9Vzs8ZrDBULSTWTvBUvGDDgld+olr1s9viOGsMNmoncvpCJc9mJlXnvbzHzO2/7rDbSvjUYMumb+u/P0ie90z4iWdM+/A0AAP//AQAA///3gZyweJxiYGYAg//VDCIMWAAAAAD//wEAAP//JRYBknicNIkxqsJAFEXvvD8/Pg0oVoIWIgpKVjGE11kpFkmdLMAl2AhpdC15hEBiNuCulEnwVueci2OD9zlRY55paVoGI7sqRnGFJSHyVK/tjGky8JYWQc/juGNYgBBGijDu4OB6a/EHiO5McUpKVyTec9GD94YxBEi60r1PL77BWFdkl9/hV29oHtA0asznXtqHEqT6zwOIfAEAAP//AQAA//+b8iuH"); }]]>