From 32a1805cc38f9ab029190dd2df1db22f57a294f9 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 14 Oct 2025 17:23:16 +0900 Subject: [PATCH 1/5] add taffy --- crates/grida-canvas/Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/grida-canvas/Cargo.toml b/crates/grida-canvas/Cargo.toml index 21848789ea..d16c6807d7 100644 --- a/crates/grida-canvas/Cargo.toml +++ b/crates/grida-canvas/Cargo.toml @@ -19,6 +19,7 @@ futures = "0.3.31" gl = "0.14.0" figma-api = { version = "0.31.3", optional = true } seahash = "4.1.0" +taffy = "0.9.1" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] @@ -50,4 +51,4 @@ harness = false [[example]] name = "app_figma" -required-features = ["figma"] \ No newline at end of file +required-features = ["figma"] From 7355356398556b98387c9b5545b2589ecb343554 Mon Sep 17 00:00:00 2001 From: Universe Date: Tue, 14 Oct 2025 20:07:08 +0900 Subject: [PATCH 2/5] scene graph --- Cargo.lock | 28 + .../grida-canvas/benches/bench_rectangles.rs | 88 +-- crates/grida-canvas/examples/app_figma.rs | 5 +- crates/grida-canvas/examples/app_grida.rs | 49 +- crates/grida-canvas/examples/bench_100k.rs | 12 +- .../examples/golden_container_stroke.rs | 18 +- crates/grida-canvas/examples/golden_pdf.rs | 52 +- crates/grida-canvas/examples/golden_svg.rs | 34 +- .../examples/golden_type_stroke.rs | 24 +- crates/grida-canvas/examples/grida_basic.rs | 64 +- .../grida-canvas/examples/grida_blendmode.rs | 29 +- .../grida-canvas/examples/grida_booleans.rs | 109 ++- .../grida-canvas/examples/grida_container.rs | 20 +- crates/grida-canvas/examples/grida_effects.rs | 39 +- crates/grida-canvas/examples/grida_fills.rs | 30 +- .../grida-canvas/examples/grida_gradients.rs | 24 +- crates/grida-canvas/examples/grida_image.rs | 18 +- crates/grida-canvas/examples/grida_images.rs | 42 +- crates/grida-canvas/examples/grida_lines.rs | 23 +- crates/grida-canvas/examples/grida_mask.rs | 46 +- crates/grida-canvas/examples/grida_nested.rs | 36 +- crates/grida-canvas/examples/grida_paint.rs | 25 +- crates/grida-canvas/examples/grida_shapes.rs | 27 +- .../examples/grida_shapes_ellipse.rs | 23 +- crates/grida-canvas/examples/grida_strokes.rs | 45 +- crates/grida-canvas/examples/grida_texts.rs | 39 +- crates/grida-canvas/examples/grida_vector.rs | 32 +- .../grida-canvas/examples/grida_webfonts.rs | 20 +- crates/grida-canvas/examples/sys_camera.rs | 15 +- crates/grida-canvas/examples/wd_animation.rs | 11 +- crates/grida-canvas/src/cache/geometry.rs | 106 +-- crates/grida-canvas/src/dummy/mod.rs | 42 +- crates/grida-canvas/src/io/io_figma.rs | 74 +- crates/grida-canvas/src/io/io_grida.rs | 3 - crates/grida-canvas/src/node/factory.rs | 2 - crates/grida-canvas/src/node/mod.rs | 1 + crates/grida-canvas/src/node/scene_graph.rs | 719 ++++++++++++++++++ crates/grida-canvas/src/node/schema.rs | 15 +- crates/grida-canvas/src/painter/geometry.rs | 15 +- crates/grida-canvas/src/painter/layer.rs | 65 +- .../src/painter/painter_debug_node.rs | 64 +- crates/grida-canvas/src/resources/mod.rs | 25 +- crates/grida-canvas/src/runtime/scene.rs | 55 +- .../src/vectornetwork/vn_painter.rs | 3 +- crates/grida-canvas/src/window/application.rs | 50 +- crates/grida-canvas/tests/export_as_pdf.rs | 15 +- crates/grida-canvas/tests/geometry_cache.rs | 47 +- crates/grida-canvas/tests/hit_test.rs | 44 +- crates/grida-canvas/tests/render_bounds.rs | 46 +- crates/grida-canvas/tests/scene_cache.rs | 20 +- 50 files changed, 1625 insertions(+), 813 deletions(-) create mode 100644 crates/grida-canvas/src/node/scene_graph.rs diff --git a/Cargo.lock b/Cargo.lock index 56929b4b79..67227b62fb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -377,6 +377,7 @@ dependencies = [ "serde", "serde_json", "skia-safe", + "taffy", "tokio", "uuid", "winit", @@ -1094,6 +1095,12 @@ dependencies = [ "gl_generator", ] +[[package]] +name = "grid" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12101ecc8225ea6d675bc70263074eab6169079621c2186fe0c66590b2df9681" + [[package]] name = "grida-canvas-wasm" version = "0.0.0" @@ -2728,6 +2735,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + [[package]] name = "smallvec" version = "1.15.0" @@ -2854,6 +2870,18 @@ dependencies = [ "libc", ] +[[package]] +name = "taffy" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25026fb8cc9ab51ab9fdabe5d11706796966f6d1c78e19871ef63be2b8f0644" +dependencies = [ + "arrayvec", + "grid", + "serde", + "slotmap", +] + [[package]] name = "tar" version = "0.4.44" diff --git a/crates/grida-canvas/benches/bench_rectangles.rs b/crates/grida-canvas/benches/bench_rectangles.rs index a17a4f8d02..c64ad4c689 100644 --- a/crates/grida-canvas/benches/bench_rectangles.rs +++ b/crates/grida-canvas/benches/bench_rectangles.rs @@ -1,5 +1,5 @@ use cg::cg::types::*; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::runtime::camera::Camera2D; use cg::runtime::scene::{Backend, Renderer}; @@ -7,47 +7,45 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; use math2::transform::AffineTransform; fn create_rectangles(count: usize, with_effects: bool) -> Scene { - let mut repository = NodeRepository::new(); - let mut ids = Vec::new(); + let mut graph = SceneGraph::new(); // Create rectangles - for i in 0..count { - let id = format!("rect-{}", i); - ids.push(id.clone()); - - let rect = RectangleNodeRec { - id: id.clone(), - name: None, - active: true, - opacity: 1.0, - blend_mode: LayerBlendMode::default(), - mask: None, - transform: AffineTransform::identity(), - size: Size { - width: 100.0, - height: 100.0, - }, - corner_radius: RectangularCornerRadius::zero(), - fills: Paints::new([Paint::from(CGColor(255, 0, 0, 255))]), - strokes: Paints::default(), - stroke_width: 1.0, - stroke_align: StrokeAlign::Inside, - stroke_dash_array: None, - effects: if with_effects { - LayerEffects::from_array(vec![FilterEffect::DropShadow(FeShadow { - dx: 2.0, - dy: 2.0, - blur: 4.0, - spread: 0.0, - color: CGColor(0, 0, 0, 128), - })]) - } else { - LayerEffects::default() - }, - }; - - repository.insert(Node::Rectangle(rect)); - } + let rectangles: Vec = (0..count) + .map(|i| { + let id = format!("rect-{}", i); + + Node::Rectangle(RectangleNodeRec { + id: id.clone(), + name: None, + active: true, + opacity: 1.0, + blend_mode: LayerBlendMode::default(), + mask: None, + transform: AffineTransform::identity(), + size: Size { + width: 100.0, + height: 100.0, + }, + corner_radius: RectangularCornerRadius::zero(), + fills: Paints::new([Paint::from(CGColor(255, 0, 0, 255))]), + strokes: Paints::default(), + stroke_width: 1.0, + stroke_align: StrokeAlign::Inside, + stroke_dash_array: None, + effects: if with_effects { + LayerEffects::from_array(vec![FilterEffect::DropShadow(FeShadow { + dx: 2.0, + dy: 2.0, + blur: 4.0, + spread: 0.0, + color: CGColor(0, 0, 0, 128), + })]) + } else { + LayerEffects::default() + }, + }) + }) + .collect(); // Create root group let root_group = GroupNodeRec { @@ -55,20 +53,18 @@ fn create_rectangles(count: usize, with_effects: bool) -> Scene { name: Some("Root Group".to_string()), active: true, transform: None, - children: ids.clone(), opacity: 1.0, blend_mode: LayerBlendMode::default(), mask: None, }; - repository.insert(Node::Group(root_group)); + let root_id = graph.append_child(Node::Group(root_group), Parent::Root); + graph.append_children(rectangles, Parent::NodeId(root_id)); Scene { - id: "scene".to_string(), - name: "Test Scene".to_string(), - children: vec!["root".to_string()], - nodes: repository, + name: "Test Scene".into(), background_color: None, + graph, } } diff --git a/crates/grida-canvas/examples/app_figma.rs b/crates/grida-canvas/examples/app_figma.rs index 64ae6e0a37..8ad8db99be 100644 --- a/crates/grida-canvas/examples/app_figma.rs +++ b/crates/grida-canvas/examples/app_figma.rs @@ -241,9 +241,8 @@ async fn main() { .expect("Failed to load scene"); println!("Rendering scene: {}", scene.name); - println!("Scene ID: {}", scene.id); - println!("Number of children: {}", scene.children.len()); - println!("Total nodes in repository: {}", scene.nodes.len()); + println!("Number of roots: {}", scene.graph.roots().len()); + println!("Total nodes in graph: {}", scene.graph.node_count()); // Load webfonts metadata and find matching font files let webfonts_metadata = load_webfonts_metadata() diff --git a/crates/grida-canvas/examples/app_grida.rs b/crates/grida-canvas/examples/app_grida.rs index 1cb7957a5a..0b2574d6ce 100644 --- a/crates/grida-canvas/examples/app_grida.rs +++ b/crates/grida-canvas/examples/app_grida.rs @@ -1,5 +1,6 @@ use cg::cg::types::*; use cg::io::io_grida::parse; +use cg::node::scene_graph::SceneGraph; use cg::node::schema::*; use cg::window; use clap::Parser; @@ -40,37 +41,37 @@ async fn load_scene_from_file(file_path: &str) -> Scene { .and_then(|c| c.clone()) .unwrap_or_default(); - // Convert nodes to repository, filtering out scene nodes and populating children from links - let mut node_repo = cg::node::repository::NodeRepository::new(); - for (node_id, json_node) in canvas_file.document.nodes { - // Skip scene nodes - they're handled separately - if matches!(json_node, cg::io::io_grida::JSONNode::Scene(_)) { - continue; - } + // Build scene graph from nodes and links using snapshot + let scene_node_ids: std::collections::HashSet = canvas_file + .document + .nodes + .iter() + .filter(|(_, json_node)| matches!(json_node, cg::io::io_grida::JSONNode::Scene(_))) + .map(|(id, _)| id.clone()) + .collect(); - let mut node: cg::node::schema::Node = json_node.into(); + // Convert all nodes (skip scene nodes) + let nodes: Vec = canvas_file + .document + .nodes + .into_iter() + .filter(|(_, json_node)| !matches!(json_node, cg::io::io_grida::JSONNode::Scene(_))) + .map(|(_, json_node)| json_node.into()) + .collect(); - // Populate children from links - if let Some(children_opt) = links.get(&node_id) { - if let Some(children) = children_opt { - match &mut node { - cg::node::schema::Node::Container(n) => n.children = children.clone(), - cg::node::schema::Node::Group(n) => n.children = children.clone(), - cg::node::schema::Node::BooleanOperation(n) => n.children = children.clone(), - _ => {} // Other nodes don't have children - } - } - } + // Filter links (skip scene nodes as parents) + let filtered_links: std::collections::HashMap> = links + .into_iter() + .filter(|(parent_id, _)| !scene_node_ids.contains(parent_id)) + .filter_map(|(parent_id, children_opt)| children_opt.map(|children| (parent_id, children))) + .collect(); - node_repo.insert(node); - } + let graph = SceneGraph::new_from_snapshot(nodes, filtered_links, scene_children); Scene { - nodes: node_repo, - id: scene_id, name: scene_name, - children: scene_children, background_color: Some(CGColor(230, 230, 230, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/bench_100k.rs b/crates/grida-canvas/examples/bench_100k.rs index 25592aa3a1..9cc1aebd4d 100644 --- a/crates/grida-canvas/examples/bench_100k.rs +++ b/crates/grida-canvas/examples/bench_100k.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; @@ -8,8 +8,7 @@ use math2::transform::AffineTransform; async fn demo_n_shapes(n: usize) -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); - let mut all_shape_ids = Vec::new(); + let mut graph = SceneGraph::new(); // Grid parameters let shape_size = 100.0; // Fixed size of 100x100 per shape @@ -52,15 +51,12 @@ async fn demo_n_shapes(n: usize) -> Scene { rect.set_fill(Paint::from(CGColor(r, g, b, 255))); - all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.append_child(Node::Rectangle(rect), Parent::Root); } Scene { - id: "scene".to_string(), name: format!("{} Shapes Performance Test", n), - children: all_shape_ids, - nodes: repository, + graph, background_color: None, } } diff --git a/crates/grida-canvas/examples/golden_container_stroke.rs b/crates/grida-canvas/examples/golden_container_stroke.rs index 1b72118cd5..72e2de1ab7 100644 --- a/crates/grida-canvas/examples/golden_container_stroke.rs +++ b/crates/grida-canvas/examples/golden_container_stroke.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::runtime::camera::Camera2D; use cg::runtime::scene::{Backend, Renderer}; @@ -8,7 +8,7 @@ use math2::{rect::Rectangle, transform::AffineTransform}; async fn scene() -> Scene { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut container = nf.create_container_node(); container.size = Size { @@ -35,19 +35,13 @@ async fn scene() -> Scene { // But we want it to overlap with the stroke, so position it at the edge circle.transform = AffineTransform::new(200.0, 200.0, 0.0); - let circle_id = circle.id.clone(); - repo.insert(Node::Ellipse(circle)); - - let container_id = container.id.clone(); - // Add the circle as a child of the container - container.children = vec![circle_id]; - repo.insert(Node::Container(container)); + // Add container as root, then add circle as its child + let container_id = graph.append_child(Node::Container(container), Parent::Root); + graph.append_child(Node::Ellipse(circle), Parent::NodeId(container_id)); Scene { - id: "scene".into(), name: "container stroke".into(), - children: vec![container_id], - nodes: repo, + graph, background_color: None, } } diff --git a/crates/grida-canvas/examples/golden_pdf.rs b/crates/grida-canvas/examples/golden_pdf.rs index b7c973b3b8..86bf878558 100644 --- a/crates/grida-canvas/examples/golden_pdf.rs +++ b/crates/grida-canvas/examples/golden_pdf.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::runtime::camera::Camera2D; use cg::runtime::scene::{Backend, Renderer, RendererOptions}; @@ -10,7 +10,7 @@ use std::fs::File; async fn demo_scene() -> Scene { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Create a root container let mut root_container = nf.create_container_node(); @@ -20,8 +20,6 @@ async fn demo_scene() -> Scene { height: 700.0, }; - let mut all_node_ids = Vec::new(); - // Title text let mut title_text = nf.create_text_span_node(); title_text.name = Some("Title".to_string()); @@ -47,8 +45,6 @@ async fn demo_scene() -> Scene { title_text.text_align = TextAlign::Center; title_text.text_align_vertical = TextAlignVertical::Center; title_text.fills = Paints::new([Paint::from(CGColor(50, 50, 50, 255))]); - all_node_ids.push(title_text.id.clone()); - repo.insert(Node::TextSpan(title_text)); // Subtitle text let mut subtitle_text = nf.create_text_span_node(); @@ -76,8 +72,6 @@ async fn demo_scene() -> Scene { subtitle_text.text_align = TextAlign::Center; subtitle_text.text_align_vertical = TextAlignVertical::Center; subtitle_text.fills = Paints::new([Paint::from(CGColor(100, 100, 100, 255))]); - all_node_ids.push(subtitle_text.id.clone()); - repo.insert(Node::TextSpan(subtitle_text)); // Rectangle with gradient fill let mut rect_gradient = nf.create_rectangle_node(); @@ -117,8 +111,6 @@ async fn demo_scene() -> Scene { spread: 0.0, color: CGColor(0, 0, 0, 100), })]); - all_node_ids.push(rect_gradient.id.clone()); - repo.insert(Node::Rectangle(rect_gradient)); // Ellipse with radial gradient let mut ellipse_radial = nf.create_ellipse_node(); @@ -150,8 +142,6 @@ async fn demo_scene() -> Scene { })]); ellipse_radial.stroke_width = 4.0; ellipse_radial.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - all_node_ids.push(ellipse_radial.id.clone()); - repo.insert(Node::Ellipse(ellipse_radial)); // Polygon (hexagon) let hexagon_points = (0..6) @@ -178,8 +168,6 @@ async fn demo_scene() -> Scene { spread: 0.0, color: CGColor(0, 0, 0, 150), })]); - all_node_ids.push(hexagon.id.clone()); - repo.insert(Node::Polygon(hexagon)); // Star polygon let mut star = nf.create_regular_star_polygon_node(); @@ -194,8 +182,6 @@ async fn demo_scene() -> Scene { star.fills = Paints::new([Paint::from(CGColor(255, 215, 0, 255))]); star.stroke_width = 2.0; star.strokes = Paints::new([Paint::from(CGColor(139, 69, 19, 255))]); - all_node_ids.push(star.id.clone()); - repo.insert(Node::RegularStarPolygon(star)); // Path (complex shape) let mut path = nf.create_path_node(); @@ -205,8 +191,6 @@ async fn demo_scene() -> Scene { path.fills = Paints::new([Paint::from(CGColor(255, 20, 147, 255))]); path.stroke_width = 2.0; path.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - all_node_ids.push(path.id.clone()); - repo.insert(Node::SVGPath(path)); // Line with gradient stroke let mut line = nf.create_line_node(); @@ -237,8 +221,6 @@ async fn demo_scene() -> Scene { active: true, })]); line.stroke_width = 8.0; - all_node_ids.push(line.id.clone()); - repo.insert(Node::Line(line)); // Regular polygon (octagon) let mut octagon = nf.create_regular_polygon_node(); @@ -252,8 +234,6 @@ async fn demo_scene() -> Scene { octagon.fills = Paints::new([Paint::from(CGColor(0, 255, 255, 255))]); octagon.stroke_width = 3.0; octagon.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - all_node_ids.push(octagon.id.clone()); - repo.insert(Node::RegularPolygon(octagon)); // Description text let mut description_text = nf.create_text_span_node(); @@ -280,19 +260,29 @@ async fn demo_scene() -> Scene { description_text.text_align = TextAlign::Center; description_text.text_align_vertical = TextAlignVertical::Center; description_text.fills = Paints::new([Paint::from(CGColor(80, 80, 80, 255))]); - all_node_ids.push(description_text.id.clone()); - repo.insert(Node::TextSpan(description_text)); - // Set up the root container - root_container.children = all_node_ids; - let root_container_id = root_container.id.clone(); - repo.insert(Node::Container(root_container)); + // Add root container and all its children + let root_container_id = graph.append_child(Node::Container(root_container), Parent::Root); + + graph.append_children( + vec![ + Node::TextSpan(title_text), + Node::TextSpan(subtitle_text), + Node::Rectangle(rect_gradient), + Node::Ellipse(ellipse_radial), + Node::Polygon(hexagon), + Node::RegularStarPolygon(star), + Node::SVGPath(path), + Node::Line(line), + Node::RegularPolygon(octagon), + Node::TextSpan(description_text), + ], + Parent::NodeId(root_container_id), + ); Scene { - id: "scene".into(), name: "PDF Demo".into(), - children: vec![root_container_id], - nodes: repo, + graph, background_color: Some(CGColor(255, 255, 255, 255)), } } diff --git a/crates/grida-canvas/examples/golden_svg.rs b/crates/grida-canvas/examples/golden_svg.rs index e2e8af02df..8625ac37b3 100644 --- a/crates/grida-canvas/examples/golden_svg.rs +++ b/crates/grida-canvas/examples/golden_svg.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::runtime::camera::Camera2D; use cg::runtime::scene::{Backend, Renderer, RendererOptions}; @@ -11,7 +11,7 @@ use std::io::Write; async fn demo_scene() -> Scene { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Create a root container let mut root_container = nf.create_container_node(); @@ -49,7 +49,7 @@ async fn demo_scene() -> Scene { title_text.text_align_vertical = TextAlignVertical::Center; title_text.fills = Paints::new([Paint::from(CGColor(50, 50, 50, 255))]); all_node_ids.push(title_text.id.clone()); - repo.insert(Node::TextSpan(title_text)); + graph.insert_node(Node::TextSpan(title_text)); // Subtitle text let mut subtitle_text = nf.create_text_span_node(); @@ -63,7 +63,7 @@ async fn demo_scene() -> Scene { subtitle_text.text_align_vertical = TextAlignVertical::Center; subtitle_text.fills = Paints::new([Paint::from(CGColor(100, 100, 100, 255))]); all_node_ids.push(subtitle_text.id.clone()); - repo.insert(Node::TextSpan(subtitle_text)); + graph.insert_node(Node::TextSpan(subtitle_text)); // Rectangle with gradient fill let mut rect_gradient = nf.create_rectangle_node(); @@ -104,7 +104,7 @@ async fn demo_scene() -> Scene { color: CGColor(0, 0, 0, 100), })]); all_node_ids.push(rect_gradient.id.clone()); - repo.insert(Node::Rectangle(rect_gradient)); + graph.insert_node(Node::Rectangle(rect_gradient)); // Ellipse with radial gradient let mut ellipse_radial = nf.create_ellipse_node(); @@ -137,7 +137,7 @@ async fn demo_scene() -> Scene { ellipse_radial.stroke_width = 4.0; ellipse_radial.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); all_node_ids.push(ellipse_radial.id.clone()); - repo.insert(Node::Ellipse(ellipse_radial)); + graph.insert_node(Node::Ellipse(ellipse_radial)); // Polygon (hexagon) let hexagon_points = (0..6) @@ -165,7 +165,7 @@ async fn demo_scene() -> Scene { color: CGColor(0, 0, 0, 150), })]); all_node_ids.push(hexagon.id.clone()); - repo.insert(Node::Polygon(hexagon)); + graph.insert_node(Node::Polygon(hexagon)); // Star polygon let mut star = nf.create_regular_star_polygon_node(); @@ -181,7 +181,7 @@ async fn demo_scene() -> Scene { star.stroke_width = 2.0; star.strokes = Paints::new([Paint::from(CGColor(139, 69, 19, 255))]); all_node_ids.push(star.id.clone()); - repo.insert(Node::RegularStarPolygon(star)); + graph.insert_node(Node::RegularStarPolygon(star)); // Path (complex shape) let mut path = nf.create_path_node(); @@ -192,7 +192,7 @@ async fn demo_scene() -> Scene { path.stroke_width = 2.0; path.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); all_node_ids.push(path.id.clone()); - repo.insert(Node::SVGPath(path)); + graph.insert_node(Node::SVGPath(path)); // Line with gradient stroke let mut line = nf.create_line_node(); @@ -224,7 +224,7 @@ async fn demo_scene() -> Scene { })]); line.stroke_width = 8.0; all_node_ids.push(line.id.clone()); - repo.insert(Node::Line(line)); + graph.insert_node(Node::Line(line)); // Regular polygon (octagon) let mut octagon = nf.create_regular_polygon_node(); @@ -239,7 +239,7 @@ async fn demo_scene() -> Scene { octagon.stroke_width = 3.0; octagon.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); all_node_ids.push(octagon.id.clone()); - repo.insert(Node::RegularPolygon(octagon)); + graph.insert_node(Node::RegularPolygon(octagon)); // Description text let mut description_text = nf.create_text_span_node(); @@ -252,19 +252,19 @@ async fn demo_scene() -> Scene { description_text.text_align_vertical = TextAlignVertical::Center; description_text.fills = Paints::new([Paint::from(CGColor(80, 80, 80, 255))]); all_node_ids.push(description_text.id.clone()); - repo.insert(Node::TextSpan(description_text)); + graph.insert_node(Node::TextSpan(description_text)); // Set up the root container - root_container.children = all_node_ids; let root_container_id = root_container.id.clone(); - repo.insert(Node::Container(root_container)); + graph.insert(Parent::NodeId(root_container_id.clone()), all_node_ids); + graph.insert_node(Node::Container(root_container)); + + graph.insert(Parent::Root, vec![root_container_id.clone()]); Scene { - id: "scene".into(), name: "SVG Demo".into(), - children: vec![root_container_id], - nodes: repo, background_color: Some(CGColor(255, 255, 255, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/golden_type_stroke.rs b/crates/grida-canvas/examples/golden_type_stroke.rs index 25e917e33b..b0cbd78702 100644 --- a/crates/grida-canvas/examples/golden_type_stroke.rs +++ b/crates/grida-canvas/examples/golden_type_stroke.rs @@ -1,5 +1,5 @@ use cg::cg::types::*; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::runtime::camera::Camera2D; use cg::runtime::scene::{Backend, Renderer, RendererOptions}; @@ -7,7 +7,7 @@ use math2::{rect::Rectangle, transform::AffineTransform}; use uuid::Uuid; async fn scene() -> Scene { - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Text with Outside stroke alignment let text_outside = TextSpanNodeRec { @@ -32,8 +32,6 @@ async fn scene() -> Scene { mask: None, effects: LayerEffects::default(), }; - let text_outside_id = text_outside.id.clone(); - repo.insert(Node::TextSpan(text_outside)); // Text with Center stroke alignment let text_center = TextSpanNodeRec { @@ -58,8 +56,6 @@ async fn scene() -> Scene { mask: None, effects: LayerEffects::default(), }; - let text_center_id = text_center.id.clone(); - repo.insert(Node::TextSpan(text_center)); // Text with Inside stroke alignment let text_inside = TextSpanNodeRec { @@ -84,14 +80,20 @@ async fn scene() -> Scene { mask: None, effects: LayerEffects::default(), }; - let text_inside_id = text_inside.id.clone(); - repo.insert(Node::TextSpan(text_inside)); + + // Add all text nodes as root children in one operation + graph.append_children( + vec![ + Node::TextSpan(text_outside), + Node::TextSpan(text_center), + Node::TextSpan(text_inside), + ], + Parent::Root, + ); Scene { - id: "scene".into(), name: "type stroke".into(), - children: vec![text_outside_id, text_center_id, text_inside_id], - nodes: repo, + graph, background_color: Some(CGColor(255, 255, 255, 255)), } } diff --git a/crates/grida-canvas/examples/grida_basic.rs b/crates/grida-canvas/examples/grida_basic.rs index 913eebd55d..7b8617deeb 100644 --- a/crates/grida-canvas/examples/grida_basic.rs +++ b/crates/grida-canvas/examples/grida_basic.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; @@ -149,8 +149,7 @@ async fn demo_basic() -> Scene { line_node.stroke_width = 4.0; // Create a group node for the shapes (rectangle, ellipse, polygon) - let mut shapes_group_node = nf.create_group_node(); - shapes_group_node.name = Some("Shapes Group".to_string()); + let shapes_group_node = nf.create_group_node(); // Create a root container node containing the shapes group, text, and line let mut root_container_node = nf.create_container_node(); @@ -160,10 +159,7 @@ async fn demo_basic() -> Scene { }; root_container_node.name = Some("Root Container".to_string()); - // Create a node map and add all nodes - let mut repository = NodeRepository::new(); - - // First, collect all the IDs we'll need + // Collect all the IDs let rect_id = rect_node.id.clone(); let ellipse_id = ellipse_node.id.clone(); let polygon_id = polygon_node.id.clone(); @@ -172,33 +168,45 @@ async fn demo_basic() -> Scene { let line_id = line_node.id.clone(); let image_id = image_node.id.clone(); let path_id = path_node.id.clone(); - - // Now add all nodes to the map - repository.insert(Node::Rectangle(rect_node)); - repository.insert(Node::Ellipse(ellipse_node)); - repository.insert(Node::Polygon(polygon_node)); - repository.insert(Node::RegularPolygon(regular_polygon_node)); - repository.insert(Node::TextSpan(text_span_node)); - repository.insert(Node::Line(line_node)); - repository.insert(Node::Image(image_node)); - repository.insert(Node::SVGPath(path_node)); - - // Now set up the shapes group with the IDs we collected - shapes_group_node.children = vec![rect_id, ellipse_id, polygon_id, regular_polygon_id]; let shapes_group_id = shapes_group_node.id.clone(); - repository.insert(Node::Group(shapes_group_node)); - - // Finally set up the root container with all IDs - root_container_node.children = vec![shapes_group_id, text_span_id, line_id, path_id, image_id]; let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + + // Build the scene graph + let mut graph = SceneGraph::new(); + + // Add all nodes first + graph.insert_node(Node::Rectangle(rect_node)); + graph.insert_node(Node::Ellipse(ellipse_node)); + graph.insert_node(Node::Polygon(polygon_node)); + graph.insert_node(Node::RegularPolygon(regular_polygon_node)); + graph.insert_node(Node::TextSpan(text_span_node)); + graph.insert_node(Node::Line(line_node)); + graph.insert_node(Node::Image(image_node)); + graph.insert_node(Node::SVGPath(path_node)); + graph.insert_node(Node::Group(shapes_group_node)); + graph.insert_node(Node::Container(root_container_node)); + + // Set up the hierarchy + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert( + Parent::NodeId(root_container_id), + vec![ + shapes_group_id.clone(), + text_span_id, + line_id, + path_id, + image_id, + ], + ); + graph.insert( + Parent::NodeId(shapes_group_id), + vec![rect_id, ellipse_id, polygon_id, regular_polygon_id], + ); Scene { - id: "scene".to_string(), name: "Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_blendmode.rs b/crates/grida-canvas/examples/grida_blendmode.rs index f6b6574759..957f8780a0 100644 --- a/crates/grida-canvas/examples/grida_blendmode.rs +++ b/crates/grida-canvas/examples/grida_blendmode.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_blendmode() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Create a root container node let mut root_container_node = nf.create_container_node(); @@ -81,7 +81,7 @@ async fn demo_blendmode() -> Scene { })); let background_id = background.id.clone(); - repository.insert(Node::Rectangle(background)); + graph.insert_node(Node::Rectangle(background)); // Create a sweep gradient overlay (similar to C++ example's sweep gradient) let mut sweep_overlay = nf.create_rectangle_node(); @@ -137,7 +137,7 @@ async fn demo_blendmode() -> Scene { })); let sweep_overlay_id = sweep_overlay.id.clone(); - repository.insert(Node::Rectangle(sweep_overlay)); + graph.insert_node(Node::Rectangle(sweep_overlay)); // Create a group for the colored circles with the specific blend mode let mut circle_group = nf.create_group_node(); @@ -161,7 +161,7 @@ async fn demo_blendmode() -> Scene { green_circle.set_fill(Paint::from(CGColor(0, 255, 0, 255))); green_circle.blend_mode = LayerBlendMode::default(); let green_circle_id = green_circle.id.clone(); - repository.insert(Node::Ellipse(green_circle)); + graph.insert_node(Node::Ellipse(green_circle)); circle_ids.push(green_circle_id); // Red circle (bottom left) @@ -175,7 +175,7 @@ async fn demo_blendmode() -> Scene { red_circle.set_fill(Paint::from(CGColor(255, 0, 0, 255))); red_circle.blend_mode = LayerBlendMode::default(); let red_circle_id = red_circle.id.clone(); - repository.insert(Node::Ellipse(red_circle)); + graph.insert_node(Node::Ellipse(red_circle)); circle_ids.push(red_circle_id); // Blue circle (bottom right) @@ -190,13 +190,13 @@ async fn demo_blendmode() -> Scene { blue_circle.set_fill(Paint::from(CGColor(0, 0, 255, 255))); blue_circle.blend_mode = LayerBlendMode::default(); let blue_circle_id = blue_circle.id.clone(); - repository.insert(Node::Ellipse(blue_circle)); + graph.insert_node(Node::Ellipse(blue_circle)); circle_ids.push(blue_circle_id); // Set up the circle group - circle_group.children = circle_ids; let circle_group_id = circle_group.id.clone(); - repository.insert(Node::Group(circle_group)); + graph.insert_node(Node::Group(circle_group)); + graph.insert(Parent::NodeId(circle_group_id.clone()), circle_ids); // Create a text label for the blend mode let mut label = nf.create_text_span_node(); @@ -209,7 +209,7 @@ async fn demo_blendmode() -> Scene { label.text_align_vertical = TextAlignVertical::Top; label.fills = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); let label_id = label.id.clone(); - repository.insert(Node::TextSpan(label)); + graph.insert_node(Node::TextSpan(label)); // Add all elements for this blend mode all_blendmode_ids.push(background_id); @@ -219,16 +219,15 @@ async fn demo_blendmode() -> Scene { } // Set up the root container - root_container_node.children = all_blendmode_ids; let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), all_blendmode_ids); Scene { - id: "scene".to_string(), name: "Blend Mode Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(240, 240, 240, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_booleans.rs b/crates/grida-canvas/examples/grida_booleans.rs index 3d67549373..c7046c5b5e 100644 --- a/crates/grida-canvas/examples/grida_booleans.rs +++ b/crates/grida-canvas/examples/grida_booleans.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_booleans() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Create a root container node let mut root_container_node = nf.create_container_node(); @@ -65,7 +65,6 @@ async fn demo_booleans() -> Scene { transform: Some(AffineTransform::new(start_x + spacing * 2.0, y_offset, 0.0)), op: BooleanPathOperation::Union, corner_radius: None, - children: vec![rect.id.clone(), circle.id.clone()], fills: Paints::new([Paint::from(CGColor(100, 100, 200, 255))]), strokes: Paints::new([Paint::from(CGColor(0, 0, 0, 255))]), stroke_width: 2.0, @@ -74,16 +73,24 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - all_shape_ids.push(rect.id.clone()); - all_shape_ids.push(circle.id.clone()); - all_shape_ids.push(text.id.clone()); - all_shape_ids.push(bool_node.id.clone()); + let rect_id = rect.id.clone(); + let circle_id = circle.id.clone(); + let text_id = text.id.clone(); + let bool_id = bool_node.id.clone(); + + all_shape_ids.push(rect_id.clone()); + all_shape_ids.push(circle_id.clone()); + all_shape_ids.push(text_id); + all_shape_ids.push(bool_id.clone()); // Insert all nodes - repository.insert(Node::Rectangle(rect)); - repository.insert(Node::Ellipse(circle)); - repository.insert(Node::TextSpan(text)); - repository.insert(Node::BooleanOperation(bool_node)); + graph.insert_node(Node::Rectangle(rect)); + graph.insert_node(Node::Ellipse(circle)); + graph.insert_node(Node::TextSpan(text)); + graph.insert_node(Node::BooleanOperation(bool_node)); + + // Set up boolean operation hierarchy + graph.insert(Parent::NodeId(bool_id), vec![rect_id, circle_id]); } // Example 2: Two Circles Intersection @@ -128,7 +135,6 @@ async fn demo_booleans() -> Scene { effects: LayerEffects::default(), transform: Some(AffineTransform::new(start_x + spacing * 2.0, y_offset, 0.0)), op: BooleanPathOperation::Intersection, - children: vec![circle1.id.clone(), circle2.id.clone()], corner_radius: None, fills: Paints::new([Paint::from(CGColor(100, 100, 200, 255))]), strokes: Paints::new([Paint::from(CGColor(0, 0, 0, 255))]), @@ -138,16 +144,24 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - all_shape_ids.push(circle1.id.clone()); - all_shape_ids.push(circle2.id.clone()); - all_shape_ids.push(text.id.clone()); - all_shape_ids.push(bool_node.id.clone()); + let circle1_id = circle1.id.clone(); + let circle2_id = circle2.id.clone(); + let text_id = text.id.clone(); + let bool_id = bool_node.id.clone(); + + all_shape_ids.push(circle1_id.clone()); + all_shape_ids.push(circle2_id.clone()); + all_shape_ids.push(text_id); + all_shape_ids.push(bool_id.clone()); // Insert all nodes - repository.insert(Node::Ellipse(circle1)); - repository.insert(Node::Ellipse(circle2)); - repository.insert(Node::TextSpan(text)); - repository.insert(Node::BooleanOperation(bool_node)); + graph.insert_node(Node::Ellipse(circle1)); + graph.insert_node(Node::Ellipse(circle2)); + graph.insert_node(Node::TextSpan(text)); + graph.insert_node(Node::BooleanOperation(bool_node)); + + // Set up boolean operation hierarchy + graph.insert(Parent::NodeId(bool_id), vec![circle1_id, circle2_id]); } // Example 3: Star and Rectangle Difference @@ -193,7 +207,6 @@ async fn demo_booleans() -> Scene { transform: Some(AffineTransform::new(start_x + spacing * 2.0, y_offset, 0.0)), op: BooleanPathOperation::Difference, corner_radius: None, - children: vec![star.id.clone(), rect.id.clone()], fills: Paints::new([Paint::from(CGColor(100, 100, 200, 255))]), strokes: Paints::new([Paint::from(CGColor(0, 0, 0, 255))]), stroke_width: 2.0, @@ -202,19 +215,27 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - all_shape_ids.push(star.id.clone()); - all_shape_ids.push(rect.id.clone()); - all_shape_ids.push(text.id.clone()); + let star_id = star.id.clone(); + let rect_id = rect.id.clone(); + let text_id = text.id.clone(); + let bool_id = bool_node.id.clone(); + + all_shape_ids.push(star_id.clone()); + all_shape_ids.push(rect_id.clone()); + all_shape_ids.push(text_id.clone()); all_shape_ids.push(bool_node.id.clone()); // Insert all nodes - repository.insert(Node::RegularStarPolygon(star)); - repository.insert(Node::Rectangle(rect)); - repository.insert(Node::TextSpan(text)); - repository.insert(Node::BooleanOperation(bool_node)); + graph.insert_node(Node::RegularStarPolygon(star)); + graph.insert_node(Node::Rectangle(rect)); + graph.insert_node(Node::TextSpan(text)); + graph.insert_node(Node::BooleanOperation(bool_node)); + + // Set up boolean operation hierarchy + graph.insert(Parent::NodeId(bool_id), vec![star_id, rect_id]); } - // Example 4: Two Squares XOR + // Example 4): Two Squares XOR { let y_offset = 900.0; // Increased from 700.0 @@ -257,7 +278,6 @@ async fn demo_booleans() -> Scene { transform: Some(AffineTransform::new(start_x + spacing * 2.0, y_offset, 0.0)), op: BooleanPathOperation::Xor, corner_radius: None, - children: vec![square1.id.clone(), square2.id.clone()], fills: Paints::new([Paint::from(CGColor(100, 100, 200, 255))]), strokes: Paints::new([Paint::from(CGColor(0, 0, 0, 255))]), stroke_width: 2.0, @@ -266,29 +286,36 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - all_shape_ids.push(square1.id.clone()); - all_shape_ids.push(square2.id.clone()); + let square1_id = square1.id.clone(); + let square2_id = square2.id.clone(); + let text_id = text.id.clone(); + let bool_id = bool_node.id.clone(); + + all_shape_ids.push(square1_id.clone()); + all_shape_ids.push(square2_id.clone()); all_shape_ids.push(text.id.clone()); all_shape_ids.push(bool_node.id.clone()); // Insert all nodes - repository.insert(Node::Rectangle(square1)); - repository.insert(Node::Rectangle(square2)); - repository.insert(Node::TextSpan(text)); - repository.insert(Node::BooleanOperation(bool_node)); + graph.insert_node(Node::Rectangle(square1)); + graph.insert_node(Node::Rectangle(square2)); + graph.insert_node(Node::TextSpan(text)); + graph.insert_node(Node::BooleanOperation(bool_node)); + + // Set up boolean operation hierarchy + graph.insert(Parent::NodeId(bool_id), vec![square1_id, square2_id]); } // Set up the root container - root_container_node.children.extend(all_shape_ids); let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), all_shape_ids); Scene { - id: "scene".to_string(), name: "Boolean Operations Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_container.rs b/crates/grida-canvas/examples/grida_container.rs index afeed3cfc4..3a27106076 100644 --- a/crates/grida-canvas/examples/grida_container.rs +++ b/crates/grida-canvas/examples/grida_container.rs @@ -1,13 +1,12 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_clip() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); // Create a single container with solid fill let mut container = nf.create_container_node(); @@ -42,22 +41,15 @@ async fn demo_clip() -> Scene { ellipse.strokes = Paints::new([Paint::from(CGColor(50, 150, 50, 255))]); ellipse.stroke_width = 2.0; - // Add nodes to repository and collect their IDs - let ellipse_id = ellipse.id.clone(); - repository.insert(Node::Ellipse(ellipse)); - - // Add ellipse as child of container - container.children = vec![ellipse_id]; - - let container_id = container.id.clone(); - repository.insert(Node::Container(container)); + // Build scene graph + let mut graph = SceneGraph::new(); + let container_id = graph.append_child(Node::Container(container), Parent::Root); + graph.append_child(Node::Ellipse(ellipse), Parent::NodeId(container_id)); Scene { - id: "scene".to_string(), name: "Simple Container Demo".to_string(), - children: vec![container_id], - nodes: repository, background_color: None, + graph, } } diff --git a/crates/grida-canvas/examples/grida_effects.rs b/crates/grida-canvas/examples/grida_effects.rs index d9236a3b1d..5e66b18a79 100644 --- a/crates/grida-canvas/examples/grida_effects.rs +++ b/crates/grida-canvas/examples/grida_effects.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_effects() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Create a root container node let mut root_container_node = nf.create_container_node(); @@ -43,7 +43,7 @@ async fn demo_effects() -> Scene { color: CGColor(0, 0, 0, 128), })]); all_effect_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } else { // Last two shapes as regular polygons let mut polygon = nf.create_regular_polygon_node(); @@ -63,7 +63,7 @@ async fn demo_effects() -> Scene { color: CGColor(0, 0, 0, 128), })]); all_effect_ids.push(polygon.id.clone()); - repository.insert(Node::RegularPolygon(polygon)); + graph.insert_node(Node::RegularPolygon(polygon)); } } @@ -85,7 +85,7 @@ async fn demo_effects() -> Scene { radius: 4.0 * (i + 1) as f32, })]); all_effect_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } else { // Last two shapes as regular polygons let mut polygon = nf.create_regular_polygon_node(); @@ -102,7 +102,7 @@ async fn demo_effects() -> Scene { radius: 4.0 * (i + 1) as f32, })]); all_effect_ids.push(polygon.id.clone()); - repository.insert(Node::RegularPolygon(polygon)); + graph.insert_node(Node::RegularPolygon(polygon)); } } @@ -136,7 +136,7 @@ async fn demo_effects() -> Scene { active: true, })); let vivid_gradient_rect_id = vivid_gradient_rect.id.clone(); - repository.insert(Node::Rectangle(vivid_gradient_rect)); + graph.insert_node(Node::Rectangle(vivid_gradient_rect)); for i in 0..6 { if i < 3 { @@ -155,7 +155,7 @@ async fn demo_effects() -> Scene { radius: 8.0 * (i + 1) as f32, })]); all_effect_ids.push(blur_rect.id.clone()); - repository.insert(Node::Rectangle(blur_rect)); + graph.insert_node(Node::Rectangle(blur_rect)); } else { // Last two shapes as regular polygons let mut blur_polygon = nf.create_regular_polygon_node(); @@ -172,7 +172,7 @@ async fn demo_effects() -> Scene { radius: 8.0 * (i + 1) as f32, })]); all_effect_ids.push(blur_polygon.id.clone()); - repository.insert(Node::RegularPolygon(blur_polygon)); + graph.insert_node(Node::RegularPolygon(blur_polygon)); } } @@ -197,7 +197,7 @@ async fn demo_effects() -> Scene { color: CGColor(0, 0, 0, 100), })]); all_effect_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } else { // Last three shapes as regular polygons let mut polygon = nf.create_regular_polygon_node(); @@ -217,7 +217,7 @@ async fn demo_effects() -> Scene { color: CGColor(0, 0, 0, 100), })]); all_effect_ids.push(polygon.id.clone()); - repository.insert(Node::RegularPolygon(polygon)); + graph.insert_node(Node::RegularPolygon(polygon)); } } @@ -285,7 +285,7 @@ async fn demo_effects() -> Scene { rect.effects = LayerEffects::from_array(effects); all_effect_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } else { // Last three shapes as regular polygons with multiple effects let mut polygon = nf.create_regular_polygon_node(); @@ -342,22 +342,23 @@ async fn demo_effects() -> Scene { polygon.effects = LayerEffects::from_array(effects); all_effect_ids.push(polygon.id.clone()); - repository.insert(Node::RegularPolygon(polygon)); + graph.insert_node(Node::RegularPolygon(polygon)); } } // Set up the root container - root_container_node.children = vec![vivid_gradient_rect_id]; - root_container_node.children.extend(all_effect_ids); let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + + let mut root_children = vec![vivid_gradient_rect_id]; + root_children.extend(all_effect_ids); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), root_children); Scene { - id: "scene".to_string(), name: "Effects Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_fills.rs b/crates/grida-canvas/examples/grida_fills.rs index 3da39a7987..c08864fd2b 100644 --- a/crates/grida-canvas/examples/grida_fills.rs +++ b/crates/grida-canvas/examples/grida_fills.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_fills() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Root container let mut root = nf.create_container_node(); @@ -38,7 +38,7 @@ async fn demo_fills() -> Scene { ]); multi_solid_rect.stroke_width = 3.0; ids.push(multi_solid_rect.id.clone()); - repository.insert(Node::Rectangle(multi_solid_rect)); + graph.insert_node(Node::Rectangle(multi_solid_rect)); // 2. Rectangle with solid + linear gradient fills let mut solid_gradient_rect = nf.create_rectangle_node(); @@ -70,7 +70,7 @@ async fn demo_fills() -> Scene { ]); solid_gradient_rect.stroke_width = 3.0; ids.push(solid_gradient_rect.id.clone()); - repository.insert(Node::Rectangle(solid_gradient_rect)); + graph.insert_node(Node::Rectangle(solid_gradient_rect)); // 3. Rectangle with solid + radial gradient fills let mut solid_radial_rect = nf.create_rectangle_node(); @@ -106,7 +106,7 @@ async fn demo_fills() -> Scene { ]); solid_radial_rect.stroke_width = 3.0; ids.push(solid_radial_rect.id.clone()); - repository.insert(Node::Rectangle(solid_radial_rect)); + graph.insert_node(Node::Rectangle(solid_radial_rect)); // 4. Rectangle with linear + radial gradient fills let mut gradient_gradient_rect = nf.create_rectangle_node(); @@ -155,7 +155,7 @@ async fn demo_fills() -> Scene { ]); gradient_gradient_rect.stroke_width = 3.0; ids.push(gradient_gradient_rect.id.clone()); - repository.insert(Node::Rectangle(gradient_gradient_rect)); + graph.insert_node(Node::Rectangle(gradient_gradient_rect)); // 5. Ellipse with multiple radial gradients (concentric circles effect) let mut multi_radial_ellipse = nf.create_ellipse_node(); @@ -217,7 +217,7 @@ async fn demo_fills() -> Scene { ]); multi_radial_ellipse.stroke_width = 3.0; ids.push(multi_radial_ellipse.id.clone()); - repository.insert(Node::Ellipse(multi_radial_ellipse)); + graph.insert_node(Node::Ellipse(multi_radial_ellipse)); // 6. Polygon with solid + linear gradient + radial gradient let pentagon_points = (0..5) @@ -273,7 +273,7 @@ async fn demo_fills() -> Scene { ]); complex_fill_polygon.stroke_width = 4.0; ids.push(complex_fill_polygon.id.clone()); - repository.insert(Node::Polygon(complex_fill_polygon)); + graph.insert_node(Node::Polygon(complex_fill_polygon)); // 7. Regular polygon with multiple linear gradients at different angles let mut multi_linear_polygon = nf.create_regular_polygon_node(); @@ -337,7 +337,7 @@ async fn demo_fills() -> Scene { ]); multi_linear_polygon.stroke_width = 3.0; ids.push(multi_linear_polygon.id.clone()); - repository.insert(Node::RegularPolygon(multi_linear_polygon)); + graph.insert_node(Node::RegularPolygon(multi_linear_polygon)); // 8. Container with multiple fills (demonstrating container fill capability) let mut multi_fill_container = nf.create_container_node(); @@ -373,18 +373,18 @@ async fn demo_fills() -> Scene { ]); multi_fill_container.stroke_width = 3.0; ids.push(multi_fill_container.id.clone()); - repository.insert(Node::Container(multi_fill_container)); + graph.insert_node(Node::Container(multi_fill_container)); // Add all nodes to root - root.children = ids.clone(); let root_id = root.id.clone(); - repository.insert(Node::Container(root)); + graph.insert(Parent::NodeId(root_id.clone()), ids.clone()); + graph.insert_node(Node::Container(root)); + + graph.insert(Parent::Root, vec![root_id.clone()]); Scene { - id: "scene".to_string(), name: "Fills Demo".to_string(), - children: vec![root_id], - nodes: repository, + graph, background_color: Some(CGColor(240, 240, 240, 255)), } } diff --git a/crates/grida-canvas/examples/grida_gradients.rs b/crates/grida-canvas/examples/grida_gradients.rs index 90cb93e0d8..3457f97cc4 100644 --- a/crates/grida-canvas/examples/grida_gradients.rs +++ b/crates/grida-canvas/examples/grida_gradients.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_gradients() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // root container let mut root = nf.create_container_node(); @@ -50,7 +50,7 @@ async fn demo_gradients() -> Scene { active: true, })); ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Radial gradient fills @@ -83,7 +83,7 @@ async fn demo_gradients() -> Scene { active: true, })); ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Linear gradient strokes @@ -116,7 +116,7 @@ async fn demo_gradients() -> Scene { })]); rect.stroke_width = 8.0; ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Radial gradient strokes @@ -151,19 +151,19 @@ async fn demo_gradients() -> Scene { })]); rect.stroke_width = 8.0; ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } - - root.children = ids.clone(); let root_id = root.id.clone(); - repository.insert(Node::Container(root)); + + graph.insert(Parent::NodeId(root_id.clone()), ids.clone()); + graph.insert_node(Node::Container(root)); + + graph.insert(Parent::Root, vec![root_id.clone()]); Scene { - id: "scene".to_string(), name: "Gradients Demo".to_string(), - children: vec![root_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_image.rs b/crates/grida-canvas/examples/grida_image.rs index 61e1763783..9dc52390e0 100644 --- a/crates/grida-canvas/examples/grida_image.rs +++ b/crates/grida-canvas/examples/grida_image.rs @@ -1,6 +1,6 @@ use cg::cg::{types::*, *}; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::resources::{hash_bytes, load_image}; use cg::window; @@ -46,21 +46,21 @@ async fn demo_image() -> (Scene, Vec) { rect1.strokes = Paints::new([Paint::from(CGColor(255, 0, 0, 255))]); rect1.stroke_width = 2.0; - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); let rect1_id = rect1.id.clone(); - repository.insert(Node::Rectangle(rect1)); - - root.children = vec![rect1_id]; + graph.insert_node(Node::Rectangle(rect1)); let root_id = root.id.clone(); - repository.insert(Node::Container(root)); + + graph.insert(Parent::NodeId(root_id.clone()), vec![rect1_id]); + graph.insert_node(Node::Container(root)); + + graph.insert(Parent::Root, vec![root_id.clone()]); let scene = Scene { - id: "scene".to_string(), name: "Images Demo".to_string(), - children: vec![root_id], - nodes: repository, + graph, background_color: Some(CGColor(250, 250, 250, 255)), }; diff --git a/crates/grida-canvas/examples/grida_images.rs b/crates/grida-canvas/examples/grida_images.rs index 43927106f8..ac9c96285e 100644 --- a/crates/grida-canvas/examples/grida_images.rs +++ b/crates/grida-canvas/examples/grida_images.rs @@ -1,6 +1,6 @@ use cg::cg::{types::*, *}; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::resources::{hash_bytes, load_image}; use cg::window; @@ -234,7 +234,7 @@ async fn demo_images() -> (Scene, Vec) { rect9.strokes = Paints::new([Paint::from(CGColor(128, 0, 128, 255))]); rect9.stroke_width = 2.0; - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); let rect1_id = rect1.id.clone(); let rect2_id = rect2.id.clone(); @@ -246,28 +246,32 @@ async fn demo_images() -> (Scene, Vec) { let rect8_id = rect8.id.clone(); let rect9_id = rect9.id.clone(); - repository.insert(Node::Rectangle(rect1)); - repository.insert(Node::Rectangle(rect2)); - repository.insert(Node::Rectangle(rect3)); - repository.insert(Node::Rectangle(rect4)); - repository.insert(Node::Rectangle(rect5)); - repository.insert(Node::Rectangle(rect6)); - repository.insert(Node::Rectangle(rect7)); - repository.insert(Node::Rectangle(rect8)); - repository.insert(Node::Rectangle(rect9)); - - root.children = vec![ - rect1_id, rect2_id, rect3_id, rect4_id, rect5_id, rect6_id, rect7_id, rect8_id, rect9_id, - ]; + graph.insert_node(Node::Rectangle(rect1)); + graph.insert_node(Node::Rectangle(rect2)); + graph.insert_node(Node::Rectangle(rect3)); + graph.insert_node(Node::Rectangle(rect4)); + graph.insert_node(Node::Rectangle(rect5)); + graph.insert_node(Node::Rectangle(rect6)); + graph.insert_node(Node::Rectangle(rect7)); + graph.insert_node(Node::Rectangle(rect8)); + graph.insert_node(Node::Rectangle(rect9)); let root_id = root.id.clone(); - repository.insert(Node::Container(root)); + + graph.insert( + Parent::NodeId(root_id.clone()), + vec![ + rect1_id, rect2_id, rect3_id, rect4_id, rect5_id, rect6_id, rect7_id, rect8_id, + rect9_id, + ], + ); + graph.insert_node(Node::Container(root)); + + graph.insert(Parent::Root, vec![root_id.clone()]); let scene = Scene { - id: "scene".to_string(), name: "Images Demo".to_string(), - children: vec![root_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, }; (scene, bytes) diff --git a/crates/grida-canvas/examples/grida_lines.rs b/crates/grida-canvas/examples/grida_lines.rs index cde2a3b566..8667b95e99 100644 --- a/crates/grida-canvas/examples/grida_lines.rs +++ b/crates/grida-canvas/examples/grida_lines.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; @@ -15,7 +15,7 @@ async fn demo_lines() -> Scene { height: 600.0, }; - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut ids = Vec::new(); let start_x = 100.0; @@ -34,7 +34,7 @@ async fn demo_lines() -> Scene { line_basic.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); line_basic.stroke_width = 2.0; ids.push(line_basic.id.clone()); - repo.insert(Node::Line(line_basic)); + graph.insert_node(Node::Line(line_basic)); // Outside aligned thick line let mut line_outside = nf.create_line_node(); @@ -48,7 +48,7 @@ async fn demo_lines() -> Scene { line_outside.stroke_width = 8.0; line_outside._data_stroke_align = StrokeAlign::Outside; ids.push(line_outside.id.clone()); - repo.insert(Node::Line(line_outside)); + graph.insert_node(Node::Line(line_outside)); // Dashed line let mut line_dashed = nf.create_line_node(); @@ -62,7 +62,7 @@ async fn demo_lines() -> Scene { line_dashed.stroke_width = 4.0; line_dashed.stroke_dash_array = Some(vec![10.0, 5.0]); ids.push(line_dashed.id.clone()); - repo.insert(Node::Line(line_dashed)); + graph.insert_node(Node::Line(line_dashed)); // Gradient stroke line let mut line_gradient = nf.create_line_node(); @@ -90,7 +90,7 @@ async fn demo_lines() -> Scene { })]); line_gradient.stroke_width = 6.0; ids.push(line_gradient.id.clone()); - repo.insert(Node::Line(line_gradient)); + graph.insert_node(Node::Line(line_gradient)); // Rotated diagonal line let mut line_rotated = nf.create_line_node(); @@ -104,19 +104,18 @@ async fn demo_lines() -> Scene { line_rotated.strokes = Paints::new([Paint::from(CGColor(0, 128, 128, 255))]); line_rotated.stroke_width = 4.0; ids.push(line_rotated.id.clone()); - repo.insert(Node::Line(line_rotated)); + graph.insert_node(Node::Line(line_rotated)); // Set up root container - root.children = ids; let root_id = root.id.clone(); - repo.insert(Node::Container(root)); + graph.insert_node(Node::Container(root)); + graph.insert(Parent::Root, vec![root_id.clone()]); + graph.insert(Parent::NodeId(root_id), ids); Scene { - id: "scene".to_string(), name: "LineNode Demo".to_string(), - children: vec![root_id], - nodes: repo, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_mask.rs b/crates/grida-canvas/examples/grida_mask.rs index 464511fac8..9f69c906bb 100644 --- a/crates/grida-canvas/examples/grida_mask.rs +++ b/crates/grida-canvas/examples/grida_mask.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; // import style per repo convention [[memory:8559399]] use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; fn build_demo_content( nf: &NodeFactory, - repository: &mut NodeRepository, + graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), ) -> Vec { @@ -25,7 +25,7 @@ fn build_demo_content( a.corner_radius = RectangularCornerRadius::circular(12.0); a.set_fill(CGColor(255, 99, 71, 255).into()); let a_id = a.id.clone(); - repository.insert(Node::Rectangle(a)); + graph.insert_node(Node::Rectangle(a)); // Content B let mut b = nf.create_rectangle_node(); @@ -38,7 +38,7 @@ fn build_demo_content( b.corner_radius = RectangularCornerRadius::circular(12.0); b.set_fill(CGColor(65, 105, 225, 255).into()); let b_id = b.id.clone(); - repository.insert(Node::Rectangle(b)); + graph.insert_node(Node::Rectangle(b)); // Diagonal band (thin rotated rectangle) let mut band = nf.create_rectangle_node(); @@ -55,14 +55,14 @@ fn build_demo_content( band.corner_radius = RectangularCornerRadius::circular(8.0); band.set_fill(CGColor(60, 179, 113, 200).into()); let band_id = band.id.clone(); - repository.insert(Node::Rectangle(band)); + graph.insert_node(Node::Rectangle(band)); vec![a_id, b_id, band_id] } fn build_geometry_mask( nf: &NodeFactory, - repository: &mut NodeRepository, + graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), ) -> NodeId { @@ -79,13 +79,13 @@ fn build_geometry_mask( mask.set_fill(CGColor(0, 0, 0, 255).into()); mask.mask = Some(LayerMaskType::Geometry); let id = mask.id.clone(); - repository.insert(Node::Ellipse(mask)); + graph.insert_node(Node::Ellipse(mask)); id } fn build_alpha_mask( nf: &NodeFactory, - repository: &mut NodeRepository, + graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), ) -> NodeId { @@ -117,13 +117,13 @@ fn build_alpha_mask( })]); mask.mask = Some(LayerMaskType::Image(ImageMaskType::Alpha)); let id = mask.id.clone(); - repository.insert(Node::Rectangle(mask)); + graph.insert_node(Node::Rectangle(mask)); id } fn build_luminance_mask( nf: &NodeFactory, - repository: &mut NodeRepository, + graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), ) -> NodeId { @@ -155,13 +155,13 @@ fn build_luminance_mask( })]); mask.mask = Some(LayerMaskType::Image(ImageMaskType::Luminance)); let id = mask.id.clone(); - repository.insert(Node::Rectangle(mask)); + graph.insert_node(Node::Rectangle(mask)); id } async fn demo_mask_panels() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Root container let mut root = nf.create_container_node(); @@ -204,44 +204,42 @@ async fn demo_mask_panels() -> Scene { let mut children: Vec = Vec::new(); // Content first - let mut content_ids = - build_demo_content(&nf, &mut repository, (0.0, 0.0), (panel_w, panel_h)); + let mut content_ids = build_demo_content(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)); children.append(&mut content_ids); // Mask last (topmost) — flat list model: mask consumes preceding siblings if let Some(k) = kind { let mask_id = match k { LayerMaskType::Geometry => { - build_geometry_mask(&nf, &mut repository, (0.0, 0.0), (panel_w, panel_h)) + build_geometry_mask(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)) } LayerMaskType::Image(ImageMaskType::Alpha) => { - build_alpha_mask(&nf, &mut repository, (0.0, 0.0), (panel_w, panel_h)) + build_alpha_mask(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)) } LayerMaskType::Image(ImageMaskType::Luminance) => { - build_luminance_mask(&nf, &mut repository, (0.0, 0.0), (panel_w, panel_h)) + build_luminance_mask(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)) } }; children.push(mask_id); } - panel.children = children; let panel_id = panel.id.clone(); - repository.insert(Node::Container(panel)); + graph.insert_node(Node::Container(panel)); + graph.insert(Parent::NodeId(panel_id.clone()), children); root_children.push(panel_id); left += panel_w + margin; } - root.children = root_children; let root_id = root.id.clone(); - repository.insert(Node::Container(root)); + graph.insert_node(Node::Container(root)); + graph.insert(Parent::Root, vec![root_id.clone()]); + graph.insert(Parent::NodeId(root_id), root_children); Scene { - id: "scene".to_string(), name: "Mask Modes Demo".to_string(), - children: vec![root_id], - nodes: repository, background_color: None, + graph, } } diff --git a/crates/grida-canvas/examples/grida_nested.rs b/crates/grida-canvas/examples/grida_nested.rs index f931cb29c7..3771bb6513 100644 --- a/crates/grida-canvas/examples/grida_nested.rs +++ b/crates/grida-canvas/examples/grida_nested.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_nested() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); let n = 5; // number of nesting levels // Create innermost rectangle @@ -19,7 +19,7 @@ async fn demo_nested() -> Scene { }; rect.set_fill(Paint::from(CGColor(255, 0, 0, 255))); let mut current_id = rect.id.clone(); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Create nested structure for i in 0..n { @@ -42,11 +42,15 @@ async fn demo_nested() -> Scene { }; group_rect.set_fill(Paint::from(CGColor(0, 255, 0, 255))); let group_rect_id = group_rect.id.clone(); - repository.insert(Node::Rectangle(group_rect)); + graph.insert_node(Node::Rectangle(group_rect)); - group.children = vec![current_id, group_rect_id]; - current_id = group.id.clone(); - repository.insert(Node::Group(group)); + let group_id = group.id.clone(); + graph.insert_node(Node::Group(group)); + graph.insert( + Parent::NodeId(group_id.clone()), + vec![current_id, group_rect_id], + ); + current_id = group_id; } else { // Create container with scale transform let mut container = nf.create_container_node(); @@ -66,20 +70,24 @@ async fn demo_nested() -> Scene { }; container_rect.set_fill(Paint::from(CGColor(0, 0, 255, 255))); let container_rect_id = container_rect.id.clone(); - repository.insert(Node::Rectangle(container_rect)); + graph.insert_node(Node::Rectangle(container_rect)); - container.children = vec![current_id, container_rect_id]; - current_id = container.id.clone(); - repository.insert(Node::Container(container)); + let container_id = container.id.clone(); + graph.insert_node(Node::Container(container)); + graph.insert( + Parent::NodeId(container_id.clone()), + vec![current_id, container_rect_id], + ); + current_id = container_id; } } + graph.insert(Parent::Root, vec![current_id]); + Scene { - id: "nested".to_string(), name: "Nested Demo".to_string(), - children: vec![current_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_paint.rs b/crates/grida-canvas/examples/grida_paint.rs index 8ad0d02d4d..485f592cff 100644 --- a/crates/grida-canvas/examples/grida_paint.rs +++ b/crates/grida-canvas/examples/grida_paint.rs @@ -1,13 +1,13 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; async fn demo_paints() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Create a root container node let mut root_container_node = nf.create_container_node(); @@ -40,7 +40,7 @@ async fn demo_paints() -> Scene { 255, ))); all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Linear Gradient Row @@ -75,7 +75,7 @@ async fn demo_paints() -> Scene { active: true, })); all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Radial Gradient Row @@ -111,7 +111,7 @@ async fn demo_paints() -> Scene { active: true, })); all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke Solid Colors Row @@ -138,7 +138,7 @@ async fn demo_paints() -> Scene { rect.stroke_width = 4.0; // Consistent stroke width all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke Linear Gradient Row @@ -178,7 +178,7 @@ async fn demo_paints() -> Scene { rect.stroke_width = 4.0; // Consistent stroke width all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke Radial Gradient Row @@ -219,20 +219,19 @@ async fn demo_paints() -> Scene { rect.stroke_width = 4.0; // Consistent stroke width all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Set up the root container - root_container_node.children.extend(all_shape_ids); let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), all_shape_ids); Scene { - id: "scene".to_string(), name: "Paints Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_shapes.rs b/crates/grida-canvas/examples/grida_shapes.rs index 92c2e154a3..2274eadbb7 100644 --- a/crates/grida-canvas/examples/grida_shapes.rs +++ b/crates/grida-canvas/examples/grida_shapes.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; @@ -16,7 +16,7 @@ async fn demo_shapes() -> Scene { height: 1200.0, }; - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut all_shape_ids = Vec::new(); let spacing = 100.0; @@ -41,7 +41,7 @@ async fn demo_shapes() -> Scene { 255, ))); // Fading gray all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Ellipse Row - demonstrating width/height ratio variations @@ -60,7 +60,7 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray all_shape_ids.push(ellipse.id.clone()); - repository.insert(Node::Ellipse(ellipse)); + graph.insert_node(Node::Ellipse(ellipse)); } // Polygon Row - demonstrating point count variations @@ -89,7 +89,7 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray all_shape_ids.push(polygon.id.clone()); - repository.insert(Node::Polygon(polygon)); + graph.insert_node(Node::Polygon(polygon)); } // Regular Polygon Row - demonstrating point count variations @@ -110,7 +110,7 @@ async fn demo_shapes() -> Scene { ))]); // Fading gray regular_polygon.corner_radius = 8.0; all_shape_ids.push(regular_polygon.id.clone()); - repository.insert(Node::RegularPolygon(regular_polygon)); + graph.insert_node(Node::RegularPolygon(regular_polygon)); } // Path Row - demonstrating different path patterns @@ -138,7 +138,7 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray all_shape_ids.push(path.id.clone()); - repository.insert(Node::SVGPath(path)); + graph.insert_node(Node::SVGPath(path)); } // Star Polygon Row - demonstrating different point counts and inner radius variations @@ -160,7 +160,7 @@ async fn demo_shapes() -> Scene { ))]); // Fading gray star.corner_radius = 8.0; all_shape_ids.push(star.id.clone()); - repository.insert(Node::RegularStarPolygon(star)); + graph.insert_node(Node::RegularStarPolygon(star)); } // Arc Row - demonstrating different angle variations @@ -183,19 +183,18 @@ async fn demo_shapes() -> Scene { ))]); // Fading gray arc.corner_radius = Some(8.0); all_shape_ids.push(arc.id.clone()); - repository.insert(Node::Ellipse(arc)); + graph.insert_node(Node::Ellipse(arc)); } // Set up the root container - root_container_node.children.extend(all_shape_ids); let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), all_shape_ids); Scene { - id: "scene".to_string(), name: "Shapes Demo".to_string(), - children: vec![root_container_id], - nodes: repository, + graph, background_color: Some(CGColor(250, 250, 250, 255)), } } diff --git a/crates/grida-canvas/examples/grida_shapes_ellipse.rs b/crates/grida-canvas/examples/grida_shapes_ellipse.rs index 50e1e38db7..430b1da83f 100644 --- a/crates/grida-canvas/examples/grida_shapes_ellipse.rs +++ b/crates/grida-canvas/examples/grida_shapes_ellipse.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; @@ -16,7 +16,7 @@ async fn demo_ellipses() -> Scene { height: 800.0, }; - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut all_ellipse_ids = Vec::new(); let spacing = 120.0; @@ -40,7 +40,7 @@ async fn demo_ellipses() -> Scene { 255, ))]); // Blue gradient all_ellipse_ids.push(ellipse.id.clone()); - repository.insert(Node::Ellipse(ellipse)); + graph.insert_node(Node::Ellipse(ellipse)); } // Row 2: Ellipses with different inner radius (rings) @@ -60,7 +60,7 @@ async fn demo_ellipses() -> Scene { 255, ))]); // Orange gradient all_ellipse_ids.push(ring.id.clone()); - repository.insert(Node::Ellipse(ring)); + graph.insert_node(Node::Ellipse(ring)); } // Row 3: Arcs with different angles @@ -81,7 +81,7 @@ async fn demo_ellipses() -> Scene { 255, ))]); // Green gradient all_ellipse_ids.push(arc.id.clone()); - repository.insert(Node::Ellipse(arc)); + graph.insert_node(Node::Ellipse(arc)); } // Row 4: Arcs with inner radius (donut arcs) @@ -103,7 +103,7 @@ async fn demo_ellipses() -> Scene { 255, ))]); // Purple gradient all_ellipse_ids.push(donut_arc.id.clone()); - repository.insert(Node::Ellipse(donut_arc)); + graph.insert_node(Node::Ellipse(donut_arc)); } // Row 5: Ellipses with strokes @@ -124,19 +124,18 @@ async fn demo_ellipses() -> Scene { ))]); // Red gradient stroke stroke_ellipse.stroke_width = 3.0 + (i as f32 * 2.0); // 3 to 17 stroke weight all_ellipse_ids.push(stroke_ellipse.id.clone()); - repository.insert(Node::Ellipse(stroke_ellipse)); + graph.insert_node(Node::Ellipse(stroke_ellipse)); } // Set up the root container - root_container_node.children.extend(all_ellipse_ids); let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), all_ellipse_ids); Scene { - id: "scene".to_string(), name: "Ellipse Demo".to_string(), - children: vec![root_container_id], - nodes: repository, + graph, background_color: Some(CGColor(245, 245, 245, 255)), } } diff --git a/crates/grida-canvas/examples/grida_strokes.rs b/crates/grida-canvas/examples/grida_strokes.rs index fa0555c7f4..2cf07b6655 100644 --- a/crates/grida-canvas/examples/grida_strokes.rs +++ b/crates/grida-canvas/examples/grida_strokes.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window; use math2::transform::AffineTransform; @@ -16,7 +16,7 @@ async fn demo_strokes() -> Scene { height: 1200.0, }; - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut all_shape_ids = Vec::new(); let spacing = 120.0; @@ -51,7 +51,7 @@ async fn demo_strokes() -> Scene { }; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke Width Demo Row @@ -73,7 +73,7 @@ async fn demo_strokes() -> Scene { rect.stroke_align = StrokeAlign::Center; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke with Different Shapes Row @@ -91,7 +91,7 @@ async fn demo_strokes() -> Scene { rect.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); rect.stroke_width = 4.0; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Ellipse let mut ellipse = nf.create_ellipse_node(); @@ -105,7 +105,7 @@ async fn demo_strokes() -> Scene { ellipse.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); ellipse.stroke_width = 4.0; all_shape_ids.push(ellipse.id.clone()); - repository.insert(Node::Ellipse(ellipse)); + graph.insert_node(Node::Ellipse(ellipse)); // Regular Polygon (Hexagon) let mut polygon = nf.create_regular_polygon_node(); @@ -120,7 +120,7 @@ async fn demo_strokes() -> Scene { polygon.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); polygon.stroke_width = 4.0; all_shape_ids.push(polygon.id.clone()); - repository.insert(Node::RegularPolygon(polygon)); + graph.insert_node(Node::RegularPolygon(polygon)); // Star let mut star = nf.create_regular_star_polygon_node(); @@ -136,7 +136,7 @@ async fn demo_strokes() -> Scene { star.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); star.stroke_width = 4.0; all_shape_ids.push(star.id.clone()); - repository.insert(Node::RegularStarPolygon(star)); + graph.insert_node(Node::RegularStarPolygon(star)); } // Stroke with Effects Row @@ -176,7 +176,7 @@ async fn demo_strokes() -> Scene { }; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke Dash Array Demo Row @@ -207,7 +207,7 @@ async fn demo_strokes() -> Scene { }; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Stroke Paint Types Demo Row @@ -240,7 +240,7 @@ async fn demo_strokes() -> Scene { })]); rect.stroke_width = 8.0; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Radial Gradient Stroke let mut rect = nf.create_rectangle_node(); @@ -270,7 +270,7 @@ async fn demo_strokes() -> Scene { })]); rect.stroke_width = 8.0; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Conic Gradient Stroke let mut rect = nf.create_rectangle_node(); @@ -304,7 +304,7 @@ async fn demo_strokes() -> Scene { })]); rect.stroke_width = 8.0; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Multi-color Solid Stroke let mut rect = nf.create_rectangle_node(); @@ -320,7 +320,7 @@ async fn demo_strokes() -> Scene { rect.stroke_width = 8.0; rect.stroke_dash_array = Some(vec![20.0, 10.0, 5.0, 10.0]); // Complex dash pattern all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); } // Multiple Strokes Demo Row @@ -342,7 +342,7 @@ async fn demo_strokes() -> Scene { ]); rect.stroke_width = 12.0; // Thick stroke to show layering all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Rectangle with solid + gradient strokes let mut rect = nf.create_rectangle_node(); @@ -375,7 +375,7 @@ async fn demo_strokes() -> Scene { ]); rect.stroke_width = 10.0; all_shape_ids.push(rect.id.clone()); - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); // Ellipse with multiple gradient strokes let mut ellipse = nf.create_ellipse_node(); @@ -422,7 +422,7 @@ async fn demo_strokes() -> Scene { ]); ellipse.stroke_width = 12.0; all_shape_ids.push(ellipse.id.clone()); - repository.insert(Node::Ellipse(ellipse)); + graph.insert_node(Node::Ellipse(ellipse)); // Polygon with complex multi-stroke pattern let mut polygon = nf.create_regular_polygon_node(); @@ -474,19 +474,18 @@ async fn demo_strokes() -> Scene { polygon.stroke_width = 15.0; // Very thick to show all layers polygon.stroke_dash_array = Some(vec![8.0, 4.0]); // Dashed pattern all_shape_ids.push(polygon.id.clone()); - repository.insert(Node::RegularPolygon(polygon)); + graph.insert_node(Node::RegularPolygon(polygon)); } // Set up the root container - root_container_node.children.extend(all_shape_ids); let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert_node(Node::Container(root_container_node)); + graph.insert(Parent::Root, vec![root_container_id.clone()]); + graph.insert(Parent::NodeId(root_container_id), all_shape_ids); Scene { - id: "scene".to_string(), name: "Strokes Demo".to_string(), - children: vec![root_container_id], - nodes: repository, + graph, background_color: Some(CGColor(250, 250, 250, 255)), } } diff --git a/crates/grida-canvas/examples/grida_texts.rs b/crates/grida-canvas/examples/grida_texts.rs index 2610d5a871..0a03d9fec8 100644 --- a/crates/grida-canvas/examples/grida_texts.rs +++ b/crates/grida-canvas/examples/grida_texts.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::resources::{load_font, FontMessage}; use cg::window; @@ -112,7 +112,7 @@ async fn demo_texts() -> Scene { }; // Create a node repository and add all nodes - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Collect all the IDs let word_text_id = word_text_node.id.clone(); @@ -122,29 +122,32 @@ async fn demo_texts() -> Scene { let blurry_text_id = blurry_text_node.id.clone(); // Add all nodes to the repository - repository.insert(Node::TextSpan(word_text_node)); - repository.insert(Node::TextSpan(sentence_text_node)); - repository.insert(Node::TextSpan(paragraph_text_node)); - repository.insert(Node::TextSpan(second_paragraph_text_node)); - repository.insert(Node::TextSpan(blurry_text_node)); + graph.insert_node(Node::TextSpan(word_text_node)); + graph.insert_node(Node::TextSpan(sentence_text_node)); + graph.insert_node(Node::TextSpan(paragraph_text_node)); + graph.insert_node(Node::TextSpan(second_paragraph_text_node)); + graph.insert_node(Node::TextSpan(blurry_text_node)); // Set up the root container with all IDs - root_container_node.children = vec![ - word_text_id, - sentence_text_id, - paragraph_text_id, - second_paragraph_text_id, - blurry_text_id, - ]; let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert( + Parent::NodeId(root_container_id.clone()), + vec![ + word_text_id, + sentence_text_id, + paragraph_text_id, + second_paragraph_text_id, + blurry_text_id, + ], + ); + graph.insert_node(Node::Container(root_container_node)); + + graph.insert(Parent::Root, vec![root_container_id.clone()]); Scene { - id: "scene".to_string(), name: "Text Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_vector.rs b/crates/grida-canvas/examples/grida_vector.rs index 778e04045e..504e3eaca9 100644 --- a/crates/grida-canvas/examples/grida_vector.rs +++ b/crates/grida-canvas/examples/grida_vector.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::vectornetwork::*; use cg::window; @@ -8,7 +8,7 @@ use math2::transform::AffineTransform; async fn demo_vectors() -> Scene { let nf = NodeFactory::new(); - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Root container let mut root = nf.create_container_node(); @@ -52,7 +52,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_1_tri_open.id.clone()); - repository.insert(Node::Vector(vector_node_1_tri_open)); + graph.insert_node(Node::Vector(vector_node_1_tri_open)); } { @@ -84,7 +84,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_2_tri_closed.id.clone()); - repository.insert(Node::Vector(vector_node_2_tri_closed)); + graph.insert_node(Node::Vector(vector_node_2_tri_closed)); } // @@ -117,7 +117,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_3.id.clone()); - repository.insert(Node::Vector(vector_node_3)); + graph.insert_node(Node::Vector(vector_node_3)); } { @@ -149,7 +149,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_4.id.clone()); - repository.insert(Node::Vector(vector_node_4)); + graph.insert_node(Node::Vector(vector_node_4)); } // FIXME: not working @@ -184,7 +184,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_1_5.id.clone()); - repository.insert(Node::Vector(vector_node_1_5)); + graph.insert_node(Node::Vector(vector_node_1_5)); } } @@ -225,7 +225,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_5.id.clone()); - repository.insert(Node::Vector(vector_node_5)); + graph.insert_node(Node::Vector(vector_node_5)); } // Single-segment 90-degree straight line @@ -258,7 +258,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_5_5.id.clone()); - repository.insert(Node::Vector(vector_node_5_5)); + graph.insert_node(Node::Vector(vector_node_5_5)); } } @@ -298,7 +298,7 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_6.id.clone()); - repository.insert(Node::Vector(vector_node_6)); + graph.insert_node(Node::Vector(vector_node_6)); } // Filled rectangle @@ -336,21 +336,21 @@ async fn demo_vectors() -> Scene { }; ids.push(vector_node_7.id.clone()); - repository.insert(Node::Vector(vector_node_7)); + graph.insert_node(Node::Vector(vector_node_7)); } } // Add all nodes to root - root.children = ids.clone(); let root_id = root.id.clone(); - repository.insert(Node::Container(root)); + graph.insert(Parent::NodeId(root_id.clone()), ids.clone()); + graph.insert_node(Node::Container(root)); + + graph.insert(Parent::Root, vec![root_id.clone()]); Scene { - id: "scene".to_string(), name: "Vector Network Demo".to_string(), - children: vec![root_id], - nodes: repository, background_color: Some(CGColor(240, 240, 240, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/grida_webfonts.rs b/crates/grida-canvas/examples/grida_webfonts.rs index 99db7fca76..329837c731 100644 --- a/crates/grida-canvas/examples/grida_webfonts.rs +++ b/crates/grida-canvas/examples/grida_webfonts.rs @@ -1,7 +1,7 @@ use cg::cg::types::*; use cg::helpers::webfont_helper::{find_font_files_by_family, load_webfonts_metadata}; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::resources::{load_font, FontMessage}; use cg::window; @@ -124,7 +124,7 @@ async fn demo_webfonts() -> Scene { }; // Create a node repository and add all nodes - let mut repository = NodeRepository::new(); + let mut graph = SceneGraph::new(); // Collect all the IDs let heading_id = heading_node.id.clone(); @@ -132,25 +132,25 @@ async fn demo_webfonts() -> Scene { let albert_text_ids: Vec<_> = albert_text_nodes.iter().map(|n| n.id.clone()).collect(); // Add all nodes to the repository - repository.insert(Node::TextSpan(heading_node)); - repository.insert(Node::TextSpan(description_node)); + graph.insert_node(Node::TextSpan(heading_node)); + graph.insert_node(Node::TextSpan(description_node)); for text_node in albert_text_nodes { - repository.insert(Node::TextSpan(text_node)); + graph.insert_node(Node::TextSpan(text_node)); } // Set up the root container with all IDs let mut children = vec![heading_id, description_id]; children.extend(albert_text_ids); - root_container_node.children = children; let root_container_id = root_container_node.id.clone(); - repository.insert(Node::Container(root_container_node)); + graph.insert(Parent::NodeId(root_container_id.clone()), children); + graph.insert_node(Node::Container(root_container_node)); + + graph.insert(Parent::Root, vec![root_container_id.clone()]); Scene { - id: "scene".to_string(), name: "Webfonts Demo".to_string(), - children: vec![root_container_id], - nodes: repository, background_color: Some(CGColor(250, 250, 250, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/sys_camera.rs b/crates/grida-canvas/examples/sys_camera.rs index 55465990f8..f48bee9698 100644 --- a/crates/grida-canvas/examples/sys_camera.rs +++ b/crates/grida-canvas/examples/sys_camera.rs @@ -1,6 +1,7 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; use cg::{ + node::scene_graph::{Parent, SceneGraph}, node::schema::*, runtime::camera::Camera2D, runtime::scene::{Backend, Renderer, RendererOptions}, @@ -25,7 +26,7 @@ use winit::{ }; fn create_static_scene() -> Scene { - let mut repository = cg::node::repository::NodeRepository::new(); + let mut graph = SceneGraph::new(); let nf = NodeFactory::new(); // Create a grid of rectangles @@ -40,7 +41,7 @@ fn create_static_scene() -> Scene { width: 50.0, height: 50.0, }; - repository.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); ids.push(id); } } @@ -51,20 +52,20 @@ fn create_static_scene() -> Scene { name: Some("Root Group".to_string()), active: true, transform: None, - children: ids, opacity: 1.0, blend_mode: LayerBlendMode::default(), mask: None, }; - repository.insert(Node::Group(root_group)); + let root_id = root_group.id.clone(); + graph.insert_node(Node::Group(root_group)); + graph.insert(Parent::Root, vec![root_id.clone()]); + graph.insert(Parent::NodeId(root_id), ids); Scene { - id: "scene".to_string(), name: "Test Scene".to_string(), - children: vec!["root".to_string()], - nodes: repository, background_color: Some(CGColor(255, 255, 255, 255)), + graph, } } diff --git a/crates/grida-canvas/examples/wd_animation.rs b/crates/grida-canvas/examples/wd_animation.rs index 3c6e1ac077..3d4ae1241a 100644 --- a/crates/grida-canvas/examples/wd_animation.rs +++ b/crates/grida-canvas/examples/wd_animation.rs @@ -1,6 +1,6 @@ use cg::cg::types::*; use cg::node::factory::NodeFactory; -use cg::node::repository::NodeRepository; +use cg::node::scene_graph::{Parent, SceneGraph}; use cg::node::schema::*; use cg::window::{self, application::HostEvent}; use math2::transform::AffineTransform; @@ -8,7 +8,7 @@ use std::time::Instant; fn create_scene(t: f32) -> Scene { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.size = Size { @@ -22,14 +22,13 @@ fn create_scene(t: f32) -> Scene { let g = ((t.cos() * 0.5 + 0.5) * 255.0) as u8; rect.set_fill(Paint::from(CGColor(r, g, 200, 255))); let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); + graph.insert(Parent::Root, vec![rect_id]); Scene { - id: "scene".to_string(), name: "Animated".to_string(), - children: vec![rect_id], - nodes: repo, background_color: Some(CGColor(255, 255, 255, 255)), + graph, } } diff --git a/crates/grida-canvas/src/cache/geometry.rs b/crates/grida-canvas/src/cache/geometry.rs index a3318a5f90..f635e5d63c 100644 --- a/crates/grida-canvas/src/cache/geometry.rs +++ b/crates/grida-canvas/src/cache/geometry.rs @@ -1,6 +1,6 @@ use crate::cache::paragraph::ParagraphCache; use crate::cg::types::*; -use crate::node::repository::NodeRepository; +use crate::node::scene_graph::SceneGraph; use crate::node::schema::{ IntrinsicSizeNode, LayerEffects, Node, NodeGeometryMixin, NodeId, Scene, }; @@ -58,10 +58,10 @@ impl GeometryCache { ) -> Self { let mut cache = Self::new(); let root_world = AffineTransform::identity(); - for child in &scene.children { + for child in scene.graph.roots() { Self::build_recursive( - child, - &scene.nodes, + &child, + &scene.graph, &root_world, None, &mut cache, @@ -74,15 +74,15 @@ impl GeometryCache { fn build_recursive( id: &NodeId, - repo: &NodeRepository, + graph: &SceneGraph, parent_world: &AffineTransform, parent_id: Option, cache: &mut GeometryCache, paragraph_cache: &mut ParagraphCache, fonts: &FontRepository, ) -> Rectangle { - let node = repo - .get(id) + let node = graph + .get_node(id) .expect(&format!("node not found in geometry cache {id:?}")); match node { @@ -90,25 +90,27 @@ impl GeometryCache { let world_transform = parent_world.compose(&n.transform.unwrap_or_default()); let mut union_bounds: Option = None; let mut union_render_bounds: Option = None; - for child_id in &n.children { - let child_bounds = Self::build_recursive( - child_id, - repo, - &world_transform, - Some(id.clone()), - cache, - paragraph_cache, - fonts, - ); - union_bounds = match union_bounds { - Some(b) => Some(rect::union(&[b, child_bounds])), - None => Some(child_bounds), - }; - if let Some(rb) = cache.get_render_bounds(child_id) { - union_render_bounds = match union_render_bounds { - Some(b) => Some(rect::union(&[b, rb])), - None => Some(rb), + if let Some(children) = graph.get_children(id) { + for child_id in children { + let child_bounds = Self::build_recursive( + child_id, + graph, + &world_transform, + Some(id.clone()), + cache, + paragraph_cache, + fonts, + ); + union_bounds = match union_bounds { + Some(b) => Some(rect::union(&[b, child_bounds])), + None => Some(child_bounds), }; + if let Some(rb) = cache.get_render_bounds(child_id) { + union_render_bounds = match union_render_bounds { + Some(b) => Some(rect::union(&[b, rb])), + None => Some(rb), + }; + } } } @@ -149,20 +151,22 @@ impl GeometryCache { Node::BooleanOperation(n) => { let world_transform = parent_world.compose(&n.transform.unwrap_or_default()); let mut union_bounds: Option = None; - for child_id in &n.children { - let child_bounds = Self::build_recursive( - child_id, - repo, - &world_transform, - Some(id.clone()), - cache, - paragraph_cache, - fonts, - ); - union_bounds = match union_bounds { - Some(b) => Some(rect::union(&[b, child_bounds])), - None => Some(child_bounds), - }; + if let Some(children) = graph.get_children(id) { + for child_id in children { + let child_bounds = Self::build_recursive( + child_id, + graph, + &world_transform, + Some(id.clone()), + cache, + paragraph_cache, + fonts, + ); + union_bounds = match union_bounds { + Some(b) => Some(rect::union(&[b, child_bounds])), + None => Some(child_bounds), + }; + } } let world_bounds = union_bounds.unwrap_or_else(|| Rectangle { @@ -225,17 +229,19 @@ impl GeometryCache { &n.effects, ); - for child_id in &n.children { - let child_bounds = Self::build_recursive( - child_id, - repo, - &world_transform, - Some(id.clone()), - cache, - paragraph_cache, - fonts, - ); - union_world_bounds = rect::union(&[union_world_bounds, child_bounds]); + if let Some(children) = graph.get_children(id) { + for child_id in children { + let child_bounds = Self::build_recursive( + child_id, + graph, + &world_transform, + Some(id.clone()), + cache, + paragraph_cache, + fonts, + ); + union_world_bounds = rect::union(&[union_world_bounds, child_bounds]); + } } let entry = GeometryEntry { diff --git a/crates/grida-canvas/src/dummy/mod.rs b/crates/grida-canvas/src/dummy/mod.rs index 33ca87ab97..9635c75112 100644 --- a/crates/grida-canvas/src/dummy/mod.rs +++ b/crates/grida-canvas/src/dummy/mod.rs @@ -1,10 +1,13 @@ use crate::cg::types::*; -use crate::node::{factory::NodeFactory, repository::NodeRepository, schema::*}; +use crate::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::*, +}; /// Load a simple demo scene with a few colored rectangles. pub(crate) fn create_dummy_scene() -> Scene { let nf = NodeFactory::new(); - let mut nodes = NodeRepository::new(); let mut rect1 = nf.create_rectangle_node(); rect1.name = Some("Red Rectangle".to_string()); @@ -14,8 +17,6 @@ pub(crate) fn create_dummy_scene() -> Scene { height: 100.0, }; rect1.set_fill(Paint::Solid(SolidPaint::RED)); - let rect1_id = rect1.id.clone(); - nodes.insert(Node::Rectangle(rect1)); let mut rect2 = nf.create_rectangle_node(); rect2.name = Some("Blue Rectangle".to_string()); @@ -25,8 +26,6 @@ pub(crate) fn create_dummy_scene() -> Scene { height: 80.0, }; rect2.set_fill(Paint::Solid(SolidPaint::BLUE)); - let rect2_id = rect2.id.clone(); - nodes.insert(Node::Rectangle(rect2)); let mut rect3 = nf.create_rectangle_node(); rect3.name = Some("Green Rectangle".to_string()); @@ -36,23 +35,28 @@ pub(crate) fn create_dummy_scene() -> Scene { height: 120.0, }; rect3.set_fill(Paint::Solid(SolidPaint::GREEN)); - let rect3_id = rect3.id.clone(); - nodes.insert(Node::Rectangle(rect3)); + + let mut graph = SceneGraph::new(); + graph.append_children( + vec![ + Node::Rectangle(rect1), + Node::Rectangle(rect2), + Node::Rectangle(rect3), + ], + Parent::Root, + ); Scene { - id: "dummy".to_string(), name: "Dummy Scene".to_string(), - children: vec![rect1_id, rect2_id, rect3_id], - nodes, - background_color: Some(CGColor(240, 240, 240, 255)), + graph, + background_color: Some(CGColor::WHITE), } } /// Load a heavy scene useful for performance benchmarking. pub(crate) fn create_benchmark_scene(cols: u32, rows: u32) -> Scene { let nf = NodeFactory::new(); - let mut nodes = NodeRepository::new(); - let mut children = Vec::new(); + let mut graph = SceneGraph::new(); let size = 20.0f32; let spacing = 5.0f32; @@ -74,17 +78,13 @@ pub(crate) fn create_benchmark_scene(cols: u32, rows: u32) -> Scene { blend_mode: BlendMode::default(), active: true, })); - let id = rect.id.clone(); - nodes.insert(Node::Rectangle(rect)); - children.push(id); + graph.append_child(Node::Rectangle(rect), Parent::Root); } } Scene { - id: "benchmark".to_string(), name: "Benchmark Scene".to_string(), - children, - nodes, - background_color: Some(CGColor(255, 255, 255, 255)), + graph, + background_color: Some(CGColor::WHITE), } } diff --git a/crates/grida-canvas/src/io/io_figma.rs b/crates/grida-canvas/src/io/io_figma.rs index 8add1f4fc2..c008bb2985 100644 --- a/crates/grida-canvas/src/io/io_figma.rs +++ b/crates/grida-canvas/src/io/io_figma.rs @@ -1,6 +1,7 @@ use crate::cg::{types::*, Alignment}; use crate::helpers::webfont_helper; use crate::node::repository::NodeRepository; +use crate::node::scene_graph::{Parent, SceneGraph}; use crate::node::schema::*; use figma_api::models::minimal_strokes_trait::StrokeAlign as FigmaStrokeAlign; use figma_api::models::type_style::{ @@ -250,6 +251,7 @@ fn convert_gradient_transform(handles: &Vec) -> AffineTransform { /// Converts Figma nodes to Grida schema pub struct FigmaConverter { repository: NodeRepository, + links: std::collections::HashMap>, image_urls: std::collections::HashMap, font_store: webfont_helper::FontUsageStore, } @@ -258,6 +260,7 @@ impl FigmaConverter { pub fn new() -> Self { Self { repository: NodeRepository::new(), + links: std::collections::HashMap::new(), image_urls: std::collections::HashMap::new(), font_store: webfont_helper::FontUsageStore::new(), } @@ -604,8 +607,15 @@ impl FigmaConverter { let size = Self::convert_size(component.size.as_ref()); let transform = Self::convert_transform(component.relative_transform.as_ref()); + let node_id = component.id.clone(); + + // Store children relationship + if !children.is_empty() { + self.links.insert(node_id.clone(), children); + } + Ok(Node::Container(ContainerNodeRec { - id: component.id.clone(), + id: node_id, name: Some(component.name.clone()), active: component.visible.unwrap_or(true), opacity: Self::convert_opacity(component.visible), @@ -632,7 +642,6 @@ impl FigmaConverter { .clone() .map(|v| v.into_iter().map(|x| x as f32).collect()), effects: Self::convert_effects(&component.effects), - children, clip: component.clips_content, })) } @@ -693,8 +702,15 @@ impl FigmaConverter { let size = Self::convert_size(instance.size.as_ref()); let transform = Self::convert_transform(instance.relative_transform.as_ref()); + let node_id = instance.id.clone(); + + // Store children relationship + if !children.is_empty() { + self.links.insert(node_id.clone(), children); + } + Ok(Node::Container(ContainerNodeRec { - id: instance.id.clone(), + id: node_id, name: Some(instance.name.clone()), active: instance.visible.unwrap_or(true), opacity: Self::convert_opacity(instance.visible), @@ -721,7 +737,6 @@ impl FigmaConverter { .clone() .map(|v| v.into_iter().map(|x| x as f32).collect()), effects: Self::convert_effects(&instance.effects), - children, clip: instance.clips_content, })) } @@ -734,8 +749,15 @@ impl FigmaConverter { .map(|child| self.convert_sub_canvas_node(child)) .collect::, _>>()?; + let node_id = section.id.clone(); + + // Store children relationship + if !children.is_empty() { + self.links.insert(node_id.clone(), children); + } + Ok(Node::Container(ContainerNodeRec { - id: section.id.clone(), + id: node_id, name: Some(format!("[Section] {}", section.name)), active: section.visible.unwrap_or(true), opacity: Self::convert_opacity(section.visible), @@ -744,7 +766,6 @@ impl FigmaConverter { transform: Self::convert_transform(section.relative_transform.as_ref()), size: Self::convert_size(section.size.as_ref()), corner_radius: RectangularCornerRadius::zero(), - children, fills: self.convert_fills(Some(§ion.fills.as_ref())), strokes: Paints::default(), stroke_width: 0.0, @@ -827,12 +848,14 @@ impl FigmaConverter { .iter() .map(|child| self.convert_sub_canvas_node(child)) .collect::, _>>()?; - // canvas.background_color + + // Build scene graph from snapshot + let nodes = self.repository.iter().map(|(_, node)| node.clone()); + let graph = SceneGraph::new_from_snapshot(nodes, self.links.clone(), children); + Ok(Scene { - id: canvas.id.clone(), name: canvas.name.clone(), - children, - nodes: self.repository.clone(), + graph, background_color: Some(CGColor::from(&canvas.background_color)), }) } @@ -847,8 +870,15 @@ impl FigmaConverter { let size = Self::convert_size(origin.size.as_ref()); let transform = Self::convert_transform(origin.relative_transform.as_ref()); + let node_id = origin.id.clone(); + + // Store children relationship + if !children.is_empty() { + self.links.insert(node_id.clone(), children); + } + Ok(Node::Container(ContainerNodeRec { - id: origin.id.clone(), + id: node_id, name: Some(origin.name.clone()), active: origin.visible.unwrap_or(true), opacity: Self::convert_opacity(origin.visible), @@ -875,7 +905,6 @@ impl FigmaConverter { .clone() .map(|v| v.into_iter().map(|x| x as f32).collect()), effects: Self::convert_effects(&origin.effects), - children, clip: origin.clips_content, })) } @@ -1080,7 +1109,6 @@ impl FigmaConverter { stroke_align: StrokeAlign::Inside, stroke_dash_array: None, effects: LayerEffects::default(), - children, clip: false, })) } @@ -1112,8 +1140,15 @@ impl FigmaConverter { } }; + let node_id = origin.id.clone(); + + // Store children relationship + if !children.is_empty() { + self.links.insert(node_id.clone(), children); + } + Ok(Node::BooleanOperation(BooleanPathOperationNodeRec { - id: origin.id.clone(), + id: node_id, name: Some(origin.name.clone()), active: origin.visible.unwrap_or(true), opacity: Self::convert_opacity(origin.visible), @@ -1122,7 +1157,6 @@ impl FigmaConverter { effects: Self::convert_effects(&origin.effects), transform: Some(transform), op: op, - children, // map this corner_radius: None, fills: self.convert_fills(Some(&origin.fills)), @@ -1332,13 +1366,19 @@ impl FigmaConverter { .map(|child| self.convert_sub_canvas_node(child)) .collect::, _>>()?; + let node_id = origin.id.clone(); + + // Store children relationship + if !children.is_empty() { + self.links.insert(node_id.clone(), children); + } + Ok(Node::Group(GroupNodeRec { - id: origin.id.clone(), + id: node_id, name: Some(origin.name.clone()), active: origin.visible.unwrap_or(true), // the figma's relativeTransform for group is a no-op on our model. transform: None, - children, opacity: Self::convert_opacity(origin.visible), blend_mode: Self::convert_blend_mode(origin.blend_mode), mask: None, diff --git a/crates/grida-canvas/src/io/io_grida.rs b/crates/grida-canvas/src/io/io_grida.rs index 09935d483a..09f6a20d7a 100644 --- a/crates/grida-canvas/src/io/io_grida.rs +++ b/crates/grida-canvas/src/io/io_grida.rs @@ -954,7 +954,6 @@ impl From for GroupNodeRec { // TODO: group's transform should be handled differently transform: Some(transform), // Children populated from links after conversion - children: vec![], opacity: node.base.opacity, blend_mode: node.base.blend_mode.into(), mask: node.base.mask.map(|m| m.into()), @@ -999,7 +998,6 @@ impl From for ContainerNodeRec { node.base.fe_backdrop_blur, ), // Children populated from links after conversion - children: vec![], clip: true, mask: node.base.mask.map(|m| m.into()), } @@ -1499,7 +1497,6 @@ impl From for Node { .corner_radius .and_then(JSONCornerRadius::into_uniform), // Children populated from links after conversion - children: vec![], fills: merge_paints(node.base.fill, node.base.fills), strokes: merge_paints(node.base.stroke, node.base.strokes), stroke_width: node.base.stroke_width, diff --git a/crates/grida-canvas/src/node/factory.rs b/crates/grida-canvas/src/node/factory.rs index d58e635fdc..f7a16a7722 100644 --- a/crates/grida-canvas/src/node/factory.rs +++ b/crates/grida-canvas/src/node/factory.rs @@ -153,7 +153,6 @@ impl NodeFactory { name: None, active: true, transform: None, - children: Vec::new(), opacity: Self::DEFAULT_OPACITY, blend_mode: LayerBlendMode::default(), mask: None, @@ -172,7 +171,6 @@ impl NodeFactory { transform: AffineTransform::identity(), size: Self::DEFAULT_SIZE, corner_radius: RectangularCornerRadius::zero(), - children: Vec::new(), fills: Paints::new([Self::default_solid_paint(Self::DEFAULT_COLOR)]), strokes: Paints::default(), stroke_width: Self::DEFAULT_STROKE_WIDTH, diff --git a/crates/grida-canvas/src/node/mod.rs b/crates/grida-canvas/src/node/mod.rs index 7cdc81ad06..f4d945604d 100644 --- a/crates/grida-canvas/src/node/mod.rs +++ b/crates/grida-canvas/src/node/mod.rs @@ -1,3 +1,4 @@ pub mod factory; pub mod repository; +pub mod scene_graph; pub mod schema; diff --git a/crates/grida-canvas/src/node/scene_graph.rs b/crates/grida-canvas/src/node/scene_graph.rs new file mode 100644 index 0000000000..778d5f2a0a --- /dev/null +++ b/crates/grida-canvas/src/node/scene_graph.rs @@ -0,0 +1,719 @@ +use super::repository::NodeRepository; +use super::schema::{Node, NodeId}; +use std::collections::HashMap; + +/// Parent reference in the scene graph +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum Parent { + /// Root-level node (direct child of the scene) + Root, + /// Child of another node + NodeId(NodeId), +} + +/// Error type for SceneGraph operations +#[derive(Debug, Clone)] +pub enum SceneGraphError { + NodeNotFound(NodeId), + ParentNotFound(NodeId), + ChildNotFound(NodeId), + IndexOutOfBounds { + parent: NodeId, + index: usize, + len: usize, + }, +} + +impl std::fmt::Display for SceneGraphError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + SceneGraphError::NodeNotFound(id) => write!(f, "Node not found: {}", id), + SceneGraphError::ParentNotFound(id) => write!(f, "Parent not found: {}", id), + SceneGraphError::ChildNotFound(id) => write!(f, "Child not found: {}", id), + SceneGraphError::IndexOutOfBounds { parent, index, len } => { + write!( + f, + "Index out of bounds for parent {}: index {} but length is {}", + parent, index, len + ) + } + } + } +} + +impl std::error::Error for SceneGraphError {} + +pub type SceneGraphResult = Result; + +/// A scene graph that manages both the tree structure and node data. +/// +/// The SceneGraph maintains: +/// - Root node IDs (direct children of the scene) +/// - An adjacency list (parent->children) for the tree structure +/// - A node repository for storing actual node data +/// +/// This provides a centralized, efficient way to manage scene hierarchy +/// separate from node attributes. +#[derive(Debug, Clone)] +pub struct SceneGraph { + /// Root node IDs - direct children of the scene + roots: Vec, + /// Parent to children adjacency list + links: HashMap>, + /// Node data repository + nodes: NodeRepository, +} + +impl SceneGraph { + /// Creates a new empty scene graph + pub fn new() -> Self { + Self { + roots: Vec::new(), + links: HashMap::new(), + nodes: NodeRepository::new(), + } + } + + /// Create a SceneGraph from a complete snapshot (typical IO loader use case). + /// + /// This is optimized for deserializing complete scene data where nodes and links + /// are provided as separate collections. + /// + /// # Arguments + /// * `nodes` - Iterator of nodes to add to the repository + /// * `links` - HashMap of parent->children relationships + /// * `roots` - Root node IDs (direct children of the scene) + pub fn new_from_snapshot( + nodes: impl IntoIterator, + links: HashMap>, + roots: Vec, + ) -> Self { + let mut graph = Self::new(); + + // Add all nodes + for node in nodes { + graph.insert_node(node); + } + + // Set up all links + graph.links = links; + + // Set roots + graph.roots = roots; + + graph + } + + // ------------------------------------------------------------------------- + // Graph Structure Methods + // ------------------------------------------------------------------------- + + /// Insert or replace children for a parent. + /// If parent is Root, sets the scene roots. Otherwise creates/updates the parent's children. + #[deprecated(note = "Use append_child instead")] + pub fn insert(&mut self, parent: Parent, children: Vec) { + match parent { + Parent::Root => { + self.roots = children; + } + Parent::NodeId(id) => { + self.links.insert(id, children); + } + } + } + + /// Add a node to the graph and return its ID + /// This is the primary method for adding nodes - combines node insertion with hierarchy + #[deprecated(note = "Use append_child instead")] + pub fn insert_node(&mut self, node: Node) -> NodeId { + self.nodes.insert(node) + } + + /// Add a node to the graph and link it to a parent in one operation. + /// This is a convenience method that combines insert_node + appending to parent's children. + /// + /// Returns the node's ID. + pub fn append_child(&mut self, node: Node, parent: Parent) -> NodeId { + let id = self.insert_node(node); + + match parent { + Parent::Root => { + self.roots.push(id.clone()); + } + Parent::NodeId(parent_id) => { + self.links + .entry(parent_id) + .or_insert_with(Vec::new) + .push(id.clone()); + } + } + + id + } + + /// Add multiple nodes to the graph and link them all to a parent in one operation. + /// This is a bulk convenience method for adding multiple children to the same parent. + /// + /// Returns the node IDs in the same order as the input nodes. + pub fn append_children(&mut self, nodes: Vec, parent: Parent) -> Vec { + let mut ids = Vec::new(); + for node in nodes { + let id = self.append_child(node, parent.clone()); + ids.push(id); + } + ids + } + + /// Get children of a node, if any exist + pub fn get_children(&self, id: &NodeId) -> Option<&Vec> { + self.links.get(id) + } + + /// Add a child to a parent's children list + pub fn add_child(&mut self, parent: &NodeId, child: NodeId) -> SceneGraphResult<()> { + let children = self + .links + .get_mut(parent) + .ok_or_else(|| SceneGraphError::ParentNotFound(parent.clone()))?; + children.push(child); + Ok(()) + } + + /// Insert a child at a specific index in the parent's children list + pub fn add_child_at( + &mut self, + parent: &NodeId, + child: NodeId, + index: usize, + ) -> SceneGraphResult<()> { + let children = self + .links + .get_mut(parent) + .ok_or_else(|| SceneGraphError::ParentNotFound(parent.clone()))?; + + if index > children.len() { + return Err(SceneGraphError::IndexOutOfBounds { + parent: parent.clone(), + index, + len: children.len(), + }); + } + + children.insert(index, child); + Ok(()) + } + + /// Remove a child from a parent's children list + pub fn remove_child(&mut self, parent: &NodeId, child: &NodeId) -> SceneGraphResult<()> { + let children = self + .links + .get_mut(parent) + .ok_or_else(|| SceneGraphError::ParentNotFound(parent.clone()))?; + + let pos = children + .iter() + .position(|id| id == child) + .ok_or_else(|| SceneGraphError::ChildNotFound(child.clone()))?; + + children.remove(pos); + Ok(()) + } + + /// Iterate over all parent->children pairs + pub fn iter(&self) -> impl Iterator)> { + self.links.iter() + } + + /// Get the root nodes (direct children of the scene) + pub fn roots(&self) -> &[NodeId] { + &self.roots + } + + // ------------------------------------------------------------------------- + // Node Data Methods + // ------------------------------------------------------------------------- + + /// Get a reference to a node by ID + pub fn get_node(&self, id: &NodeId) -> SceneGraphResult<&Node> { + self.nodes + .get(id) + .ok_or_else(|| SceneGraphError::NodeNotFound(id.clone())) + } + + /// Get a mutable reference to a node by ID + pub fn get_node_mut(&mut self, id: &NodeId) -> SceneGraphResult<&mut Node> { + self.nodes + .get_mut(id) + .ok_or_else(|| SceneGraphError::NodeNotFound(id.clone())) + } + + /// Remove a node from the repository and return it + pub fn remove_node(&mut self, id: &NodeId) -> SceneGraphResult { + self.nodes + .remove(id) + .ok_or_else(|| SceneGraphError::NodeNotFound(id.clone())) + } + + /// Check if a node exists in the repository + pub fn has_node(&self, id: &NodeId) -> bool { + self.nodes.get(id).is_some() + } + + /// Get the number of nodes in the graph + pub fn node_count(&self) -> usize { + self.nodes.len() + } + + /// Check if the graph is empty + pub fn is_empty(&self) -> bool { + self.nodes.is_empty() + } + + // ------------------------------------------------------------------------- + // Tree Traversal Methods + // ------------------------------------------------------------------------- + + /// Walk the tree in pre-order (parent before children) + pub fn walk_preorder( + &self, + root: &NodeId, + visitor: &mut impl FnMut(&NodeId), + ) -> SceneGraphResult<()> { + if !self.has_node(root) { + return Err(SceneGraphError::NodeNotFound(root.clone())); + } + + visitor(root); + + if let Some(children) = self.get_children(root) { + for child in children { + self.walk_preorder(child, visitor)?; + } + } + + Ok(()) + } + + /// Walk the tree in post-order (children before parent) + pub fn walk_postorder( + &self, + root: &NodeId, + visitor: &mut impl FnMut(&NodeId), + ) -> SceneGraphResult<()> { + if !self.has_node(root) { + return Err(SceneGraphError::NodeNotFound(root.clone())); + } + + if let Some(children) = self.get_children(root) { + for child in children { + self.walk_postorder(child, visitor)?; + } + } + + visitor(root); + + Ok(()) + } + + /// Get all ancestors of a node (path to root) + pub fn ancestors(&self, id: &NodeId) -> SceneGraphResult> { + if !self.has_node(id) { + return Err(SceneGraphError::NodeNotFound(id.clone())); + } + + let mut result = Vec::new(); + let mut current = id.clone(); + + // Find parent by searching all links + loop { + let mut found_parent = false; + for (parent_id, children) in &self.links { + if children.contains(¤t) { + result.push(parent_id.clone()); + current = parent_id.clone(); + found_parent = true; + break; + } + } + + if !found_parent { + break; + } + } + + Ok(result) + } + + /// Get all descendants of a node (all children recursively) + pub fn descendants(&self, id: &NodeId) -> SceneGraphResult> { + if !self.has_node(id) { + return Err(SceneGraphError::NodeNotFound(id.clone())); + } + + let mut result = Vec::new(); + + self.walk_preorder(id, &mut |node_id| { + if node_id != id { + result.push(node_id.clone()); + } + })?; + + Ok(result) + } +} + +impl Default for SceneGraph { + fn default() -> Self { + Self::new() + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::node::schema::{ErrorNodeRec, NodeTrait, Size}; + use math2::transform::AffineTransform; + + fn create_test_node(id: &str) -> Node { + Node::Error(ErrorNodeRec { + id: id.to_string(), + name: Some(format!("node_{}", id)), + active: true, + transform: AffineTransform::identity(), + size: Size { + width: 10.0, + height: 10.0, + }, + error: "test".to_string(), + opacity: 1.0, + }) + } + + #[test] + fn test_scene_graph_basic() { + let mut graph = SceneGraph::new(); + + let node_a = create_test_node("a"); + let node_b = create_test_node("b"); + let node_c = create_test_node("c"); + + let id_a = graph.insert_node(node_a); + let id_b = graph.insert_node(node_b); + let id_c = graph.insert_node(node_c); + + graph.insert( + Parent::NodeId(id_a.clone()), + vec![id_b.clone(), id_c.clone()], + ); + + assert_eq!(graph.node_count(), 3); + assert_eq!(graph.get_children(&id_a).unwrap().len(), 2); + } + + #[test] + fn test_add_child() { + let mut graph = SceneGraph::new(); + + let node_a = create_test_node("a"); + let node_b = create_test_node("b"); + + let id_a = graph.insert_node(node_a); + let id_b = graph.insert_node(node_b); + + graph.insert(Parent::NodeId(id_a.clone()), vec![]); + graph.add_child(&id_a, id_b.clone()).unwrap(); + + assert_eq!(graph.get_children(&id_a).unwrap().len(), 1); + } + + #[test] + fn test_add_child_at() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + let id_d = graph.insert_node(create_test_node("d")); + + graph.insert( + Parent::NodeId(id_a.clone()), + vec![id_b.clone(), id_c.clone()], + ); + graph.add_child_at(&id_a, id_d.clone(), 1).unwrap(); + + let children = graph.get_children(&id_a).unwrap(); + assert_eq!(children.len(), 3); + assert_eq!(children[1], id_d); + } + + #[test] + fn test_remove_child() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + + graph.insert( + Parent::NodeId(id_a.clone()), + vec![id_b.clone(), id_c.clone()], + ); + graph.remove_child(&id_a, &id_b).unwrap(); + + let children = graph.get_children(&id_a).unwrap(); + assert_eq!(children.len(), 1); + assert_eq!(children[0], id_c); + } + + #[test] + fn test_roots() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + + graph.insert(Parent::Root, vec![id_a.clone()]); + graph.insert(Parent::NodeId(id_a.clone()), vec![id_b.clone()]); + graph.insert(Parent::NodeId(id_b.clone()), vec![id_c.clone()]); + + let roots = graph.roots(); + assert_eq!(roots.len(), 1); + assert!(roots.contains(&id_a)); + } + + #[test] + fn test_walk_preorder() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + + graph.insert( + Parent::NodeId(id_a.clone()), + vec![id_b.clone(), id_c.clone()], + ); + + let mut visited = Vec::new(); + graph + .walk_preorder(&id_a, &mut |id| visited.push(id.clone())) + .unwrap(); + + assert_eq!(visited, vec![id_a.clone(), id_b, id_c]); + } + + #[test] + fn test_walk_postorder() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + + graph.insert( + Parent::NodeId(id_a.clone()), + vec![id_b.clone(), id_c.clone()], + ); + + let mut visited = Vec::new(); + graph + .walk_postorder(&id_a, &mut |id| visited.push(id.clone())) + .unwrap(); + + assert_eq!(visited, vec![id_b, id_c, id_a]); + } + + #[test] + fn test_ancestors() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + + graph.insert(Parent::NodeId(id_a.clone()), vec![id_b.clone()]); + graph.insert(Parent::NodeId(id_b.clone()), vec![id_c.clone()]); + + let ancestors = graph.ancestors(&id_c).unwrap(); + assert_eq!(ancestors, vec![id_b, id_a]); + } + + #[test] + fn test_descendants() { + let mut graph = SceneGraph::new(); + + let id_a = graph.insert_node(create_test_node("a")); + let id_b = graph.insert_node(create_test_node("b")); + let id_c = graph.insert_node(create_test_node("c")); + + graph.insert(Parent::NodeId(id_a.clone()), vec![id_b.clone()]); + graph.insert(Parent::NodeId(id_b.clone()), vec![id_c.clone()]); + + let descendants = graph.descendants(&id_a).unwrap(); + assert_eq!(descendants.len(), 2); + assert!(descendants.contains(&id_b)); + assert!(descendants.contains(&id_c)); + } + + #[test] + fn test_error_node_not_found() { + let graph = SceneGraph::new(); + let result = graph.get_node(&"missing".to_string()); + assert!(matches!(result, Err(SceneGraphError::NodeNotFound(_)))); + } + + #[test] + fn test_error_parent_not_found() { + let mut graph = SceneGraph::new(); + let id_b = graph.insert_node(create_test_node("b")); + let result = graph.add_child(&"missing".to_string(), id_b); + assert!(matches!(result, Err(SceneGraphError::ParentNotFound(_)))); + } + + #[test] + fn test_append_child_to_root() { + let mut graph = SceneGraph::new(); + let node_a = create_test_node("a"); + let id_a = graph.append_child(node_a, Parent::Root); + + assert_eq!(graph.roots().len(), 1); + assert!(graph.roots().contains(&id_a)); + assert!(graph.has_node(&id_a)); + } + + #[test] + fn test_append_child_to_parent() { + let mut graph = SceneGraph::new(); + let parent = create_test_node("parent"); + let child = create_test_node("child"); + + let parent_id = graph.insert_node(parent); + let child_id = graph.append_child(child, Parent::NodeId(parent_id.clone())); + + assert_eq!(graph.get_children(&parent_id).unwrap().len(), 1); + assert_eq!(graph.get_children(&parent_id).unwrap()[0], child_id); + } + + #[test] + fn test_append_multiple_children() { + let mut graph = SceneGraph::new(); + let parent = create_test_node("parent"); + let child1 = create_test_node("child1"); + let child2 = create_test_node("child2"); + + let parent_id = graph.insert_node(parent); + let child1_id = graph.append_child(child1, Parent::NodeId(parent_id.clone())); + let child2_id = graph.append_child(child2, Parent::NodeId(parent_id.clone())); + + let children = graph.get_children(&parent_id).unwrap(); + assert_eq!(children.len(), 2); + assert_eq!(children[0], child1_id); + assert_eq!(children[1], child2_id); + } + + #[test] + fn test_append_children_to_root() { + let mut graph = SceneGraph::new(); + let nodes = vec![ + create_test_node("a"), + create_test_node("b"), + create_test_node("c"), + ]; + let ids = graph.append_children(nodes, Parent::Root); + + assert_eq!(graph.roots().len(), 3); + assert_eq!(ids.len(), 3); + assert!(graph.roots().contains(&ids[0])); + assert!(graph.roots().contains(&ids[1])); + assert!(graph.roots().contains(&ids[2])); + } + + #[test] + fn test_append_children_to_parent() { + let mut graph = SceneGraph::new(); + let parent = create_test_node("parent"); + let parent_id = graph.insert_node(parent); + + let children_nodes = vec![ + create_test_node("child1"), + create_test_node("child2"), + create_test_node("child3"), + ]; + let child_ids = graph.append_children(children_nodes, Parent::NodeId(parent_id.clone())); + + assert_eq!(child_ids.len(), 3); + let children = graph.get_children(&parent_id).unwrap(); + assert_eq!(children.len(), 3); + assert_eq!(children[0], child_ids[0]); + assert_eq!(children[1], child_ids[1]); + assert_eq!(children[2], child_ids[2]); + } + + #[test] + fn test_append_children_empty() { + let mut graph = SceneGraph::new(); + let ids = graph.append_children(vec![], Parent::Root); + + assert_eq!(ids.len(), 0); + assert_eq!(graph.roots().len(), 0); + } + + #[test] + fn test_new_from_snapshot() { + let node_a = create_test_node("a"); + let node_b = create_test_node("b"); + let node_c = create_test_node("c"); + + let id_a = node_a.id().clone(); + let id_b = node_b.id().clone(); + let id_c = node_c.id().clone(); + + let nodes = vec![node_a, node_b, node_c]; + let mut links = HashMap::new(); + links.insert(id_a.clone(), vec![id_b.clone(), id_c.clone()]); + let roots = vec![id_a.clone()]; + + let graph = SceneGraph::new_from_snapshot(nodes, links, roots); + + assert_eq!(graph.node_count(), 3); + assert_eq!(graph.roots().len(), 1); + assert_eq!(graph.get_children(&id_a).unwrap().len(), 2); + } + + #[test] + fn test_new_from_snapshot_empty() { + let graph = SceneGraph::new_from_snapshot(vec![], HashMap::new(), vec![]); + + assert_eq!(graph.node_count(), 0); + assert_eq!(graph.roots().len(), 0); + assert!(graph.is_empty()); + } + + #[test] + fn test_new_from_snapshot_complex_hierarchy() { + let node_root = create_test_node("root"); + let node_a = create_test_node("a"); + let node_b = create_test_node("b"); + let node_c = create_test_node("c"); + + let id_root = node_root.id().clone(); + let id_a = node_a.id().clone(); + let id_b = node_b.id().clone(); + let id_c = node_c.id().clone(); + + let nodes = vec![node_root, node_a, node_b, node_c]; + let mut links = HashMap::new(); + links.insert(id_root.clone(), vec![id_a.clone(), id_b.clone()]); + links.insert(id_b.clone(), vec![id_c.clone()]); + let roots = vec![id_root.clone()]; + + let graph = SceneGraph::new_from_snapshot(nodes, links, roots); + + assert_eq!(graph.node_count(), 4); + assert_eq!(graph.roots().len(), 1); + assert_eq!(graph.roots()[0], id_root); + assert_eq!(graph.get_children(&id_root).unwrap().len(), 2); + assert_eq!(graph.get_children(&id_b).unwrap().len(), 1); + } +} diff --git a/crates/grida-canvas/src/node/schema.rs b/crates/grida-canvas/src/node/schema.rs index 013c3cb6f5..c0d9979d06 100644 --- a/crates/grida-canvas/src/node/schema.rs +++ b/crates/grida-canvas/src/node/schema.rs @@ -1,7 +1,7 @@ use crate::cg; use crate::cg::types::*; pub use crate::cg::types::{FontFeature, FontVariation}; -use crate::node::repository::NodeRepository; +use crate::node::scene_graph::SceneGraph; use crate::shape::*; use crate::vectornetwork::*; use math2::rect::Rectangle; @@ -80,15 +80,13 @@ pub struct Size { // region: Scene /// Runtime scene representation. /// -/// The children field is populated from the document's `links` map during deserialization. -/// In the new format, scenes are stored in `document.nodes` and their children are in `document.links`. +/// The scene graph contains both the tree structure (links) and node data (nodes). +/// This provides a centralized, efficient way to manage scene hierarchy. #[derive(Debug, Clone)] pub struct Scene { - pub id: String, pub name: String, - /// Children node IDs - populated from document.links during load - pub children: Vec, - pub nodes: NodeRepository, + /// Scene graph containing tree structure and node data + pub graph: SceneGraph, pub background_color: Option, } @@ -396,7 +394,6 @@ pub struct GroupNodeRec { pub mask: Option, pub transform: Option, - pub children: Vec, } #[derive(Debug, Clone)] @@ -412,7 +409,6 @@ pub struct ContainerNodeRec { pub transform: AffineTransform, pub size: Size, pub corner_radius: RectangularCornerRadius, - pub children: Vec, pub fills: Paints, pub strokes: Paints, pub stroke_width: f32, @@ -848,7 +844,6 @@ pub struct BooleanPathOperationNodeRec { pub transform: Option, pub op: BooleanPathOperation, pub corner_radius: Option, - pub children: Vec, pub fills: Paints, pub strokes: Paints, pub stroke_width: f32, diff --git a/crates/grida-canvas/src/painter/geometry.rs b/crates/grida-canvas/src/painter/geometry.rs index d1b5ab4793..5655a5efc7 100644 --- a/crates/grida-canvas/src/painter/geometry.rs +++ b/crates/grida-canvas/src/painter/geometry.rs @@ -1,5 +1,5 @@ use crate::cg::types::*; -use crate::node::repository::NodeRepository; +use crate::node::scene_graph::SceneGraph; use crate::node::schema::*; use crate::shape::*; use crate::{cache::geometry::GeometryCache, sk}; @@ -243,7 +243,7 @@ pub fn build_shape_from_node(node: &Node) -> Option { /// Compute the resulting path for a [`BooleanPathOperationNode`] in its local coordinate space. pub fn boolean_operation_path( node: &BooleanPathOperationNodeRec, - repo: &NodeRepository, + graph: &SceneGraph, cache: &GeometryCache, ) -> Option { let world = cache @@ -253,11 +253,12 @@ pub fn boolean_operation_path( let mut shapes_with_ops = Vec::new(); - for (i, child_id) in node.children.iter().enumerate() { - if let Some(child_node) = repo.get(child_id) { + let children = graph.get_children(&node.id)?; + for (i, child_id) in children.iter().enumerate() { + if let Ok(child_node) = graph.get_node(child_id) { let mut path = match child_node { Node::BooleanOperation(child_bool) => { - boolean_operation_path(child_bool, repo, cache)? + boolean_operation_path(child_bool, graph, cache)? } _ => build_shape_from_node(child_node)?.to_path(), }; @@ -298,8 +299,8 @@ pub fn boolean_operation_path( /// Convenience wrapper around [`boolean_operation_path`] returning a [`PainterShape`]. pub fn boolean_operation_shape( node: &BooleanPathOperationNodeRec, - repo: &NodeRepository, + graph: &SceneGraph, cache: &GeometryCache, ) -> Option { - boolean_operation_path(node, repo, cache).map(PainterShape::from_path) + boolean_operation_path(node, graph, cache).map(PainterShape::from_path) } diff --git a/crates/grida-canvas/src/painter/layer.rs b/crates/grida-canvas/src/painter/layer.rs index 418776b437..2afbe41227 100644 --- a/crates/grida-canvas/src/painter/layer.rs +++ b/crates/grida-canvas/src/painter/layer.rs @@ -3,7 +3,7 @@ use super::geometry::{ }; use crate::cache::scene::SceneCache; use crate::cg::types::*; -use crate::node::repository::NodeRepository; +use crate::node::scene_graph::SceneGraph; use crate::node::schema::*; use crate::shape::*; use crate::sk; @@ -216,8 +216,8 @@ impl LayerList { /// Flatten an entire scene into a layer list using the provided scene cache. pub fn from_scene(scene: &Scene, scene_cache: &SceneCache) -> Self { let mut list = LayerList::default(); - for id in &scene.children { - let result = Self::flatten_node(id, &scene.nodes, scene_cache, 1.0, &mut list.layers); + for id in scene.graph.roots() { + let result = Self::flatten_node(&id, &scene.graph, scene_cache, 1.0, &mut list.layers); list.commands.extend(result.commands); } // Build a LUT (id -> index) for picture caching and quick lookup @@ -228,12 +228,12 @@ impl LayerList { /// Build a layer list starting from a node subtree using a scene cache. pub fn from_node( id: &NodeId, - repo: &NodeRepository, + graph: &SceneGraph, scene_cache: &SceneCache, opacity: f32, ) -> Self { let mut list = LayerList::default(); - let result = Self::flatten_node(id, repo, scene_cache, opacity, &mut list.layers); + let result = Self::flatten_node(id, graph, scene_cache, opacity, &mut list.layers); list.commands = result.commands; list } @@ -244,12 +244,12 @@ impl LayerList { fn flatten_node( id: &NodeId, - repo: &NodeRepository, + graph: &SceneGraph, scene_cache: &SceneCache, parent_opacity: f32, out: &mut Vec, ) -> FlattenResult { - let Some(node) = repo.get(id) else { + let Ok(node) = graph.get_node(id) else { return FlattenResult::default(); }; @@ -265,10 +265,11 @@ impl LayerList { match node { Node::Group(n) => { let opacity = parent_opacity * n.opacity; + let children = graph.get_children(id).map(|c| c.as_slice()).unwrap_or(&[]); FlattenResult { commands: Self::build_render_commands( - &n.children, - repo, + children, + graph, scene_cache, opacity, out, @@ -296,7 +297,7 @@ impl LayerList { opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -306,8 +307,9 @@ impl LayerList { }); out.push(layer.clone()); let mut commands = vec![PainterRenderCommand::Draw(layer)]; + let children = graph.get_children(id).map(|c| c.as_slice()).unwrap_or(&[]); let child_commands = - Self::build_render_commands(&n.children, repo, scene_cache, opacity, out); + Self::build_render_commands(children, graph, scene_cache, opacity, out); commands.extend(child_commands); FlattenResult { commands, @@ -316,7 +318,7 @@ impl LayerList { } Node::BooleanOperation(n) => { let opacity = parent_opacity * n.opacity; - if let Some(shape) = boolean_operation_shape(n, repo, scene_cache.geometry()) { + if let Some(shape) = boolean_operation_shape(n, graph, scene_cache.geometry()) { let stroke_path = if !n.strokes.is_empty() && n.stroke_width > 0.0 { Some(stroke_geometry( &shape.to_path(), @@ -334,7 +336,7 @@ impl LayerList { opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -348,10 +350,11 @@ impl LayerList { mask: n.mask, } } else { + let children = graph.get_children(id).map(|c| c.as_slice()).unwrap_or(&[]); FlattenResult { commands: Self::build_render_commands( - &n.children, - repo, + children, + graph, scene_cache, opacity, out, @@ -379,7 +382,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -412,7 +415,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -445,7 +448,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -478,7 +481,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -511,7 +514,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -544,7 +547,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -591,7 +594,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, width: n.width, height: n.height, @@ -635,7 +638,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -658,7 +661,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -695,7 +698,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: n.blend_mode, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: n.effects.clone(), @@ -720,7 +723,7 @@ impl LayerList { opacity: parent_opacity * n.opacity, blend_mode: LayerBlendMode::PassThrough, transform, - clip_path: Self::compute_clip_path(&n.id, repo, scene_cache), + clip_path: Self::compute_clip_path(&n.id, graph, scene_cache), }, shape, effects: LayerEffects::default(), @@ -739,7 +742,7 @@ impl LayerList { fn build_render_commands( children: &[NodeId], - repo: &NodeRepository, + graph: &SceneGraph, scene_cache: &SceneCache, parent_opacity: f32, out: &mut Vec, @@ -750,7 +753,7 @@ impl LayerList { let mut out_commands = Vec::new(); let mut run: Vec = Vec::new(); for child_id in children { - let result = Self::flatten_node(child_id, repo, scene_cache, parent_opacity, out); + let result = Self::flatten_node(child_id, graph, scene_cache, parent_opacity, out); if let Some(mask_type) = result.mask { let mask_commands = result.commands; // Emit a scope with the accumulated run as content under this mask @@ -816,7 +819,7 @@ impl LayerList { /// An `Option` representing the merged clip path, or `None` if no clipping is needed. pub fn compute_clip_path( node_id: &NodeId, - repo: &NodeRepository, + graph: &SceneGraph, scene_cache: &SceneCache, ) -> Option { let mut clip_shapes = Vec::new(); @@ -834,7 +837,7 @@ impl LayerList { // Walk up the hierarchy to collect clip shapes while let Some(id) = current_id { - if let Some(node) = repo.get(&id) { + if let Ok(node) = graph.get_node(&id) { match node { Node::Container(n) => { if n.clip { @@ -858,7 +861,7 @@ impl LayerList { } Node::BooleanOperation(n) => { if let Some(mut path) = - boolean_operation_path(n, repo, scene_cache.geometry()) + boolean_operation_path(n, graph, scene_cache.geometry()) { let world_transform = scene_cache .geometry() diff --git a/crates/grida-canvas/src/painter/painter_debug_node.rs b/crates/grida-canvas/src/painter/painter_debug_node.rs index fe029f6819..abe4cb47e3 100644 --- a/crates/grida-canvas/src/painter/painter_debug_node.rs +++ b/crates/grida-canvas/src/painter/painter_debug_node.rs @@ -1,8 +1,7 @@ use super::geometry::*; -use super::layer::{LayerList, PainterPictureLayer}; use crate::cache::geometry::GeometryCache; use crate::cg::types::*; -use crate::node::repository::NodeRepository; +use crate::node::scene_graph::SceneGraph; use crate::node::schema::*; /// A painter specifically for drawing nodes, using the main Painter for operations. @@ -269,7 +268,7 @@ impl<'a> NodePainter<'a> { pub fn draw_container_node_recursively( &self, node: &ContainerNodeRec, - repository: &NodeRepository, + graph: &SceneGraph, cache: &GeometryCache, ) { self.painter.with_transform(&node.transform.matrix, || { @@ -287,18 +286,20 @@ impl<'a> NodePainter<'a> { // a clip region for the container's shape so that // descendants are clipped but the container's own stroke // remains unaffected. - if node.clip { - self.painter.with_clip(&shape, || { - for child_id in &node.children { - if let Some(child) = repository.get(child_id) { - self.draw_node_recursively(child, repository, cache); + if let Some(children) = graph.get_children(&node.id) { + if node.clip { + self.painter.with_clip(&shape, || { + for child_id in children { + if let Ok(child) = graph.get_node(child_id) { + self.draw_node_recursively(child, graph, cache); + } + } + }); + } else { + for child_id in children { + if let Ok(child) = graph.get_node(child_id) { + self.draw_node_recursively(child, graph, cache); } - } - }); - } else { - for child_id in &node.children { - if let Some(child) = repository.get(child_id) { - self.draw_node_recursively(child, repository, cache); } } } @@ -351,14 +352,16 @@ impl<'a> NodePainter<'a> { pub fn draw_group_node_recursively( &self, node: &GroupNodeRec, - repository: &NodeRepository, + graph: &SceneGraph, cache: &GeometryCache, ) { self.painter.with_transform_option(&node.transform, || { self.painter.with_opacity(node.opacity, || { - for child_id in &node.children { - if let Some(child) = repository.get(child_id) { - self.draw_node_recursively(child, repository, cache); + if let Some(children) = graph.get_children(&node.id) { + for child_id in children { + if let Ok(child) = graph.get_node(child_id) { + self.draw_node_recursively(child, graph, cache); + } } } }); @@ -368,11 +371,11 @@ impl<'a> NodePainter<'a> { pub fn draw_boolean_operation_node_recursively( &self, node: &BooleanPathOperationNodeRec, - repository: &NodeRepository, + graph: &SceneGraph, cache: &GeometryCache, ) { self.painter.with_transform_option(&node.transform, || { - if let Some(shape) = boolean_operation_shape(node, repository, cache) { + if let Some(shape) = boolean_operation_shape(node, graph, cache) { self.painter .draw_shape_with_effects(&node.effects, &shape, || { self.painter.with_opacity(node.opacity, || { @@ -393,9 +396,11 @@ impl<'a> NodePainter<'a> { }); }); } else { - for child_id in &node.children { - if let Some(child) = repository.get(child_id) { - self.draw_node_recursively(child, repository, cache); + if let Some(children) = graph.get_children(&node.id) { + for child_id in children { + if let Ok(child) = graph.get_node(child_id) { + self.draw_node_recursively(child, graph, cache); + } } } } @@ -424,19 +429,14 @@ impl<'a> NodePainter<'a> { } /// Dispatch to the correct node‐type draw method - pub fn draw_node_recursively( - &self, - node: &Node, - repository: &NodeRepository, - cache: &GeometryCache, - ) { + pub fn draw_node_recursively(&self, node: &Node, graph: &SceneGraph, cache: &GeometryCache) { if !node.active() { return; } match node { Node::Error(n) => self.draw_error_node(n), - Node::Group(n) => self.draw_group_node_recursively(n, repository, cache), - Node::Container(n) => self.draw_container_node_recursively(n, repository, cache), + Node::Group(n) => self.draw_group_node_recursively(n, graph, cache), + Node::Container(n) => self.draw_container_node_recursively(n, graph, cache), Node::Rectangle(n) => self.draw_rect_node(n), Node::Ellipse(n) => self.draw_ellipse_node(n), Node::Polygon(n) => self.draw_polygon_node(n), @@ -449,7 +449,7 @@ impl<'a> NodePainter<'a> { Node::Vector(n) => self.draw_vector_node(n), Node::SVGPath(n) => self.draw_path_node(n), Node::BooleanOperation(n) => { - self.draw_boolean_operation_node_recursively(n, repository, cache) + self.draw_boolean_operation_node_recursively(n, graph, cache) } Node::RegularStarPolygon(n) => self.draw_regular_star_polygon_node(n), } diff --git a/crates/grida-canvas/src/resources/mod.rs b/crates/grida-canvas/src/resources/mod.rs index d6a03c4488..143fef8ef5 100644 --- a/crates/grida-canvas/src/resources/mod.rs +++ b/crates/grida-canvas/src/resources/mod.rs @@ -122,20 +122,23 @@ pub struct FontMessage { /// Extract all image URLs from a scene. pub fn extract_image_urls(scene: &Scene) -> Vec { + // FIXME: this should either iterate the fills / strokes (all paints) rather then iterating the nodes. - the below implementation is legacy. let mut urls = Vec::new(); - for (_, n) in scene.nodes.iter() { - if let crate::node::schema::Node::Rectangle(rect) = n { - for fill in &rect.fills { - if let Paint::Image(img) = fill { - match &img.image { - ResourceRef::RID(r) | ResourceRef::HASH(r) => urls.push(r.clone()), + for (id, _) in scene.graph.iter() { + if let Ok(n) = scene.graph.get_node(id) { + if let crate::node::schema::Node::Rectangle(rect) = n { + for fill in &rect.fills { + if let Paint::Image(img) = fill { + match &img.image { + ResourceRef::RID(r) | ResourceRef::HASH(r) => urls.push(r.clone()), + } } } - } - for stroke in &rect.strokes { - if let Paint::Image(img) = stroke { - match &img.image { - ResourceRef::RID(r) | ResourceRef::HASH(r) => urls.push(r.clone()), + for stroke in &rect.strokes { + if let Paint::Image(img) = stroke { + match &img.image { + ResourceRef::RID(r) | ResourceRef::HASH(r) => urls.push(r.clone()), + } } } } diff --git a/crates/grida-canvas/src/runtime/scene.rs b/crates/grida-canvas/src/runtime/scene.rs index 089e61b46f..408a7ed86c 100644 --- a/crates/grida-canvas/src/runtime/scene.rs +++ b/crates/grida-canvas/src/runtime/scene.rs @@ -1,6 +1,9 @@ use crate::cache::tile::{ImageTileCacheResolutionStrategy, RegionTileInfo}; use crate::cg::types::*; -use crate::node::{repository::NodeRepository, schema::*}; +use crate::node::{ + scene_graph::{Parent, SceneGraph}, + schema::*, +}; use crate::painter::layer::Layer; use crate::painter::Painter; use crate::runtime::counter::FrameCounter; @@ -63,35 +66,25 @@ impl Default for RendererOptions { } fn collect_scene_font_families(scene: &Scene) -> HashSet { - fn walk(id: &NodeId, repo: &NodeRepository, set: &mut HashSet) { - if let Some(node) = repo.get(id) { + fn walk(id: &NodeId, graph: &SceneGraph, set: &mut HashSet) { + if let Ok(node) = graph.get_node(id) { match node { Node::TextSpan(n) => { set.insert(n.text_style.font_family.clone()); } - Node::Group(n) => { - for child in &n.children { - walk(child, repo, set); - } - } - Node::Container(n) => { - for child in &n.children { - walk(child, repo, set); - } - } - Node::BooleanOperation(n) => { - for child in &n.children { - walk(child, repo, set); - } - } _ => {} } } + if let Some(children) = graph.get_children(id) { + for child in children { + walk(child, graph, set); + } + } } let mut set = HashSet::new(); - for id in &scene.children { - walk(id, &scene.nodes, &mut set); + for id in scene.graph.roots() { + walk(&id, &scene.graph, &mut set); } set } @@ -679,12 +672,11 @@ impl Renderer { #[cfg(test)] mod tests { use super::*; - use crate::node::{factory::NodeFactory, repository::NodeRepository, schema::Size}; + use crate::node::{factory::NodeFactory, scene_graph::SceneGraph, schema::Size}; #[test] fn picture_recorded_with_layer_bounds() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); let mut rect = nf.create_rectangle_node(); rect.size = Size { @@ -692,13 +684,14 @@ mod tests { height: 40.0, }; let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + + let mut graph = SceneGraph::new(); + graph.insert_node(Node::Rectangle(rect)); + graph.insert(Parent::Root, vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![rect_id.clone()], - nodes: repo, + graph, background_color: None, }; @@ -755,17 +748,17 @@ mod tests { #[test] fn renderer_tracks_missing_fonts_from_scene() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); let mut text = nf.create_text_span_node(); text.text_style.font_family = "MissingFont".into(); - let text_id = repo.insert(Node::TextSpan(text)); + + let mut graph = SceneGraph::new(); + let text_id = graph.insert_node(Node::TextSpan(text)); + graph.insert(Parent::Root, vec![text_id]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![text_id], - nodes: repo, + graph, background_color: None, }; diff --git a/crates/grida-canvas/src/vectornetwork/vn_painter.rs b/crates/grida-canvas/src/vectornetwork/vn_painter.rs index df1d6df10b..71fc9c4afe 100644 --- a/crates/grida-canvas/src/vectornetwork/vn_painter.rs +++ b/crates/grida-canvas/src/vectornetwork/vn_painter.rs @@ -256,8 +256,7 @@ impl<'a> VNPainter<'a> { mod tests { use super::*; use crate::cg::types::{ - BlendMode, CGColor, FillRule, ImagePaint, ImageRepeat, Paint, ResourceRef, SolidPaint, - StrokeAlign, + BlendMode, CGColor, FillRule, ImagePaint, Paint, ResourceRef, SolidPaint, StrokeAlign, }; use crate::cg::Alignment; use crate::resources::ByteStore; diff --git a/crates/grida-canvas/src/window/application.rs b/crates/grida-canvas/src/window/application.rs index 2f2994adfd..1f7e851297 100644 --- a/crates/grida-canvas/src/window/application.rs +++ b/crates/grida-canvas/src/window/application.rs @@ -6,6 +6,7 @@ use crate::dummy; use crate::export::{export_node_as, ExportAs, Exported}; use crate::io::io_grida::{self, JSONVectorNetwork}; use crate::io::io_grida_patch::{self, TransactionApplyReport}; +use crate::node::scene_graph::{Parent, SceneGraph}; use crate::node::schema::*; use crate::resources::{FontMessage, ImageMessage}; use crate::runtime::camera::Camera2D; @@ -285,7 +286,7 @@ impl ApplicationApi for UnknownTargetApplication { fn to_vector_network(&mut self, id: &str) -> Option { if let Some(scene) = self.renderer.scene.as_ref() { - if let Some(node) = scene.nodes.get(&id.to_string()) { + if let Ok(node) = scene.graph.get_node(&id.to_string()) { let vn = match node { Node::Rectangle(n) => Some(n.to_vector_network()), Node::Ellipse(n) => Some(n.to_vector_network()), @@ -490,36 +491,29 @@ impl UnknownTargetApplication { .and_then(|c| c.clone()) .unwrap_or_default(); - // Convert nodes to repository, filtering out scene nodes - let mut node_repo = crate::node::repository::NodeRepository::new(); - for (node_id, json_node) in file.document.nodes { - // Skip scene nodes - they're handled separately - if matches!(json_node, io_grida::JSONNode::Scene(_)) { - continue; - } - - let mut node: Node = json_node.into(); - - // Populate children from links - if let Some(children_opt) = links.get(&node_id) { - if let Some(children) = children_opt { - match &mut node { - Node::Container(n) => n.children = children.clone(), - Node::Group(n) => n.children = children.clone(), - Node::BooleanOperation(n) => n.children = children.clone(), - _ => {} // Other nodes don't have children - } - } - } - - node_repo.insert(node); - } + // Convert all nodes (skip scene nodes) + let nodes: Vec = file + .document + .nodes + .into_iter() + .filter(|(_, json_node)| !matches!(json_node, io_grida::JSONNode::Scene(_))) + .map(|(_, json_node)| json_node.into()) + .collect(); + + // Filter links to remove None values + let filtered_links: std::collections::HashMap> = links + .into_iter() + .filter_map(|(parent_id, children_opt)| { + children_opt.map(|children| (parent_id, children)) + }) + .collect(); + + // Build scene graph from snapshot + let graph = SceneGraph::new_from_snapshot(nodes, filtered_links, scene_children); let scene = crate::node::schema::Scene { - id: scene_id, name: scene_name, - children: scene_children, - nodes: node_repo, + graph, background_color: bg_color, }; diff --git a/crates/grida-canvas/tests/export_as_pdf.rs b/crates/grida-canvas/tests/export_as_pdf.rs index 7779c48983..97670215b1 100644 --- a/crates/grida-canvas/tests/export_as_pdf.rs +++ b/crates/grida-canvas/tests/export_as_pdf.rs @@ -1,6 +1,10 @@ use cg::cg::types::*; use cg::export::{export_node_as, ExportAs}; -use cg::node::{factory::NodeFactory, repository::NodeRepository, schema::*}; +use cg::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::*, +}; use cg::resources::ByteStore; use cg::runtime::{font_repository::FontRepository, image_repository::ImageRepository}; use math2::transform::AffineTransform; @@ -10,7 +14,7 @@ use std::sync::{Arc, Mutex}; fn test_pdf_export() { // Create a simple scene with a rectangle let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.name = Some("Test Rectangle".to_string()); @@ -22,14 +26,13 @@ fn test_pdf_export() { rect.fills = Paints::new([Paint::from(CGColor(255, 0, 0, 255))]); let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); + graph.insert(Parent::Root, vec![rect_id.clone()]); let scene = Scene { - id: "test_scene".into(), name: "Test Scene".into(), - children: vec![rect_id.clone()], - nodes: repo, background_color: Some(CGColor(255, 255, 255, 255)), // White background + graph, }; let store = Arc::new(Mutex::new(ByteStore::new())); diff --git a/crates/grida-canvas/tests/geometry_cache.rs b/crates/grida-canvas/tests/geometry_cache.rs index b8b47ba5fe..5cb63bf7fe 100644 --- a/crates/grida-canvas/tests/geometry_cache.rs +++ b/crates/grida-canvas/tests/geometry_cache.rs @@ -1,5 +1,9 @@ use cg::cache::geometry::GeometryCache; -use cg::node::{factory::NodeFactory, repository::NodeRepository, schema::*}; +use cg::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::*, +}; use cg::resources::ByteStore; use cg::runtime::font_repository::FontRepository; use math2::transform::AffineTransform; @@ -8,43 +12,46 @@ use std::sync::{Arc, Mutex}; #[test] fn geometry_cache_builds_recursively() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.transform = AffineTransform::new(4.0, 6.0, 0.0); let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); let mut group2 = nf.create_group_node(); group2.transform = Some(AffineTransform::new(2.0, 3.0, 0.0)); - group2.children.push(rect_id.clone()); let group2_id = group2.id.clone(); - repo.insert(Node::Group(group2)); + graph.insert_node(Node::Group(group2)); + graph.insert(Parent::NodeId(group2_id.clone()), vec![rect_id.clone()]); let mut group1 = nf.create_group_node(); group1.transform = Some(AffineTransform::new(5.0, 5.0, 0.0)); - group1.children.push(group2_id.clone()); let group1_id = group1.id.clone(); - repo.insert(Node::Group(group1)); + graph.insert_node(Node::Group(group1)); + graph.insert(Parent::NodeId(group1_id.clone()), vec![group2_id.clone()]); let mut container = nf.create_container_node(); container.transform = AffineTransform::new(10.0, 20.0, 0.0); - container.children.push(group1_id.clone()); let container_id = container.id.clone(); - repo.insert(Node::Container(container)); + graph.insert_node(Node::Container(container)); + graph.insert( + Parent::NodeId(container_id.clone()), + vec![group1_id.clone()], + ); + + graph.insert(Parent::Root, vec![container_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![container_id.clone()], - nodes: repo.clone(), background_color: None, + graph: graph.clone(), }; let store = Arc::new(Mutex::new(ByteStore::new())); let fonts = FontRepository::new(store); let cache = GeometryCache::from_scene(&scene, &fonts); - assert_eq!(cache.len(), repo.len()); + assert_eq!(cache.len(), graph.node_count()); let expected = AffineTransform::new(21.0, 34.0, 0.0); assert_eq!( @@ -59,7 +66,7 @@ fn geometry_cache_builds_recursively() { #[test] fn container_world_bounds_include_children() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.transform = AffineTransform::new(50.0, 50.0, 0.0); @@ -68,23 +75,23 @@ fn container_world_bounds_include_children() { height: 100.0, }; let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); let mut container = nf.create_container_node(); container.size = Size { width: 100.0, height: 100.0, }; - container.children.push(rect_id.clone()); let container_id = container.id.clone(); - repo.insert(Node::Container(container)); + graph.insert_node(Node::Container(container)); + graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); + + graph.insert(Parent::Root, vec![container_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![container_id.clone()], - nodes: repo, background_color: None, + graph, }; let store = Arc::new(Mutex::new(ByteStore::new())); diff --git a/crates/grida-canvas/tests/hit_test.rs b/crates/grida-canvas/tests/hit_test.rs index 0fca051e8b..6f38af556a 100644 --- a/crates/grida-canvas/tests/hit_test.rs +++ b/crates/grida-canvas/tests/hit_test.rs @@ -1,6 +1,10 @@ use cg::cache::scene::SceneCache; use cg::hittest::HitTester; -use cg::node::{factory::NodeFactory, repository::NodeRepository, schema::*}; +use cg::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::*, +}; use cg::resources::ByteStore; use cg::runtime::font_repository::FontRepository; use math2::{rect::Rectangle, transform::AffineTransform}; @@ -9,7 +13,6 @@ use std::sync::{Arc, Mutex}; #[test] fn hit_first_returns_topmost() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); let mut rect = nf.create_rectangle_node(); rect.transform = AffineTransform::new(10.0, 10.0, 0.0); @@ -18,7 +21,6 @@ fn hit_first_returns_topmost() { height: 20.0, }; let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); let mut container = nf.create_container_node(); container.size = Size { @@ -26,15 +28,17 @@ fn hit_first_returns_topmost() { height: 40.0, }; let container_id = container.id.clone(); - container.children.push(rect_id.clone()); - repo.insert(Node::Container(container)); + + let mut graph = SceneGraph::new(); + graph.insert_node(Node::Rectangle(rect)); + graph.insert_node(Node::Container(container)); + graph.insert(Parent::Root, vec![container_id.clone()]); + graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![container_id.clone()], - nodes: repo, background_color: None, + graph, }; let mut cache = SceneCache::new(); @@ -58,19 +62,19 @@ fn hit_first_returns_topmost() { #[test] fn path_hit_testing_uses_contains() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); let mut path_node = nf.create_path_node(); path_node.data = "M0 0 L10 0 L10 10 Z".into(); let path_id = path_node.id.clone(); - repo.insert(Node::SVGPath(path_node.clone())); + + let mut graph = SceneGraph::new(); + graph.insert_node(Node::SVGPath(path_node.clone())); + graph.insert(Parent::Root, vec![path_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![path_id.clone()], - nodes: repo, background_color: None, + graph, }; let mut cache = SceneCache::new(); @@ -94,7 +98,6 @@ fn path_hit_testing_uses_contains() { #[test] fn intersects_returns_all_nodes_in_rect() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); let mut rect = nf.create_rectangle_node(); rect.transform = AffineTransform::new(50.0, 50.0, 0.0); @@ -103,7 +106,6 @@ fn intersects_returns_all_nodes_in_rect() { height: 100.0, }; let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); let mut container = nf.create_container_node(); container.size = Size { @@ -111,15 +113,17 @@ fn intersects_returns_all_nodes_in_rect() { height: 100.0, }; let container_id = container.id.clone(); - container.children.push(rect_id.clone()); - repo.insert(Node::Container(container)); + + let mut graph = SceneGraph::new(); + graph.insert_node(Node::Rectangle(rect)); + graph.insert_node(Node::Container(container)); + graph.insert(Parent::Root, vec![container_id.clone()]); + graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![container_id.clone()], - nodes: repo, background_color: None, + graph, }; let mut cache = SceneCache::new(); diff --git a/crates/grida-canvas/tests/render_bounds.rs b/crates/grida-canvas/tests/render_bounds.rs index 4ac42e717d..4777f57c46 100644 --- a/crates/grida-canvas/tests/render_bounds.rs +++ b/crates/grida-canvas/tests/render_bounds.rs @@ -1,6 +1,10 @@ use cg::cache::geometry::GeometryCache; use cg::cg::types::*; -use cg::node::{factory::NodeFactory, repository::NodeRepository, schema::*}; +use cg::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::*, +}; use cg::resources::ByteStore; use cg::runtime::font_repository::FontRepository; use std::sync::{Arc, Mutex}; @@ -8,20 +12,20 @@ use std::sync::{Arc, Mutex}; #[test] fn stroke_affects_render_bounds() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.stroke_width = 10.0; rect.stroke_align = StrokeAlign::Outside; let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); + + graph.insert(Parent::Root, vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![rect_id.clone()], - nodes: repo, background_color: None, + graph, }; let store = Arc::new(Mutex::new(ByteStore::new())); @@ -37,21 +41,21 @@ fn stroke_affects_render_bounds() { #[test] fn gaussian_blur_expands_render_bounds() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.effects = LayerEffects::from_array(vec![FilterEffect::LayerBlur(FeGaussianBlur { radius: 5.0, })]); let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); + + graph.insert(Parent::Root, vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![rect_id.clone()], - nodes: repo, background_color: None, + graph, }; let store = Arc::new(Mutex::new(ByteStore::new())); @@ -67,7 +71,7 @@ fn gaussian_blur_expands_render_bounds() { #[test] fn drop_shadow_expands_render_bounds() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.effects = LayerEffects::from_array(vec![FilterEffect::DropShadow(FeShadow { @@ -78,14 +82,14 @@ fn drop_shadow_expands_render_bounds() { color: CGColor(0, 0, 0, 255), })]); let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); + + graph.insert(Parent::Root, vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![rect_id.clone()], - nodes: repo, background_color: None, + graph, }; let store = Arc::new(Mutex::new(ByteStore::new())); @@ -101,7 +105,7 @@ fn drop_shadow_expands_render_bounds() { #[test] fn drop_shadow_spread_expands_render_bounds() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.effects = LayerEffects::from_array(vec![FilterEffect::DropShadow(FeShadow { @@ -112,14 +116,14 @@ fn drop_shadow_spread_expands_render_bounds() { color: CGColor(0, 0, 0, 255), })]); let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); + + graph.insert(Parent::Root, vec![rect_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![rect_id.clone()], - nodes: repo, background_color: None, + graph, }; let store = Arc::new(Mutex::new(ByteStore::new())); diff --git a/crates/grida-canvas/tests/scene_cache.rs b/crates/grida-canvas/tests/scene_cache.rs index fb3faf492c..e0ea7b1ab1 100644 --- a/crates/grida-canvas/tests/scene_cache.rs +++ b/crates/grida-canvas/tests/scene_cache.rs @@ -1,5 +1,9 @@ use cg::cache::scene::SceneCache; -use cg::node::{factory::NodeFactory, repository::NodeRepository, schema::*}; +use cg::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::*, +}; use cg::painter::layer::Layer; use cg::resources::ByteStore; use cg::runtime::font_repository::FontRepository; @@ -10,7 +14,7 @@ use std::sync::{Arc, Mutex}; #[test] fn layers_in_rect_include_partially_visible_nested() { let nf = NodeFactory::new(); - let mut repo = NodeRepository::new(); + let mut graph = SceneGraph::new(); let mut rect = nf.create_rectangle_node(); rect.transform = AffineTransform::new(50.0, 50.0, 0.0); @@ -19,7 +23,7 @@ fn layers_in_rect_include_partially_visible_nested() { height: 100.0, }; let rect_id = rect.id.clone(); - repo.insert(Node::Rectangle(rect)); + graph.insert_node(Node::Rectangle(rect)); let mut container = nf.create_container_node(); container.size = Size { @@ -27,15 +31,15 @@ fn layers_in_rect_include_partially_visible_nested() { height: 100.0, }; let container_id = container.id.clone(); - container.children.push(rect_id.clone()); - repo.insert(Node::Container(container)); + graph.insert_node(Node::Container(container)); + graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); + + graph.insert(Parent::Root, vec![container_id.clone()]); let scene = Scene { - id: "scene".into(), name: "test".into(), - children: vec![container_id.clone()], - nodes: repo, background_color: None, + graph, }; let mut cache = SceneCache::new(); From 5f332145258ebfadb4ec78b4d7bbf712dbfea0bd Mon Sep 17 00:00:00 2001 From: Universe Date: Wed, 15 Oct 2025 02:30:06 +0900 Subject: [PATCH 3/5] use append_child --- crates/grida-canvas/examples/golden_svg.rs | 44 ++---- crates/grida-canvas/examples/grida_basic.rs | 62 ++++---- .../grida-canvas/examples/grida_blendmode.rs | 66 ++++---- .../grida-canvas/examples/grida_booleans.rs | 135 +++++++--------- crates/grida-canvas/examples/grida_effects.rs | 77 ++++++---- crates/grida-canvas/examples/grida_fills.rs | 34 ++-- .../grida-canvas/examples/grida_gradients.rs | 21 +-- crates/grida-canvas/examples/grida_image.rs | 11 +- crates/grida-canvas/examples/grida_images.rs | 41 ++--- crates/grida-canvas/examples/grida_lines.rs | 28 ++-- crates/grida-canvas/examples/grida_mask.rs | 87 +++++------ crates/grida-canvas/examples/grida_nested.rs | 145 +++++++++--------- crates/grida-canvas/examples/grida_paint.rs | 44 +++--- crates/grida-canvas/examples/grida_shapes.rs | 31 ++-- .../examples/grida_shapes_ellipse.rs | 23 +-- crates/grida-canvas/examples/grida_strokes.rs | 104 ++++++++----- crates/grida-canvas/examples/grida_texts.rs | 37 ++--- crates/grida-canvas/examples/grida_vector.rs | 36 ++--- .../grida-canvas/examples/grida_webfonts.rs | 36 ++--- crates/grida-canvas/examples/sys_camera.rs | 34 ++-- crates/grida-canvas/examples/wd_animation.rs | 4 +- crates/grida-canvas/src/node/scene_graph.rs | 138 ++++++----------- crates/grida-canvas/src/runtime/scene.rs | 18 +-- crates/grida-canvas/tests/export_as_pdf.rs | 4 +- crates/grida-canvas/tests/geometry_cache.rs | 45 ++---- crates/grida-canvas/tests/hit_test.rs | 45 ++---- crates/grida-canvas/tests/render_bounds.rs | 16 +- crates/grida-canvas/tests/scene_cache.rs | 19 +-- 28 files changed, 589 insertions(+), 796 deletions(-) diff --git a/crates/grida-canvas/examples/golden_svg.rs b/crates/grida-canvas/examples/golden_svg.rs index 8625ac37b3..1eb24d9af9 100644 --- a/crates/grida-canvas/examples/golden_svg.rs +++ b/crates/grida-canvas/examples/golden_svg.rs @@ -21,7 +21,7 @@ async fn demo_scene() -> Scene { height: 700.0, }; - let mut all_node_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container), Parent::Root); // Title text let mut title_text = nf.create_text_span_node(); @@ -48,8 +48,6 @@ async fn demo_scene() -> Scene { title_text.text_align = TextAlign::Center; title_text.text_align_vertical = TextAlignVertical::Center; title_text.fills = Paints::new([Paint::from(CGColor(50, 50, 50, 255))]); - all_node_ids.push(title_text.id.clone()); - graph.insert_node(Node::TextSpan(title_text)); // Subtitle text let mut subtitle_text = nf.create_text_span_node(); @@ -62,8 +60,6 @@ async fn demo_scene() -> Scene { subtitle_text.text_align = TextAlign::Center; subtitle_text.text_align_vertical = TextAlignVertical::Center; subtitle_text.fills = Paints::new([Paint::from(CGColor(100, 100, 100, 255))]); - all_node_ids.push(subtitle_text.id.clone()); - graph.insert_node(Node::TextSpan(subtitle_text)); // Rectangle with gradient fill let mut rect_gradient = nf.create_rectangle_node(); @@ -103,8 +99,6 @@ async fn demo_scene() -> Scene { spread: 0.0, color: CGColor(0, 0, 0, 100), })]); - all_node_ids.push(rect_gradient.id.clone()); - graph.insert_node(Node::Rectangle(rect_gradient)); // Ellipse with radial gradient let mut ellipse_radial = nf.create_ellipse_node(); @@ -136,8 +130,6 @@ async fn demo_scene() -> Scene { })]); ellipse_radial.stroke_width = 4.0; ellipse_radial.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - all_node_ids.push(ellipse_radial.id.clone()); - graph.insert_node(Node::Ellipse(ellipse_radial)); // Polygon (hexagon) let hexagon_points = (0..6) @@ -164,8 +156,6 @@ async fn demo_scene() -> Scene { spread: 0.0, color: CGColor(0, 0, 0, 150), })]); - all_node_ids.push(hexagon.id.clone()); - graph.insert_node(Node::Polygon(hexagon)); // Star polygon let mut star = nf.create_regular_star_polygon_node(); @@ -180,8 +170,6 @@ async fn demo_scene() -> Scene { star.fills = Paints::new([Paint::from(CGColor(255, 215, 0, 255))]); star.stroke_width = 2.0; star.strokes = Paints::new([Paint::from(CGColor(139, 69, 19, 255))]); - all_node_ids.push(star.id.clone()); - graph.insert_node(Node::RegularStarPolygon(star)); // Path (complex shape) let mut path = nf.create_path_node(); @@ -191,8 +179,6 @@ async fn demo_scene() -> Scene { path.fills = Paints::new([Paint::from(CGColor(255, 20, 147, 255))]); path.stroke_width = 2.0; path.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - all_node_ids.push(path.id.clone()); - graph.insert_node(Node::SVGPath(path)); // Line with gradient stroke let mut line = nf.create_line_node(); @@ -223,8 +209,6 @@ async fn demo_scene() -> Scene { active: true, })]); line.stroke_width = 8.0; - all_node_ids.push(line.id.clone()); - graph.insert_node(Node::Line(line)); // Regular polygon (octagon) let mut octagon = nf.create_regular_polygon_node(); @@ -238,8 +222,6 @@ async fn demo_scene() -> Scene { octagon.fills = Paints::new([Paint::from(CGColor(0, 255, 255, 255))]); octagon.stroke_width = 3.0; octagon.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - all_node_ids.push(octagon.id.clone()); - graph.insert_node(Node::RegularPolygon(octagon)); // Description text let mut description_text = nf.create_text_span_node(); @@ -251,15 +233,23 @@ async fn demo_scene() -> Scene { description_text.text_align = TextAlign::Center; description_text.text_align_vertical = TextAlignVertical::Center; description_text.fills = Paints::new([Paint::from(CGColor(80, 80, 80, 255))]); - all_node_ids.push(description_text.id.clone()); - graph.insert_node(Node::TextSpan(description_text)); - // Set up the root container - let root_container_id = root_container.id.clone(); - graph.insert(Parent::NodeId(root_container_id.clone()), all_node_ids); - graph.insert_node(Node::Container(root_container)); - - graph.insert(Parent::Root, vec![root_container_id.clone()]); + // Add all nodes to root container + graph.append_children( + vec![ + Node::TextSpan(title_text), + Node::TextSpan(subtitle_text), + Node::Rectangle(rect_gradient), + Node::Ellipse(ellipse_radial), + Node::Polygon(hexagon), + Node::RegularStarPolygon(star), + Node::SVGPath(path), + Node::Line(line), + Node::RegularPolygon(octagon), + Node::TextSpan(description_text), + ], + Parent::NodeId(root_container_id), + ); Scene { name: "SVG Demo".into(), diff --git a/crates/grida-canvas/examples/grida_basic.rs b/crates/grida-canvas/examples/grida_basic.rs index 7b8617deeb..ec7301594b 100644 --- a/crates/grida-canvas/examples/grida_basic.rs +++ b/crates/grida-canvas/examples/grida_basic.rs @@ -159,48 +159,38 @@ async fn demo_basic() -> Scene { }; root_container_node.name = Some("Root Container".to_string()); - // Collect all the IDs - let rect_id = rect_node.id.clone(); - let ellipse_id = ellipse_node.id.clone(); - let polygon_id = polygon_node.id.clone(); - let regular_polygon_id = regular_polygon_node.id.clone(); - let text_span_id = text_span_node.id.clone(); - let line_id = line_node.id.clone(); - let image_id = image_node.id.clone(); - let path_id = path_node.id.clone(); - let shapes_group_id = shapes_group_node.id.clone(); - let root_container_id = root_container_node.id.clone(); - // Build the scene graph let mut graph = SceneGraph::new(); - // Add all nodes first - graph.insert_node(Node::Rectangle(rect_node)); - graph.insert_node(Node::Ellipse(ellipse_node)); - graph.insert_node(Node::Polygon(polygon_node)); - graph.insert_node(Node::RegularPolygon(regular_polygon_node)); - graph.insert_node(Node::TextSpan(text_span_node)); - graph.insert_node(Node::Line(line_node)); - graph.insert_node(Node::Image(image_node)); - graph.insert_node(Node::SVGPath(path_node)); - graph.insert_node(Node::Group(shapes_group_node)); - graph.insert_node(Node::Container(root_container_node)); - - // Set up the hierarchy - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert( - Parent::NodeId(root_container_id), + // Add root container + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); + + // Add shapes group to container + let shapes_group_id = graph.append_child( + Node::Group(shapes_group_node), + Parent::NodeId(root_container_id.clone()), + ); + + // Add shapes to group + graph.append_children( vec![ - shapes_group_id.clone(), - text_span_id, - line_id, - path_id, - image_id, + Node::Rectangle(rect_node), + Node::Ellipse(ellipse_node), + Node::Polygon(polygon_node), + Node::RegularPolygon(regular_polygon_node), ], - ); - graph.insert( Parent::NodeId(shapes_group_id), - vec![rect_id, ellipse_id, polygon_id, regular_polygon_id], + ); + + // Add other elements to container + graph.append_children( + vec![ + Node::TextSpan(text_span_node), + Node::Line(line_node), + Node::SVGPath(path_node), + Node::Image(image_node), + ], + Parent::NodeId(root_container_id), ); Scene { diff --git a/crates/grida-canvas/examples/grida_blendmode.rs b/crates/grida-canvas/examples/grida_blendmode.rs index 957f8780a0..fc5bbcc426 100644 --- a/crates/grida-canvas/examples/grida_blendmode.rs +++ b/crates/grida-canvas/examples/grida_blendmode.rs @@ -1,3 +1,5 @@ +// FIXME: broken demo - make this golden_ not grida_ + use cg::cg::types::*; use cg::node::factory::NodeFactory; use cg::node::scene_graph::{Parent, SceneGraph}; @@ -17,7 +19,7 @@ async fn demo_blendmode() -> Scene { }; root_container_node.name = Some("Root Container".to_string()); - let mut all_blendmode_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); let spacing = 400.0; let start_x = 50.0; let base_size = 256.0; @@ -80,8 +82,10 @@ async fn demo_blendmode() -> Scene { active: true, })); - let background_id = background.id.clone(); - graph.insert_node(Node::Rectangle(background)); + graph.append_child( + Node::Rectangle(background), + Parent::NodeId(root_container_id.clone()), + ); // Create a sweep gradient overlay (similar to C++ example's sweep gradient) let mut sweep_overlay = nf.create_rectangle_node(); @@ -136,8 +140,10 @@ async fn demo_blendmode() -> Scene { active: true, })); - let sweep_overlay_id = sweep_overlay.id.clone(); - graph.insert_node(Node::Rectangle(sweep_overlay)); + graph.append_child( + Node::Rectangle(sweep_overlay), + Parent::NodeId(root_container_id.clone()), + ); // Create a group for the colored circles with the specific blend mode let mut circle_group = nf.create_group_node(); @@ -145,7 +151,11 @@ async fn demo_blendmode() -> Scene { circle_group.transform = Some(AffineTransform::new(x, y, 0.0)); circle_group.blend_mode = LayerBlendMode::Blend(*blend_mode); - let mut circle_ids = Vec::new(); + // Add group to root container first + let circle_group_id = graph.append_child( + Node::Group(circle_group), + Parent::NodeId(root_container_id.clone()), + ); // Create three colored circles (green, red, blue) like in the C++ example let circle_radius = 80.0; @@ -160,9 +170,10 @@ async fn demo_blendmode() -> Scene { }; green_circle.set_fill(Paint::from(CGColor(0, 255, 0, 255))); green_circle.blend_mode = LayerBlendMode::default(); - let green_circle_id = green_circle.id.clone(); - graph.insert_node(Node::Ellipse(green_circle)); - circle_ids.push(green_circle_id); + graph.append_child( + Node::Ellipse(green_circle), + Parent::NodeId(circle_group_id.clone()), + ); // Red circle (bottom left) let mut red_circle = nf.create_ellipse_node(); @@ -174,9 +185,10 @@ async fn demo_blendmode() -> Scene { }; red_circle.set_fill(Paint::from(CGColor(255, 0, 0, 255))); red_circle.blend_mode = LayerBlendMode::default(); - let red_circle_id = red_circle.id.clone(); - graph.insert_node(Node::Ellipse(red_circle)); - circle_ids.push(red_circle_id); + graph.append_child( + Node::Ellipse(red_circle), + Parent::NodeId(circle_group_id.clone()), + ); // Blue circle (bottom right) let mut blue_circle = nf.create_ellipse_node(); @@ -189,14 +201,10 @@ async fn demo_blendmode() -> Scene { }; blue_circle.set_fill(Paint::from(CGColor(0, 0, 255, 255))); blue_circle.blend_mode = LayerBlendMode::default(); - let blue_circle_id = blue_circle.id.clone(); - graph.insert_node(Node::Ellipse(blue_circle)); - circle_ids.push(blue_circle_id); - - // Set up the circle group - let circle_group_id = circle_group.id.clone(); - graph.insert_node(Node::Group(circle_group)); - graph.insert(Parent::NodeId(circle_group_id.clone()), circle_ids); + graph.append_child( + Node::Ellipse(blue_circle), + Parent::NodeId(circle_group_id.clone()), + ); // Create a text label for the blend mode let mut label = nf.create_text_span_node(); @@ -208,22 +216,12 @@ async fn demo_blendmode() -> Scene { label.text_align = TextAlign::Left; label.text_align_vertical = TextAlignVertical::Top; label.fills = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); - let label_id = label.id.clone(); - graph.insert_node(Node::TextSpan(label)); - - // Add all elements for this blend mode - all_blendmode_ids.push(background_id); - all_blendmode_ids.push(sweep_overlay_id); - all_blendmode_ids.push(circle_group_id); - all_blendmode_ids.push(label_id); + graph.append_child( + Node::TextSpan(label), + Parent::NodeId(root_container_id.clone()), + ); } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), all_blendmode_ids); - Scene { name: "Blend Mode Demo".to_string(), background_color: Some(CGColor(240, 240, 240, 255)), diff --git a/crates/grida-canvas/examples/grida_booleans.rs b/crates/grida-canvas/examples/grida_booleans.rs index c7046c5b5e..763639e29a 100644 --- a/crates/grida-canvas/examples/grida_booleans.rs +++ b/crates/grida-canvas/examples/grida_booleans.rs @@ -1,3 +1,5 @@ +// FIXME: broken demo - make this golden_ not grida_ + use cg::cg::types::*; use cg::node::factory::NodeFactory; use cg::node::scene_graph::{Parent, SceneGraph}; @@ -17,7 +19,7 @@ async fn demo_booleans() -> Scene { height: 1080.0, }; - let mut all_shape_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); let spacing = 200.0; let start_x = 100.0; let base_size = 100.0; @@ -72,25 +74,19 @@ async fn demo_booleans() -> Scene { stroke_dash_array: None, }; - // Collect IDs before moving nodes - let rect_id = rect.id.clone(); - let circle_id = circle.id.clone(); - let text_id = text.id.clone(); - let bool_id = bool_node.id.clone(); - - all_shape_ids.push(rect_id.clone()); - all_shape_ids.push(circle_id.clone()); - all_shape_ids.push(text_id); - all_shape_ids.push(bool_id.clone()); - - // Insert all nodes - graph.insert_node(Node::Rectangle(rect)); - graph.insert_node(Node::Ellipse(circle)); - graph.insert_node(Node::TextSpan(text)); - graph.insert_node(Node::BooleanOperation(bool_node)); - - // Set up boolean operation hierarchy - graph.insert(Parent::NodeId(bool_id), vec![rect_id, circle_id]); + // Add boolean operation to root, then add operands to it + let bool_id = graph.append_child( + Node::BooleanOperation(bool_node), + Parent::NodeId(root_container_id.clone()), + ); + graph.append_children( + vec![Node::Rectangle(rect), Node::Ellipse(circle)], + Parent::NodeId(bool_id), + ); + graph.append_child( + Node::TextSpan(text), + Parent::NodeId(root_container_id.clone()), + ); } // Example 2: Two Circles Intersection @@ -144,24 +140,19 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - let circle1_id = circle1.id.clone(); - let circle2_id = circle2.id.clone(); - let text_id = text.id.clone(); - let bool_id = bool_node.id.clone(); - - all_shape_ids.push(circle1_id.clone()); - all_shape_ids.push(circle2_id.clone()); - all_shape_ids.push(text_id); - all_shape_ids.push(bool_id.clone()); - - // Insert all nodes - graph.insert_node(Node::Ellipse(circle1)); - graph.insert_node(Node::Ellipse(circle2)); - graph.insert_node(Node::TextSpan(text)); - graph.insert_node(Node::BooleanOperation(bool_node)); - - // Set up boolean operation hierarchy - graph.insert(Parent::NodeId(bool_id), vec![circle1_id, circle2_id]); + // Add boolean operation to root, then add operands to it + let bool_id = graph.append_child( + Node::BooleanOperation(bool_node), + Parent::NodeId(root_container_id.clone()), + ); + graph.append_children( + vec![Node::Ellipse(circle1), Node::Ellipse(circle2)], + Parent::NodeId(bool_id), + ); + graph.append_child( + Node::TextSpan(text), + Parent::NodeId(root_container_id.clone()), + ); } // Example 3: Star and Rectangle Difference @@ -215,24 +206,19 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - let star_id = star.id.clone(); - let rect_id = rect.id.clone(); - let text_id = text.id.clone(); - let bool_id = bool_node.id.clone(); - - all_shape_ids.push(star_id.clone()); - all_shape_ids.push(rect_id.clone()); - all_shape_ids.push(text_id.clone()); - all_shape_ids.push(bool_node.id.clone()); - - // Insert all nodes - graph.insert_node(Node::RegularStarPolygon(star)); - graph.insert_node(Node::Rectangle(rect)); - graph.insert_node(Node::TextSpan(text)); - graph.insert_node(Node::BooleanOperation(bool_node)); - - // Set up boolean operation hierarchy - graph.insert(Parent::NodeId(bool_id), vec![star_id, rect_id]); + // Add boolean operation to root, then add operands to it + let bool_id = graph.append_child( + Node::BooleanOperation(bool_node), + Parent::NodeId(root_container_id.clone()), + ); + graph.append_children( + vec![Node::RegularStarPolygon(star), Node::Rectangle(rect)], + Parent::NodeId(bool_id), + ); + graph.append_child( + Node::TextSpan(text), + Parent::NodeId(root_container_id.clone()), + ); } // Example 4): Two Squares XOR @@ -286,32 +272,21 @@ async fn demo_booleans() -> Scene { }; // Collect IDs before moving nodes - let square1_id = square1.id.clone(); - let square2_id = square2.id.clone(); - let text_id = text.id.clone(); - let bool_id = bool_node.id.clone(); - - all_shape_ids.push(square1_id.clone()); - all_shape_ids.push(square2_id.clone()); - all_shape_ids.push(text.id.clone()); - all_shape_ids.push(bool_node.id.clone()); - - // Insert all nodes - graph.insert_node(Node::Rectangle(square1)); - graph.insert_node(Node::Rectangle(square2)); - graph.insert_node(Node::TextSpan(text)); - graph.insert_node(Node::BooleanOperation(bool_node)); - - // Set up boolean operation hierarchy - graph.insert(Parent::NodeId(bool_id), vec![square1_id, square2_id]); + // Add boolean operation to root, then add operands to it + let bool_id = graph.append_child( + Node::BooleanOperation(bool_node), + Parent::NodeId(root_container_id.clone()), + ); + graph.append_children( + vec![Node::Rectangle(square1), Node::Rectangle(square2)], + Parent::NodeId(bool_id), + ); + graph.append_child( + Node::TextSpan(text), + Parent::NodeId(root_container_id.clone()), + ); } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), all_shape_ids); - Scene { name: "Boolean Operations Demo".to_string(), background_color: Some(CGColor(250, 250, 250, 255)), diff --git a/crates/grida-canvas/examples/grida_effects.rs b/crates/grida-canvas/examples/grida_effects.rs index 5e66b18a79..b39dfebcdf 100644 --- a/crates/grida-canvas/examples/grida_effects.rs +++ b/crates/grida-canvas/examples/grida_effects.rs @@ -17,7 +17,7 @@ async fn demo_effects() -> Scene { }; root_container_node.name = Some("Root Container".to_string()); - let mut all_effect_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); let spacing = 200.0; let start_x = 50.0; let base_size = 150.0; @@ -42,8 +42,10 @@ async fn demo_effects() -> Scene { spread: 0.0, color: CGColor(0, 0, 0, 128), })]); - all_effect_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } else { // Last two shapes as regular polygons let mut polygon = nf.create_regular_polygon_node(); @@ -62,8 +64,10 @@ async fn demo_effects() -> Scene { spread: 2.0 * (i + 1) as f32, color: CGColor(0, 0, 0, 128), })]); - all_effect_ids.push(polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(polygon)); + graph.append_child( + Node::RegularPolygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); } } @@ -84,8 +88,10 @@ async fn demo_effects() -> Scene { LayerEffects::from_array(vec![FilterEffect::LayerBlur(FeGaussianBlur { radius: 4.0 * (i + 1) as f32, })]); - all_effect_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } else { // Last two shapes as regular polygons let mut polygon = nf.create_regular_polygon_node(); @@ -101,8 +107,10 @@ async fn demo_effects() -> Scene { LayerEffects::from_array(vec![FilterEffect::LayerBlur(FeGaussianBlur { radius: 4.0 * (i + 1) as f32, })]); - all_effect_ids.push(polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(polygon)); + graph.append_child( + Node::RegularPolygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); } } @@ -135,8 +143,10 @@ async fn demo_effects() -> Scene { blend_mode: BlendMode::Normal, active: true, })); - let vivid_gradient_rect_id = vivid_gradient_rect.id.clone(); - graph.insert_node(Node::Rectangle(vivid_gradient_rect)); + graph.append_child( + Node::Rectangle(vivid_gradient_rect), + Parent::NodeId(root_container_id.clone()), + ); for i in 0..6 { if i < 3 { @@ -154,8 +164,10 @@ async fn demo_effects() -> Scene { LayerEffects::from_array(vec![FilterEffect::BackdropBlur(FeGaussianBlur { radius: 8.0 * (i + 1) as f32, })]); - all_effect_ids.push(blur_rect.id.clone()); - graph.insert_node(Node::Rectangle(blur_rect)); + graph.append_child( + Node::Rectangle(blur_rect), + Parent::NodeId(root_container_id.clone()), + ); } else { // Last two shapes as regular polygons let mut blur_polygon = nf.create_regular_polygon_node(); @@ -171,8 +183,10 @@ async fn demo_effects() -> Scene { LayerEffects::from_array(vec![FilterEffect::BackdropBlur(FeGaussianBlur { radius: 8.0 * (i + 1) as f32, })]); - all_effect_ids.push(blur_polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(blur_polygon)); + graph.append_child( + Node::RegularPolygon(blur_polygon), + Parent::NodeId(root_container_id.clone()), + ); } } @@ -196,8 +210,10 @@ async fn demo_effects() -> Scene { spread: 0.0, color: CGColor(0, 0, 0, 100), })]); - all_effect_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } else { // Last three shapes as regular polygons let mut polygon = nf.create_regular_polygon_node(); @@ -216,8 +232,10 @@ async fn demo_effects() -> Scene { spread: 2.0 * (i + 1) as f32, color: CGColor(0, 0, 0, 100), })]); - all_effect_ids.push(polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(polygon)); + graph.append_child( + Node::RegularPolygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); } } @@ -284,8 +302,10 @@ async fn demo_effects() -> Scene { }; rect.effects = LayerEffects::from_array(effects); - all_effect_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } else { // Last three shapes as regular polygons with multiple effects let mut polygon = nf.create_regular_polygon_node(); @@ -341,20 +361,13 @@ async fn demo_effects() -> Scene { }; polygon.effects = LayerEffects::from_array(effects); - all_effect_ids.push(polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(polygon)); + graph.append_child( + Node::RegularPolygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); } } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - - let mut root_children = vec![vivid_gradient_rect_id]; - root_children.extend(all_effect_ids); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), root_children); - Scene { name: "Effects Demo".to_string(), background_color: Some(CGColor(250, 250, 250, 255)), diff --git a/crates/grida-canvas/examples/grida_fills.rs b/crates/grida-canvas/examples/grida_fills.rs index c08864fd2b..44b907a047 100644 --- a/crates/grida-canvas/examples/grida_fills.rs +++ b/crates/grida-canvas/examples/grida_fills.rs @@ -17,7 +17,8 @@ async fn demo_fills() -> Scene { height: 800.0, }; - let mut ids = Vec::new(); + let root_id = graph.append_child(Node::Container(root), Parent::Root); + let spacing = 200.0; let start_x = 100.0; let base_y = 100.0; @@ -37,8 +38,7 @@ async fn demo_fills() -> Scene { Paint::from(CGColor(0, 0, 255, 255)), ]); multi_solid_rect.stroke_width = 3.0; - ids.push(multi_solid_rect.id.clone()); - graph.insert_node(Node::Rectangle(multi_solid_rect)); + graph.append_child(Node::Rectangle(multi_solid_rect), Parent::NodeId(root_id.clone())); // 2. Rectangle with solid + linear gradient fills let mut solid_gradient_rect = nf.create_rectangle_node(); @@ -69,8 +69,7 @@ async fn demo_fills() -> Scene { }), ]); solid_gradient_rect.stroke_width = 3.0; - ids.push(solid_gradient_rect.id.clone()); - graph.insert_node(Node::Rectangle(solid_gradient_rect)); + graph.append_child(Node::Rectangle(solid_gradient_rect), Parent::NodeId(root_id.clone())); // 3. Rectangle with solid + radial gradient fills let mut solid_radial_rect = nf.create_rectangle_node(); @@ -105,8 +104,7 @@ async fn demo_fills() -> Scene { }), ]); solid_radial_rect.stroke_width = 3.0; - ids.push(solid_radial_rect.id.clone()); - graph.insert_node(Node::Rectangle(solid_radial_rect)); + graph.append_child(Node::Rectangle(solid_radial_rect), Parent::NodeId(root_id.clone())); // 4. Rectangle with linear + radial gradient fills let mut gradient_gradient_rect = nf.create_rectangle_node(); @@ -154,8 +152,7 @@ async fn demo_fills() -> Scene { }), ]); gradient_gradient_rect.stroke_width = 3.0; - ids.push(gradient_gradient_rect.id.clone()); - graph.insert_node(Node::Rectangle(gradient_gradient_rect)); + graph.append_child(Node::Rectangle(gradient_gradient_rect), Parent::NodeId(root_id.clone())); // 5. Ellipse with multiple radial gradients (concentric circles effect) let mut multi_radial_ellipse = nf.create_ellipse_node(); @@ -216,8 +213,7 @@ async fn demo_fills() -> Scene { }), ]); multi_radial_ellipse.stroke_width = 3.0; - ids.push(multi_radial_ellipse.id.clone()); - graph.insert_node(Node::Ellipse(multi_radial_ellipse)); + graph.append_child(Node::Ellipse(multi_radial_ellipse), Parent::NodeId(root_id.clone())); // 6. Polygon with solid + linear gradient + radial gradient let pentagon_points = (0..5) @@ -272,8 +268,7 @@ async fn demo_fills() -> Scene { }), ]); complex_fill_polygon.stroke_width = 4.0; - ids.push(complex_fill_polygon.id.clone()); - graph.insert_node(Node::Polygon(complex_fill_polygon)); + graph.append_child(Node::Polygon(complex_fill_polygon), Parent::NodeId(root_id.clone())); // 7. Regular polygon with multiple linear gradients at different angles let mut multi_linear_polygon = nf.create_regular_polygon_node(); @@ -336,8 +331,7 @@ async fn demo_fills() -> Scene { }), ]); multi_linear_polygon.stroke_width = 3.0; - ids.push(multi_linear_polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(multi_linear_polygon)); + graph.append_child(Node::RegularPolygon(multi_linear_polygon), Parent::NodeId(root_id.clone())); // 8. Container with multiple fills (demonstrating container fill capability) let mut multi_fill_container = nf.create_container_node(); @@ -372,15 +366,7 @@ async fn demo_fills() -> Scene { }), ]); multi_fill_container.stroke_width = 3.0; - ids.push(multi_fill_container.id.clone()); - graph.insert_node(Node::Container(multi_fill_container)); - - // Add all nodes to root - let root_id = root.id.clone(); - graph.insert(Parent::NodeId(root_id.clone()), ids.clone()); - graph.insert_node(Node::Container(root)); - - graph.insert(Parent::Root, vec![root_id.clone()]); + graph.append_child(Node::Container(multi_fill_container), Parent::NodeId(root_id.clone())); Scene { name: "Fills Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_gradients.rs b/crates/grida-canvas/examples/grida_gradients.rs index 3457f97cc4..6d6f9000ed 100644 --- a/crates/grida-canvas/examples/grida_gradients.rs +++ b/crates/grida-canvas/examples/grida_gradients.rs @@ -17,7 +17,8 @@ async fn demo_gradients() -> Scene { height: 800.0, }; - let mut ids = Vec::new(); + let root_id = graph.append_child(Node::Container(root), Parent::Root); + let spacing = 160.0; let start_x = 60.0; let base = 120.0; @@ -49,8 +50,7 @@ async fn demo_gradients() -> Scene { blend_mode: BlendMode::Normal, active: true, })); - ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_id.clone())); } // Radial gradient fills @@ -82,8 +82,7 @@ async fn demo_gradients() -> Scene { blend_mode: BlendMode::Normal, active: true, })); - ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_id.clone())); } // Linear gradient strokes @@ -115,8 +114,7 @@ async fn demo_gradients() -> Scene { active: true, })]); rect.stroke_width = 8.0; - ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_id.clone())); } // Radial gradient strokes @@ -150,15 +148,8 @@ async fn demo_gradients() -> Scene { active: true, })]); rect.stroke_width = 8.0; - ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_id.clone())); } - let root_id = root.id.clone(); - - graph.insert(Parent::NodeId(root_id.clone()), ids.clone()); - graph.insert_node(Node::Container(root)); - - graph.insert(Parent::Root, vec![root_id.clone()]); Scene { name: "Gradients Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_image.rs b/crates/grida-canvas/examples/grida_image.rs index 9dc52390e0..8a2203f3b0 100644 --- a/crates/grida-canvas/examples/grida_image.rs +++ b/crates/grida-canvas/examples/grida_image.rs @@ -48,15 +48,8 @@ async fn demo_image() -> (Scene, Vec) { let mut graph = SceneGraph::new(); - let rect1_id = rect1.id.clone(); - - graph.insert_node(Node::Rectangle(rect1)); - let root_id = root.id.clone(); - - graph.insert(Parent::NodeId(root_id.clone()), vec![rect1_id]); - graph.insert_node(Node::Container(root)); - - graph.insert(Parent::Root, vec![root_id.clone()]); + let root_id = graph.append_child(Node::Container(root), Parent::Root); + graph.append_child(Node::Rectangle(rect1), Parent::NodeId(root_id)); let scene = Scene { name: "Images Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_images.rs b/crates/grida-canvas/examples/grida_images.rs index ac9c96285e..ca1d5e476c 100644 --- a/crates/grida-canvas/examples/grida_images.rs +++ b/crates/grida-canvas/examples/grida_images.rs @@ -236,37 +236,24 @@ async fn demo_images() -> (Scene, Vec) { let mut graph = SceneGraph::new(); - let rect1_id = rect1.id.clone(); - let rect2_id = rect2.id.clone(); - let rect3_id = rect3.id.clone(); - let rect4_id = rect4.id.clone(); - let rect5_id = rect5.id.clone(); - let rect6_id = rect6.id.clone(); - let rect7_id = rect7.id.clone(); - let rect8_id = rect8.id.clone(); - let rect9_id = rect9.id.clone(); + // Add root container first + let root_id = graph.append_child(Node::Container(root), Parent::Root); - graph.insert_node(Node::Rectangle(rect1)); - graph.insert_node(Node::Rectangle(rect2)); - graph.insert_node(Node::Rectangle(rect3)); - graph.insert_node(Node::Rectangle(rect4)); - graph.insert_node(Node::Rectangle(rect5)); - graph.insert_node(Node::Rectangle(rect6)); - graph.insert_node(Node::Rectangle(rect7)); - graph.insert_node(Node::Rectangle(rect8)); - graph.insert_node(Node::Rectangle(rect9)); - let root_id = root.id.clone(); - - graph.insert( - Parent::NodeId(root_id.clone()), + // Add all rectangles to root container + graph.append_children( vec![ - rect1_id, rect2_id, rect3_id, rect4_id, rect5_id, rect6_id, rect7_id, rect8_id, - rect9_id, + Node::Rectangle(rect1), + Node::Rectangle(rect2), + Node::Rectangle(rect3), + Node::Rectangle(rect4), + Node::Rectangle(rect5), + Node::Rectangle(rect6), + Node::Rectangle(rect7), + Node::Rectangle(rect8), + Node::Rectangle(rect9), ], + Parent::NodeId(root_id), ); - graph.insert_node(Node::Container(root)); - - graph.insert(Parent::Root, vec![root_id.clone()]); let scene = Scene { name: "Images Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_lines.rs b/crates/grida-canvas/examples/grida_lines.rs index 8667b95e99..ae44a83dd8 100644 --- a/crates/grida-canvas/examples/grida_lines.rs +++ b/crates/grida-canvas/examples/grida_lines.rs @@ -16,7 +16,6 @@ async fn demo_lines() -> Scene { }; let mut graph = SceneGraph::new(); - let mut ids = Vec::new(); let start_x = 100.0; let start_y = 100.0; @@ -33,8 +32,6 @@ async fn demo_lines() -> Scene { }; line_basic.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); line_basic.stroke_width = 2.0; - ids.push(line_basic.id.clone()); - graph.insert_node(Node::Line(line_basic)); // Outside aligned thick line let mut line_outside = nf.create_line_node(); @@ -47,8 +44,6 @@ async fn demo_lines() -> Scene { line_outside.strokes = Paints::new([Paint::from(CGColor(255, 0, 0, 255))]); line_outside.stroke_width = 8.0; line_outside._data_stroke_align = StrokeAlign::Outside; - ids.push(line_outside.id.clone()); - graph.insert_node(Node::Line(line_outside)); // Dashed line let mut line_dashed = nf.create_line_node(); @@ -61,8 +56,6 @@ async fn demo_lines() -> Scene { line_dashed.strokes = Paints::new([Paint::from(CGColor(0, 0, 255, 255))]); line_dashed.stroke_width = 4.0; line_dashed.stroke_dash_array = Some(vec![10.0, 5.0]); - ids.push(line_dashed.id.clone()); - graph.insert_node(Node::Line(line_dashed)); // Gradient stroke line let mut line_gradient = nf.create_line_node(); @@ -89,8 +82,6 @@ async fn demo_lines() -> Scene { active: true, })]); line_gradient.stroke_width = 6.0; - ids.push(line_gradient.id.clone()); - graph.insert_node(Node::Line(line_gradient)); // Rotated diagonal line let mut line_rotated = nf.create_line_node(); @@ -103,14 +94,19 @@ async fn demo_lines() -> Scene { }; line_rotated.strokes = Paints::new([Paint::from(CGColor(0, 128, 128, 255))]); line_rotated.stroke_width = 4.0; - ids.push(line_rotated.id.clone()); - graph.insert_node(Node::Line(line_rotated)); - // Set up root container - let root_id = root.id.clone(); - graph.insert_node(Node::Container(root)); - graph.insert(Parent::Root, vec![root_id.clone()]); - graph.insert(Parent::NodeId(root_id), ids); + // Set up root container and add all lines + let root_id = graph.append_child(Node::Container(root), Parent::Root); + graph.append_children( + vec![ + Node::Line(line_basic), + Node::Line(line_outside), + Node::Line(line_dashed), + Node::Line(line_gradient), + Node::Line(line_rotated), + ], + Parent::NodeId(root_id), + ); Scene { name: "LineNode Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_mask.rs b/crates/grida-canvas/examples/grida_mask.rs index 9f69c906bb..7dc3c2fa64 100644 --- a/crates/grida-canvas/examples/grida_mask.rs +++ b/crates/grida-canvas/examples/grida_mask.rs @@ -10,6 +10,7 @@ fn build_demo_content( graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), + parent: Parent, ) -> Vec { let (ox, oy) = origin; let (w, h) = size; @@ -24,8 +25,7 @@ fn build_demo_content( }; a.corner_radius = RectangularCornerRadius::circular(12.0); a.set_fill(CGColor(255, 99, 71, 255).into()); - let a_id = a.id.clone(); - graph.insert_node(Node::Rectangle(a)); + let a_id = graph.append_child(Node::Rectangle(a), parent.clone()); // Content B let mut b = nf.create_rectangle_node(); @@ -37,8 +37,7 @@ fn build_demo_content( }; b.corner_radius = RectangularCornerRadius::circular(12.0); b.set_fill(CGColor(65, 105, 225, 255).into()); - let b_id = b.id.clone(); - graph.insert_node(Node::Rectangle(b)); + let b_id = graph.append_child(Node::Rectangle(b), parent.clone()); // Diagonal band (thin rotated rectangle) let mut band = nf.create_rectangle_node(); @@ -54,8 +53,7 @@ fn build_demo_content( }; band.corner_radius = RectangularCornerRadius::circular(8.0); band.set_fill(CGColor(60, 179, 113, 200).into()); - let band_id = band.id.clone(); - graph.insert_node(Node::Rectangle(band)); + let band_id = graph.append_child(Node::Rectangle(band), parent.clone()); vec![a_id, b_id, band_id] } @@ -65,6 +63,7 @@ fn build_geometry_mask( graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), + parent: Parent, ) -> NodeId { let (ox, oy) = origin; let (w, h) = size; @@ -78,9 +77,7 @@ fn build_geometry_mask( }; mask.set_fill(CGColor(0, 0, 0, 255).into()); mask.mask = Some(LayerMaskType::Geometry); - let id = mask.id.clone(); - graph.insert_node(Node::Ellipse(mask)); - id + graph.append_child(Node::Ellipse(mask), parent) } fn build_alpha_mask( @@ -88,6 +85,7 @@ fn build_alpha_mask( graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), + parent: Parent, ) -> NodeId { let (ox, oy) = origin; let (w, h) = size; @@ -116,9 +114,7 @@ fn build_alpha_mask( active: true, })]); mask.mask = Some(LayerMaskType::Image(ImageMaskType::Alpha)); - let id = mask.id.clone(); - graph.insert_node(Node::Rectangle(mask)); - id + graph.append_child(Node::Rectangle(mask), parent) } fn build_luminance_mask( @@ -126,6 +122,7 @@ fn build_luminance_mask( graph: &mut SceneGraph, origin: (f32, f32), size: (f32, f32), + parent: Parent, ) -> NodeId { let (ox, oy) = origin; let (w, h) = size; @@ -154,9 +151,7 @@ fn build_luminance_mask( active: true, })]); mask.mask = Some(LayerMaskType::Image(ImageMaskType::Luminance)); - let id = mask.id.clone(); - graph.insert_node(Node::Rectangle(mask)); - id + graph.append_child(Node::Rectangle(mask), parent) } async fn demo_mask_panels() -> Scene { @@ -172,6 +167,8 @@ async fn demo_mask_panels() -> Scene { root.clip = false; root.set_fill(CGColor(255, 255, 255, 255).into()); + let root_id = graph.append_child(Node::Container(root), Parent::Root); + // Panel layout let margin = 20.0; let panel_w = (width - 5.0 * margin) / 4.0; @@ -186,8 +183,6 @@ async fn demo_mask_panels() -> Scene { Some(LayerMaskType::Image(ImageMaskType::Luminance)), ]; - let mut root_children = Vec::new(); - for kind in kinds { // Panel container per kind let mut panel = nf.create_container_node(); @@ -200,42 +195,48 @@ async fn demo_mask_panels() -> Scene { panel.corner_radius = RectangularCornerRadius::circular(6.0); panel.set_fill(CGColor(245, 245, 245, 255).into()); - // Build children inside panel - let mut children: Vec = Vec::new(); + // Add panel to root first + let panel_id = graph.append_child(Node::Container(panel), Parent::NodeId(root_id.clone())); - // Content first - let mut content_ids = build_demo_content(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)); - children.append(&mut content_ids); + // Build content inside panel + let _content_ids: Vec = build_demo_content( + &nf, + &mut graph, + (0.0, 0.0), + (panel_w, panel_h), + Parent::NodeId(panel_id.clone()), + ); // Mask last (topmost) — flat list model: mask consumes preceding siblings if let Some(k) = kind { - let mask_id = match k { - LayerMaskType::Geometry => { - build_geometry_mask(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)) - } - LayerMaskType::Image(ImageMaskType::Alpha) => { - build_alpha_mask(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)) - } - LayerMaskType::Image(ImageMaskType::Luminance) => { - build_luminance_mask(&nf, &mut graph, (0.0, 0.0), (panel_w, panel_h)) - } + let _mask_id = match k { + LayerMaskType::Geometry => build_geometry_mask( + &nf, + &mut graph, + (0.0, 0.0), + (panel_w, panel_h), + Parent::NodeId(panel_id.clone()), + ), + LayerMaskType::Image(ImageMaskType::Alpha) => build_alpha_mask( + &nf, + &mut graph, + (0.0, 0.0), + (panel_w, panel_h), + Parent::NodeId(panel_id.clone()), + ), + LayerMaskType::Image(ImageMaskType::Luminance) => build_luminance_mask( + &nf, + &mut graph, + (0.0, 0.0), + (panel_w, panel_h), + Parent::NodeId(panel_id.clone()), + ), }; - children.push(mask_id); } - let panel_id = panel.id.clone(); - graph.insert_node(Node::Container(panel)); - graph.insert(Parent::NodeId(panel_id.clone()), children); - root_children.push(panel_id); - left += panel_w + margin; } - let root_id = root.id.clone(); - graph.insert_node(Node::Container(root)); - graph.insert(Parent::Root, vec![root_id.clone()]); - graph.insert(Parent::NodeId(root_id), root_children); - Scene { name: "Mask Modes Demo".to_string(), background_color: None, diff --git a/crates/grida-canvas/examples/grida_nested.rs b/crates/grida-canvas/examples/grida_nested.rs index 3771bb6513..d022995fa4 100644 --- a/crates/grida-canvas/examples/grida_nested.rs +++ b/crates/grida-canvas/examples/grida_nested.rs @@ -8,81 +8,80 @@ use math2::transform::AffineTransform; async fn demo_nested() -> Scene { let nf = NodeFactory::new(); let mut graph = SceneGraph::new(); - let n = 5; // number of nesting levels - - // Create innermost rectangle - let mut rect = nf.create_rectangle_node(); - rect.name = Some("Inner Rect".to_string()); - rect.size = Size { - width: 100.0, - height: 100.0, - }; - rect.set_fill(Paint::from(CGColor(255, 0, 0, 255))); - let mut current_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - - // Create nested structure - for i in 0..n { - if i % 2 == 0 { - // Create group with rotation transform - let mut group = nf.create_group_node(); - group.name = Some(format!("Group {}", i)); - group.transform = Some(AffineTransform::new( - 50.0 * (i as f32 + 1.0), // x offset - 50.0 * (i as f32 + 1.0), // y offset - 0.0, - )); - - // Add a rectangle to the group - let mut group_rect = nf.create_rectangle_node(); - group_rect.name = Some(format!("Group {} Rect", i)); - group_rect.size = Size { - width: 100.0, - height: 100.0, - }; - group_rect.set_fill(Paint::from(CGColor(0, 255, 0, 255))); - let group_rect_id = group_rect.id.clone(); - graph.insert_node(Node::Rectangle(group_rect)); - - let group_id = group.id.clone(); - graph.insert_node(Node::Group(group)); - graph.insert( - Parent::NodeId(group_id.clone()), - vec![current_id, group_rect_id], - ); - current_id = group_id; - } else { - // Create container with scale transform - let mut container = nf.create_container_node(); - container.name = Some(format!("Container {}", i)); - container.transform = AffineTransform::new( - -30.0 * (i as f32 + 1.0), // x offset - -30.0 * (i as f32 + 1.0), // y offset - 0.0, - ); - - // Add a rectangle to the container - let mut container_rect = nf.create_rectangle_node(); - container_rect.name = Some(format!("Container {} Rect", i)); - container_rect.size = Size { - width: 100.0, - height: 100.0, - }; - container_rect.set_fill(Paint::from(CGColor(0, 0, 255, 255))); - let container_rect_id = container_rect.id.clone(); - graph.insert_node(Node::Rectangle(container_rect)); - - let container_id = container.id.clone(); - graph.insert_node(Node::Container(container)); - graph.insert( - Parent::NodeId(container_id.clone()), - vec![current_id, container_rect_id], - ); - current_id = container_id; - } + + // Demonstrate nested transformations and hierarchy + // Each level applies cumulative transformations: translation + rotation + scale + // Visual: concentric rotating squares that get progressively smaller and rotated + + let levels: i32 = 6; // Number of nesting levels + let base_size = 400.0; + + // Build from outermost to innermost + let mut current_parent = Parent::Root; + + for i in 0..levels { + let depth_ratio = (i as f32) / (levels as f32); + let size_reduction = 0.85_f32; // Each level is 85% of parent + let current_size = base_size * size_reduction.powi(i as i32); + let rotation = 15.0_f32.to_radians() * (i as f32); // Rotate 15 degrees per level + + // Create a container for this level + let mut container = nf.create_container_node(); + container.name = Some(format!("Level {} Container", i)); + + // Each level is centered in its parent with rotation + container.transform = AffineTransform::new( + current_size * 0.075, // Small offset for visual clarity + current_size * 0.075, + rotation, + ); + + container.size = Size { + width: current_size, + height: current_size, + }; + container.corner_radius = RectangularCornerRadius::circular(8.0); + + // Color gradient from blue (outer) to red (inner) + let r = (255.0 * depth_ratio) as u8; + let g = (100.0 * (1.0 - depth_ratio)) as u8; + let b = (255.0 * (1.0 - depth_ratio)) as u8; + container.set_fill(Paint::from(CGColor(r, g, b, 200))); + + // Add stroke to show boundaries + container.strokes = Paints::new([Paint::from(CGColor(255, 255, 255, 255))]); + container.stroke_width = 2.0; + + let container_id = graph.append_child(Node::Container(container), current_parent); + + // Add a label at each level + let mut label = nf.create_text_span_node(); + label.name = Some(format!("Level {} Label", i)); + label.transform = AffineTransform::new(10.0, 10.0, 0.0); + label.text = format!("Level {}", i); + label.text_style = TextStyleRec::from_font("", 14.0); + label.fills = Paints::new([Paint::from(CGColor(255, 255, 255, 255))]); + graph.append_child(Node::TextSpan(label), Parent::NodeId(container_id.clone())); + + // Move to next level (this container becomes the parent for the next iteration) + current_parent = Parent::NodeId(container_id); } - graph.insert(Parent::Root, vec![current_id]); + // Add final innermost content - a star + let mut star = nf.create_regular_star_polygon_node(); + star.name = Some("Center Star".to_string()); + let final_size = base_size * 0.85_f32.powi(levels); + star.transform = AffineTransform::new(final_size * 0.25, final_size * 0.25, 0.0); + star.size = Size { + width: final_size * 0.5, + height: final_size * 0.5, + }; + star.point_count = 5; + star.inner_radius = 0.4; + star.set_fill(Paint::from(CGColor(255, 255, 0, 255))); + star.strokes = Paints::new([Paint::from(CGColor(255, 200, 0, 255))]); + star.stroke_width = 3.0; + graph.append_child(Node::RegularStarPolygon(star), current_parent); Scene { name: "Nested Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_paint.rs b/crates/grida-canvas/examples/grida_paint.rs index 485f592cff..8b6a622ae7 100644 --- a/crates/grida-canvas/examples/grida_paint.rs +++ b/crates/grida-canvas/examples/grida_paint.rs @@ -17,7 +17,7 @@ async fn demo_paints() -> Scene { height: 1080.0, }; - let mut all_shape_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); let spacing = 100.0; let start_x = 50.0; let base_size = 80.0; @@ -39,8 +39,10 @@ async fn demo_paints() -> Scene { 50 + (i * 20) as u8, 255, ))); - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Linear Gradient Row @@ -74,8 +76,10 @@ async fn demo_paints() -> Scene { blend_mode: BlendMode::Normal, active: true, })); - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Radial Gradient Row @@ -110,8 +114,10 @@ async fn demo_paints() -> Scene { blend_mode: BlendMode::Normal, active: true, })); - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke Solid Colors Row @@ -137,8 +143,10 @@ async fn demo_paints() -> Scene { ))]); rect.stroke_width = 4.0; // Consistent stroke width - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke Linear Gradient Row @@ -177,8 +185,10 @@ async fn demo_paints() -> Scene { })]); rect.stroke_width = 4.0; // Consistent stroke width - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke Radial Gradient Row @@ -218,16 +228,12 @@ async fn demo_paints() -> Scene { })]); rect.stroke_width = 4.0; // Consistent stroke width - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), all_shape_ids); - Scene { name: "Paints Demo".to_string(), background_color: Some(CGColor(250, 250, 250, 255)), diff --git a/crates/grida-canvas/examples/grida_shapes.rs b/crates/grida-canvas/examples/grida_shapes.rs index 2274eadbb7..0c8721590b 100644 --- a/crates/grida-canvas/examples/grida_shapes.rs +++ b/crates/grida-canvas/examples/grida_shapes.rs @@ -18,12 +18,14 @@ async fn demo_shapes() -> Scene { let mut graph = SceneGraph::new(); - let mut all_shape_ids = Vec::new(); let spacing = 100.0; let start_x = 50.0; let base_size = 80.0; let items_per_row = 10; + // Set up the root container first + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); + // Rectangle Row - demonstrating corner radius variations for i in 0..items_per_row { let mut rect = nf.create_rectangle_node(); @@ -40,8 +42,7 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))); // Fading gray - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_container_id.clone())); } // Ellipse Row - demonstrating width/height ratio variations @@ -59,8 +60,7 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))]); // Fading gray - all_shape_ids.push(ellipse.id.clone()); - graph.insert_node(Node::Ellipse(ellipse)); + graph.append_child(Node::Ellipse(ellipse), Parent::NodeId(root_container_id.clone())); } // Polygon Row - demonstrating point count variations @@ -88,8 +88,7 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))]); // Fading gray - all_shape_ids.push(polygon.id.clone()); - graph.insert_node(Node::Polygon(polygon)); + graph.append_child(Node::Polygon(polygon), Parent::NodeId(root_container_id.clone())); } // Regular Polygon Row - demonstrating point count variations @@ -109,8 +108,7 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray regular_polygon.corner_radius = 8.0; - all_shape_ids.push(regular_polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(regular_polygon)); + graph.append_child(Node::RegularPolygon(regular_polygon), Parent::NodeId(root_container_id.clone())); } // Path Row - demonstrating different path patterns @@ -137,8 +135,7 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))]); // Fading gray - all_shape_ids.push(path.id.clone()); - graph.insert_node(Node::SVGPath(path)); + graph.append_child(Node::SVGPath(path), Parent::NodeId(root_container_id.clone())); } // Star Polygon Row - demonstrating different point counts and inner radius variations @@ -159,8 +156,7 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray star.corner_radius = 8.0; - all_shape_ids.push(star.id.clone()); - graph.insert_node(Node::RegularStarPolygon(star)); + graph.append_child(Node::RegularStarPolygon(star), Parent::NodeId(root_container_id.clone())); } // Arc Row - demonstrating different angle variations @@ -182,16 +178,9 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray arc.corner_radius = Some(8.0); - all_shape_ids.push(arc.id.clone()); - graph.insert_node(Node::Ellipse(arc)); + graph.append_child(Node::Ellipse(arc), Parent::NodeId(root_container_id.clone())); } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), all_shape_ids); - Scene { name: "Shapes Demo".to_string(), graph, diff --git a/crates/grida-canvas/examples/grida_shapes_ellipse.rs b/crates/grida-canvas/examples/grida_shapes_ellipse.rs index 430b1da83f..c526408479 100644 --- a/crates/grida-canvas/examples/grida_shapes_ellipse.rs +++ b/crates/grida-canvas/examples/grida_shapes_ellipse.rs @@ -18,7 +18,7 @@ async fn demo_ellipses() -> Scene { let mut graph = SceneGraph::new(); - let mut all_ellipse_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); let spacing = 120.0; let start_x = 60.0; let base_size = 100.0; @@ -39,8 +39,7 @@ async fn demo_ellipses() -> Scene { 200 + (i * 5) as u8, 255, ))]); // Blue gradient - all_ellipse_ids.push(ellipse.id.clone()); - graph.insert_node(Node::Ellipse(ellipse)); + graph.append_child(Node::Ellipse(ellipse), Parent::NodeId(root_container_id.clone())); } // Row 2: Ellipses with different inner radius (rings) @@ -59,8 +58,7 @@ async fn demo_ellipses() -> Scene { 50 + (i * 20) as u8, 255, ))]); // Orange gradient - all_ellipse_ids.push(ring.id.clone()); - graph.insert_node(Node::Ellipse(ring)); + graph.append_child(Node::Ellipse(ring), Parent::NodeId(root_container_id.clone())); } // Row 3: Arcs with different angles @@ -80,8 +78,7 @@ async fn demo_ellipses() -> Scene { 100 + (i * 15) as u8, 255, ))]); // Green gradient - all_ellipse_ids.push(arc.id.clone()); - graph.insert_node(Node::Ellipse(arc)); + graph.append_child(Node::Ellipse(arc), Parent::NodeId(root_container_id.clone())); } // Row 4: Arcs with inner radius (donut arcs) @@ -102,8 +99,7 @@ async fn demo_ellipses() -> Scene { 150 + (i * 12) as u8, 255, ))]); // Purple gradient - all_ellipse_ids.push(donut_arc.id.clone()); - graph.insert_node(Node::Ellipse(donut_arc)); + graph.append_child(Node::Ellipse(donut_arc), Parent::NodeId(root_container_id.clone())); } // Row 5: Ellipses with strokes @@ -123,16 +119,9 @@ async fn demo_ellipses() -> Scene { 255, ))]); // Red gradient stroke stroke_ellipse.stroke_width = 3.0 + (i as f32 * 2.0); // 3 to 17 stroke weight - all_ellipse_ids.push(stroke_ellipse.id.clone()); - graph.insert_node(Node::Ellipse(stroke_ellipse)); + graph.append_child(Node::Ellipse(stroke_ellipse), Parent::NodeId(root_container_id.clone())); } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), all_ellipse_ids); - Scene { name: "Ellipse Demo".to_string(), graph, diff --git a/crates/grida-canvas/examples/grida_strokes.rs b/crates/grida-canvas/examples/grida_strokes.rs index 2cf07b6655..6098381954 100644 --- a/crates/grida-canvas/examples/grida_strokes.rs +++ b/crates/grida-canvas/examples/grida_strokes.rs @@ -18,7 +18,7 @@ async fn demo_strokes() -> Scene { let mut graph = SceneGraph::new(); - let mut all_shape_ids = Vec::new(); + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); let spacing = 120.0; let start_x = 50.0; let base_size = 100.0; @@ -50,8 +50,10 @@ async fn demo_strokes() -> Scene { _ => unreachable!(), }; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke Width Demo Row @@ -72,8 +74,10 @@ async fn demo_strokes() -> Scene { rect.stroke_width = (i + 1) as f32 * 2.0; // Increasing stroke width rect.stroke_align = StrokeAlign::Center; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke with Different Shapes Row @@ -90,8 +94,10 @@ async fn demo_strokes() -> Scene { rect.set_fill(Paint::from(CGColor(0, 0, 0, 0))); rect.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); rect.stroke_width = 4.0; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); // Ellipse let mut ellipse = nf.create_ellipse_node(); @@ -104,8 +110,10 @@ async fn demo_strokes() -> Scene { ellipse.fills = Paints::new([Paint::from(CGColor(0, 0, 0, 0))]); ellipse.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); ellipse.stroke_width = 4.0; - all_shape_ids.push(ellipse.id.clone()); - graph.insert_node(Node::Ellipse(ellipse)); + graph.append_child( + Node::Ellipse(ellipse), + Parent::NodeId(root_container_id.clone()), + ); // Regular Polygon (Hexagon) let mut polygon = nf.create_regular_polygon_node(); @@ -119,8 +127,10 @@ async fn demo_strokes() -> Scene { polygon.fills = Paints::new([Paint::from(CGColor(0, 0, 0, 0))]); polygon.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); polygon.stroke_width = 4.0; - all_shape_ids.push(polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(polygon)); + graph.append_child( + Node::RegularPolygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); // Star let mut star = nf.create_regular_star_polygon_node(); @@ -135,8 +145,10 @@ async fn demo_strokes() -> Scene { star.fills = Paints::new([Paint::from(CGColor(0, 0, 0, 0))]); star.strokes = Paints::new([Paint::from(CGColor(0, 0, 0, 255))]); star.stroke_width = 4.0; - all_shape_ids.push(star.id.clone()); - graph.insert_node(Node::RegularStarPolygon(star)); + graph.append_child( + Node::RegularStarPolygon(star), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke with Effects Row @@ -175,8 +187,10 @@ async fn demo_strokes() -> Scene { _ => unreachable!(), }; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke Dash Array Demo Row @@ -206,8 +220,10 @@ async fn demo_strokes() -> Scene { _ => unreachable!(), }; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Stroke Paint Types Demo Row @@ -239,8 +255,10 @@ async fn demo_strokes() -> Scene { active: true, })]); rect.stroke_width = 8.0; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); // Radial Gradient Stroke let mut rect = nf.create_rectangle_node(); @@ -269,8 +287,10 @@ async fn demo_strokes() -> Scene { active: true, })]); rect.stroke_width = 8.0; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); // Conic Gradient Stroke let mut rect = nf.create_rectangle_node(); @@ -303,8 +323,10 @@ async fn demo_strokes() -> Scene { active: true, })]); rect.stroke_width = 8.0; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); // Multi-color Solid Stroke let mut rect = nf.create_rectangle_node(); @@ -319,8 +341,10 @@ async fn demo_strokes() -> Scene { rect.strokes = Paints::new([Paint::from(CGColor(255, 128, 0, 255))]); rect.stroke_width = 8.0; rect.stroke_dash_array = Some(vec![20.0, 10.0, 5.0, 10.0]); // Complex dash pattern - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Multiple Strokes Demo Row @@ -341,8 +365,10 @@ async fn demo_strokes() -> Scene { Paint::from(CGColor(0, 0, 255, 255)), ]); rect.stroke_width = 12.0; // Thick stroke to show layering - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); // Rectangle with solid + gradient strokes let mut rect = nf.create_rectangle_node(); @@ -374,8 +400,10 @@ async fn demo_strokes() -> Scene { }), ]); rect.stroke_width = 10.0; - all_shape_ids.push(rect.id.clone()); - graph.insert_node(Node::Rectangle(rect)); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); // Ellipse with multiple gradient strokes let mut ellipse = nf.create_ellipse_node(); @@ -421,8 +449,10 @@ async fn demo_strokes() -> Scene { }), ]); ellipse.stroke_width = 12.0; - all_shape_ids.push(ellipse.id.clone()); - graph.insert_node(Node::Ellipse(ellipse)); + graph.append_child( + Node::Ellipse(ellipse), + Parent::NodeId(root_container_id.clone()), + ); // Polygon with complex multi-stroke pattern let mut polygon = nf.create_regular_polygon_node(); @@ -473,16 +503,12 @@ async fn demo_strokes() -> Scene { ]); polygon.stroke_width = 15.0; // Very thick to show all layers polygon.stroke_dash_array = Some(vec![8.0, 4.0]); // Dashed pattern - all_shape_ids.push(polygon.id.clone()); - graph.insert_node(Node::RegularPolygon(polygon)); + graph.append_child( + Node::RegularPolygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); } - // Set up the root container - let root_container_id = root_container_node.id.clone(); - graph.insert_node(Node::Container(root_container_node)); - graph.insert(Parent::Root, vec![root_container_id.clone()]); - graph.insert(Parent::NodeId(root_container_id), all_shape_ids); - Scene { name: "Strokes Demo".to_string(), graph, diff --git a/crates/grida-canvas/examples/grida_texts.rs b/crates/grida-canvas/examples/grida_texts.rs index 0a03d9fec8..5cf1b0a403 100644 --- a/crates/grida-canvas/examples/grida_texts.rs +++ b/crates/grida-canvas/examples/grida_texts.rs @@ -114,35 +114,20 @@ async fn demo_texts() -> Scene { // Create a node repository and add all nodes let mut graph = SceneGraph::new(); - // Collect all the IDs - let word_text_id = word_text_node.id.clone(); - let sentence_text_id = sentence_text_node.id.clone(); - let paragraph_text_id = paragraph_text_node.id.clone(); - let second_paragraph_text_id = second_paragraph_text_node.id.clone(); - let blurry_text_id = blurry_text_node.id.clone(); - - // Add all nodes to the repository - graph.insert_node(Node::TextSpan(word_text_node)); - graph.insert_node(Node::TextSpan(sentence_text_node)); - graph.insert_node(Node::TextSpan(paragraph_text_node)); - graph.insert_node(Node::TextSpan(second_paragraph_text_node)); - graph.insert_node(Node::TextSpan(blurry_text_node)); - - // Set up the root container with all IDs - let root_container_id = root_container_node.id.clone(); - graph.insert( - Parent::NodeId(root_container_id.clone()), + // Add root container first + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); + + // Add all text nodes to the root container + graph.append_children( vec![ - word_text_id, - sentence_text_id, - paragraph_text_id, - second_paragraph_text_id, - blurry_text_id, + Node::TextSpan(word_text_node), + Node::TextSpan(sentence_text_node), + Node::TextSpan(paragraph_text_node), + Node::TextSpan(second_paragraph_text_node), + Node::TextSpan(blurry_text_node), ], + Parent::NodeId(root_container_id), ); - graph.insert_node(Node::Container(root_container_node)); - - graph.insert(Parent::Root, vec![root_container_id.clone()]); Scene { name: "Text Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_vector.rs b/crates/grida-canvas/examples/grida_vector.rs index 504e3eaca9..8017813c96 100644 --- a/crates/grida-canvas/examples/grida_vector.rs +++ b/crates/grida-canvas/examples/grida_vector.rs @@ -18,7 +18,7 @@ async fn demo_vectors() -> Scene { height: 800.0, }; - let mut ids = Vec::new(); + let root_id = graph.append_child(Node::Container(root), Parent::Root); let spacing = 200.0; let start_x = 100.0; let base_y = 100.0; @@ -51,8 +51,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_1_tri_open.id.clone()); - graph.insert_node(Node::Vector(vector_node_1_tri_open)); + graph.append_child(Node::Vector(vector_node_1_tri_open), Parent::NodeId(root_id.clone())); } { @@ -83,8 +82,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_2_tri_closed.id.clone()); - graph.insert_node(Node::Vector(vector_node_2_tri_closed)); + graph.append_child(Node::Vector(vector_node_2_tri_closed), Parent::NodeId(root_id.clone())); } // @@ -116,8 +114,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_3.id.clone()); - graph.insert_node(Node::Vector(vector_node_3)); + graph.append_child(Node::Vector(vector_node_3), Parent::NodeId(root_id.clone())); } { @@ -148,8 +145,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_4.id.clone()); - graph.insert_node(Node::Vector(vector_node_4)); + graph.append_child(Node::Vector(vector_node_4), Parent::NodeId(root_id.clone())); } // FIXME: not working @@ -183,8 +179,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_1_5.id.clone()); - graph.insert_node(Node::Vector(vector_node_1_5)); + graph.append_child(Node::Vector(vector_node_1_5), Parent::NodeId(root_id.clone())); } } @@ -224,8 +219,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_5.id.clone()); - graph.insert_node(Node::Vector(vector_node_5)); + graph.append_child(Node::Vector(vector_node_5), Parent::NodeId(root_id.clone())); } // Single-segment 90-degree straight line @@ -257,8 +251,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_5_5.id.clone()); - graph.insert_node(Node::Vector(vector_node_5_5)); + graph.append_child(Node::Vector(vector_node_5_5), Parent::NodeId(root_id.clone())); } } @@ -297,8 +290,7 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_6.id.clone()); - graph.insert_node(Node::Vector(vector_node_6)); + graph.append_child(Node::Vector(vector_node_6), Parent::NodeId(root_id.clone())); } // Filled rectangle @@ -335,18 +327,10 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - ids.push(vector_node_7.id.clone()); - graph.insert_node(Node::Vector(vector_node_7)); + graph.append_child(Node::Vector(vector_node_7), Parent::NodeId(root_id.clone())); } } - // Add all nodes to root - let root_id = root.id.clone(); - graph.insert(Parent::NodeId(root_id.clone()), ids.clone()); - graph.insert_node(Node::Container(root)); - - graph.insert(Parent::Root, vec![root_id.clone()]); - Scene { name: "Vector Network Demo".to_string(), background_color: Some(CGColor(240, 240, 240, 255)), diff --git a/crates/grida-canvas/examples/grida_webfonts.rs b/crates/grida-canvas/examples/grida_webfonts.rs index 329837c731..4757946632 100644 --- a/crates/grida-canvas/examples/grida_webfonts.rs +++ b/crates/grida-canvas/examples/grida_webfonts.rs @@ -60,7 +60,7 @@ async fn demo_webfonts() -> Scene { letter_spacing: Default::default(), word_spacing: Default::default(), font_style_italic: false, - line_height: TextLineHeight::Fixed(1.5), + line_height: TextLineHeight::Factor(1.5), text_transform: TextTransform::None, }; description_node.text_align = TextAlign::Left; @@ -126,27 +126,25 @@ async fn demo_webfonts() -> Scene { // Create a node repository and add all nodes let mut graph = SceneGraph::new(); - // Collect all the IDs - let heading_id = heading_node.id.clone(); - let description_id = description_node.id.clone(); - let albert_text_ids: Vec<_> = albert_text_nodes.iter().map(|n| n.id.clone()).collect(); - - // Add all nodes to the repository - graph.insert_node(Node::TextSpan(heading_node)); - graph.insert_node(Node::TextSpan(description_node)); + // Add root container first + let root_container_id = graph.append_child(Node::Container(root_container_node), Parent::Root); + + // Add all text nodes to root container + graph.append_child( + Node::TextSpan(heading_node), + Parent::NodeId(root_container_id.clone()), + ); + graph.append_child( + Node::TextSpan(description_node), + Parent::NodeId(root_container_id.clone()), + ); for text_node in albert_text_nodes { - graph.insert_node(Node::TextSpan(text_node)); + graph.append_child( + Node::TextSpan(text_node), + Parent::NodeId(root_container_id.clone()), + ); } - // Set up the root container with all IDs - let mut children = vec![heading_id, description_id]; - children.extend(albert_text_ids); - let root_container_id = root_container_node.id.clone(); - graph.insert(Parent::NodeId(root_container_id.clone()), children); - graph.insert_node(Node::Container(root_container_node)); - - graph.insert(Parent::Root, vec![root_container_id.clone()]); - Scene { name: "Webfonts Demo".to_string(), background_color: Some(CGColor(250, 250, 250, 255)), diff --git a/crates/grida-canvas/examples/sys_camera.rs b/crates/grida-canvas/examples/sys_camera.rs index f48bee9698..231ea707a4 100644 --- a/crates/grida-canvas/examples/sys_camera.rs +++ b/crates/grida-canvas/examples/sys_camera.rs @@ -29,39 +29,33 @@ fn create_static_scene() -> Scene { let mut graph = SceneGraph::new(); let nf = NodeFactory::new(); + // Create a root group containing all rectangles + let root_group = GroupNodeRec { + id: "root".to_string(), + name: Some("Root Group".to_string()), + active: true, + transform: None, + opacity: 1.0, + blend_mode: LayerBlendMode::default(), + mask: None, + }; + + let root_id = graph.append_child(Node::Group(root_group), Parent::Root); + // Create a grid of rectangles - let mut ids = Vec::new(); for i in 0..10 { for j in 0..10 { let mut rect = nf.create_rectangle_node(); - let id = rect.id.clone(); rect.name = Some(format!("Rectangle {}-{}", i, j)); rect.transform = AffineTransform::new(i as f32 * 100.0, j as f32 * 100.0, 0.0); rect.size = Size { width: 50.0, height: 50.0, }; - graph.insert_node(Node::Rectangle(rect)); - ids.push(id); + graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_id.clone())); } } - // Create a root group containing all rectangles - let root_group = GroupNodeRec { - id: "root".to_string(), - name: Some("Root Group".to_string()), - active: true, - transform: None, - opacity: 1.0, - blend_mode: LayerBlendMode::default(), - mask: None, - }; - - let root_id = root_group.id.clone(); - graph.insert_node(Node::Group(root_group)); - graph.insert(Parent::Root, vec![root_id.clone()]); - graph.insert(Parent::NodeId(root_id), ids); - Scene { name: "Test Scene".to_string(), background_color: Some(CGColor(255, 255, 255, 255)), diff --git a/crates/grida-canvas/examples/wd_animation.rs b/crates/grida-canvas/examples/wd_animation.rs index 3d4ae1241a..2023e4f81d 100644 --- a/crates/grida-canvas/examples/wd_animation.rs +++ b/crates/grida-canvas/examples/wd_animation.rs @@ -21,9 +21,7 @@ fn create_scene(t: f32) -> Scene { let r = ((t.sin() * 0.5 + 0.5) * 255.0) as u8; let g = ((t.cos() * 0.5 + 0.5) * 255.0) as u8; rect.set_fill(Paint::from(CGColor(r, g, 200, 255))); - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id]); + graph.append_child(Node::Rectangle(rect), Parent::Root); Scene { name: "Animated".to_string(), diff --git a/crates/grida-canvas/src/node/scene_graph.rs b/crates/grida-canvas/src/node/scene_graph.rs index 778d5f2a0a..4db51cf8a5 100644 --- a/crates/grida-canvas/src/node/scene_graph.rs +++ b/crates/grida-canvas/src/node/scene_graph.rs @@ -90,9 +90,9 @@ impl SceneGraph { ) -> Self { let mut graph = Self::new(); - // Add all nodes + // Add all nodes to the repository for node in nodes { - graph.insert_node(node); + graph.nodes.insert(node); } // Set up all links @@ -108,33 +108,11 @@ impl SceneGraph { // Graph Structure Methods // ------------------------------------------------------------------------- - /// Insert or replace children for a parent. - /// If parent is Root, sets the scene roots. Otherwise creates/updates the parent's children. - #[deprecated(note = "Use append_child instead")] - pub fn insert(&mut self, parent: Parent, children: Vec) { - match parent { - Parent::Root => { - self.roots = children; - } - Parent::NodeId(id) => { - self.links.insert(id, children); - } - } - } - - /// Add a node to the graph and return its ID - /// This is the primary method for adding nodes - combines node insertion with hierarchy - #[deprecated(note = "Use append_child instead")] - pub fn insert_node(&mut self, node: Node) -> NodeId { - self.nodes.insert(node) - } - /// Add a node to the graph and link it to a parent in one operation. - /// This is a convenience method that combines insert_node + appending to parent's children. /// /// Returns the node's ID. pub fn append_child(&mut self, node: Node, parent: Parent) -> NodeId { - let id = self.insert_node(node); + let id = self.nodes.insert(node); match parent { Parent::Root => { @@ -397,17 +375,13 @@ mod tests { let node_b = create_test_node("b"); let node_c = create_test_node("c"); - let id_a = graph.insert_node(node_a); - let id_b = graph.insert_node(node_b); - let id_c = graph.insert_node(node_c); - - graph.insert( - Parent::NodeId(id_a.clone()), - vec![id_b.clone(), id_c.clone()], - ); + let id_a = graph.append_child(node_a, Parent::Root); + let id_b = graph.append_child(node_b, Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(node_c, Parent::NodeId(id_a.clone())); assert_eq!(graph.node_count(), 3); assert_eq!(graph.get_children(&id_a).unwrap().len(), 2); + assert_eq!(graph.get_children(&id_a).unwrap(), &vec![id_b, id_c]); } #[test] @@ -416,48 +390,48 @@ mod tests { let node_a = create_test_node("a"); let node_b = create_test_node("b"); + let node_c = create_test_node("c"); - let id_a = graph.insert_node(node_a); - let id_b = graph.insert_node(node_b); + // Create parent with one child first + let id_a = graph.append_child(node_a, Parent::Root); + let id_b = graph.append_child(node_b, Parent::NodeId(id_a.clone())); - graph.insert(Parent::NodeId(id_a.clone()), vec![]); - graph.add_child(&id_a, id_b.clone()).unwrap(); + // Now add another child dynamically using add_child + let id_c = graph.append_child(node_c, Parent::Root); + graph.add_child(&id_a, id_c.clone()).unwrap(); - assert_eq!(graph.get_children(&id_a).unwrap().len(), 1); + assert_eq!(graph.get_children(&id_a).unwrap().len(), 2); + assert_eq!(graph.get_children(&id_a).unwrap()[0], id_b); + assert_eq!(graph.get_children(&id_a).unwrap()[1], id_c); } #[test] fn test_add_child_at() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); - let id_d = graph.insert_node(create_test_node("d")); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_a.clone())); + let id_d = graph.append_child(create_test_node("d"), Parent::Root); - graph.insert( - Parent::NodeId(id_a.clone()), - vec![id_b.clone(), id_c.clone()], - ); + // Insert id_d at index 1 in id_a's children (between id_b and id_c) graph.add_child_at(&id_a, id_d.clone(), 1).unwrap(); let children = graph.get_children(&id_a).unwrap(); assert_eq!(children.len(), 3); + assert_eq!(children[0], id_b); assert_eq!(children[1], id_d); + assert_eq!(children[2], id_c); } #[test] fn test_remove_child() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_a.clone())); - graph.insert( - Parent::NodeId(id_a.clone()), - vec![id_b.clone(), id_c.clone()], - ); graph.remove_child(&id_a, &id_b).unwrap(); let children = graph.get_children(&id_a).unwrap(); @@ -469,13 +443,9 @@ mod tests { fn test_roots() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); - - graph.insert(Parent::Root, vec![id_a.clone()]); - graph.insert(Parent::NodeId(id_a.clone()), vec![id_b.clone()]); - graph.insert(Parent::NodeId(id_b.clone()), vec![id_c.clone()]); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_b.clone())); let roots = graph.roots(); assert_eq!(roots.len(), 1); @@ -486,14 +456,9 @@ mod tests { fn test_walk_preorder() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); - - graph.insert( - Parent::NodeId(id_a.clone()), - vec![id_b.clone(), id_c.clone()], - ); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_a.clone())); let mut visited = Vec::new(); graph @@ -507,14 +472,9 @@ mod tests { fn test_walk_postorder() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); - - graph.insert( - Parent::NodeId(id_a.clone()), - vec![id_b.clone(), id_c.clone()], - ); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_a.clone())); let mut visited = Vec::new(); graph @@ -528,12 +488,9 @@ mod tests { fn test_ancestors() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); - - graph.insert(Parent::NodeId(id_a.clone()), vec![id_b.clone()]); - graph.insert(Parent::NodeId(id_b.clone()), vec![id_c.clone()]); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_b.clone())); let ancestors = graph.ancestors(&id_c).unwrap(); assert_eq!(ancestors, vec![id_b, id_a]); @@ -543,12 +500,9 @@ mod tests { fn test_descendants() { let mut graph = SceneGraph::new(); - let id_a = graph.insert_node(create_test_node("a")); - let id_b = graph.insert_node(create_test_node("b")); - let id_c = graph.insert_node(create_test_node("c")); - - graph.insert(Parent::NodeId(id_a.clone()), vec![id_b.clone()]); - graph.insert(Parent::NodeId(id_b.clone()), vec![id_c.clone()]); + let id_a = graph.append_child(create_test_node("a"), Parent::Root); + let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); + let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_b.clone())); let descendants = graph.descendants(&id_a).unwrap(); assert_eq!(descendants.len(), 2); @@ -566,7 +520,7 @@ mod tests { #[test] fn test_error_parent_not_found() { let mut graph = SceneGraph::new(); - let id_b = graph.insert_node(create_test_node("b")); + let id_b = graph.append_child(create_test_node("b"), Parent::Root); let result = graph.add_child(&"missing".to_string(), id_b); assert!(matches!(result, Err(SceneGraphError::ParentNotFound(_)))); } @@ -588,7 +542,7 @@ mod tests { let parent = create_test_node("parent"); let child = create_test_node("child"); - let parent_id = graph.insert_node(parent); + let parent_id = graph.append_child(parent, Parent::Root); let child_id = graph.append_child(child, Parent::NodeId(parent_id.clone())); assert_eq!(graph.get_children(&parent_id).unwrap().len(), 1); @@ -602,7 +556,7 @@ mod tests { let child1 = create_test_node("child1"); let child2 = create_test_node("child2"); - let parent_id = graph.insert_node(parent); + let parent_id = graph.append_child(parent, Parent::Root); let child1_id = graph.append_child(child1, Parent::NodeId(parent_id.clone())); let child2_id = graph.append_child(child2, Parent::NodeId(parent_id.clone())); @@ -633,7 +587,7 @@ mod tests { fn test_append_children_to_parent() { let mut graph = SceneGraph::new(); let parent = create_test_node("parent"); - let parent_id = graph.insert_node(parent); + let parent_id = graph.append_child(parent, Parent::Root); let children_nodes = vec![ create_test_node("child1"), diff --git a/crates/grida-canvas/src/runtime/scene.rs b/crates/grida-canvas/src/runtime/scene.rs index 408a7ed86c..f1f566e63c 100644 --- a/crates/grida-canvas/src/runtime/scene.rs +++ b/crates/grida-canvas/src/runtime/scene.rs @@ -1,9 +1,6 @@ use crate::cache::tile::{ImageTileCacheResolutionStrategy, RegionTileInfo}; use crate::cg::types::*; -use crate::node::{ - scene_graph::{Parent, SceneGraph}, - schema::*, -}; +use crate::node::{scene_graph::SceneGraph, schema::*}; use crate::painter::layer::Layer; use crate::painter::Painter; use crate::runtime::counter::FrameCounter; @@ -672,7 +669,11 @@ impl Renderer { #[cfg(test)] mod tests { use super::*; - use crate::node::{factory::NodeFactory, scene_graph::SceneGraph, schema::Size}; + use crate::node::{ + factory::NodeFactory, + scene_graph::{Parent, SceneGraph}, + schema::Size, + }; #[test] fn picture_recorded_with_layer_bounds() { @@ -683,11 +684,9 @@ mod tests { width: 50.0, height: 40.0, }; - let rect_id = rect.id.clone(); let mut graph = SceneGraph::new(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id.clone()]); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::Root); let scene = Scene { name: "test".into(), @@ -753,8 +752,7 @@ mod tests { text.text_style.font_family = "MissingFont".into(); let mut graph = SceneGraph::new(); - let text_id = graph.insert_node(Node::TextSpan(text)); - graph.insert(Parent::Root, vec![text_id]); + graph.append_child(Node::TextSpan(text), Parent::Root); let scene = Scene { name: "test".into(), diff --git a/crates/grida-canvas/tests/export_as_pdf.rs b/crates/grida-canvas/tests/export_as_pdf.rs index 97670215b1..d02e561423 100644 --- a/crates/grida-canvas/tests/export_as_pdf.rs +++ b/crates/grida-canvas/tests/export_as_pdf.rs @@ -25,9 +25,7 @@ fn test_pdf_export() { rect.transform = AffineTransform::new(10.0, 10.0, 0.0); rect.fills = Paints::new([Paint::from(CGColor(255, 0, 0, 255))]); - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id.clone()]); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::Root); let scene = Scene { name: "Test Scene".into(), diff --git a/crates/grida-canvas/tests/geometry_cache.rs b/crates/grida-canvas/tests/geometry_cache.rs index 5cb63bf7fe..b068e000bc 100644 --- a/crates/grida-canvas/tests/geometry_cache.rs +++ b/crates/grida-canvas/tests/geometry_cache.rs @@ -14,33 +14,19 @@ fn geometry_cache_builds_recursively() { let nf = NodeFactory::new(); let mut graph = SceneGraph::new(); - let mut rect = nf.create_rectangle_node(); - rect.transform = AffineTransform::new(4.0, 6.0, 0.0); - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - let mut group2 = nf.create_group_node(); group2.transform = Some(AffineTransform::new(2.0, 3.0, 0.0)); - let group2_id = group2.id.clone(); - graph.insert_node(Node::Group(group2)); - graph.insert(Parent::NodeId(group2_id.clone()), vec![rect_id.clone()]); - let mut group1 = nf.create_group_node(); group1.transform = Some(AffineTransform::new(5.0, 5.0, 0.0)); - let group1_id = group1.id.clone(); - graph.insert_node(Node::Group(group1)); - graph.insert(Parent::NodeId(group1_id.clone()), vec![group2_id.clone()]); - let mut container = nf.create_container_node(); container.transform = AffineTransform::new(10.0, 20.0, 0.0); - let container_id = container.id.clone(); - graph.insert_node(Node::Container(container)); - graph.insert( - Parent::NodeId(container_id.clone()), - vec![group1_id.clone()], - ); + let mut rect = nf.create_rectangle_node(); + rect.transform = AffineTransform::new(4.0, 6.0, 0.0); - graph.insert(Parent::Root, vec![container_id.clone()]); + let container_id = graph.append_child(Node::Container(container), Parent::Root); + let group1_id = graph.append_child(Node::Group(group1), Parent::NodeId(container_id.clone())); + let group2_id = graph.append_child(Node::Group(group2), Parent::NodeId(group1_id.clone())); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::NodeId(group2_id.clone())); let scene = Scene { name: "test".into(), @@ -68,25 +54,20 @@ fn container_world_bounds_include_children() { let nf = NodeFactory::new(); let mut graph = SceneGraph::new(); - let mut rect = nf.create_rectangle_node(); - rect.transform = AffineTransform::new(50.0, 50.0, 0.0); - rect.size = Size { + let mut container = nf.create_container_node(); + container.size = Size { width: 100.0, height: 100.0, }; - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - - let mut container = nf.create_container_node(); - container.size = Size { + let mut rect = nf.create_rectangle_node(); + rect.transform = AffineTransform::new(50.0, 50.0, 0.0); + rect.size = Size { width: 100.0, height: 100.0, }; - let container_id = container.id.clone(); - graph.insert_node(Node::Container(container)); - graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); - graph.insert(Parent::Root, vec![container_id.clone()]); + let container_id = graph.append_child(Node::Container(container), Parent::Root); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::NodeId(container_id.clone())); let scene = Scene { name: "test".into(), diff --git a/crates/grida-canvas/tests/hit_test.rs b/crates/grida-canvas/tests/hit_test.rs index 6f38af556a..d518151ff8 100644 --- a/crates/grida-canvas/tests/hit_test.rs +++ b/crates/grida-canvas/tests/hit_test.rs @@ -14,26 +14,21 @@ use std::sync::{Arc, Mutex}; fn hit_first_returns_topmost() { let nf = NodeFactory::new(); + let mut container = nf.create_container_node(); + container.size = Size { + width: 40.0, + height: 40.0, + }; let mut rect = nf.create_rectangle_node(); rect.transform = AffineTransform::new(10.0, 10.0, 0.0); rect.size = Size { width: 20.0, height: 20.0, }; - let rect_id = rect.id.clone(); - - let mut container = nf.create_container_node(); - container.size = Size { - width: 40.0, - height: 40.0, - }; - let container_id = container.id.clone(); let mut graph = SceneGraph::new(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert_node(Node::Container(container)); - graph.insert(Parent::Root, vec![container_id.clone()]); - graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); + let container_id = graph.append_child(Node::Container(container), Parent::Root); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::NodeId(container_id.clone())); let scene = Scene { name: "test".into(), @@ -63,13 +58,10 @@ fn hit_first_returns_topmost() { fn path_hit_testing_uses_contains() { let nf = NodeFactory::new(); + let mut graph = SceneGraph::new(); let mut path_node = nf.create_path_node(); path_node.data = "M0 0 L10 0 L10 10 Z".into(); - let path_id = path_node.id.clone(); - - let mut graph = SceneGraph::new(); - graph.insert_node(Node::SVGPath(path_node.clone())); - graph.insert(Parent::Root, vec![path_id.clone()]); + let path_id = graph.append_child(Node::SVGPath(path_node.clone()), Parent::Root); let scene = Scene { name: "test".into(), @@ -99,26 +91,21 @@ fn path_hit_testing_uses_contains() { fn intersects_returns_all_nodes_in_rect() { let nf = NodeFactory::new(); - let mut rect = nf.create_rectangle_node(); - rect.transform = AffineTransform::new(50.0, 50.0, 0.0); - rect.size = Size { + let mut container = nf.create_container_node(); + container.size = Size { width: 100.0, height: 100.0, }; - let rect_id = rect.id.clone(); - - let mut container = nf.create_container_node(); - container.size = Size { + let mut rect = nf.create_rectangle_node(); + rect.transform = AffineTransform::new(50.0, 50.0, 0.0); + rect.size = Size { width: 100.0, height: 100.0, }; - let container_id = container.id.clone(); let mut graph = SceneGraph::new(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert_node(Node::Container(container)); - graph.insert(Parent::Root, vec![container_id.clone()]); - graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); + let container_id = graph.append_child(Node::Container(container), Parent::Root); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::NodeId(container_id.clone())); let scene = Scene { name: "test".into(), diff --git a/crates/grida-canvas/tests/render_bounds.rs b/crates/grida-canvas/tests/render_bounds.rs index 4777f57c46..8a529c895d 100644 --- a/crates/grida-canvas/tests/render_bounds.rs +++ b/crates/grida-canvas/tests/render_bounds.rs @@ -17,10 +17,8 @@ fn stroke_affects_render_bounds() { let mut rect = nf.create_rectangle_node(); rect.stroke_width = 10.0; rect.stroke_align = StrokeAlign::Outside; - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id.clone()]); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::Root); let scene = Scene { name: "test".into(), @@ -47,10 +45,8 @@ fn gaussian_blur_expands_render_bounds() { rect.effects = LayerEffects::from_array(vec![FilterEffect::LayerBlur(FeGaussianBlur { radius: 5.0, })]); - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id.clone()]); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::Root); let scene = Scene { name: "test".into(), @@ -81,10 +77,8 @@ fn drop_shadow_expands_render_bounds() { spread: 0.0, color: CGColor(0, 0, 0, 255), })]); - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id.clone()]); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::Root); let scene = Scene { name: "test".into(), @@ -115,10 +109,8 @@ fn drop_shadow_spread_expands_render_bounds() { spread: 10.0, color: CGColor(0, 0, 0, 255), })]); - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - graph.insert(Parent::Root, vec![rect_id.clone()]); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::Root); let scene = Scene { name: "test".into(), diff --git a/crates/grida-canvas/tests/scene_cache.rs b/crates/grida-canvas/tests/scene_cache.rs index e0ea7b1ab1..61ac5dcc5e 100644 --- a/crates/grida-canvas/tests/scene_cache.rs +++ b/crates/grida-canvas/tests/scene_cache.rs @@ -16,25 +16,20 @@ fn layers_in_rect_include_partially_visible_nested() { let nf = NodeFactory::new(); let mut graph = SceneGraph::new(); - let mut rect = nf.create_rectangle_node(); - rect.transform = AffineTransform::new(50.0, 50.0, 0.0); - rect.size = Size { + let mut container = nf.create_container_node(); + container.size = Size { width: 100.0, height: 100.0, }; - let rect_id = rect.id.clone(); - graph.insert_node(Node::Rectangle(rect)); - - let mut container = nf.create_container_node(); - container.size = Size { + let mut rect = nf.create_rectangle_node(); + rect.transform = AffineTransform::new(50.0, 50.0, 0.0); + rect.size = Size { width: 100.0, height: 100.0, }; - let container_id = container.id.clone(); - graph.insert_node(Node::Container(container)); - graph.insert(Parent::NodeId(container_id.clone()), vec![rect_id.clone()]); - graph.insert(Parent::Root, vec![container_id.clone()]); + let container_id = graph.append_child(Node::Container(container), Parent::Root); + let rect_id = graph.append_child(Node::Rectangle(rect), Parent::NodeId(container_id.clone())); let scene = Scene { name: "test".into(), From ab7e0f47095345560e69b200d535da3b1fa6f337 Mon Sep 17 00:00:00 2001 From: Universe Date: Wed, 15 Oct 2025 02:30:25 +0900 Subject: [PATCH 4/5] sync goldens --- crates/grida-canvas/goldens/pdf.pdf | Bin 53242 -> 68101 bytes crates/grida-canvas/goldens/svg.svg | 70 +++++++++++++------- crates/grida-canvas/goldens/type_stroke.png | Bin 53752 -> 53802 bytes 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/crates/grida-canvas/goldens/pdf.pdf b/crates/grida-canvas/goldens/pdf.pdf index 41f7a49cf76b0bc86b0224fbcb1cbeb82b49199b..520f08797db67f608c816094b55b755dc95b2ce4 100644 GIT binary patch literal 68101 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 M{o7u*B#r48^Das64Ngdyallp4K2ol=fB^7X z-?9X3F;M-(PS^R7yk&o$KAk8R$sQ*U*3BinxJE-{U!G6Afwi=H{rrb` z;rGV!ezZ+zL`0wr%0lJ^x40UfXB92i>l{HZg;pAhOI4x55ceGQ&P${KHxq0NQQ(vrP!bB8OHE~u_T$MO@7e=!X))TyM zA}981?TjsuPRjkoOfX437VyE^RFhmq@zmERB{I}Cg*5jTM&IyBAzFp=Bz;f~M6YvA zLL1}1cNuS&!+2#e81(R#Js>?y-?MDeli#m*uoY@uH_z1$y7qaxc)4~dCEHl3qj-*l-9h&H0{#MJ$AWs%AEJN?R|}^u z7X6k%L8lSTw?XD#nt`eNpHehpb z*8Tj0CYwmjsk4M+NUVK~Rbf7IRtdh8R z1x|N0Mr$_*5gNBA+s;D7vmd52&Zpq!k9u;R$y?$3=6W_Lr$0I8^) z;#UmRnc8PcT(G=dqamGa>WCeWf%0x@JVI46?1A%YL_p$jCuN5or({OE*qD4nW(YkzI_KL^Y51MFczOMC|#BsNssV;7>n$nIm6;|648WY4`imPrGrp;S` zzwK~8t*-CY5ZqG>1IAU9KF~CC*_V;)V)QsJv-7eu_Ube)+BP?7E$1ZL!-%au-8kio z%?xAti<$P*Z1Xo}8Y43U%O9tjj=DtMF+1$)6LN+8oc%@St8C@c#ni%cmMapf^NjLQ<| zEU5sAw(rj!fr;wvAd{-`O#29Q-$N9*l4aw~4;5_V>YAJ|;53qMAKaISLz!?{-0F~{ zuJ=ut_8DLsJY_z2%z^>#zj_E}sDnegU`?aW5g|1YbZG~Cq(%}bBiv(6`D{_q0;^bw z7zbOO%3Ss$jvNXD9hKc=fJ}`bN~5v1U#DM3;UwHA!7>N3muuQSE~0T7rc&eHmdQtF z=O|&9F_S{c{g@Chb+C!OTTmGrk&5byg1~>dYt(i7 zPTE^{PoM`yPmUcLgG&%IX%>-pFmu>rWO5gYI9|8p7*ml!1OOpqs9}4i{hNu>jzXm# zsmLmy(pK+f_93&2mYh&)VIIMz#~4Cc$G%I2|2cmvie1@^lM1&BgPxEe7P_2(824Yx^w zE%f$0ULF5|nHU*E28P7#iUf)hL5z|46kb+YgCz6&+!XqPk+zV*zDX33NW^ofGaEikprX(d4gd8<)QaSV0} zWDbc#wP5Oz`6dB`CqXsRVNiW_0u-sc-eZXw&Vg4T?zU?g9oS;)_w4m_6 zoq|r}O5`)}pXQ;TB^l}NK>5&`QA*5m#*_vq+$ij1eFm$=9Kq<8!Vr-Q#1q=`Tv?Om z-Hb6ZN(iuQ5e_77IS(=^h`{35%3;X4I|wkz`5Zm>rP2uvMDg%E>Fur|pkkyUN=hMt zuo`0)*Uz{-){KylVCUq}UM#&X0b!>I25hg*Z*(Uws!lRx+|R_ z2-k*Ovcv*_Sa+Cpy~&gB1RVc9zAFLSlvi~1X)?{thQcZkklgUX7@5S{H)^}|{1LXn z(2O#|43&g>6)nLuja6t7X&Tx#no?^+SMK9m!$4tdIxlJ8k02eml`-~POg7ZhnS%kP zoXG|i!_bZ4Y2sVE$&5AT73$_2jQtp`r9uT!8bHLrqA!ThlRNu`aS5HwPw0gymh#?c zb;CiJsL+fbLY+A5so52nnV6@=lY*5bYVn*MRtC_z%7Vv-NtHr@?$9>8{C*g;4g0Y| zT((W(C7Pr9wFS7BYx;~s^#d{@!b@NOsIMV1^UK$jUJor^}M zl!Z6O!;}@`qhKmTX&c-66#S$x^MO6$h6FcjcyiRZ``mYb&^#o9vtiR`rUpti9Abn@nceopoayoHXY31X`f^Yt3de4 zOlgswdDhnkQ4w|#8~6i@Y~P%{SYwGvw7S1}gb^UU5=%pWM{Y&JfJhfL)#^D${TCO> zZ9(}M1_W^r#O&W+=ZZ|KK4GvlN+z;EUI*mCuiPQ%atn~hoN?uMg=`d=ThBR@7NT+E$9P`G zp5AvWlRjHtiIBBjDsN%8mnu0Rf=t?1pFcUsSZhrbWz7x|k>z);QHajt&JOe@c~$~A z=lZrmms(IZXJePXsafP-1_B^6j9`a}B^D7bk%YJ9hgvGT4Lb)308GiNOw{`=WBk#i zJ^D4(G%hrG5dpMbV|1Vy{)XebBe>>ymmrX&mrR}noo}3dDYgok zgNe51hXvJ3JLhkXmU~)tpCYcROPPhkt?>2d5a72x7$N;C$j9Qs&_=!JvC7IN>Ucu0UR! zM34!>D+;kUirddy#aqE3$v}T4jqg69$~*B!{;}cCch1$`VxqWu0tINgZzF23Ocpp&-@Lv}_zs8TiKBbPjRG9wo{(bo>V=j`PW$|@a(IOo z%^YUGa{HF00QEZe4!o$-g>R}g2gp8Cx3T4@@VS!S=VtpzO8n5}N=Ji(%pR`u4iF=7 ztd$KQdPpbCRnOx5+Y#j*??bwZz`=nRd?Gb!--*K?vT=JPQ}51}jeo2Y->-sCk3IHg4;q&WEd`=!ADT z1eGy+w^b6nmsdbLcdq(>UbZp) z&F!`fEbM^M`w{x?+;Q_TFofT&`EdCu&)I&t@2KsjgjAI9@ASHy z)>N~k4jy~tyP7U3l*sLRbuUFutoynh2lJgeibQrmJWNJAIvp`ea!ZBOYUn7tkp;r^LLoLW;5nY$ zy~h_^Xei3S%4(w+QJVEfuVRVVyibO&kduOtS@B15xbp(*OZSNlR7%0(GSh5=>d7lT zLkj`)`cNx#dQW`mX}&-A)&0y^$7x~L0bcr z8)d9(Scn+VW7MlGk?WjO9TCB*HZj5@#8ZKojg} z`sIFy)W-!^NvIHlL^6~}q1(+v8ByXCy^LY$@DxDDsNw&fmDbe422Df zA;~2+x!uDkU@rW8V*%U)?QL|~v+ZuiySf_LoA+K*bmjFryD#C(Sp5{Wt>!Z;9xe%m zaUByCl){=tO)NbaxD@<8H^m49Whb<3X#5f?cPXXuh@aO%L@Apu1=Xh`nY1xe@Ra?+ z{b6mRV2`6y)^$1+vf=f97p}svS)JmX{^AfIDQ*cCfOPdwM?wmnb)*CZftcG`pr^j7kQjqOO90tz|Atm<81_|35B+)YJ)#gd!+-m%#tVMNQpyF zq`|7}lg9}4>||97_?Zvq?4N;3L%l&4`%J7HA#%Uc4S?gm6yM0-wNIUV=0 zEM)HS(SZg*KR8H0yBuS9hfGno5(gGAU1bTv4|9QAdsQjW)<&{3CyR3%K`3Dgb!n45 z3poM-OU2au2!lk)>zxm@AQI5Fc zE<8MIO9I0J%CN9Wd_br>gA8a1@rlfX0>w2)73xd`}5fez1e3(9u8R<_#$XsCT72&XPTiFmB?S%!iznjPRK&EmR zxvOX?NJ2xjk+0)zq$@}J!W>6ZG>O1*MsmmeDVVKRIia6pgpWEk9=5vL|Ko>bm^PoHE>T)>}2KvUSNz5X7$u=IE3#9hfjKQ z+!@J=*Xv#J_siKqFTVrh7Zwq-os-zVuUP*QcIWimvHvgK4uB%n#Vld|D z^QJ|}WsNGmzOF0!E*uT)&S0@Y-9wch9h7&4-6MF zIQ8mCRqTbAme(rF(9hiwxYF50VxO3nb@QEtj?1Li5u=^SIf=PXV~*WBN3>VV;G<)B zxtj)y)he& zYn23}$!xAijND-BGVZtI>*s4mi)m-&bt5LW5!`5}4@xen`?bu*$T5)Mq2z-6ev~&k zRdlfg(esB!@yLcP$`!-YpSRh$LhFZGi9c%&BAKzHMPkt=FhVI^Uhku{?ME86Be6v< zEk_oO!*_yF+EXsjfHE3eqQZTVwA}+P^U1l0& zR*fUnKDF{LK9yfOMLNYZ3QnD3Y79}TC(S;mw0Ou?!uK2}XoVpe%jn-$`j25})4tZeQ@ z%0xibcWk7FtEN%HNA9Z%I{#YIP=!1ZcMl>|%Bezg$D@Tx5^hIMI*E485rr zz3HYg%1GT`Di}`sDeu6mU1HN|1%d552Bb?iDf_d7NI1)dd>(ZG-G;PWh8AzQzcom& zTPvVp+2jyns|62HkBcySP9b%0^z~%PmR@x8Q%2@+dRQQz`5OD#3o(ZBkfd@LGuSsG z-bBn67vyAibh41ygg+xbg{J4?OmchJt1T%9oS@E!aIy$;8&JrMo4lVJghu9&=Am}g z@?Imia$E~GN&<}XqH*>TR}J$z2bWpgF=Hwvr~Oa?)Jkw38Hl9lt7|w0zVZNmjDSkT zu^vCa2bNNfXrXu&yTq+;VbUwshnw)^(>`h{%%T_j@D0paxym)ErFD~Y$dj-9>U|gkJ0VKEMc$+2t@sq~Zfa5L;d1!^PvE?x5`o?UEl#p4p7q^U zS={c`H&Fw=7~JoFD3h(!^63C4Qi-3Y+jKy44K;p%BwRFI0pId)f-&U)$whfX@b1s@oNqG+6o(!cO&OY}nF;I{E zCFp9B=yM(y%Q-OODp+RG*Xn_2;VD_kp_$4~E|Rtl&&P;Lhkl|v&(nZX0K~n|T5=MUQ!D;aLk6!U1v;f&o%&#^z}9C zcR&KO6N$GRFdnUMqi4`;1MRSk48Zw;*>SJawTr=Fc5yoMGCswD*EnhQxW_zmEN;)2 zcCZgAM`V)^$l>Q11+Sv7-q&CNIzZX6sXTM%j1kYu)#J7`4+RL^m$TPg0K(TB3vYlg z9y=|6q0|1bJ>Wle0ivh>BM5GzAb<>uW`u2 zNXEZZ8oG~nQ2zs!aAr{#)^T0z<^(f#ye88?(~G{KwL6sMdA4E|qo~G4{q(0NguL4W zY>L}ygv3@JK8pnd*z&CcfAd~Y$8jRDyDtoh8d+TR4KLYMyZ$TVgJegLHmO#%J|K@Y zT%sLoXi5>@f`8E+e{=H#13TlNi~>JZ{5I#WMgfF(qd-gkHr>&N&kA5n-0o3xZHQPX zzu}OvD7ALgu}u<{1nR>hT&K1`FKU%f^EE+421g;)AO#d3tBtL$ z0qe=YCrV_y3M*}@fJZk1Aj2Z~Av>ctkW{OF|{3Kld6T3mr|-5B=~+g%FN804w1 zVAd{^L|BusjPM3*0p1Tt!=nnGn59kARp1alHx3S|KOyfWk1F)bfo_od zR;%;Tm?;fp5OOT8j)}fSTKNh$OzmZke@+A~p#rGl))_g;H|lbd2z^zg{hlbMtb@9h zjRVJEW#nh!YIrsDbhu(j=DVMmQGF!+a-%K78=cN)mSce{aofq1kWUJT_j6WeQTuaQlSwN_w zhD!rN)-R)j8pw7HePH+OC8so>cGj6uZev3n0o5?(Jka;J&#E68Ye)f+iNE9q(7|#%7czMjDm5NG zIE56ho4AO@tIrG_!ibl;9dM!!A>r!jF1+z|M?lW;M{LLO1OA&1ri%_I-HrcF*nvQ> zengKH5?51g>jI1nJNozc7-{IFdP&DV95Ns7Xcu_Y2`hKu7EX*%j&|+m)y9 z+E6Zcjsv52gq*~rgGDfuQ$)@8814f^%ZP*pBuk@PZa^fm88lbNcjX7>$@_~Yyi=d z^1&IuMPmvI0lz6XIxkC4ld2}?tD*R+?@&F}w;2Ho;s6Cev!tp$WWmCB-bcK?akEQz z4Gp}h7gr3LWuH?`X41`hn^Bl{c2hhA{PO%-wc`Ox?#>Sj2n6tNq$Dy`VY0QxeMCrxd<@zy>E$4!cj_h!dkJeIYkji+T zuPsTO(|0Y-(5^eo`=#&-3?R0TPe2=P8`p(AA7S%ff z>2BS!zggiyx+-*q3&kiMEAT*o(tJQK3aR#K^NRSH^KMNWlR*&9(`aiqgRv_0InL2= zZ4`lw4VoLnDE#dOy#eUUpgwj2Hx@R*;sU{!XeO@p)}5EM{VnlxZS}96Yo72c6scWj z<09i#{2muG4(TsMWr|t^SXXbaIrJt2G68jO_b4H zfJVHvS&riMNz#(U>-5aI-@kcZcK~S280Y?lqW!y@%II1CwD2%defNtMhv+y)`NWU@ zbd`mPbu4uER&9h&k({LjstZVnjXfRihYurr2ec0YdmkK4KkJNte~m52HV7ZQ0bZPg z9PAz7M`{XM>_Oxv3{&A>sM2e1iI!%*_dRHMnAjeZB+O}cb6`<=39=Z2=(9XfyFrR5 zEN0{wB~ZLreQ}S)xcLtCg_HezkPKOmiWEfy{ECu(O8YiM%X;(>R?OrZ?mz{tvd#S% zdt!?T0}=Vf0s+l$JkF&fUO#p&7`qknG%_uPutdf zY5rB~_zkew(K|J1Q4w}IlteS2(9kl?pVa`WU3U0`458;eg^=syxZ;!!g+T}Fv_;%v z>U55P`0`9*QRtM-u^q$dw{5#n)e)rtVVXif9ab(9Pb{TzVYx>T5u|wSY+NKnPy?ZS z{Hz~Pi4-?;GAJC;4$`FQ6UXU8`qo5Ia3M~sw$~!NH2Gg_{5J-x^XZ&-R2$S0GOF9T zl|N}TD3+>)?0-T#ve`=@#AZiMwaGFVTf~j)o|&mc%MVnbiEoE60+-S=R8pmcw=0N3 z?@ZEt`I50dFqvDn$gA9C_tD_nRfgZLP=cu;xP`Q{2+5Vjz#%cwifm1mHnYB>OHo?8 zB$1~bJwXC>dWrEtX&q3UV6jEw=|?*}$kJ66hxLmqK$~1#Cw1nDg$=e1UYbjj)66Th zr%8908w*qX=5Sw=d}n&SnJTea)X<8?6Z4$q81u6d$`LfKIYYpFAhYq@TE3$`V8LpdR9lM1v#hZ?QE5}2 zB|7)$xCA+@W-7Z&N*&Sm7lt1#}x$))u7~fw?!$pJ)Ar#2YlwjJ= zW(76q@3aDT{+vbmss)fl~vpn3} zkDa;a$Do8S$VNpyyEFw-e%hgznU@p%olc7^xd_#|H4Ch5Y6G3x-Z*c#Z-9>nCnSF% zVgBYu9tK7hjz50d=%`A?edUB&U7%?3g?!Dvo(&IO8hdF*5_i>j@t6s!!)KC^x>ClE z@gME%9^Ze!dle@UHw@`}H52*3{G!+9$rU&jvg^Sp`XkN+GL>;>6v;^zjAfRk*1a zFY5F`!B_k+C$e@mrqXP8>5+xx>{N>Pdh1m|((^Z#37e+SgSoqOjs4zz8_cRCs7ZVQ zS~65W^ptb~m~6#TqP~Vp)PZT2iH})$)zL~Toz?BeRmRY%O*hTv8}qF5WW2mQyJ5Uc zuN;*5D?Ao4gUZBV(z5Q9sM^p&VauS?-XL^}gMDFjZSURnqdY0pXQ(dgRf$(Zt*P5} zY*EK1Sqv28nKrq){D?l$chE3C7Lm4NW-0X=I1(8*S2NP!(pQKeF0I*KIFT?MyW*Tq zEN{*GFe+W!@?q>i*HME~bd1gITVoT={m_f$_KEt)jy?GSB6NC2&m9q~Ua%sL9ejRJ z^{n!DTEHk_gY(&Tn#kNPJXMjT?>DuuqLH@xP|{4$>(+Ht=w&gz9sn6*`N^GJvXLEj zo*R-!bWTz)!e2C`G2XGs>`<9LsMHakp!Q9Xh~`1?q5um929&c?^abUyvOsX1ZrQ$#RG{Vrz^*^Ep5UC%(!ja@hnSlSxY+@MjCQcXkF94k>Hr#&>sLyrd1x)ZQL$s;_iPIZ$78uKyG`-p`|j$8xF zM)O~WSoQ5%j5%wEJY1?goMb2U1hBL*)SrU2@2YyeQlix$-6=m*5-dHv?eVgaZ|OjO zS}Q(?DvG&m$b5Gn(!_cOWH{Sc0z9+|cIVKpYG2k)#!X62U$tC}lY2R9K}>7B7-(Hy z{FeQ=*D$oav{5G)b9}OT;MKI3oHQA^y~(}h#aeLhQ#Tk(*^%+`_S ztd;)F+Oplz@JDHW2<2HIDqXCn`5%GQL#&B}+l|?*3wf_b+N4q`pE)8ec5=)cB8eAL zqI}6h`Mr6e@$+9hdBplF6ZIm2vpOJlBZ|)L&4*>A?4r70$lU=GlM`T!m+FAPElC47Egju*t7`gL+<}?%Sv9rd($Xh|A z%$S_}frr%;oU45A8dw80YU(dK`wu(AekJDkNmU|j;$-A#Vef3`_)a?VelBWYV`1%% zPcCL+;p9y5>$P|85EEx3^WWpN{(4dE*FdVw^zU3EKQqc2*t~~P75L>x^-FFVMH4d@ zYlHWKCEf`@EQ|zf&8$s+hI|z=u>UPE5Zli%tV+%%HmdmStnW-Jzg=cw`dO&8fteHj z`-}hiC_k-Wf6%Z0(f;@BzXyB$dGS4z(a*;G9^8wTo}PjJ*Wb_F?;)c8@ya_rjHrd9 zle3Vyf#c7%NgMoj%*f34YgvN7(5o;q<1;bhv%eF=(6BKxzULB>5LUJmlMt3Muz#nT zF@C2|v2cD5XsT?dVr%hBkT0g+Nnifd%lJ&cvAX;cllGlIh4r1YvUPAnYn{4f7$dH*`^f8{@{?{T*Nzmr&4e%ew0*NKJW*D>-QKaBP7<@mi!M&_Si zmw!L8v$5f`u>Y|R7B;5$G4)G$xZi@x{W`>dzw#bQ%)->v?d$T>ti<{l^9f{^KYX zV*GC`{U2)+=J?-OxaiN?L>c}?4WewnMECoto_>;^{lb3s-iz<^?H6t^GZFmvS@-MV z`vhkEDZvz>-lrndd${x8kKeEVrgY5SM>pedRAOfDFNEM^tT{`|$!@n_!mu4MWt zn|>a@Kl!`b`}O#}p-jJ5``%ur-|Ky6HDmgv-d`xmepA*=e{)~i|FC-fAHwRz^f$LZ zu`>RN=1oVrHFAd^<_8KW5`52Fs2N-^%k7mL+)0ut^KmVdbyxqqH9kbZ3=My#AMoo1 zLQonk$eZo8v(x)NLk@P#cOItzX(1B{b{3RY9bMuj?RNYQSQI{DLDW z!-!Jc0sFL>z%8)buZWTi?3F-`qlhga^?gvX#RHTke$_%HF)SwLD$=G<@J7xwo(%+r zb{8%sGj+H)o#Zn-{@Fq!yg6*HV*TmJM9PIP5i#M*{9j{3S~i&t#*$7b5+Msc`;Ge> zP{GbbWm%TuCEQpxO<{8PQuB-$oVpi!3eofGc_Vw12*D=SP0B%CmG%P=)6CFz+Gni# zzcBPnUV8m76@wB9r}B^AFs#uFnI}9(`QD^QgH^d*OCElTdau4y>)$R$?8HVFigUP22`V+Pxql!7rREArB}O0jCkknx*lF4*_6_Hy?Wkz3;QhGpD@!C z5+)17sJKkfV7RNZ(;(rrpqTaO930!@SZNpc4zzmc85o+aq^q=ExZ z!{4Y`u9*7TSN%AmdijK)<`J(G3aCbnw^!<>;$=DN4d19Qi*~F(_ju;g^FpUR=$ZL& zcX@XYm)lC){?A`d%s*Flf5Q)t@qMNFCuC3k9oZWSTivJl4%B<^Godt@HJ-Qsy22o) zsCqM7M68HF*zExR`Ee`Xr7DD%*S%rVXD8o8EL?H>`CM#nXj)4*z5%}89UJ3{5t{G2 z01?B{pm-RE%EY8t;P7JmwYH&gqHbYvqG0Cugo(tSwxc4&$k?tnhH}~AVoze7PU|F# z05xmeU|@vC;v~tku}SPjruJu)c^J#2+3V{mLX^ZXr=IJWG4{7ln+$jB+S5V^MRm7? zXpN~(5}+ck94EQNnuhFQXcqM**b-#2vh3tXvlv9K1t08eIFjw-Ez~hH3`i>dn22Vl za6M)d654OHZLkc9H#=V+(8(s$Um8;>df@kuiki9$KO;tuWLO0;kK8^deK4!dx1UO| z+NqFUidDWMKhE%q^u2T;dh z;E*8T6+_u z>zcSZO8NoUV(|A-`D_KTD_v>v^0A1{gmOdi-NABMUEgUbk$M3AfY@%gSrRfYhFgck zMx)(gA|tb)$;T+?A{~j0?8oxRgTPH-#6ux#*Lb(|DSe=tTXTCBri4HEI zSSqS8#W9Iu?0UoO#Q6Q-B9o9Hyfr1iJalShZcUzNkeP<>>j7w#NHQWU;8bC^iIIu~ zu89AN+U|E8r-w^pOoTD{s1piB-NnX-r;=+3zi1UNktVS*hz?_1_i2rT=c1ql3;g9F zM>(A7!!amxhJjcd8gO#GybW;|snv$dxebGa=|U_s<#ks)Juxn)n4@{`Rz2v9I{Ano z5^O{nj{gxd#9% zrC5|cj~_v^z9P)qd>MvJu|YEy=0~?F8YDYwk))8Bn8lkxygH`=H<1fnQ^|$0;a9kz zl`2NO_i$Gtq0?N=bnGh5xa<%Q;wQ7}x5Ecwho@QnzP!G~FBW|w#= z%tn$~g?I|z3M0#}DqTa!S5=4k{l=hRT@9&*IXZlJjieLw`1SE0bFwHU3H8}l``CH&E{Ew_oh+DR7brDNQbcmCFu0U`pKDUfV=l$LTsbN=9>_*p0K`_?MPS^sAzpv$rI8atrm%sY#L<)v=cYFEl(N{|bt$5ua z(bdipsitiIgy_*QJwNHM-_^-JGtYJhO8~R`1(9P#^vEt1VQC{-V!*pWD1*t*P?Rm| z2b{|N8u%`h?4ur zvg);ZN1FjAvsX$Q0p0OvnzNh%j1mH=BM2?YTHk&i5y4Ls+_&Y&PAI|z4BGBHB|+XU z)bP<42H7X=nwx}6RVwFV>B9-WG%n0ZxsX3g^nmY(LyT0uPpXk!ipz2%xcRrx;2?0LNB-ZKeIP)C#18 z;x^u7U0T|mw|?PY#%4*wSqQ_|Z9}`&MXXX1$gP&|dDCzjRAHXgr20*f z@NP2X49^dR&Pm@EQzGbr`329EKSFn;q=7<JlXM)#z%35E;;bJ6B1^jU2I%h|@8w^a0#r@F~j#sp|+N0fQ?)b1hd0_o!DIk2u zBr5+Mu6bI(Ap^$8n|{+4sV18mYym&)Y0&REZS9Ag!-b4~I!y;Y)c3?z1^AQHJFN>2 z0H?UrTq$?M=Ql=`^Yi2u--J!zra|BZ;27q-UHH5MouSndSQ=V7*W){UI2C)K<% z!IHl-37nY9`@7t0U%R}3;dPat^z%HQlkDZ3k=d>QZk5T8c}6T7!nF}KvV7tS**ao@ z6*TDrZd=tY>Gbr+`%XSlf;f3ZV!w6?%k<)8+HaQKnJ_jUd+aq5Am0lwH{?1~`1Pqq zX9L@kZ{Hg+vdo{UQ??iA;RTzgt=*WaS4}mx z{02%@wDKB)nYR#FfJWCa%=MZ_QVUSroE!GO*FH+cyk!J#X@c_vQu<=pIZ1`JK?{_4x>zdQwEzX;1p3C;5WAZV2Q#%cEQB$q%kO#@99W zbz^fQqaRf(b!&Kct|~{dTkX3Zme`lBVgtrl{9bw#xOW$?+y`Gi?Cb8G)74iQkZJh? zWS%XgWA#79UJmn`N+z6k=(F?-F_xdQsqqt_LD3z|?k?a*`)JL#A+>FdQfuClE#GhE zZ&nNO?vB8Np9&Cr74>AG1M^&yVT9vwUR!lZ&TK ztW*>*0gUinMlTwG!mGiC8S_Y<)7vRT-r2X|lN|E0i@vX=N}wuAWbp#_j{;lk>G+$* zGP8|vg=VEn*R%sOcH>J2d8dcoZ%kM7MF2hLT#L0(hX4PR~forl!^Xv({Q+2 z&vG5N>q2kRR}tq;lPfbYrnGl{%2;+UF|Do@f$bfakV2CtC^oFkJ$}a9LFG{0!PW)c zuP49rdh26A69&EDB(=!7f!7t;V8G6iHHNp_{0u1GefM|Wg_-}n@|Kse>Z6D0 zJXSkc#0^_Zuz`s%C_r{x1Rs3_#?~5!3Ae`HkMZIAo&f6_^HK1eCyV%KZ?$HUoL8}i z#^i*jU05k4p5(;*0%i~@v-yEF(N+veV0OG!r%2kU&kLXszMt%a_lQN$S~xV$sXzyr z*zmP)yVcs6K!Z~RA2Xs^LJkY(k-%&vZwCgZLoY^wP%h5pd!eafA^h~R_GP_9IUlJsbksnLp-A2D zk*GYG4)d@#5!83K&C~e8n8$3{Ts)_wdeYR9ftpxhfd@ID#(NM7SKAdmF5FyS>~Hf| z9=@SvL{awsvuI%cgKYTE+ReoHCofWwIH|ZDdI;fnK6te59z2Jvqm&epo0n!B{8r0d zvINu^cnW@bn3OU2vF?jLHJ2aF?=;yLUCj3a+W~uEDPNn*C<9Oc2N*x<&;p_(xCsmU zwXa(-qYr@d+_-k68!Uq2Z8Pe{pPBjsMJa?9L`qOITKvKN*K&O=3Ul72N4j9Sgh3PK13Vh<=r z{)ic#y?1Opw!kbwg4}?uLlVausjXKvqHO4Eoimyh3`3D0F2_xy8C!bK8eLGKeyt*} z!v|(46}BS#S&5x^Pan_HWk!gb|Az>u$spTa1cC5^PO>TG%}}|w`Vkc4(~+j>x}_i{ z(uV&^&Zw-qw#_1!I&In5Q`wAJ#xnkoQu;DC=84d*P|*%|Gn3v_>J55UY=kvXQ7n~i zaekIC2F`71G;~%l#}-p{OZP7eC}jv6ZnZm{++lR&OT#nn*>&F#;u7yU?@MMf&q#Ml zG97kQNTt`w!w?up#-i+haj7Xik7$>d+J8tua_DU=EcmEuc3ibua`T-0ZfKx zF<*v45pS_JZsPO_%gK3y0kgrV@sJj$bwip*m4RXC>Q1OV0Rk*op}4i25}Uvqh5iOEKuU(3Vf@$A~8_2$txP-23xeINKUfo4=3&f74dV^k+|U6-6n> zeteh}Cnz0Xm{&gzInGSl0jyGPSXo$*W*7>crzU#u^Pp7J7i$fcV4z}$8? zkxZwyF!HgjG-#?`&`3l({I$qsPDvT`c1jqh2Wg!VIi_I5Kapr6=uXNy`WKO5g?>13EW9{L zhH9ATw75@Sjkgtv0_>enJSQN|dcQ+*(p7dwr9qKyu_k+4F4=)J$4(*=+->t?C%aHt zJ2vgpB#z0NEH8K7xJVi4Hnh=ot<5C4T(hoRu-r;l;);Y|m!g#tu@J+FQ%d1F7VQ;K z^>a=mTGldI%&Hp|2crsaP@D3-DxHm52_R3NeVgV);M;9~26lBW^8Dww^~<{WZ>)Nm zIR1q1s3-~iln}qZttM;WefP}&tG(}l$FgnzH?#LDMYj@CxVKv}vLzuTk?a{|Wu;~B z8QDd$DMA?`GqRISRz?}wtNgF~?&<9XiueV*U1-}Aix^6BHcPUm%9=XsptIFIo? zjo+#VA3RUH_^>xFMJ3 z3BUWcVMAgZmCaKTQ+ye>O4Y_c#KOPoN|-#=2#7$Vy8+21<_%uju+8TeR~1rWU348?TmWDS%MHXp91&$@jdFs z#ad;38S7NbuH1&gCv?V5O~{#H#fIyJ&+@OQyc~^UrzyNS(iOKB4J#D>GBzmjlr`+V zYPbn}OthHrJV(ou@hYrlfb55yeqs2M1$~sG_Pu=-9Ur#UsCUXTi`soh4_sY&!RjorxR$ zW?1HZh7)Saio`MuoU5`P<9Lvl6bb|v+a7!KMAyP1?p}dQ8r7(Jr>SW3q)!D#T?jo$ zl0@BnBYrQvrc~a(c>UsRFt1bDPMv<0U5*BD!-imiEy<;C&!eO5LTg*3@g1a zr`{Ta7V4gg+E89BX;)TshCMO;@EA%NPjXV)(Q>u7Ec(hiMNi(8xy!`OJ*g*Z>6E`D zrhgb0%?^_=Z>wcyQ1^^wmpRNB92T7OiFJs~Xh@aE?nMg}&eJ|B>6w|bo-2EhlGR}L zaMcKV&s&BjhD`S$b#vZC`YlvL$>$T-6Z3|xPJ!|$b zG=PyquQp}E7hibxIJLDa_nuY;n{mB9K@<=jv*}*n&xW#~F)mtM0)sXb#Ix)3h7BCF~*Q zB$A;^u$NQspeOlZ-~B_w!JwC;ZT!K?o7(2F5$|rwO2NH1av9rBRC$lnTL{XVdp&vi zxPCwHiBd{Aro}tsQ&)8}L-o8-dfF^9UNnpLB#eWR&m~7T!}k`xsX6|bZqMY%b*WOe z=4AUm5rxEVD1rG$^TcB|UD=NOQ*v%Yu%?!Qc%jkjj)CTF??gaKoi*fIUdRt=El?z1 ztM6=7jb=V2v8<$zb&DQlxMmy|PalZqg2tH#re4T|!SQqP`18jP%kmuvJ0MFYUt;Gh z40#SZ$4JNCvVWn_F>pq^#jq+h#tg=ooO4y_c>5ti%{hm!uXF@?0(iJwCB$?#eVwi- zOVZd?ieh?v`o#)>{yit1;wy1EkY zrX^ljxKs}vyyBU2?sZhd7MFq6u>jHc9cQbZLC@Gt6>czl*{3Z9>z;QAOl6n9NJYwG z)%~@}Mp*OhVUHIv;aV$Ynb^B$%LSESIY@=qO=XgVz+U>4>xc~wBfW3r!f&V#mh!b9g0I~`rxTYO3w zELd&d0{{47v{Mun#6$sSQ~|P z{IqHgZG(jnUGLj__D|psKRV;4$Gte=d1Uc(hap12%7@JU`lnpbvH64#F9)EPBTr@y zumtbYC>(WOa2S?_LR}RIpwB^BvT|$_|KdR8${EHn@Y)sv+T!2FLT)g^s~Sglo0hmz z4a9rryuFDcNcT@;*yYpJAJBp zd6|A3{^;at#_DUw`=(Z^WrdeV0+kQM<4$la+d?f)x?uo0JX& zcEsB_$snzHW~MA)bCTU??A7%l60V|9Wvb!Zs@@@Okp=vmi^43_EY5-f&W7YqgDwvwY})@w#JhEg+!?{pFFH(Hx}F`~wc|v2_f)xwTACaDRop)bi>$?LG z#!8Y8vt_F%xzCZNRTPS<}c4D;Po--b8 zT5OsVX$~edQAs9o3mt_h=lfaP{em-b>OZJ7;N97<#^U)qJo1Qf!WEJg0qA`S4pW%!=b>j{SO0mqA;=4mt+w`xF>nNBSV3`m&~il!X3ylrP)qSql# zC&E?ps8ZydUv%iP;Ew3Yi|`jy1=FwjC)W@0Hi>Ijs+C@!Ybkj5p~CfKZzf38%w?Gi;sfhJFZ7yEWl(i_7QHCz6l3eiG}~oFa8!jrQP?iL zAq`e;U|Q*w1*W_+%prG>0nN6THxELApokx%P6@T_28pq4HMo@wic6V za3lImsXp}|wdt{YUi4v!^@3~Ra*Q*Soq?8sDZhNav*sm2gd?W*J6x~i>&NG3BET^t z@bnP3#8zaew!sO4cuoQ*O>zLP*AZwv{H{Ky27i#9Xr8m%m|%7C5(Y?U$+i`fMU%YMS&X{qyJU=+0N}b8-mu zPY{F@)7@zCWN*lIqf#B(#A`ed$i9=zKT!E6*lxGs+yDzA1PKEP0!TAHK?qJjHw3!D zfFkz4&OCq=M9T_)|DQhsxFIll@b7)V1>%Mf+74#>4psX{!Q6hCR{p(d1x+Jh_2O3X z7eW6$o&FTYP2%@P;ID(+B)7xlwhy8d@`us?`@!5Wn-|)~2h388VGMl@5E=d(%P|3H z2mb-XhEc_$>i`%w4C)tiEe-exePdB3Kz|Y6F>FA05&y!l0e(ckS-H_zJj8eG9Dr>@ zV6byPnic_jBTjA(e>c-263qtwl7j~Z7mb6eTM)~ps*aJsX{**_hMB#?53jg?a#Qv- z*<$7hzgy4$Da-es)$!0YRO-Y@Vh7&q1A8m#-Ak1p)l~IixK9u+3xJ&E($xlWs zvSfIux;j3vTr@Z7Q>C|8##CT=(UIhX(L9W!pd%+(Z>I@{4KzyCrGI+F<}uvhT$DZ& z^tqJlRl%^agF#Y~&_0E3_Ym=G{3_b~^gPdR6<^m_bSsUb9G+B9d|xs~UuB!uoIW+< zKmBTXtTOtN&0}SA#*QZADiY^M_w;+zw7w7kSxmHd66}YG`xB0qLRb+L&?ie^Eg_Id z^vM!}i(epSe1RqWUw5+nb{@m_sDgsgH2KSZiQ9MhU-$o>ZR0{Cw3o^5Z-OFr_sqnw z2{Z#jKZ@CVzum}yFxx1Ww+bL~{cCIfBd?FY9ZSJcB@2gOsRR@OCCzV^vfGSb3C86+ z)dX|^V~P=>Q}@w8z6N?E6_smZH2IsohVBP>lkQ{=35X-iRvB|Yi(gGW&8|$64mG*Q zPe&J6UqjAnvoHN@QC&aV8CK%MMU)PD`J0SIp5C;Mv90Fyv>%9P4qXyZ3OvrUbihX@ zUO9=={BH5YlhSPSS+IGt$$|R#Xx1VA$0dRqPs#G|I9*h4=6baezgCTVkC2U{=Kk#e zZWhSc`r4R6-C=W6x%r5aDct?v2;$x}z1zZRy{75P%K3O%wG zvup}9cg1a!+vuD?cAW9O_59oZ}@Pvq+x$EU=UcJEwoUcrG}lb>Een^UA`u z$Jcb#-J*PgwCYV@iX!Y5VdF!#{_>sIvI=2bK@Xmt>p>BIenEXHcoM$sdAj!`*@q|f zN!Bu~pE6V`xL3Uu63h?4RbQ?_tTwm;BgyDGspt61#xAeX6pPgDViHB-sOE;Cu)=3b z2P;rZa8OE*XAWE8No?7Pu#SkYh#?pg0#TOaagpSJh%*n02)a^U*lm zF2-*sFA%#wuf?m_1zeO)O-DyeOx1JAE@1DT)B8NLUw96^yMHB9#MdgkvfO;h|KNTB zp=%b0t{>r1>#b9`W%@b)yj%56bCC&M-!{K{@lb)%dHKW#V+hG-3+Jc!Uyt9-;WfB= zDtjW)Y5L-kW>(cta!Ua@%U6Py@ozz-9_(bA0K>v*ZEi~dC9NhO+6AI4Ss-`CW9b2;GqQ+m_M&^6x}aO-A7^yVf}{} zMwfx^`(67Gpp*QIO!w}xv~lFs^+~G)$%}h#_1b0Ts^y(VOsz3x={SynXXG5*1faU^LRIBVD)0^|-a@Lzjq3%#M|-s&oaP8%l)kFkx?i=12&&7t zJi-_MR$AH1e}AsuJVYoF4(;Y4Q`4`cF=BcKz*eq*NO}0iZG$xJa0BbbFb?-Os0 zw#IoX(qcyOBbSew(sA=kQWsA}=`ia3$=X#Uk&TqZA7$g@2}F7{D9Gy2py^$%W7rJ595<)y!;7l{2F&-6;z zZs0M)NCK7UQb%3{)6$ta$`5>U1`ksNXfIu0rr-iw#+!a1%#l9J_aKGh7{9TITq#Qh z&p1jZe+XH-E~7CZI+?epFaF+3;g+)&dr+??Q$LKzM=$N6kZn|yyWvGZ5m&KUAU5r= zLDSg60^Mas;;0&jAh6E8>dmL9fgt+CEg~taEY}X*5Ep5NE3!0wDGWH<{_I%75aFFl zWxBvnI$cU0cHVafm?G~V;kA2vSXu31cZ6JQ;!FdbGJSH88)w$wWuxpj`kn^9W*bSl zx6-I#y3Zu+mw3ah;;qGhi;mcj+;f(7Yz>EI7K&_7~_LRgkQkpQ575K_X~l2-@4-8snS64HAl*S9S4 z&GNWq3>r8o$Pf2iJH&gcgy#)ewd|W2@u%*eNE#XV7!+=Z<_3|-PKnX5$;wn$Oa}Jn zbro7Xv|n;5dfqX+6{;{WPu$7DzP3w4e>hS9QA43ftZh*}Siz>dMWKQi&@&`dG+!D zlrH{diRSug(#sURI{dC_0YOj7-x5t82#g}Ian5nJh58(>SdfuCnV<+Eu-6LF*~>(6>QY~u){FPr+28w?v~g~ zq|$})B3`TT_Gha)DihOEAXFp|KMR@RQdyya3T4vz3?ZqG0%L5#bE1j_@=l)w3Nbla zCV@?!Q*YIW!icPozj2DU{dk}2vD!>VDuO5%A{#l)JyO#qa%uL)x#R^3*&ZkBopgl! zK*yghF}Mgp-|Il2->?3E{S85acSR*&1Ua;vhaM*6cl9EAlrSggZ+}67FlWkd zH-I>Z(J-Q)0mzE{uG$2?079bYDVCrph@)%b-%U`&n9^|2974fZszb$~Q-Oe+42GrS z9pR*&i)YVTZdus+$O{&^$d5Yz#P0&b-Q-kBrc++S$wv0115OZS6V z<12;5juW(R*4uZ@&THA7c{}NNaD8$uXz65Kw~&f@A|2!F)BSH21Jf-wLJWsw5A^W$ zCp;=u%;)xq6*fxodbE{;bk<#X^qktTexo7glh_yyWvHUX&V5=CN0DC$iy-QOD&*xL zO35u3Uu|*ItbFGL$nwz4mN2jC+_9iw_X{TABG3!cGr~lX%FVhZ9IrhfbgkI6Gz79vg;|>LRyTDrQ2%f%EvY%9Zo4B?4*}%5(i}Tq!>ga+ZpHj52-@?G)JV zIr>0CmQdc((JwvT_-&1}&#L0}+BP{yij}9<{AcovL>f9@GBh(~`c`Q^dv`3JtRpt! z(L!AH#%cEt@DNy7?&Zp8&+A&BuH_tRH9SzPY8H1@mO}I9$6GJn-3oIQK2KK5YyDOJ zQLD)sJ}<*1-d(7Kqi8IMKA0? z7i8s6Lso!@wm2zCc7PxhLJc6Ky&H_$w>35cn#0o4G|vEe%sig9PpTX0yBmJKAw>Iz z7!_4<={D2XIb{{yJ2@Qtg3{AFRJ0Sky~)-MHKY#&k6AlX>9}g(ADJbNzwXx*K-9&e zdv3`QuVO32?$$LM4(bi!#-#VLk&VU#IYdCvl_&HJi0VRCYeKsYufzHkL3DNuJZ}3- zJZpNg6DexcT%TD`yh(SX*Gb|^Og_lYUF`qC*{|9{yTs}SN|`&3ZiX`TRf4QfTW|3E z>c)ie<;I&6Q3{Q!I9mZ48#8>Jb9KE7&jRs#7C#rwfo)sXE)KM7nn}vj&M1U~F8cXf>|dV012Yd24rNfUUUs-a$Y5MJu*)uj zqYVBFg!Fd+Az{K{;Bda$vHpI6kp8A1B-9Ub{2%E~|bi>n{+}FA&oI zFbD~StIy0Y5Ynz7BovNf`%eWSp>Pz`A#f~%kfPG5K)_&9yg+{IHYxWR&}@`>zSrbd zj(VsJF9}%JK*gn;mXMV*UD%t&V-j5Ap>ZrL|2)HO@0sr8 zXbLnAGitA#BjsKoX&WwYjeKJNWF@rrI7K0TQUpabZ17c=-|ZS>CB2(h#Vaf5G6v4M zD#d$5tU1qz+*%8xDK3N3?>vH{aFncnVXOX|uvI7=)fd08Reu^=g~C-@|AnpkN!ThB zuF^IH3r2b=q`|im#OS#)epI`_Pe0VGjakYxlsWf4Mc5?aBj->$E*bwzqthe^J6+~_ zhrlg?afyt_R?lqQZ+6K)n~=+S_6(&&b1b;eTA8)YU+zdBtB00<9R5XweeoOWTA39F zung&!s#A?k{D!s>?QDhOgIQ7;i{i+_^nL=%gEgD)y?a84P~7w`4>~MN28!s&s0uC} zRuLYH=+83WV!Z5kD%1lN(BUmVeC5QQf_6dz1^TmHOZE8qn=28W6Mv-a+Kt}&Y_JP_oSOda@Gh*&a;FB#Vds<9q2Op zk}_PL?N#^meSWS}>o*tb4;G@zL& z=Cxy_SXlz^{gR!G2J*vt_z5=CZI~+vU^M*?F;|%Bf~(OK7egm5sl{-4&tI$a$BD%d z7&rdE_J#l1r+*)Lg*H_GeC!nzV@mwi$N$qLW4~t>{_9D`e(%lyr1C$VV+`0OcK1R4 zC-we+v#tLz082s;py+=e0!wnOpfbilgsu+|TkyM&1AuVDD6Y}v0AvfJ^2A(A1F1IAt`9&t0NKLm zEHKwXAdLKtz6QF85qr_sK+iC;BIX(bPyoq2aWb*} z^0ohm``QcP>f`g@=WCB~-or&Pj>3wz`ODY-m#_W*lCQlGj{4qztgk&L+yf3v4hqHg zUs6#x=g9$tuk_W%^IVi~UJweTDBXI8zbR|f4)=ib#RvKvx6^pVD_*@n=J}nwIb30q zE8Ry+_Z&V%++W-Cj5hp0pw)rEln%Z+iRK&qIt+32vhwc~HHOUgzc_mX>G{P?!s%4a z0XjN%-KmZ~XB$4E3&jpO_6O=RwZxT#3oAiIEs~&p+@gw3`|J}_XuKXL+19JHruQd# zR@PY_(&0MG4?j6w{;{Wi>lMS=e&KujXR4JyJ#k{zpZG|c|MOeAvBB$NrF(jL&MuBPoz(6tV~cXUHbT7c zp22IE2H~hD#daW+4roA!LzA41dPSjDAKBtcJFL81mMFt`_Ga#;k4X6(72g@!cN{49 zlNHb9FSWv%+zy$zL*x!In>)ad*-bYD9JJ)Oh_Ddmo$$}e7`A;nv!~RiRi4JL_`ohX z=Y@XItNf7-`xiXo-@+p>so!y!eo!QKZiQe)^GYzS$BM15CYK+m+p>?*{Q-)oWP--t z7EhD4`0hpK+}ycoKf^Ey7WzTCh5JrH9gQ!nk%u-&!>o?#UyUP!D-}K<6K2hHOO!IO z?@Pb&QN>Bu-qtEosIBYyO#%+uZf>gUfqFnLoTw8$gf29mckKyhvh9mW-VKy&Jq*#7 zqCS`Skp04!^vxJnGR+7!R!RPz=LfRwH#$G(JHCQ;Ru=`tQ#R_Dk=IiZ-L>@@wh0k$ z+T0M%^3CoXj0cY znd0e~N6%)Mm-vWmAhOYxM9BybJ-?%} zfdI+6|Nl|u{2pEcBaEZPb~IiBBjJ9#frBto(6<{D2qPDKyO9B5j%1h{U??!hmv1+~ zU%o3J(8Lw`t_46NDKMM}OAR3O4^;y|!04s-8z=a4d3w;a-u{XoJp+JH6u{qs1RH$l z$qoU6??6C6!XF^X22cP4egAJ`L~guG79a>1M;DWy6eR`%#_q1HUIWjHFa?y? z5l#1Ff$5p`g1Cpw87*&U7UhqiLv<4f0CzYNxNveNa`$M6MEQIDG*=aM`O zJ?c*2Bznwq^lKwKvfBR1AQxoKQ4Qo_>Y+a`e`PiKy>Vrcb6iAkUx)o{ZD=A$7nI=1^O#q zjLH9|CE>5Wd-r%TPy{+6+wVn;!LTGWFGD~4ZJ+;kCk@_D8a6WfS{xFZ7YMLk=NK|g1~@mFGB&7V|$s9AQ}ye^(<_cc>se#(T7Fs zdH_wgw;2XQ0BGB7^^g#BRx#{n0U2$_cY!udihJ_OrnH*ghU`Bm!;9+g49-$9#qh3ZbJnV%I}K(AiM8 zl>rlfM;Qujg2b*Tgn(@yBVczyhojq8PYAZ1rU)=}M?C~^gx=ma1Vj)G565~RK!F|e z9s$Li#<$gjqa~efWk__wSL`xijJEd|=-H0F69I?pYzr_*JKl$YfVYnakoRoIetOlZzwxga9n)zbU8R*)M{T>Nyird#d5;((crynpQcg!^;uubl0AFw6v_%0m2gGT|| z)z0q%`KEv9hnFpC(n>Pq{|~k%n!^A9 literal 53242 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 + + - + + + Grida Canvas SVG Demo + - + - + + + + Rich content demonstration with shapes, gradients, and eects + + + + + + - + + - + - + - + + - + - + + + - + - - - + + + + + - + - + + + - - - - - - - - + + + + - - + + + This PDF demonstrates various rendering capabilities including gradients, shapes, text, and eects. + diff --git a/crates/grida-canvas/goldens/type_stroke.png b/crates/grida-canvas/goldens/type_stroke.png index 11636262c466a11c60520c52e25d890d3c8c91ba..cb8010146db969fbef223ee5715b1d0200c58fb0 100644 GIT binary patch literal 53802 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

m|-El*f3^v zPK!}C?e(|^d{O@{b0mETsnssZi62+1E zOcn{8xD61i!6$>-1_zL}NLv|*q8EV!Y&^`& z>90gF%8@z$8wac=Il9a#@j`R7MsOER`f26iv+A-I5?Pga;RYCtVOBgl=$!qW3aN^$ z!EU8+!(Y<^K!;V2Y%Fy0AP?`|m1QIca5KTdx{uERTwPBWyeFu5@gy$<&z;y)*y?@1 zeO@mwFYiw~3E+tT+O{Uex9AnNo7|B3A%Yt-ruXqe0dRMBNmG=L44{6ohsfh9hPB2oPm-byMg*N}zGP)1N*tp!rae0SaR4 zs?ln_f#DELP{5d1)QSo}3zf2Wd60-k`tFKN0@}I8It4rX6vfKlk5%9tYCti^WiYGV z%Gx=-6g|#`fNs^h*^iB&FojR#q*77rgnmBmwXi9qs|&&q3nk@w$Hcl0=S{rRn|Xp61L2CMicar*9B zoo`)a74{0N9dB_afOR%siZvM(Go5x~&E0Da6jBRID&-R$uGb=TSsng>{?ZWb33Qp= zhaxSZRwWQ2m!nOQ$m9j3&CO`5Idf+Pk&~o;{?;+(iN*4D@#GfZ7`kaX6|J1hKTHzT z6lwdX;G=C?5B(M#V%}W3Z1VyO2nf8aoEj>u3SrC;DkmkU5X7!bu{dWwMXvkpNbSlN ze%pV-k_M+-#%nc)f&TEegI0EMZ^9LAc9z`GX0) zKgWN|*ccizPh`^f;6Y6Y3u4SuBA=a|C9csWZo(?|l$zMuhQGtThNO(xY;CRJn)i1I zxqKxizi;b2M1e8~spr_{;HEpu-Y6BsH_*Bect%bG4a&>DlR7-1cSb$VrPcGM%C6CL zdl&Ks=b`*wI6{XqO~}c+g!0RC$98tV%5z85*K<%I??KkxqqJYP8}N-ns30j5w#`f) z&^>-CccR`xJgO)U4>I`BrBvQZWMZYyl@V2M<|YxJ<<4PF8J^>~Wh51`N=B}-Lc4rD`AGisw!Ux@ zp)g+svBImd32k_e#%RKo#J6^tFoGZx5@*r}{SySR6WbkG9c(CJLJ>Z@4l&cwKug?z_ca-S1PanMl$ zLZC?-orA2jt;zl{PJFA7LXYOY$h=GTeZcNeqSk8<-a zs@S=z>-IeJqw*##4*5ZEt`wW{ExNa>>QRi#z3bAoHbD+w_M8a?w%U}Q1a+(sjCfoq zzFC6fk8fe}-Hh6~FXmmCcIk><&7U3aOfK_vYhB99zA4`XjvJo7Dtax3)#ZZe!^dak zxv$?{*YCaGXWhj32~8pM@4V~^;`)_ll3*ZzYsyC^CUM1IdT+DK<|qLN!Y@}m6cup% z$d=8&Uex!RnP8dwn=kjDUDEV;FYt7IeOLZk=MBvnJ60|PZf8ii`jum^gx0b5()v>G zay4xHsyJ?YZ)588uM98^VEh>OcJ6APY~T_$;GVjp2V$9B7Z$e`#jn2;Cn(^1&0Mhk zFn{zG|G8!*r?&cfgBC#-zB{$k-PF6Nda7*HHIa%(+u3}9Nu`{I z$!~ko)o$3BTdjLD<8{@HRSidu9*y*6?Ck2QTE&#qSuwj-{d?y+>D^q@n|Ja%Jo#E= z_ey70UXGSuj7?%#{Jp48Ve4`uoER?_{5w{8u_)QQ(c|&8%Ma%?zu2{QHOGF*e=TP& zFZcIObvXZe^V<25Yu4jrM+79~!P?_SgYZTNLb19%A0N4|pHuiK7w_8RWGlCh!Yx^VqhcV|YV~TgQy?AudHN@Lr-n<$21Ioy!$hSBT~0M9VsSyP;(5znnx{w1nOuI4aHQ{ a`=4>bjol1NzjS38fWXt$&t;ucLK6VimaL=z literal 53752 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

91l)S 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 Jmvv4FO#s{YuvP#7 From 970520651d103305a72f6dc88f59d9f545002f1c Mon Sep 17 00:00:00 2001 From: Universe Date: Wed, 15 Oct 2025 02:58:17 +0900 Subject: [PATCH 5/5] chore --- .../ttf_parser_chained_sequence_features.rs | 40 +----------------- .../examples/bench_cache_picture.rs | 9 ++-- .../examples/golden_type_line_height.rs | 1 - crates/grida-canvas/examples/grida_fills.rs | 40 ++++++++++++++---- crates/grida-canvas/examples/grida_shapes.rs | 35 ++++++++++++--- .../examples/grida_shapes_ellipse.rs | 25 ++++++++--- crates/grida-canvas/examples/grida_vector.rs | 20 +++++++-- .../grida-canvas/goldens/type_line_height.png | Bin 284566 -> 285192 bytes crates/grida-canvas/src/io/io_figma.rs | 8 ++-- crates/grida-canvas/src/node/scene_graph.rs | 2 +- crates/grida-canvas/src/node/schema.rs | 21 +++++++++ crates/grida-canvas/src/painter/layer.rs | 19 --------- crates/grida-canvas/src/runtime/scene.rs | 2 +- crates/grida-canvas/src/window/application.rs | 2 +- 14 files changed, 128 insertions(+), 96 deletions(-) diff --git a/crates/grida-canvas-fonts/examples/ttf_parser_chained_sequence_features.rs b/crates/grida-canvas-fonts/examples/ttf_parser_chained_sequence_features.rs index 615b5d3029..1820a88fa3 100644 --- a/crates/grida-canvas-fonts/examples/ttf_parser_chained_sequence_features.rs +++ b/crates/grida-canvas-fonts/examples/ttf_parser_chained_sequence_features.rs @@ -102,9 +102,7 @@ fn main() { #[derive(Debug, Clone)] struct ChainedFeature { pub tag: String, - pub name: String, pub glyphs: Vec, - pub source_table: String, } fn build_glyph_map(face: &ttf_parser::Face) -> std::collections::HashMap { @@ -150,7 +148,7 @@ fn extract_features_via_chained_sequences( } fn extract_gsub_features_simplified( - face: &ttf_parser::Face, + _face: &ttf_parser::Face, gsub_table: ttf_parser::opentype_layout::LayoutTable, glyph_map: &std::collections::HashMap, ) -> Vec { @@ -160,7 +158,6 @@ fn extract_gsub_features_simplified( for i in 0..gsub_table.features.len() { if let Some(feature) = gsub_table.features.get(i as u16) { let tag = feature.tag.to_string(); - let name = get_feature_name_from_font(face, &tag); // Extract glyphs from all lookups in this feature let mut all_glyphs = std::collections::HashSet::new(); @@ -224,9 +221,7 @@ fn extract_gsub_features_simplified( features.push(ChainedFeature { tag, - name, glyphs: glyph_chars, - source_table: "GSUB".to_string(), }); } } @@ -235,7 +230,7 @@ fn extract_gsub_features_simplified( } fn extract_gpos_features_simplified( - face: &ttf_parser::Face, + _face: &ttf_parser::Face, gpos_table: ttf_parser::opentype_layout::LayoutTable, glyph_map: &std::collections::HashMap, ) -> Vec { @@ -245,7 +240,6 @@ fn extract_gpos_features_simplified( for i in 0..gpos_table.features.len() { if let Some(feature) = gpos_table.features.get(i as u16) { let tag = feature.tag.to_string(); - let name = get_feature_name_from_font(face, &tag); // Extract glyphs from all lookups in this feature let mut all_glyphs = std::collections::HashSet::new(); @@ -301,9 +295,7 @@ fn extract_gpos_features_simplified( features.push(ChainedFeature { tag, - name, glyphs: glyph_chars, - source_table: "GPOS".to_string(), }); } } @@ -337,31 +329,3 @@ fn extract_coverage_glyphs(coverage: &ttf_parser::opentype_layout::Coverage) -> glyphs } - -fn get_feature_name_from_font(_face: &ttf_parser::Face, tag: &str) -> String { - // Simplified feature name mapping - match tag { - "kern" => "Kerning".to_string(), - "liga" => "Ligatures".to_string(), - "ss01" => "Stylistic Set 1".to_string(), - "cv01" => "Character Variant 1".to_string(), - "locl" => "Localized Forms".to_string(), - "zero" => "Slashed Zero".to_string(), - "sinf" => "Scientific Inferiors".to_string(), - "aalt" => "Access All Alternates".to_string(), - "numr" => "Numerators".to_string(), - "ordn" => "Ordinals".to_string(), - "case" => "Case-Sensitive Forms".to_string(), - "pnum" => "Proportional Numbers".to_string(), - "ccmp" => "Glyph Composition/Decomposition".to_string(), - "dlig" => "Discretionary Ligatures".to_string(), - "sups" => "Superscript".to_string(), - "tnum" => "Tabular Numbers".to_string(), - "subs" => "Subscript".to_string(), - "salt" => "Stylistic Alternates".to_string(), - "dnom" => "Denominators".to_string(), - "frac" => "Fractions".to_string(), - "calt" => "Contextual Alternates".to_string(), - _ => format!("Feature {}", tag), - } -} diff --git a/crates/grida-canvas/examples/bench_cache_picture.rs b/crates/grida-canvas/examples/bench_cache_picture.rs index 80f18a94fb..f8532c2e8c 100644 --- a/crates/grida-canvas/examples/bench_cache_picture.rs +++ b/crates/grida-canvas/examples/bench_cache_picture.rs @@ -216,9 +216,6 @@ fn main() { let surface = unsafe { &mut *surface_ptr }; let size = window.inner_size(); let scene = CachedScene::new(size.width as f32, size.height as f32); - let mut camera_x = 0.0; - let mut camera_y = 0.0; - let mut zoom = 1.0; let start_time = Instant::now(); let mut frame_count = 0; let mut last_fps_time = Instant::now(); @@ -246,12 +243,12 @@ fn main() { let now = Instant::now(); let elapsed = now.duration_since(start_time).as_secs_f32(); let angle = elapsed * 2.0; - camera_x = angle.cos() * 100.0; - camera_y = angle.sin() * 100.0; + let camera_x = angle.cos() * 100.0; + let camera_y = angle.sin() * 100.0; // Add zoom animation let zoom_angle = elapsed * 1.0; // Slower zoom cycle - zoom = 1.0 + zoom_angle.sin() * 0.5; // Oscillate between 0.5 and 1.5 + let zoom = 1.0 + zoom_angle.sin() * 0.5; // Oscillate between 0.5 and 1.5 // Clear and render let canvas = surface.canvas(); diff --git a/crates/grida-canvas/examples/golden_type_line_height.rs b/crates/grida-canvas/examples/golden_type_line_height.rs index 4c75ee5c20..37f2e32846 100644 --- a/crates/grida-canvas/examples/golden_type_line_height.rs +++ b/crates/grida-canvas/examples/golden_type_line_height.rs @@ -253,7 +253,6 @@ fn main() { let x = start_x + (i as f32) * (col_width + col_spacing); draw_text_block(canvas, x, y_pos, col_width, label, line_height.clone()); } - y_pos += row_height + section_spacing; // Save the result let image = surface.image_snapshot(); diff --git a/crates/grida-canvas/examples/grida_fills.rs b/crates/grida-canvas/examples/grida_fills.rs index 44b907a047..01c167f76b 100644 --- a/crates/grida-canvas/examples/grida_fills.rs +++ b/crates/grida-canvas/examples/grida_fills.rs @@ -38,7 +38,10 @@ async fn demo_fills() -> Scene { Paint::from(CGColor(0, 0, 255, 255)), ]); multi_solid_rect.stroke_width = 3.0; - graph.append_child(Node::Rectangle(multi_solid_rect), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Rectangle(multi_solid_rect), + Parent::NodeId(root_id.clone()), + ); // 2. Rectangle with solid + linear gradient fills let mut solid_gradient_rect = nf.create_rectangle_node(); @@ -69,7 +72,10 @@ async fn demo_fills() -> Scene { }), ]); solid_gradient_rect.stroke_width = 3.0; - graph.append_child(Node::Rectangle(solid_gradient_rect), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Rectangle(solid_gradient_rect), + Parent::NodeId(root_id.clone()), + ); // 3. Rectangle with solid + radial gradient fills let mut solid_radial_rect = nf.create_rectangle_node(); @@ -104,7 +110,10 @@ async fn demo_fills() -> Scene { }), ]); solid_radial_rect.stroke_width = 3.0; - graph.append_child(Node::Rectangle(solid_radial_rect), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Rectangle(solid_radial_rect), + Parent::NodeId(root_id.clone()), + ); // 4. Rectangle with linear + radial gradient fills let mut gradient_gradient_rect = nf.create_rectangle_node(); @@ -152,7 +161,10 @@ async fn demo_fills() -> Scene { }), ]); gradient_gradient_rect.stroke_width = 3.0; - graph.append_child(Node::Rectangle(gradient_gradient_rect), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Rectangle(gradient_gradient_rect), + Parent::NodeId(root_id.clone()), + ); // 5. Ellipse with multiple radial gradients (concentric circles effect) let mut multi_radial_ellipse = nf.create_ellipse_node(); @@ -213,7 +225,10 @@ async fn demo_fills() -> Scene { }), ]); multi_radial_ellipse.stroke_width = 3.0; - graph.append_child(Node::Ellipse(multi_radial_ellipse), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Ellipse(multi_radial_ellipse), + Parent::NodeId(root_id.clone()), + ); // 6. Polygon with solid + linear gradient + radial gradient let pentagon_points = (0..5) @@ -268,7 +283,10 @@ async fn demo_fills() -> Scene { }), ]); complex_fill_polygon.stroke_width = 4.0; - graph.append_child(Node::Polygon(complex_fill_polygon), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Polygon(complex_fill_polygon), + Parent::NodeId(root_id.clone()), + ); // 7. Regular polygon with multiple linear gradients at different angles let mut multi_linear_polygon = nf.create_regular_polygon_node(); @@ -331,7 +349,10 @@ async fn demo_fills() -> Scene { }), ]); multi_linear_polygon.stroke_width = 3.0; - graph.append_child(Node::RegularPolygon(multi_linear_polygon), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::RegularPolygon(multi_linear_polygon), + Parent::NodeId(root_id.clone()), + ); // 8. Container with multiple fills (demonstrating container fill capability) let mut multi_fill_container = nf.create_container_node(); @@ -366,7 +387,10 @@ async fn demo_fills() -> Scene { }), ]); multi_fill_container.stroke_width = 3.0; - graph.append_child(Node::Container(multi_fill_container), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Container(multi_fill_container), + Parent::NodeId(root_id.clone()), + ); Scene { name: "Fills Demo".to_string(), diff --git a/crates/grida-canvas/examples/grida_shapes.rs b/crates/grida-canvas/examples/grida_shapes.rs index 0c8721590b..cb46943cb5 100644 --- a/crates/grida-canvas/examples/grida_shapes.rs +++ b/crates/grida-canvas/examples/grida_shapes.rs @@ -42,7 +42,10 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))); // Fading gray - graph.append_child(Node::Rectangle(rect), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Rectangle(rect), + Parent::NodeId(root_container_id.clone()), + ); } // Ellipse Row - demonstrating width/height ratio variations @@ -60,7 +63,10 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))]); // Fading gray - graph.append_child(Node::Ellipse(ellipse), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(ellipse), + Parent::NodeId(root_container_id.clone()), + ); } // Polygon Row - demonstrating point count variations @@ -88,7 +94,10 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))]); // Fading gray - graph.append_child(Node::Polygon(polygon), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Polygon(polygon), + Parent::NodeId(root_container_id.clone()), + ); } // Regular Polygon Row - demonstrating point count variations @@ -108,7 +117,10 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray regular_polygon.corner_radius = 8.0; - graph.append_child(Node::RegularPolygon(regular_polygon), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::RegularPolygon(regular_polygon), + Parent::NodeId(root_container_id.clone()), + ); } // Path Row - demonstrating different path patterns @@ -135,7 +147,10 @@ async fn demo_shapes() -> Scene { 200 - (i * 20) as u8, 255, ))]); // Fading gray - graph.append_child(Node::SVGPath(path), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::SVGPath(path), + Parent::NodeId(root_container_id.clone()), + ); } // Star Polygon Row - demonstrating different point counts and inner radius variations @@ -156,7 +171,10 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray star.corner_radius = 8.0; - graph.append_child(Node::RegularStarPolygon(star), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::RegularStarPolygon(star), + Parent::NodeId(root_container_id.clone()), + ); } // Arc Row - demonstrating different angle variations @@ -178,7 +196,10 @@ async fn demo_shapes() -> Scene { 255, ))]); // Fading gray arc.corner_radius = Some(8.0); - graph.append_child(Node::Ellipse(arc), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(arc), + Parent::NodeId(root_container_id.clone()), + ); } Scene { diff --git a/crates/grida-canvas/examples/grida_shapes_ellipse.rs b/crates/grida-canvas/examples/grida_shapes_ellipse.rs index c526408479..9573c65814 100644 --- a/crates/grida-canvas/examples/grida_shapes_ellipse.rs +++ b/crates/grida-canvas/examples/grida_shapes_ellipse.rs @@ -39,7 +39,10 @@ async fn demo_ellipses() -> Scene { 200 + (i * 5) as u8, 255, ))]); // Blue gradient - graph.append_child(Node::Ellipse(ellipse), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(ellipse), + Parent::NodeId(root_container_id.clone()), + ); } // Row 2: Ellipses with different inner radius (rings) @@ -58,7 +61,10 @@ async fn demo_ellipses() -> Scene { 50 + (i * 20) as u8, 255, ))]); // Orange gradient - graph.append_child(Node::Ellipse(ring), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(ring), + Parent::NodeId(root_container_id.clone()), + ); } // Row 3: Arcs with different angles @@ -78,7 +84,10 @@ async fn demo_ellipses() -> Scene { 100 + (i * 15) as u8, 255, ))]); // Green gradient - graph.append_child(Node::Ellipse(arc), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(arc), + Parent::NodeId(root_container_id.clone()), + ); } // Row 4: Arcs with inner radius (donut arcs) @@ -99,7 +108,10 @@ async fn demo_ellipses() -> Scene { 150 + (i * 12) as u8, 255, ))]); // Purple gradient - graph.append_child(Node::Ellipse(donut_arc), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(donut_arc), + Parent::NodeId(root_container_id.clone()), + ); } // Row 5: Ellipses with strokes @@ -119,7 +131,10 @@ async fn demo_ellipses() -> Scene { 255, ))]); // Red gradient stroke stroke_ellipse.stroke_width = 3.0 + (i as f32 * 2.0); // 3 to 17 stroke weight - graph.append_child(Node::Ellipse(stroke_ellipse), Parent::NodeId(root_container_id.clone())); + graph.append_child( + Node::Ellipse(stroke_ellipse), + Parent::NodeId(root_container_id.clone()), + ); } Scene { diff --git a/crates/grida-canvas/examples/grida_vector.rs b/crates/grida-canvas/examples/grida_vector.rs index 8017813c96..bca91ddbdd 100644 --- a/crates/grida-canvas/examples/grida_vector.rs +++ b/crates/grida-canvas/examples/grida_vector.rs @@ -51,7 +51,10 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - graph.append_child(Node::Vector(vector_node_1_tri_open), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Vector(vector_node_1_tri_open), + Parent::NodeId(root_id.clone()), + ); } { @@ -82,7 +85,10 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - graph.append_child(Node::Vector(vector_node_2_tri_closed), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Vector(vector_node_2_tri_closed), + Parent::NodeId(root_id.clone()), + ); } // @@ -179,7 +185,10 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - graph.append_child(Node::Vector(vector_node_1_5), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Vector(vector_node_1_5), + Parent::NodeId(root_id.clone()), + ); } } @@ -251,7 +260,10 @@ async fn demo_vectors() -> Scene { stroke_dash_array: None, }; - graph.append_child(Node::Vector(vector_node_5_5), Parent::NodeId(root_id.clone())); + graph.append_child( + Node::Vector(vector_node_5_5), + Parent::NodeId(root_id.clone()), + ); } } diff --git a/crates/grida-canvas/goldens/type_line_height.png b/crates/grida-canvas/goldens/type_line_height.png index d26f06f9e7d5ba4e6d5d54853b8545f5c6da0c06..41f6cf4b1ad2f9abd929051863bd3d0a747010e6 100644 GIT binary patch literal 285192 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

5SO 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�sY~a*Y-dGESK;5b8N)c2;WY6YY zjmpNNJ&!;PmTSo`5Zi_+0?9UO`XVb(`k{cHDivahj*7Y)BIBUdZ8*0RbEef!o_y4^ zANsE5%R94PjC)+c-pvG@n`t+7BRc22)e4syOe^bnJ>ITXBl^%1k{V23Dj^&3%`f@zNo=9 z-4TYS>MNn9X-TZ^tF{MyU(Ire*mh&Uu9m|nojy{n!nT~TnwNj2Mc;kSOI0ZYm@{k zZQOM&RAHTR(MF4e)KqyanW-DZd5l&OZ1nO0UneIT)Uj;n=zxFa!V3k$Jw7e15ENAM zFAa6|`~G;nOn6j?c?d@w5FW@Ul)$D#ZHK`)@S|IT!c-1=hzcVfd49Hl%*;&H{O~RX zb-ZAWzL{4iBjt+Yvd1~8!FP2id?^YPNra8Oy!>P95YqOPdw_g2^t&nctc_$9U;QdL zA5z@hobzGMU`jK28)~mAwd;C%F354d2+g_O@d>n9p<>(l_`*NT*{pDRcTe&S06z{< zy`!1G#?b=7Q}9!6piV_wJEw8(syF1$LwYZ~eIA}qeFr_U#VgNokC*S?OP4-h{9M7s+ixmh=ji=j`IAeZs8dqoOfyI zGDva>_Ms;lRQ>LK%fBJM_QZ#Kl?THXX5DIxufobruob-dFlIaS$?9VeOylu=y5*^I zC3#g)M8vTFg7?7-h$xlaGS6=pN|;55 zF5sZ|SJ*KZzQm}Pd)2qwJ@>{V4)neDL8I`_Ko;oE08e3sJvJyC^q=!D?vzbB?~E05 zW-}&nuhl{WIZ5 zkGE&M_u%BY`*)(~&k)>+ zLbD3=rxis}E)@Bb65uywtBRDbq^xu6;>|LUXr*(6bb6jfcq^2x_VF9Z5jK^*Yv)el z(jJ% zUETc#89~dHm)L8p_=00_(%PVy{=J6?>T@X_IiBMhBFi*EOx{6{)`H21jAU96dOk0i zHC$ZLyZHA!S#(AtbfEX=&wB+&+?nwNV#M#q8yOh!XuI?}7GB zS=&jBJ>qNR%CmveNh}O3=I) z4&g0;x8-GJDdaJ@U=WZ2`ZWp7tDoypPWv z_=<>Ib{K()u*U^lL)7Mo19I-gjaJVnUlMA}1+{*o-(F zs1TjD7sCVSCLc)@n3!yH54|rwEdG}Jodz^{5w`#&EkZX0)~5{!6oRxmI|IQApiAYM zzW)X`6r3iY`pJUQ)7K}HLDXgRV_&_Jg_s=MkLQ~09|R5m!Bgh&GJD>ng_D9nF5kHi zpJ_2O^UCj424ciEOl~b={GJ>MTWGjepU)omUl1DE*2(HQxH=)i-L!4nC)9P;Qz$`+ z2K=Pv#m$evn;{VVX+U>(HxM2cG?pqUWcU?XI*9zsClWv`wGhh(-JPBMNVrFpZBp}N z|20Ss@bW*Q31I#cYS-G?`Dp@MGFqZ0DL$T}(3Wb9D$W8VzW+->a0PNiTG1fe-PaQP zB+RgU-C|gwUiRGP$d8LAdH=|s)Y{%4^`qKWJ^=bc7{`W~g;w07N0?yiKpY7Z$iV;F zd%eNnTqa(AxLV1}DY0F^$-D}jEZF83cQh6B1oTS(&A>od^* z>fqHNv5IhcY?ujm(-i{wdBTvuD*$coP5>Mn92`2hTV=P5ltWas6zXgzAg~zqMp00y z$yTY9RaoSn*~AWRkp#Qtv~R|PMCSs;@gO_^cUgFsBX5@ox3EPJG3JbQg~UO@6-9?` zC+rjz&4)Qn1peHu=i?m%;A0^3RoaRHFOv7q_vol8e)w?{Z&G?-y&UacJYwpA_^&{S zQ^K65fji{loCpU2g^O@lwhiqc2@Mk5u%Q*40LfBB&dP^wmNfuyy%@*IuotDL;*Xje zszbHUIv}u+WAF8K@FKzBMUV3mf>vJ@;Vr~>4EOC_TqA9mGfgyIZm8sWwl)I3tq_Y* z1OSJzwXVpvBHgLoLSthi<}G}#2XZU~WFG@BNZ!i+k3F}_@G*!dmxLlhWJ37YA&drF zzhT27NNT@lnLA7sYZIyoRjUp_0`l}RvD2WL9`D8(_zQW0;2{G81NmSL1xdjLWRj=o zOgzFGiM0}z5oR17SXQm@GC>`BM@a}FJ15-g0Cqde2^_Gn5JMqFk1iDMCpy?-WgqNo zL0ZNgOeeu9Mbv>%LS>XSZ0pgHIvmJ-Al*Rs+O_+z;icG0Npdo-NS>APE7IfU%VA=q||gPF(Q?u!pLFfGaL9zk-*)lmd0JmSBYUR zdMkhn8Xbbz#9@y3)?bnMzkyv!jif*H%(O1(^>5z@u9j8*UfkQadYE!{nRI*jEL-7h z)7R63wojD7k>H!si|d8{KEQ@MG_$N8VY>T$8Xb5TE`z!wSQu-FgZlaN@v!XKd-1GY zTLjHvN|}DJ%zr@_yJZ4Qii!UtW~2q@ln7;nN-`n?;#Jn~DTD?D7^aJ^O&{lij?BXB zE|Op_3Hbs}#u5Z%(C8qPMb|^bK6c&OwNts$_8_E|Qc!g{R-5;EUhR>n!JuVb6qFGn zDM?AX{{}Eh8XGk&Vqu!M>1u7wL)j#E6Bx!}5qio9T=iQR`f4gyG5-M$&l4;|3a&pI z9mtWg2+fJc<^c}8_sa;R!L2#OSiq49Pd!~OKuV`2z+|g* zz1u7|l@n=L=-ZJ4_jsgXl^|0e(4@J-)PqY8x*ac+0|Ia+gIz<2=WpEsb6wr_kl@f_ zGlQml(DjngDJ@9X1M7u7@+>`_wyJ}K$v+~pW(~t zX&WSlbw1*jSwar1&<$8gC~5c0Syolo)S%?d`R?*E<{e56E!)1`WY=mhOrLYB-nM-^ zNinHFdBRwojSd|VVsCbz#ic`n(D;0dNZuof!7?y1`uJ%5k(Q1QdgOE$hDxRE0z2b| zr;>+CWJ{jD1~7CpP(5(63_2;O7Z(?s^;U1gTY)X8oo!TI15aqXR+c;T=g)vVu{4IV z&fww<;8ln?dEiK!aLmx_hTWB5nd}#UuLxW@+{7WQG3sOd=dvbR` z6A9pErCNG=aFc#KGJIfg=M%<;Fkb^(u77C(7T`TcnN5MC`Y8FLc2P}zWXmb&&=tc zYXJMp+?6@=^;_95D7SGy5sNr{3*m?dK)opk(HI0yv)@2pk=Bb?5slh%7^kPFi8UYL zD>%bh41vaNPR$x!}5D_!{^f;1qU z-H+W!gvRjRL6iS=W3|j*cOzjk3SIyD;)iHch`}G!JURwsJZ#|P;yQd2(Wl6&pa&KK zN|TI>!)*{DfhyTWJ*EI@+tzCTbE=jJ$_ol&9}2f9{*AqE(SHtRL{x)_mVq>cyfG4a z3fxltHb_5`I3NN|A-3lS40OS7qi&3YYFGp-jRP89sLmqK#sRuONdrZZ+nLRu(6l4Y zr7&#A_U(7oW90Spo~vr3VXGi9SO>Xo@5B@>rl%(VrfC~&LL*N3dYM6HckXO9TM`*Ll!F* z@yhQ&(2dM%3AbnF73x#O9%%Bwir&7KNZ{;GLi- zKsv4PYzJ`_;&+qUzn_FPz;<*Y!(s_~#JhlCICMdO^T77O5TwL_HAIY-1(5&nKRQ~c zEJPv1_ON!#6EP0*s@c?EmF6Rq_;xH ze-YQXxLF%Lk`;(P1T+|pvSq$Wed;p!nA3rb`oQ6*s>%R>E;RkY-&O5m{v2NRKb!m^ z2Ko(U7Lv9Sp-O|{J1CO8OvPhClH>|v8q1@rfTPa0?3U{okoiMe;~0}M%$KsA$WZRd zAs@~$in2U%^XFHjCNmJh9oDf^)N>7>!yj>nVNV_&TeI~%g`qd^rC_S0a-qaIfo+2V zmo&l%JaR(HLB-<^Yd~SLRmoBY)4OF6f(-V|gicu@1x)o$^R5y`Eeo=I$auj$7^6c^ zi6ixmYQch~98voY(Kj;uFZSL8s_L{`^E_yoEwg0~r5FGc3I>vxP*6dFC@3ZjU;>pO zAcAGC!i1uN1SMw-Ac_(!6a^GS5G0!r0RaO+L7;!HWp&@4+p}h^S+mx3&vdPOzfbE^ z&N=_{zI#9W+0TA<$Bw?2XaCnbw|};o)*y(U_RKa9n8;kB*d<3Fg5)rt!cZb?Jbdlv zzWj#RDJKC6wY45z1Cu4w6sceGX!Ilb}UqtNtU;Cg0_XgTHH*ujWdemy8t! zf>^hprlTT3^CKnk*E0`l>OSnv$f8e^sjk{dXbjAmbm7Zq2ses&kK`XDu1G}RyspS> zLdG&{y_s2OH?0m5h@-v`4&O#&fWu2)#Bnggn$yrlvPef~fEz1pW;g6-`FJM`dk#Vk zkRBh`-tys2K(-(;k`4XA7@cRj!)`V+@W2p?N@vJUQCov!)v20%3>U83y0xHEE#<+3 z^;l2to79leCoqA14Zpc{+f&l_-&FRt@$iqQIrQ3%8|@`R+2^~PwQBFHs z|0g_$_BTkh7^7M+k)@@jGXp{NTKI^^@XzVSv6YfUTyA8;o8WyC_R;OTUu`VOJ-ON0z)OCBHi2kE8|%6SzyDJ+%Qg8&U{ z%svRiUzUl!$uBqmQ$2sW+#MwxjrcC`dn^@IwfZ4cewXQU3Mqxx!z(w*>UFiHKIOZ< z`T=1N!VFVIu?sOSsCd{vr)0QX*IRw(J{sX1IV)RAeeK%s^TxU_IYLKOunidez20+G z$6I9(m85x0JV{wFp={PmMmZ>qsR^(zaR!BNng_?AT(kv^mLOr#rN5ig%-%)=xtAvc z%}s>i6d(PQL`kxpExJyuBVJ$)sy~Uq^;5`ZsBs!H--)hW#1qJ|J=aDS^9YHIQ(&)AOUtC$|=#tJ&=(UT`Ed-@gi zkQnb)E9;I_HXD-Tp?A?t)N0hsE1AYXR|nXvpNT4zTxV8xZR8I~{PxtMQ&|?uU4DOi zn{7VnXRW(xE?D&i&Ra07;_nHKAsT8FW@4uVtud5r_c&xD9DKOH80_}vswGoU^t=1* ze^@|`9UlMR3aIww6u#?R%saG-YJ(0lYT}n?I-J0eTpq(yrYgmjT45&$JnV%{6*QeG z-65`#y>#KIw|0%ewU$l;tK*YRI^T*iy3vum>A0a~^pDSS$ZGf#fhRIU`10q37^qEo z(L)H*xp*t%tYkz~WT^9Xz=bt)0X-z%^%fRw^P9r|n?&4V+WQC?B1o|KC+n0YcR#1e zy)R8nd_SokV&whZ^aM!6fnf2`@$>eO^ANWE4Xnvxi8bz0m+4k9EHsO20dw2*=;ngX z-=hA%46onmJ1EvJrvF7z-|hD59+Y74!!MC`_%<-Eg3DNUbeV|XnB4!J3206fs@B+y zPd|@d$a=oEMaqC7c}l9y`1?XLyZ{#%QB&Q4V9c%=j6#Shx2d%BnUe_#Dt7B3_ztr1 zWAwG?t)@^`38_%z+QioAI~tEhq+#(rqocFbIw~oQ!9JJajk+cZ4;~tTpUNSHzLknW zhp0w^*GhbDdCx^C`V2r?T_AQ~Tv~wWP-&J+f zdO)Y+4ok73aE4ee#A$s_gkOU^z~tO#-3SpQNwS2c*O>9OI=zbb8@ywCg2YfH3Amv;Su>1bQ-pvat zDkxk99Cvj7*4+HX`tVfr?c|qTtTooHR^AdHANV*Cd10w=BiS<%%Z0TxMjH z+Q`zqgHo5Bm46^8yLV5|P5mcy-Im8V!Ky0vSBWs`7OuERWQp5swFL{CX(fICyW3=m zgs<`kO#ez($LgkBcq6V2pRY3n(w_<=qG1!OboP13!i-APdDurA#j<*_N(ZY&Y?pgV zrc9ZVgm&+mMX4HDRJR4U|6{IGyJfFn3xwdR#U=;7y30eJCvf53Idm?s&ov zZm6@}c{3fo#XqpXqY(z_o_z`GV6BBz&y?$D+}*oKU^1eEy?f2Xqd|e9Y(ZvmqSFYv zKVaVjub}+V6S!EMMJXnv{@;VfREy8%RbQG?zjXKR>%l5AG8I<} z#{6?dc3t^-ZGK<+!}FljvC%8Ih=ugfQ_Q%X&Zx%=t&0R&UrD$*(mQ36U|m~li&xEG zmO zI2vk?008M?V4k7;<2B*6-6?cwhEs}fz`R6=r{NFqP#+n(g6f~Rto`JGPG>t6&bx9; zm{++j#%2Re#ZU;%K`9TtBR}Hc>9Jhi2e6GV+3SUc0iDv3RNtV=i&Hmsg^9C{oPkNT zSUJG)?EU0Y0`(Dc7wgc;L}5hs^it;0<>rq3#Tapf`7S1+dZMb|}hHh)Bn76$Kre~KGHTCVv;xF>rNm3cj~;a7B~S^Do-(Bue8pR9h7kpW>t!0g?YpsDRA}hmh!R|=Wj&Q`dk7x%+O-30e#g=J zevl_hQV00g))!}ou#D?}JVX|u@*5{>zfax3md(fi$*~h@I;$83oi>P8q{Ne-Zc*Yw zXZLS*jB%SVz<5XpPb^cXfxzHM!?niS*RJ)Zmwy0C%mu)I53{0g9Z9G_=mQuJ012o! zUu=Gz1?k1!g03kkDJqsF2r^PG8oo@tdv~a9P0>Awis432$E&Fg$6`Qi=Me)R0Ng9^ z&m=H`IE6Vh5~79IC(iY@J=N5s@n}|wa?xSu=KqfQ^`EG4^q(C1yOPM7S^=LA+_RB< zY-~KbWNb3i(?6WRG2Rfq*mT*@DRp*mXdd?r4?#zf7=R1*m*!XiON4Lmj*jrrEYg`n zv{+ypVq5WSLAgnTFn-0AV?@O;4{XYW*N|BCO^wZR-yb9s-?rG-VqKZD@aDw1kDO3E zb;QesSqd=}%GaIs;>Gw-eHu3Sa6-+@lXcqw)D|K9`7Fl7VUEREayrNE>c-SQXgKCg zx{%B`Iap#@*mEIjF%zyPI@o}Ii$%0Km3wS#rvEm1jSKjm>SiFU5p~w{t<&V?&zw5ILQfMA_kWXrKK<}m@1NDHG25z{4A_Ez?=ch? zmW*dQbn0}2X@}X>k@6`6m6WU0OeF&)0>aT2UfZL4_qX+MAMSivP8n#?+gccr{bY|69QX!h1AHrvceubj z&=d)Q*kzWI(p1TkE6b)xw!ixO@IDjwB`JkNVXbK+ze#8I33)jrn%y9YnA4!lGP1Ug z$!ICOy1so>)rSv{Q3l~V5Q=fo$xB9^`KWg3 z;zgA|Y$5YcpZpg-lCD2{_H9?g9|;G^g8lJru^YL9k;ttbou7ECUcxJS3R4aEejIr9 zj~ZU8ku6nAKPuFut%_?|u2BmldQ;Vo0GG=y~>of$Re1-F@*t>Zd(mxvh<^wQ&m*f|}q6g&01=$@W9 zD@#Q8JNEb0!D4d)brFh`{r9f0Mx^!m7o72;7z5Dk=dysuR4y35^Q7-JmrTj^CY~H4@k)~Z(a19U3m-*%EavuIjn z?M4iR7U%%F`hLItwgFQbF-$FbrwmiWOuxa7A8M&Wm^UcLG} z;nZM7t>_7FOV|z6PU5}N@YcxRA!YxVKgvAsE6K+$di+a>jUSlqP_N4}GmBUMPmhp4 zzt8$vsEN02HyfDAP7$o4rq+6`u~`hM zA`<#Jq`LoM3xYbKmm`Ynw$OZA5M4x#+Du>&8flQ4*f>gcEsXo&lD>KLCoz&dd~4~U5DU603(C;E_k2EygOlO+FFfWw7KkBe$w%gbkEdaCE?6(lZ^dd0 z422}loEqU+j<@`LT9|<4(u#!6wrQnt)?rWVQMVq34Tee8UA3wkpHysYxyb%KiCKsE z6}St~bpKR_p%u<`NoXlKykdtJco}8;6!y}unLKLL+#GHC`l2^The!-0GJ1D+D6?pD z*{%0JqbURPNtpb3%ngYiAYwZ~=OPRAwP*5yH})ZC=vO|6(viS({~ndOi|+g{Lm3}9 zmmvMG7U2Ie`WSe7Q1>S@B9383g~zmElDhf_vt2HvZlpt>0z++yCQ_|aGnW)4;(5cu zJA2A|Xq+5+93hV<5j ze661$KI-l|=pS?2KfaG}upPcOJEqO)yVvDF?`89z{cir3oPzzEag%(d7g#*$U7%;6 zFn3iy#X4W(FRM-a?+EcVa47VU?WdR-TADNPhTazy=~1qanp!?RDJk`oo@!|v9aa8j z*Kp66#)56tj@r5TRX6h1AmflooI9nHPOFbv8~5xVk8!QtLO|eCnySx_e|Tkg|*VWj7DP*9L` z1zmxzojWh1ZL5f2R~1LV#<)KvA7hg{|MS*)iPa-p&d&PrQv8Sd$=;S&`u_MQsYB;m z?SKCIWxHRBq<;R|QmS3e&tFPzNq#;9{>5r%aK_JnCaFWp{rqRZ$d^5S{?fTyumAny zCI9>3a2);@KRHS5nc36U&ZW&4jo&w6zPPIL-xI&iVO_f##t4>C;;?hq4-KCzO~S2t zkzNehTz5+(PM|E>WA7%rTx&-`wAh`|_Oa>CGdfn_;{XSfUki~O;xQ43z`DrBiwV0B z+Nn-^O@tgDO2QmYsN#Ht(G3ljUt^fI<7R9goh1I3vfv(Ut9&$72dk?LZ`Cm9fp=zw zKi^r++S|3(9j*(gKomdf)k_G21SP>Wk7F!QteEg+C*WrIY>0b~R8{=cJ#oS%iYq)gQ1{ zoquB?rW+ZCNhYpCdmN<(-ICab?oJWQ?)uu&we;DuP(M{iC&-U|=y&PHrOf438>MH> zGODR@FTH!Zct@%EuxDx8>l|#-b}d)kZA`OPDHv2{yF6(2XNO<@c_c4eca`eMoIQ8W zAI1+pGQG#m#d?S{mtWhkfPEtBm?6ZysZNBmaP>z*n{Q47$c-;@BKnQz;YRv=%a&I1L!f30yh^8E=-1#pc3V0M+F|jNCc_s0(5##ob@(XyNrF`_pX6_zGy*Pq zmYia@BqPzT2oAdTm-WY+;6?KWTBd&q*=T=RgGB%geRRCnRZlFl*%%XrFkjcw@~XZ! z(<}2CzH?)+5BDa2K4u7Kly1n`YU735hYX~2~M(yV*ZH#T+f5?F^!5UGQRRvw}Ttt>-RaIfQ)fazi z;3~;zvJ3N^v?D4}alB|+JWp_RSfHU1%5xIWg4IQ1H0cxNVI(|S6F<=N$*-PLwAItr z8Sm8kUED>Op3C_9m?4l8yE0k7ePu$d*Tsv$z>D{=Q)k%u$Y@FkKe7Uc+dK@KBJn)o zgS=;cz*TyA)EX16U)tGmr)cr|^I^4Q?tS3)nA3$3yDoAgP2}kOaY;0>GVqm_VQdVM zbZq%@2Eg5aE>DXoU-lCrS4M~pw1SncFJD8+O_bZ9U?9J@1GuemFRdW zE$?x39$T>UfONvrQ}Y>6XN)H5_~k5l=-;=mA8(HTT?Z?yT)z5xcA=Ekzpwr9p$dI` zAlAf%cJ!ixz@R{iU{>OZ?@KIJ(|pE#^txGkYnN%v_Iy2%L>41A;Y_>YTpG6b)9X-! z5LXW5SX!y#L+hy4pOfa=Ya8F)dkx=88U8&FX(=$XAlAYs`_oU@U^!xH&&vR+Axt8T zPThz6H$N?#<#BH;XD->d@9yzar)E%!PM!VzE|tk?&$l)HJ$A^5wE-p#K~b2xXcd_f%oZ$7Rw9flu^%M-kwZ}!HIvUrw zireMh`l+sCV(7h3h^;Ow8>3m78*yoOd28vZv4H5%mDhYtVhaZWo_WSmXiusT7@_pO zfc9~MCL1CyiWtZ#4Wp-N&-6|8K8w4bj$r%B|MgRu_!X+?pHi{<%DJvZlDsVjM5RI7YU(iTioIt*vNJrlu=Wv~VEzmX%wo zzO0S23L(b&3Y|{Z?%i{Euv5R6wEO32-%3=OBGpJ>4?$@8=gE_XEOAvp1W6ozyH^=o zEmvvc>SC6J>K^Xe-{AU2P0i~EU(+6n4w|941DTLbQv9+jb8VWKedb!5>P*~_>N7hL zJ=s`Io71W{cC3=h>oZ1c=EU?2g-PsF$q|=TL}YYyyNq$a2Z{M=1S)1a2L ziUjXjdo9#Gq*!JQlY*4jDd;m6kJeP*WF9if#9mEfCA-4`olBY#eQN zz+uTl_(z$uli(O60s!g*QO1s_4oL(^HoyfLtYipx0vRTT+-D$mc z2_+>Zf4aEj;4ECdkDs@vKpUiEjdYg)DOW6iQ=_Y<>CbkfS`-DWlRNSMP!3?$QlIt#=2}rXSJ%%I1)TBqjmNWZ_C z@AR(G&~A*OT>V^M|D1`xNGR|M&bY_)9Uf{eb=gBN>~K8Vw@;rB(cH^)prNpK@ph=0 zRbO4W0tuuWNtLKjyW8StarixJ__5wKh;`0Nqi}fS-DhkJq5?B=`PP!VxAEZh1#iAT znI^OBvNIE_5zxxPAgrzV*8|WbDnjLPkScDDE*evTB}q1zZ+YxalOJQq+*+pL#vDz) zLK9%)wnAvrbVJp!l_@jhds8C`UUY(`|xIb96M z%zlY>8!FP%oZj1#i$V=PM7AlqDep@gz~ zd-V!q_8>gtebtNEe-47U`U=c@s&X7DwQu?D2(%g3+yqt#C1`Igj*IcaB2;ll(JlFf zn^=ixND>Ext=PUj9C@5Uh~5~PvO89EgIW^X8rz~-iTdFF{a`|&?d{l~c&OE^(J`q- zOorOlcuLPwEt(cXg38an_Lj?5jLAD6^(|5Rx% zECv-A^2G$4>*UKgTwa4pg>77QH0SRMpFp@J=%vY5lBSp@jbMd^rYmwQnuCE18C0?O z?K!=~x~KDcnuE!d_J6;HCuAr=D44_{yFB!qYR_-{p$ITx2r0le- zYM`WsHhNAzJM9P((~6?P8*U(r@|d+Jki8|Lqz_G*o)cmk#@vY87+oE0KC3tno}~YT zmCKk)yTMAi0D91JuqAxy*c09v0-{e~g82_^1Vc-ikhH z`xJNug|#tl>3x3cZ)!`TJ_ zTK$`^-1_(6CHzMQDBr=ADUg5udDQR!$Gp#-7s!|DsR&A|wr(`1(kQ@SAwIIB^Xz+= z47S^@itX{8O zC>(OOLDbnAWX|qZE$i&Ldz12Q+~D|XUdU7vW#a(iCeJ_3(YVuH($l-ssFyYH16(kf z-+#ZSy((s_8)EA{I+b7Wg*5y4^4_3HLx^hvwFl%B+KUiiuoBoS8;MvTsjH9RoaGGoVTkcSif z><62&P}D4uUGNDA8e}wqhUcZtF~zlw-XUo`MFz} z&>iFt_~nLiNurZe#Om96C@-=Qpp4NJK!>D485Lz^JtZX=FmDf;p=e)chNITLGoR7V~%#@%4>6d z_I*B1HVi=K@Wg%ELKu?gbl0pP<_{k^5(@4IA-E!J58)GRW7bkHtwVZaiGvQ{_4?$w zjNKbz)^n}!aWo6zL*a%(d0m?VoMEm2EAwk3;)>-UY<&411E+2sH<8X+OeasHmY1`A zy@t-%=}EHtoll0N$U^X5M zEo)tvgh7D)VyJ;-yjb;!G_Y3)h?8nZ@AmGp58b-bsC+ua;_i=J4tOYFZ-hwXSi&!b z-4kpF#ig94F+)x0E4(U;=p|TL--z@Okc5YE4yP1RjP1NH=iKQOD+h&Ls-1&FA)Me+ zeXem11id@15OPP-V`q=7I%-f19v!U8i&~W)4i1-QK;yT;RbpN73$i{+^0}bZkkUUCLY469&sBpqr zI1@q*WdHWeLIJl#5hA)L(iI>oLA^nz^&>&@S*&Y{jHu%8Ru8)fxu`pT{vqDXrXcQ| z4zA_{m3$d73E zqPmJ>@Zm0cbVI%{gUHphmU^qqO1^p4rvKOG)L<`zG^6%HE?sn~eZ>|ZGNA!H>heHq6;M4ec&bS`vZ3en-9`nho-dr36qx8h zv%6fJHDb8|bSyrpkFvA%Igi=1TR-(=a_aq+qr;zZG|s`0*k*8|-{l-<9a$)glN+td zjJ={^-R2^>IV=6Gsc9>Z)@Zncq;UoUMn&^y^FA(U4@@$duk0@ zj~BR^OxbrcerTw1OsKx43fPz6yA0NB4G&H{8BXO2;-a8dht1w!RI)~c3M#vUJM2dw zIaIKk6}ci(iG`D7V|5C$r^xH75A} z)fZ|O%rIV~=K2xW=uB1?--$(FuCRVld=~ND+i2NZE8DTIkuv5z z9#%)s_1UZKxbU>JfW8z`%W(}kFYo-J?i(XhGMbpk<%#&sr`e($dHSZ4m#62xLbW^6 z%v_2K>cN2E@cm!c3rn5iJ*OC(L#jsW~OSRXK}uq zuJ0kiP$ShUgUu~0B-F9%<}zky@6O@1FW)??kI}>t0^@DZ_hsC@iZv5?V1^hRkwgc= zz9D~0J?mFzmZ{<`aMCC26Oc8GNVv5iIz-x>0ZT#F#_z*Dqe(c#n!4E6y}u&bAhaMz zf#MDKA2@J)K+)zZ%b8Y;D5$o6eKRYxy@Z`XTG#}^{JJws7qxJ>-Fz%#E)6TX+Haz< zfmRnAFotLyWD|>*`_Ave+{QMV6E-jJf-z})-S{$g+&DQ|S*JngyRhKaE>Nvaig@YYHgdVwDMKx)3WGR^dMW?5!y)^|~6pSnj&_zE>goy=z_R|H(M8lq1&5m<5xU4P($+QH8z%p+Y zyByyI-87$(R;NyslgnMbtEQ%BPM$=4`nid#a?RJQ(-e?^!NVIdt6lNh639isI*zwJ z=0(wH^*Aeq32u3=(2x@f6LY|00dOoc-B#S)yDP{#{Bi=gg0yw1qQP{-hFg}MM?O41 zd2OUfmG<;R4!Eo&NAA z?5PpmC#4Tmw`uxrUZxOv+St(11|GWq_+{!^w_j9Z17;OuU+E~f=I*UO`^oqc!WO%t z_?rA9!ImBPE4s&Eg++YmY+koITF|&lPi$xzxvAmcMK>bvd(mjRJm;Vl!;$2YiRmgZ zol6`2+&$zqm>)-6TP1LB@|?H2LnwKLD~73hfkV zmMJ;4-fd|mP3M<9cHy@$l8{CG&_H^A$qoeJjKCq~R(Lq|K;iKS22=3ulvA-Udch17(#39GekkN*m( z^TPHwssm#jS*`4p&0{PKEg6?ftH_u!88UZ^x19!mzjfXQiS3OikDESd-Cmr^ki44O z8Z?C!8lmvC!Mt&seIuctxx2dbKScQ^^(Co8(PA1Dg!P%K(E$W957sn@_|AnihldK) z4?3CM(^0#+G;u9)Z5eQ0P;!vL=z+D-Wzm+*^0?R8&&x!K?2iUA)GW)l!OWQ|ieyqryb{+G z5-q^C)G;puFZW2?6Okln%8d3Rt!+6KNf+XLVq)8{5u+uIQP_vf6HQtiPS86FBBP2h zdc9mdbL(ws5f`bfa-sVSuCALS6Hv@*%)6>uk6zP%6%c0Z*s+Dy_?W~BdoBt|(Umq% z-0yhvbN|U}RzvdT(eVp7*HD0LDOR3yK_5*6V!ra}m4hco%#P#)3KA<0Moeg|=-CL` z4xS{NnpXi3-#k=XW=}Ovpt?dr0d-ve!t|6NuOUD-#LYVGHg)#y0*Oli%@rtfpRw$~ z3sT(vVwotf(6fmHEogJ@z~3g-dmzb)!QoWMTR~GEID;W)2sk&gjjv*iNCpH0KW^3w z_UMk6DccZ$ZYsSn6}CUEu&}VlZpJ8#gwlY}V~sJ0aFrJrm_Nl#>6fGTCA;IEtI-;? z%Uvlr`>x#{QGkfbRCFx}077w*wl40ROQ4RXs;y^z0uwbN0n(}dT|8{g&N9^DObmz8 zt92w_i=K$*XOOZPXqTo=tiCZn>p4+g74lY8M2=$|IIOa(Z(SAD1aPLnFZ@|9=DKU? z1=_zpKJFZ?9nMY&kfky^NC-)D5NnXa!|2lk*J8f_JD0){iT1s;CdXWq2;PnjM*OV` zNZ^?A4jn$`t&15#86j9o7}+qsJSTvVV0h1#^cH20?Kd=QM!Ed1R&g^m>xuC)&5KZBkB&kU16Lap1 zte*d|u{z%2oR$zGg|=e@AG`voj3{IT&&{a9Dpn?(fL2>1$i#s&OpEjC2Al>p&~*x< z_c*EW9j{T3+D489(lBw|pq81dG+YK=LETVsR!1$>W)LTslIg-{K4*nJ#PtPv4eH*j z=RQj&RUK^uh^1Yc5w*KKqhyaIAWUdf0xlgLl(cp+gNA~%V$E;&!pQLRL2jo{TNYma zN?a3_5p9aiRr$R{-A9JxUQdDY(WIEk7Fr*Lsj_mIml@Iow?YTdUq(;5@S9}h9TEJf z^EYkF*@*554sNHi$y%X`AhYuZx7_(outXgtgY;uosO{$PS$`B46?tZiTX3iA%O1Bv zz3$pndtl!Lg)u3pQ=nj)#E}G8Oe^vZGyRz?T&=JQ6|b57h3+ZNN4^63{wO}4t(ASb ze>S4@EQ(lPD%O&!(2b(xBt(^(WOnE(31O4(TmkJ{mIXgX$g%)RAz}a5SDpBQ^N|ox zPOrT=d8lmJ?fy8UuAp&JbN!v<<3rR67g;V~zgDMWA#ZjK&2ORCX?eN)DK-1SWB);P z`B6RN)xT29q?RN9;eYv`TaM}6T!3PN7Oz!QnA8AGEv?sIe#o=FZ$gdg+{qKVg|Bp~ zBaEvqwX5K&O30lKCS^lm(GJrF@uR6yK7K8H1>0Z)kuwjyU^l~VL_gBe3Q#^OBQ{md z0ExWPk!b{DF5>{Tp1XcpmD2nIKMqj3KPv1;)1>F!qQjfNHV`-Z)2X=XL|g)>HF-)sg9z zfegi;BWey8f$pmyKJv%6^nJ{ak5`1Nx@U=lon6SvYa5K&zOCQH$!~k>aXW=rhHkgc z!Q@1uCodrM!tf@~eT-{_Vld~kbK*f@Rq8;$qT91#+T^YV7XNs1d#A_;JXTF9y6-gc z@luygbGQ;%kVO&&guD-|$8HFNxO#!ap>H4Y??kair#Ou3z3FxfnN$#%KNxnjW+>Mv zZ&xs3Bs!(>C2$4(FxBTq1$`&9>7fWy^;Pw&7xHA@m)y*mD{1%%;)3?HYgy@9P^w4* zNSDcIqthLk#k*`AyK^FJKS^>8%>iU;`cogK zt)5wpO>sJcyeD#x(L_gsO3aWS2bX4A`$aqr{+0{bTfh48hZX59231o% z>G2u{=;!*47~xd-nQtNjvaZjOZzxuh_DG_PWXl z7x{X_cNguu{T3+nFS9n(>;dd)=mkbOJ4^Q9p*=d4Q(V4g#jJ&>3bsnSlTgdXujNCW z*@#eK_v&}WZylGhj3X2Hn>%x8kI|_Zgth9(Frb%x4&xc_PyQE_`~x*N)7ox~lXV&l zk^H8-{KBN-t>YqAppyzgo_1y<)XNk4Qy;9IXlOd9!t%YTs4$lv#NLP{g<&v7eS7s< z7bTXy4Au+;<0F>>lE&9m7x=7D@h&5|YTyI~G_9 zDWIs`9l8qo^)ZCX6At=^9fok0@OKZ_SRj1ER)n`y?P!FA#c_K?=39n^Z|}&@RSRm} z&ki#Wa6!PT%+OT@Z(du@bfE}qX_iT4(ENVu_k(}@@u809$t*Y1VIz3g;-e?lg6`u> zuo<5EeTZhu?M>3k4|gK%;(>u{^h;o*Q1H1VznVhTufYFXHLdB?v137-m}RNn2aZeu z`*OYI)J(^qZD`ma%idaTk61x4jemkf;DwWZ%D`zz(i~K)97d)_Z_j^* z;7{(XPHRaeeZMa7b!$T!pWCC-s6L?T!=V2R^m4d-{J!wpOrOV|F{gy!4sn3(*0XJk zpb-?9X>!ssvYd`Ua&#(IO7~=1YWJ#rTY<#)T*d7X!zW-vw9i{ovkgs!R}a0E_air* z?D4F$=P>`avtG{4fQ9Nhvh5(vcYM zNM}PFDzDqm5@zMS<$pRiQzM*^?mK+=P9L*}_wT=$W3jFD*}EGJ;`AzDP4=j6ps^jJ z!cU;{PH0vH8_h{a@*AKWhy)<|i})KAC{|;$%Ky2lPBJzde%Msn zoz_Lx#dDcPu7lW`I;l-=*>)&YiDI^`L&$-2sg`nsUFH(2BI8efc%Xiws z=}Eg@bm!Mwi?7d46x}j&LihE&Vf>Uc8`bdm3)&t2rBl@%ik!n%r9-OzzK8hZ!(BLR zw1`YWTijWjKg$MlJDYW?*5k6`lIYwGKz~T}tLXZe17}WMgDsE=*BrUA($e=AO{JHXalJ?5U*QF* zovQbJ*50M&emkdHv2}QBM)}$9R_Oz)H@+MAzGHgn6|Y}*zfSPc+f0*0B+M2e2KMps z(J!DvuC-RIeL={9{8H>c(YS8Sin7UL>Wl6R{)p_3NoA`Y6e#5Aur3IFg zW-9gj4_4IGp8`*oUMt0h9s)i8b9NgeD#jz`btv4iD%RNc{nI)0a9pKT8(x@lhR>x} zCgLWksYj^%@NI|4`$EUd56Q5!KZww5CEo+W3OB)Zkc1|$+T@75QLvO_H2Fb#Xne1cu4d=0p`&ep zYwVcRaup4%?m=iRTTcoOPE(KW-55=lfSr*RGBPZ2 z&Pnt61om(}S7RGUUz3?B_35WxR=2QsOR$&Hns%Sx>Y}{zH+Z;<^JHU}TY4Bv3+#(! zH49)9P4Zstzn8OWN&ExxAN97E?88V_g6>~?KF8cVbIx#S@jA(`t`;u6l|lzcku`jj z$)dsixuKy|KTT+2moptbJ7B`hOQ`1ooX_fyO8j?4jc%Rg_WYPXHGv1$)t!=gFoBW= z!V|H~(SMZ_X{q7;ZkVoYzlA-KCudDapH0O%Xr|@mPmPTtU>!Po^b&k*-+uizQdVz@ znt?Mdzd5(_em;R@DJjgc&|0I4-B8b2dhs}6qS}-xPrDCSd10=wT4ROijxM2C7BXe< zYGSq8N;^Ma-w%aZEiEli=rp~wl53)x*hw+_7~Oc;6~nZE?A&5!+(7p$AS z4`X@v{c1vUoZSWU6?c3V_8>Jh)k_$M3+NOIXF~r)CLQ|@8f0F+7OA3m)6{e}1vTWY zCE|ypR01E*=+MZ6O4x89G)WHc7b`_ZN<2B zkGRqG=}IZc*A~aN02K56{?^x-vtF-tx{3VXE%aj>I=>1JjJo=n$T24QOiO<1kYU5B z&w1Ndp2~SxN6UGSai-D{#xFEut0^P~1uSXaup=`sFOTmM`0FA)jecpf!@v8gVgrjYB4I-);?K`uINKn73uL! z%CADs4?GYKLM_8qq#4W!S!)=l82Yrydvjgm#WUd=I|FxSpOAmYcIp{gic6P4b-L&U zMrxW&-nP}>MeSj8e|-!2`rpKV7#ce@hQvO5t$n%eLFdND$CVGX+O%fawv(Fm=|Z<# z*>ijk&hK=*N1tK-p4O*nTUX^AIWbH*cjpK=UGGZv=pweMg%3GFRJ7=hU z%B#N$RqhNi3UOv5_2kwip^2k4W4V3AVR_r9XEMz@rN(_-*V16L!-*Soq(058t#-xF zfJf9Dw7xQ;Em=Lb?SVS82TxBN*ty~IkkcWF8$mgJhDj?evN}Cg>891`>jNy;(ziRa zkz;dy=MbX~VFZyA&sHy+mU590>A!7U#9xPS__~%&bz41azD1t4u}?AOjAxo~H(r9A z`7yD@>oXzy5`6GQs=mRR4TqB-ue8fP`L&pqqNASK)LDVK@{fb#ub(_quX>|hBw=d? zb6pK)jZkER16;hB2)KRbZQb3TD>@ZL+$_${o>m+uB8aP}(pvF{wYnrI4ejx!x_SpR zi|eM_gJRASM=M_EaeQqGZ9ea8SL6D@=HUjD7s6x_%3vzun5%_nP;uO#Niz*4vELF6 z%ksJxMv3*XXf_YW)Hmi=dKx7zK9Bcj(3`p~yl`oy_{fC~2OC~q4=>Q9WC*H5;5kS$ z5IroYdiwSk>!kAs*iIzz%4-dpV5ywj!9;H526u$3=^5i9x)qvF?j!meXaMrnW-Ruy zz;33YQAOEyDNkd~N})>uCL$#WGWBTcG0fB@pVpvbjqCY(WlMVG%_~>gZYjQNm%a1o z7K4g-2U~BQ!j!G*Bgh4UfP;{y* z_SP{TP^MRYVI$o6<{+bT_mK96x%RoWXCEjv4uz(a52=|TrYGXHK>=d$#KPf|;<$&A zgdh!9BSaN(*5P|rRw?htqc&)V(ZO-y)AO3VYj7$}whwSyuKbOCWe;VFD@U|ai1R>1 z-52>}hKy9UOMy%Cp!UTB->0b0=olC9Kz+u@=GNU(w&I|5A0|CS9J!E9GhXgT+T1)% zXPA0SU}QONeN z9oLjPnFk$ak3n2 z2H9V(MHQXoYK1D>>QkL>HR95s&ECrEh5jJAdli4^R8}0qDY8bvZJEY(hYw5A4x0q5 z4!^22IK*hcQN6V*6+UC#=5pR7UlVlx>xxNNlzD$YoQ%E8p^w zuRs5#!QEcY)VxqLuw+B!ME>LQkoLu%o2=AQ#lvhd=@=*Fe!F&rhlhS{`-BOZDqmcr z^Lw5VqAqFCe3jJ?bZH4i=`URYeE9SDan0Cb4n7)lU2kviCO}g~^n~hWWjFN5)JKnA zSzO=11R=-K`y|m;3VFn?i0Fyw7#jdEpWiy>dr#65ba1M-hITei*6|Hv|RZcAC68i4)3H9xPPEAU^0hdfp@#aRme(JKR+5h zYtoFM*4Yl_!&fZ7*4oxn);-r(>3Lwc;r)NzUf50f{q*jyj`sUqW~BZ7#UY)y&NcpH ztl64gOUEpj*t_qT$pibX(LK~zH_`4u`$bx^NB;bC)E|HT-SKVZm*zJg+;8M1Bx&d> zxckkZ4$J(idW)IE3=IjJBE^)4`+Km{P`ENs zJs!GnVSr$QCMDCA&{fy8hVxF7}F@^V`S1 zp=xf9Vqn!Hy!IgL);k0z%%Vc?+@r@4+$8C$i>=_oPz;-&?{Lt4-x7R=9QqE zj*v_fO&%`0*yB}g?I{rC!FC%$-&9tLt(Rhp19ogdC7~ zaovAgazVJc1bYYI`}Tg|tliRJ@euvB=4NIRgL@?k&ARgr&YBl6tmqqATdiPZE^7hVXzjd0)xhvm*zqOryo0)U}zJHcdRh&-nAH8RHt&3S(zvXhR za;qR71FkuQg@^xQAeEH;?3uvPuj$N+Eo)fIVD*>!u#1PnLK_%pv89dr9^W&u;sz_z zuV23=J$iI3c2{spx5|eI7N(GKCwi?cZJ9pc$(G=6C$Bl+LmCt;$lVA0&@3D@e+zl| zhE>h|S#|lQfG)|8hhd4A_%yX??TJ@XF5moxTsR~34;3g;4| zzn=Tl4?_Cgp|-E6a4B^+(0)~F{zw;hw1PrE+!yJSOu1Fsigs}CCCqIm(gEu(F`hFH z!exQ!)agg|*xC*_QLL(>B3yDX9;NC%+IW}-K_`Qj48HJN+Tp`5&Sd-5Q~BxWYG2nL zw}1Nn-3GIfcEJf(Xe`WQYYD|$2fRAOE;hidMT7OF#e4V8blP8g_e+nqj-h$(6>lf( zy{m*a>h2C&o9SZH$mQHf>-sxlbJ|~jy@`t&dn7FbPdH(4$KI6qg<|c}<>_N*vvoA`pJ6ihb!}3M`K43xPX>)lE!&;dhAWkn1eYJzq6YkW+UnEH?x!!#{aYBuui5wM0pGsg+!eFe znI*P!yBB}~A+5%T+;AxgzN{cLrNS<3==dG4Ldf!>i{m=CL*#Y<5?Oc6;kgGO*2O7- zEuHwwoFt+o;pZAwm)<&G;>990;Wvq>a#wpLgM;U2p?_@7d45#v!KBamYeH+&wk1Al z!^CK{-3Thd!y`M3EuBaQj=>p9Bpmmvl#HzYY`65071CZ7QKlfO5W;))=QWU|(PMRv zvX~Q!SJLa(=+&!Nqkh@YYP;Ca$O&6A>9J!+;U3F9{Keo;I~=HmtF=TJhhuCn;)hiG zjvx0>G=8LsxgNpYSEshxwpR>fObhP8(ZCw*p76H9O^{H%J^y+Ko`LVaIPWccuCauN zde<3o%m&KGUcX48EMAFmW9>HVSC1oT>4+&q??L|Y@$uIXy~S@DGD_Jx<+C8YiA5`;SymI5(s_7ZO{{fY_l=>X3J>=dfQ?vX*^vtpB9R@=p0#|B+wS6uJ@{SV`lj83T&&V|DM z{Q|ayQ!!BM99;MK=mOSaNhGl7_xU~-w3!~6WZkkEvO{bM3=5N^lX3_R-b+%3lJ(6% zv0L=mvGh99de6Nx;%?j5%d(AULEKZSHYo`U%qKBCdP`oK?G^J6-My=F|KUSnBMJvF zh>eKRX*(i6@aRuLEE>j2Vp_!#^4lvv~!->ZRRnv89T$SqcW_{1oIaxzT4pX)7$2>olo*Fn?LIM1RQ^;Fh=|-j+JE8Y%nnBhd z@0O;~X^})+>8$2h)*iApOsv1M`2Dy-&v(1tV##vD;_1+#Y8k8r+EY8qnp(KysK13( zgci(#qbkeE$)#6n_S9b|P}mVz4k}^0B5l$EGB>-^pbNffmpm;~B{`ck zmYJ>CX+64Rr4xfuNaQvhdH=_;TNlnMVUW6L@#1-Saf>BGgebB2?E9T5kkP%)oIj&G z_AL8LhtgZMKT$2b;4(7@4BCw{_!NC&Uo0PKvL-RzF-0u1xn(KEK6jN;X!betjZ6Pz zSmIdI%HZzF^Y5=H3|_kpS{eh?`Pll44MqsD?vez3_i^3kVQLCfaD-u}D{LNwK~x$y z{L<)uB9+g?FYWXm;vP$HMnqnwe|9xD?AXrWy28lZyp$oP6g{^vy+76&i%|8^*RA*L zY2W*k+R#w9QT(J^SguiU9Oc+<+_XtisduC8q5Ad&`(72DAZ9udrm~{e&W^B2U3X;Y z&33&)HCvHOMcjQn(h2D9ZNp^x>UjH@EHo>5JtbF(PP%c4iL*hQF$Hho8;)==`ieY) z+HeX*PL|>j5u|vh?-Jb;k_=B(9*l7ZLyPSNDymcvtP21x7hM)ExWQu^81wr2rw{KC zw^>N;VJ~7WMhqP`ET*LV{96cuqpK$^)YLq_NR9LJ-EOLvurUz80lU;*!-k!p_4Nw4 z{S{5-CC6g1UH-GJNObFtbTXJCok|qc7?|PcdswL{4P03B! zON%X9<>+u*c9I1A_QmSJ)=T{wc08?XGR@1bn{K}nEYusW$n5%)c;MlCpvsNH6^qj% zdD~Z`qxXF<%m)f}M5g_4TU31RR&W1^M*@xFKyy!Dozsae&Di%#xz z^&8T<`Q*+%eNH?pxb$eog-*YATr^+IvJHQ{o`t3g;PMFPNpa(Gc9j~7ByRl7nHM{? z%emXJo4Rc0cE}CSGJ5k>ad5Yi-4LR~4Ytq)5R)$Ze`S}}!L=1#dz^K1Td=I#hM=DH zW)-_{d(w)3FghZAYZJ&iY$RNT+STk3uk7o`>Xrq|O$p zRg$M1f(7L&F6*4R1K;h*=c3>qUgWaiKopkt2fDG`Jt=e399xee6TM;-S;=Dz{t#;{ zl*C_J*1^x@>N=^OBP(iZGTOg{+y87+QC7AcKhqqw>xaBF%8xz;(Et_p};wHr0%rrt;!6CYtx| z-ITV{*VUZ^5y7~0TyEr_^X0^PIb>1`2pd< zjFmpp%b%(?EHy3d`Q&n498v4df&6@1_loWwdF$?_u1o+7ini1upN;mOO*6iL;8j+R zRi+49P&&<|{EYE`VeieOa&G&!@54M#8HXOWPK22DbQA{i=`lvz?#5+x@8PHiVBCt#lxu3?gPw_7Z&vO)C+~; z{F1%r{ea2q2fRqzw7a^1&5i!$Xop8B7cLC3)kR5=BfO31 zc*^!(s=KcGn`v0~Tb`L-RnIouTfzWl|FZ+9*V|mPw6vTv+o~kq^hxy9!9zYre%6vH zJ1h1V+s^AemAV}{^|qBieg2+XXU?8Ke*{cnP8)4aV2m>yvUvDb?dz-S?r-=qifcbP zbNk{N1s4|=@`_5|Zwa|cy%|zCROZb2^ZJn;W_BWM{4orz`Q?RY7w7ueWF$JnhWER2 zYI<$6GeN*`s*|6+)L20$iT3wbropk6yfNLBXR(8vGsXoWhlTZ*rt_ z3v@Sc4WMq)o?^*1BPF%(^DXHzbD6*2xEb%ia64P&t(RWJ#r~|V8+yvVwzf8M$J|}> z@&gQl)JJ^YN>6aB+dAMe*ViQ_YqkY!o9;L0#k`L$O4Bkn@v8s&1xFtF^r|U6Z*gO} zeOX#7f)g|p?&pbYD~-sd?ey0dPdxOBEpz@$;x&+yZBkW zbod|w1f7k8O&qCOJ^{oGP$~s~+K$c`1|plL-z@D;%ULL4 zj>5^qhsWNk+W*!qI3VEWce!O5Ti4l{=tTs^#K-R;giGYdEeuwTNsd!2=uBvW2+nrc zx^)lQy9e3Zd-UcFXZ@)3UW&j@@k%1^3?-&MXag|Zq>=V|BqK$Lt(PULs&GMAo<Cwvu-U#F)ypWJ!WchJ+GW?z<38G5|@m~&GY(us>;XQKI6<>|pJY6**) zqhCqs)F`5o=IkrxJ67O|cbtJ4)MuNmR=c{n;kKXI&Ta(VyLo2k9)V1O45ai-u+9%KZk{iRnP9=751sX*WZFA_*ArX=Mqq(^f-gKrOp^><0 zH_FjPiowz48#jt5k_0<367sQS0B?Wy;ln++0svZGoFInA#0mTja#?cQu~T%4Wi@K z{W?4Y)8c;J}EaeIyyRgPp94j80KAECpiKTFrvY$ zBdSD2uJ4W2SHV)tvRneH5tVf2np|MEHGb)Z*4%S}4`GI|5kGP7dkA7>aBq0T_~!s= zY4N`C6Iq^FhWCJk?ocAo)N(n~83QM*>PQjnM|2Nj3a^x*xa5r$nI^m`ppqN;`Q31t zscdO^9iS&xq(prpkk+no>-ILn@0v=dEpOZQHlUNtR!q|k48bXL~M zJc}_w-mhcprq{CK4%8c{g&%R1#0kvy=ds*XNB1oO`SURNM_~?y-c#c#~yCC z(LZ-p#Lo~Sd3yEw4JN1Ha>0qJEcc`K?`5H(pXJX3Np!iB)&&-u-Rk z@{e64GU$Pahl#`Y-(R=RXii8Ix8PT|N2;&;_Urd0`WquOLlhzafFGYe=>~JNy2En=|IidL(zPpMTarDs<|m zUDYqrw+uUMrl$pnd86Akw61TP3cH2($g8NYto)0tS1qlr6yf%LRsoJQ z6duAJQN+SKeKe=W4m*HVV#&|-A=VBZG{`CYrM~n9lh9*b$8e3Xv6!c&1yYa|3g~0B zQBCPTf62)`J~n|zL&`%F3AQ)L5Yfh;-yGv%8`ZvtTvrK*Mf`(?9X~%zA$O)9X+Kn; zf^uL%cL3@JohQENQx@{;HWGTo`D;wsc0}~S;Etk6)kBB>oy|+}US5jNCTC}D^a0y4 z_V4dN_e#3B55U{tkt4h4Z|L&np~s(q>X7l)?eFL3f7D#O4+-yn4x%=(zZE~ce@|Fu zgmae=a;GId+ubr8-Uqbu2C8cVE32f2ERsqk*$}9o?u|^6NO*7i!QvJjC7Z9Gh%|+r z5U?AFWorqYwFt0g5>n*I&%8FcBi{EC!w=RK**kwt$BsZI+${D(Wo7H=*14^-x!@8B zV0<>^P1oqwgLFfu_m!N-(bwP#wf72Z>zf{zeouNf(PlFvdu!6Vis^fB30bbvFZJNR zdba)1)P(s+%f2&Y3u+R}$;h@R$6|x)MYX1))WCwhr@sg`0tN@;8&7h2|7^$L#0$9K z@=}dhXs0h4rlN1>)M+Kbi>j4m5V=hfQTFYQK5_i`a#|~iClOKoV)pORTCkbp=88Ly zoH~oO>6o>+wc<;!wf}WXDAmf12Pp8sr}as`VgP8x-6KN?dw;Xv!KP52P?jkNC#deW{Ebk3W|H##<*pcC zUhV$_)4b@w!_ubm{er*e*1uw#pWcv}o<6&0+wF}-CIarKx!ns=P7rDB(N4Q_Z{+6c z94$vKTJVvUNka0PT=|Zl8|eSP?EWw<(SB8Z!I}Mce?07ZGq`tOs1)CKSD&`^Ja?aS zs&khvUBsF7t!qiVs9eK?Jy&dAGQ7`$!-uu0?Oy#Wsf+9{(my}z>^ldTx&PgFut0BS zk$NJ*yhGPKp80)#S@Ooi3jfvuMBsTK2~TcGhmN@f$;Lsf!DEX3%q~6krnV3`X^wUM z(BV8^+1|NBhYkfF0sUn40~AXisxx0}Sb~_Xwde3-p0_;EF^r-n;d&Q5HyVFHR05px z*BESzvuHuWyUWkdARvdzy6dqIyeSD`>8Ra5o-WFya0ad})f{P6`6}YsF*+szuz(#W zI~D!=8SXmw`&z5N{@Ts^eZ{hJ?WQFql>xz`%>y}SuDX{tQ9p`3`}gl4AqzwV5exnl zxuM+~HIF|tc@~CrY%NlhfUuT)ZDFvi16zj3&fwYb3k+;`cCi<-CaDe2-<`@_z3h;% zsV#0f9yN8hOXn`T!UKcO^0aR{qu6lOre`mcFkd<5^m^~6FOhZDkM;=zt(m4C>oCam0NcB}M| zoByl$Zkv*lGTO{(%ecvt*$e&0V8bQ8K5Ko}+LpFJPA6aU%RK+J-INYT=6JJx2{AxX zQD0i_TOn?A7pt+Q+T$OkY8pOc(XZ_vg$M*1QJi+F7GcVNt}SiE;0`)9z1MV2ey;hY)P0L zdD4&qf@>%TtiY3Lx{0(T``Vwzu^KtXqtWm0Sse5F+KFL}*ye~Ri2_^KGP5F0Kgx9y3-hJtip zqLG;EDw=ZS2}z4Kex@fOpt}m>r+seXSq4z{dwX{wJFcr_+lSoLWo_&g~yKE5m4+g@^tm>ZP)q5f1Uhi|<9-D8=-E56bn=Z_LW3y@%A`}r_BqSc&T+tyLFH5=cmwSk` z<{MLE<9$$@+0ULy1E=vM%tiA02~Byc>Bd&?B8Glbuz5HX-Fo4o|AZdzO!};cQKM400((37EY0z$mNFsTTxH+;#7Ze>+r$APxB;T6#5-U{FJkmv^`_Uo1+%Wd zAo_?n89KK0zV1)|h|xVshNdo*eE9 z5|JB_>ST1_z*->Xww{pBXB)5O=%j!-QY4yZ${g-0!6mV<^3A^e`+G~KL;QLNy%=zK ziMgxHiCG@%tpwT|J3=)7?9F_DOn5E}lOh&fbetgIue@AmYMJ zsF=vx5gEResAH{x6m*M64jHnu`uq3qQQRQfuBvslzh6@|xP&4n*F;C9)UkD|a9ZM1 zNx-A=@$uWF-w&c|Xsv-ok(O4Z{_u_xjOQntKKxlT40dy_>Dbm&xykvxu(w>(CGfnQ$?6@?8tzpv<#zp8P z;g@{cPJ@cb<=u2sQ`5GdV#30pnb+zhVL;XYzyWH(b(kpp-B1nZh3M`(N^)0C$N&iF z)eC^7mn4`m^5`sh#nu`qYv@fN*#1~-;1@$>VDaK&#<-$S1J>6lS`*^Z6I^steB-`rvs*aUw# zATWr68B0t|a$ahmSU49Zu$)5`B=0@v9YmRi-p}y)~LOI4XKTr^fQ;rwP7ni zRc_L8mjGd_nqa40GT1RUhQ+t6{=I6;xX7?oC95{{k}&!4X?yU8%>S)BKmTXv3&oMz zm%_5RYS%XMZdr!adH3#BHa*?aT7!*#7}aQbKRo?(xgGc;FFCaaawwvi=J!)GDPjl0 zHd5E;zt+4kav3#ZXo zK0-W9ENRRjTknr0?i{57E z7*xp%kh;8@pG27}Tvnp4|AwBz0$dN_hf+YUxMq1r-q+VJYN&n~MTOzddE9B2hWLQk zB>63lQR18cAz5W(Gna>8`=gs_kP|${en2QeLbvlbDT9n@FxLTB*A5)6el(Z72nYBX zhT**L;W;Dnn$$fn@J5lJHS_?IQ$c&NX>VAvcJTuwDeD;Mz3lvPnGCu=LBL)7{{ERJ z4>~&ut9P@b<5^T+0WBVogb}U$i30@iNH_fw9~&D1F(@_teu-*YK&;hqD8IYmZ(hGvy0-LpV=)kp2lWRHSK>fNgVW-`s-=;?J1R>`(~XIoc}RaD&Vap^0` z!1MH_YffA>W+VNn>*((9j=bTi1_|<7u~$#1{U^98BGF{LK&w7E`(F9Tywh7po92b= z4j8!fmSDK8>=*p`cujfN;*T(wCk`CIlIOvj+~Ffeyn3nacys30sSf9V(t>tNBDq&> z9*zl+R@rmCf9GQ1tlD}GzC0t-Isx1!)I>rwfC5! zTKX87Q*yI|*s7}8s_3NlDY_`>&`|kBz4rV1y$Y3pp@qe$`B1T$W2g1&+qXuxY|0!2 zXYvE4%vrJG^xDVX*RzhVo*+%(>oafCUA&iGef&^056O-o@TP4#t7Bx;m+irK;3Szd zoas>0Uw2$G+r@Jt9M+3(z4ggmtaL zTYg?^d17h|rC2gswRG5%pyTSfhdyE9V)kZSsF0DA4M@nl`|xT_j|E{Ose5?nv;pJx z_tJHrFlyAH@Zk8x!$yqo5{vNarG?r{v3?$|Hfxquq+W4hVNb)j4ApBc3saZxTY63} z_L}DUm8%((jo9+6_5_5ef&%#gon}w+I~S+Ee!`xbx$md!mR@i?@vgEg8`qo(Y|!U` zZVbX=K8D<{*A4}>T|9q&XJJcx^nr4V$lrakRl2NO;2Lnr7UQ@XT^L#n#H^{{UF4Q6 zUv(z?oi<%F*@cFBv|QMb!kxJKF~j%+HSt~vpxpj#^64b4By4~0_UHW9TnHlX$Itfc zzM7EAhLH2qfg_o(%j{pusah)+^+0>o@9fJ=XT3 zCLqJOb+2BQX%0KDw)}CEA)97izuJJ}jIX(G?*=5a?%j5$C`@>o3eqo{1iXD05F8ir zw07FJ2j{C-BFKu3%b4i3XFzVnpXKw+)74MCs~aYNH0O537$A#nU$olmQbLc$MF45< zp8m_WwbF0bh*`lnNd-{E^oPuSz8nXPcK6L@p7=9>G(vvP6cR+9AMHj1V{_dkqRj|h z4PrE8#*Bfx1}}&FoB10=e?Oyb!^d`6^`^ew7r^54Ry6eN+v2<624))@_Y3cA`1SvQ z59jQ@d*#c$k>@X6LVfL39&R?u;S}l=^uWw;315vq*}9?szhc9Z3Sgq$?8o8#3Vqvc zJ~?hh>t#EdR!cNOCT}2k+)$DYjW?(9VoHjTwYGeC`?h_wnzeEeI^2DE6=F1kr?;29 z{KJoDMzo#nNrxwZ^ypm~lwy?(>xij}q-q>gBt}Or-Wg|jN~n<+$7o?gs&8(d7xs|G z4>$SlbbK;~E$5E2VWWZ?x7!U zSSTk$LtW0#(}iE?K{4HNmnYM^mHAU%_W9j{@ybrdHqee?Z|sW$xGYjMraAu#nVex{ ze{Q5;@XcDRU8Q%s2RXL8uttn2Y{O`)m29i+UP8L(bFXUl3fC@YMqG*Fftl)9+XvZ{ zLtXJ`f@Y6)ko}DsuJKe(>tn&kj~{sKbLf!P7f|&!67b!n=H}kMfb{}i1ZOCAlQs6p zua1)Lxy;I4^6A2SU0omJ^yYgLCr`e^Guu-}rZX5f;NeOJp2tm`Nbqg=GPTm4cwZMl z9wSHZPk!rM26}r*Nv(YJ4}{2s!)Hh{MP=poq`pjpe-&i!!PdFz9si9Y9;}4`w>mUv zntxrPl#gP&AbZouipPr`*6r(KVFvoX$jNf>QcIAZkZH_b6`oix@b%l@2v zF=0Krv&;8Zlny|V`sIU;;MiR#mYb%utf&dd?>5FAc%JO*%8|`LJ=pZ^t7}|8G)@_n zt&(JB#rWL`k5@IX0;aR-cGl~y)1)3!7OsFqZIk;RK17+e`Gt3IFN@D%wy!mw+z`?ZvmV{EQ23y)Ge z;JvxlSN)lx194PqdP|;z6rX7f{2~9?IPpLJ_kQELktUtII#hXmb=d#fuds5SoQ}V? zzu4LzFdilseMNl(BJ(X9Whex427XJ#F}95asaF9!f<|M$6@ty-VT)sKk$iLL*RSpG z%dZR+hFawpsd>6f4jepq1NyWrvaGCz2Qyq7t`UkS)&U^Dm1749q~RUf5iOS%a$H(T zIKOtXvp0N&p8#(FCVk~IrQFkE%zk<}UpckTV2*=kICW*wieZ-I#IS&X-83l{*LJ)Z z{47}&T-ssNrt5!CGYEzW5%%qm$%u-oT?k&6c!~_6uL&Z#XL#7)j)1(vpkuA01tkd< z2AzS*`}FOr_Q{=oc7MtK1gEy1lqaoY`<~B##ej#y=FK-y|Nd~_jz>Y3d*42NK4tA1 z9G;f;G<@^K2@}xvjK@JG3#0s*Y8Xt996Rt~wA)`YDi5i>z;GoG9z2MSiP?GK!gvVy z-N4#iAB`_An6qH}l4o1I4jzIhVJsp$+KLBa|xJ{{IC>EMtM#ZjZW^6#8;Ro?+)Z0MOmLce5!ig{o4L4Iv>hx_0AKDVrmg@m^yG&DW*~r)VTQ?vg<7z&7+1a$y|6 zd=bX*n`C(d8|RVD1~50=b%`k?JB2{RXOZ|_%tK{LjuTO?jun9_|vYPTOw z6KWS6RCN&~Mxa7MOwYG(-yYmSpV(V};L{i}t1ZzGoN>-Ix9|1_r4MPEkw{c+Ou|3vIbJMwW7)0$0B%z%`}98HoF}hlEBsyP>NCbuB2TZ zH)V>ptLt>cX9CGe?5YZ%n}yz-xe>9s2+k%NEv1c(Pz8%2B!)K2On!%SnHY_g?7R4n z9RKn?Q7|m&i00xrv^wq1&@*Yhf4M3C(?1%0eHRbZ4w^faR zJ9QI~ZSk$hPU*BD&W5Yd>x|B1!`#&O50de!>d2I`-tT*W|~G z$yIt=`C3Q0$#?GD>DhL+-PwJ}TB~le)m2nfc%r8hB{P-aoARA_<7RVQ7#JDtMLo35 z#bwCYu|3GmsTlbJx5$I|8myJA{rSFiHm}_D^8L@30~q4I0hA=BU7=nS*m5{zSe7#+ zK1Hrri(JP?M1>f=~ed`7M7NqV7u;z zOgWr1ZYv#HLfLkNBo_e9hWF_VKi&g!0r%<8Z*1w7U!cnGEg&hR`Pz}Px==^`{A zVvc$Jvk9Tr1NXfZxOelZ{Wh);9OoH5B89X{DB-|!#8ff32n|*B>AGni9fa(!vU1nK zgPlj2UG4~5vlE5GlFT0xr?A72HP85&v9D4cH4Pr$CA+fSNx3|)Ss!r#+t0zfvk>#o?+w8 z+=tuork8rk%lF{H4xO-KoN2V)quGu2aW_x4BSrHQTGN}4AN$L%f4tzu-7<`g3|`*< zTcC0O*o}H`UCG*eSzKF02O3UJDQh1(Ts=#$e zv>$UKq-*6#Q3P`6Gws-z zEvEy&wugauaV)XMH1=x~BHTwDF^rEMlAk5V5-m1O%+U5faYCA9wh5}8r@57_oDO!C zQZ7o!kGe8KYg}_G3ivpV;eG za{Gpl8g+}MOnaj(l-+;;^0~>Uz9uX!N7MrspXxLT*d{ofyDx^U7=X{fvsn&P8inHn; zA@`ZphRopX<5RJs0K|9FEmg4(Pj#q}puCcxlD1#F{=u=ml&0IgJL*ohFFU}mv^~3j z@7^I`XDxE9G_KRgdsXk=9blBH3*=ZD zBNmF7Nkd=To8fFTbCY+QchStJK3Fqu&4WSIDcVPiPiuByGQE<8t-;n+zOAYoqe=!x zqoAdy=LO`hGOH0gE~BJkjvglY6^1&+>oolH-jo?c#{6uRohp^Jsj5AYve4$*7eYn% zD-yGBzyRlrrT5*vgtQz0x(#d0KwsaJ75XWApU>$!wW6awiB4?;S1g{mk@A&AvX{nE zk+DU9u9+-=vpQdF#KElo_CLvlLQBI{*NiNo_*FonM=LK*iQ zPi<&+#>)hYq7~QVs}n3RmlLiG%XwtB_x;Kz{|q|tF7(jagA8fcyNnIUWwOj$h*y)^ z+a7v*cOoYZH5dTOUntGO4s3REy2F#)?Ud@;LvPo=iEa9T{a4b1?^x8_&@glB?V^dW zei)*w)*3(zYLft4As}7!JN1iJ968dPmhsS`NZ3b%!Cmqd2~gZB+wahPwX`Km;>}YR z8TMcoZ=*qF^#6^zxURlbe{sK0f0+z6)?NDP7}}b(zYpgwn0U8umy@}#&*RdRP@#n? zAtF3v)Lk){I50uaz@Qgg?!jHcAk81YC5dh>006c;X@8~cHakxLN z*+pX1MKIt&c{<7g1;@u*zvFhJ$J6F?e%-WmpzqGMU61A|kJj4{VE;kI zKBjcOf~Waej2Sk&Cj;_2g~l+WfPL>UE93Ou5=;f?vBm1f^4K$Sb^O-WHv0fmhC zz7BrRQEwCd^q6m6d4niOK+4cNY@888|d(4N8I0A;#c}&92 zzyC3M$dFAfGkdlFekW~fja1+M{kQqaskU=0y6SL5tRa*Zd9u9W3+NW=1G>0DdOmlOyas#sb#mknRD!;TtWpw)rv28-KP;eg4xeBUDsu zi(F^ckGt)yd#CGvsLyR}ZMkM%Er)f>TZL2j@2q}e_?WWdhsK;SK@B<@lP^pJ&D=3& zpk&H2giV7TIM_ElKI^;=Fp-0xqk({S`-T6&{_je0a#X=@NG-`-1Vcw3l(%yX zxsS@LlY~$c?=J|zIUPPOs=r=iSu!0DI>?k2F+Dp%$i0i!r_l>nk(}>j6 z`H7p)<)eua5fO8{)x+>t1t{@aZ9O^9U9R$Q^^};A;dAD@F;v*D!AAyn+PUDI4lovr<#Hg8uR5F=*iz-+n(MJn-w;2*5N_Z{zBneb>|tc zDe@)mHf1v!fhtSnke1=O@@IR3=9Y_k?tw|oDmw1t)TAUZoKNV8=5&{<9oYjFWPaUD zPG<3TtZh>wjvIELcmIUe3xhogw`|%wz0E2(8Te-OI)_=Phmyi@f*{WP2>4=pR^v1! z$k+hnhO^(~%1cQpn5|Bgnj;J}fFOK86e|mnqFC%n({UzSXN=&1r6FX>q@#Q=6=?;r83h-`_^Q)6LsH z?!-yoehRg^X3={THeT$hS+k*F#?iHg$EI~!H}SP@`A5G11HXm_edOqQ58l6S`dO7( z^0_qc?d70I`;xrXK?{h2sjw}IC80l0k*F5K(5X=r}I)8Ws5mJYB6DRj==<5o~0D=jTOckhzxQ!O^! zV0ykJw(a!#n|+KA^vB^-*ZR$YbdQ!li*l-8zg`+x&RbxRdNp{&Y6P2Ah7ZPf6UO{c zHcbvmc-qk)+-D*U5w_zy^NcqGebjC}d1lSEs*U-C60K00rkiSg(D0j1S{sSy%PvdO zCj{CR*o_Muxg@=H+76|%Ruy{Leh&CPIX_niP>qwqQh1|LBnMRJjzOieeUl?PIcry@ zN4`$7?tb69x0q8MYg|m4Qp}Y6BIPn&zdHx=ZN#+Up%dh%FL{%-_CDbID5tD5IX^f_ z<2L}Ls^TKHQ{0**igyf5oo<<2UTo=~H?(YQ;-?uh`+Vmoo-wFC?s0MWxudNl5|2I$ z-?%o6546iYey?cK@q2w866(xTq$QvB6KL?uY;48^_Z>T~zIV!0ieXx9sGJpA!Ih;X zos34HB0NfZ?1_FF?KA6kvg`- zmBa2BVgnbqo`{5lvK|-=FYt$E7^)*O*gRXcQPN>%NO(ZLOwY2_|MftW;C z`DKtm9Wfx3IIa7vS=Zvmm@mF!ytgq4fKH_2iY!f1OcN-8O&ed+8rk{QeaE!M(X#O| z(><0wW`4>x3dE=JB;A9vY=Nbkv-9^j-)h@3r_v4NvO7F$8dQ(PCzr>z%Hl!MOg*w$ zj1tTmgR8boGHJ<_csSNinIVy6f4oV?BsGtJq|o;QeHQBx2hP=rGg;}2IX8+Pep z29H#}zuGT9J+zvbYC~FxK!5)T(2EDpIrS4sN?i+Kw@9rnNt;cdqo}X6bPW5+I_9Ym zuh?8TWrV(@1bP7V&9RqT)g*~a^z|KHoN@Yd5E;j+L+Q^}NYcCj6h%0l@O1V#5b4AY zA#w_-ux!Qa@Nmkxy!H!`?I)?w^Bl2SQZaTF>d9uXT#-XaaAh=5n@CuN4;L4c9E6lx zRU%}b`d(zVqrAPC(t}VsV6*hZrTn_rb#-y91eGaMO!}%A>VsBXc$G`Ar~x%YGWI%@ z(&jYXM=`A?-eP#)$;ZYNpI@OV68g~Lx+1Ms(gD&tqGT7nipVMinQw5Zp*6F`+|NIf z9##bAQBj-lx0sGcatZ9H+t5)yp*!OGa&5;wTR)izxyp=stG$}RCh<#81E0mPeHMSi zl9|}!qGpk354e(Rb4l2Km$<7{B*i0i37)vdmwlujvh3yds|aE10!@|~AS3nqcsh?+ zClP~onM9nIgK`p<<5wO_Faouau#+r%??5KJ=fHz|W=MW@vanU3jcvuwg=`X()V#yp zm*FYwx_<-ev7_Y=n)#CJRERkwgKX=70?>LIBMT*nVuY|wcYfhmGAZXhATjB{^HAKS z`hNo&8?i}UNN()d*~v0Xk$UH^io-wNDETq(VdNSyNnE-lzis>Wws-&4#c+P4SGd^cnSLXk#`rD#0Xj7)_oqVX@-eL&HBy2YvlDCRuIb z#3kR$wj72Fi9kuTj&ek#Kyt51uyV1xCoS=qNrJgwzD?%olBX#fLgX-hzaq#+kr41M z*nIi1 z5yA^ljLVDHA_+N~wk(imqxzKFBAg}7u=8dmI^MKqLwSTG6H&z&IQ^*akLeov%E=`H z?#A+PkS1}QdS-0qr?re5Q=w9VtQq>Cp`l^*p%LGvC@=_$_QU`H%krB#W#NoHS z*R(RMgGX=zgyLU2w3E!He!kac?$T?5>3Mo#8fB#$Q&>9S` zj98~9U1Nd>qrEkDRbJr8C``lCzvkr(3){Y!nVUjdL&I|mr6;X@q`|w-#FcRb)&pwX z=rNi7JX_X)p4dJ)hd)ymhmx$wiso)DTFnHDNP!ix!5~W_Vw23pDnpS-LTXGg-fi(4 zxP{`@i=PuYlRQ;0->DRUB0sUe_Zz4(V=#D}dCrL>oRBFGpHIP8M(x+9oBom1lPF+C zbPk>K&~m&ojsa7}!PIcL#&DXrqN508lx);nq%Xqvh5)pEFoLT1HLyJ;Je^imSsA~k zf?Z?SscnDZhB(~Vo;FvkAgmGUL z!~oc$F!c{x{~#7a8H+l6DW90^yenALBv59=@WFIrY-j0ib0o%N#|t)mC)_Z zqi-sr-{VTH82$7lXA2Xrp`>~FiYe;-TskR)*$ac$0)pxKj}pY&`u(wo?4)g*6j^hGq=ky zGddd?Ih;2FJ0Nxy0bTR!7NE)T7nTV%BH*-h)LXIZSy-H`tgI9{W_+`b{|>Bn#R3C1 zplLDWj1e~W2(jm*7QVzRVl2clqwBGphsIgHOT~EvDB`i z4Y|gVd5%N0hy)3ExRxiZ{#BQrCH}ar!tMK%IWg6fq~ifPckEMNzSlpLnwr|FYuBum z>F@{z^CrMJe)}lZpYI%#ZxDu@J0bVMgUNRW1Ox}$DoIme#+AXGVsDKgMhJ5W1L1v4 zWaFp$2lyp`gyT|L$A&rx>*znI-(+-@G0vZEf>ZqG#zt~Os3+q;_-+9hDCpCt&j9N~ z3_6oHf-2dl-nK4)XW@>`CFziSo1!3)ZC${SLrRy(sg626^aL)COLHC`AAi$Tys4m| zH6*BQR64-|;&pN#KAgg|4K~xXHjeA*Z+(;+a)*U2Erp8Tpd?`zU_MJ^(G3)`0@LwQAL>rQeY#+bBtUc(jcCQ!2K)YfwcP*ebO4(XgY7UmZ9pwmp^jfH()$Y}}u@_b1O~6IFJO$%rEA zJuL98CVxXPg_-o`;z@wuN;<$-K}zCa_K&0-i)QOCzS7t7-9SF}55@Ge=Z>!EI8M`( z?qr9zcge|ZlvpC>6b=$yiYOcXBZ+318n{Kt7w1*H^;%`bPq@^fCXbFmq;E^G6<8s|nw7 zn7zfk&{v>bOemH#a;A7rMA&&v4-ZJzgk6@m~F&4DURfi^2<#QI-cWU> zA8F|kA^FOgFA@*v@vpMCh2cZyX~F*j}M=OwX*BkHbEYa~pc&r%BA@t3A1 z?Z6Zg{4PA5#wPurI@Co!nbljia?qS4x0t7iw?$vd@agZDEx*J5X}jidy_UcqY^6qw zx;V5*N4Cq_8FN=Ls%u2Vnh3T3yTp!JqD?KgD2EevzCR~;;*5Ilu$#BN&QWCP_*2JK zUj9w3SU9Xz|2n*h;Qrn`KJBw=`cQH<>W))}sLyp^`h*L5Q& z=MyLG{rx2#7F43?uM`d7<&>$ubdQgFwQpJV+y-)y@@>vIQ<>|OE$;N)f1f1Iq5D_w z{gMuC+b*3&*Kx{lYTF+xJ&q2^X6=Z`J`v<9`X+2pF0&sPj(W8tW=OWmphR=ZCN%=! zV;7%2$S_s}ESU;qpQo%~~(J z>9@TD%Ee=Z0imt?vQ+y}_Qu-cggDML(bcigZOgOLWhSp*8~Bqk*3buAszaS)>2>Do z=oC(E!k6dIpZr@3pr|N>ymUTCUGxH zidwbL_F>R65uNM^Rn@QitnvnIxtX*{k*#V0p#GB?AG5Yx!o(phdvu_~ntwJ)`$%fp zIFzJ+*I`9*Q7dll6E&5{Uxw2x;)Y2bCK)Y|PVFq+P8^N4ZDF)uxl6Syspl0L)}14O-lL}1=Tm9{OB8i^)t780gjWV4!bd#Q-#U$}Qar<;s#y=~fxfE3*qo@ap zW_Yj@_^)y-#5T1UD6X+UTfPRj@08*}B2E_BYr+JTUlA*5oru&8XRVE3gW;Y2e!Hk2 z6}6ZZ#W^R)wXaRd%?9DSIM83(eK!P@8;z#5INxVU55Jl z6^6=m8o)M2Z0oOa85TzpQiesVvCtERFyPIiVa28_X#ApAF?j^|3p!19Z+(c~7U zkNMpx#mn|0`wg+W1 z8sr$~T^9hc?i8yhV=aV&3u&-@l4&6xRF>N7t9|sK@y>5OAZ)-=bz#Da~-St5X|5ejO$c6@4yMH8YG-ocYM+(g}f- zR+sX4KXEJEB=3J8s32i8wi@1!S6ORO)r~aRT=~_dFMO>tx7MtbEhX$K0L1&y_;cam zLR*%j!Ywf$slEKtv$f7`vUNX2%}<-5-co1PvRS1%nmJ>o0ZVSk{{e3>^LU3MWxa^Y zL1t?IyI0n!JwH)B`6v;pRgqUN#HsOi%zB!aP7#qhCzt`9c6(GV?!aS>)5Tc(T>lvJ z)I^>GATJr6w|o09bI4dkK>d<4w|ZStx`flaojFUOF{cUG>e`4`BCsZIvzW-ZglKOf zDv`QhzO#NgWxf!ZkBD3?znM~_{yGJWLEN?5LRZ)3zIjMQ9?hE|EM@}R>MU3=k-BmC zh4QUuFpv%b$Ou89^DO43S9)}J6Mg;VJN`7SX`pLg_H8?d<6BCHVzm=D9*pu;+F`)W z7Hj`@;!ktLTX*M8pk*|+oHlY~9yUrTw;l|aB!-=N@q+7D_kHxFNy$sK6WFN->YT%W z^x=-jpN6p8&yN8j1nH*fac^Ct&;bq9QKoQJaZZ+f!3Xhy zUSL_?8_DKomcEN3csdtReBkNjpI2Lp2WZ6h9@J|u=S`r87=P~5?}3DwDV<;|H_e%T z_2dtn+Tu6(Zr{lZ!MX%(a9%KhPf|Q-kd@(}sSer4Z;Z8(wVFEh>e2lC{7D3PZr$3( zGvsx1_3WlLGK7DLZMd84bVK%Ufs%+i6IYQqnbv~{y&U~(gpLSVBq%*`oKhdcO+Vv)&kCp!I+y(5u&a?nvgwn_xGms;5Jh&( z-JTUJqmif*NRC^~F)VNaBs=TyuwJC;$#vRf`8`QN(-T~~&w;X*?M zcpO^v{podAN(W&Q#S2CaK= zwxrEqIHHGUni2nWh5!nIRLcxm*Z~UoNAg(I`p&37(%D1)XJcIykEk8U32E}K7aFGf zy49Qwir)YM69!3J$YC#KT~ibnG|4f>dc*lTQxaHW7E|`%6kAM#6?tRb3dn?b9<9D^ zC1Nnn?6Rr05c7L{BZ}%5`o5cW+$jg)>6z|e71hk z$2iJZ6)rnClK$q+UshYogCjNCJA&5;vIb$gKs7}54fZiq2b*XEE<=JFReCVnq-*}e z&XP~1FQhtsUtm;=#ZFW>>1W1ltZ3XK;dIS?PX6Bl!inGi3m|-JW#7Z%ntG4D`iSaU zNe3baMc?`4a3k_JQK-bB6Iq9z%wH)apP2BauoU9z(1F#KU&-W@JId@J8#V*k&r}A& zJ&+A>^v9tEt~-LBpE_|O#;rbGTibU~0c(~Zz{#Q{0lE}1olDwru2mQtld1LL*(Gfu z$P_vik_jBqfPvo^)209txm?mT1c)o-;gt$_=V1s|BXDxI+dzIb2cp1kMe;KjigER@ z5Lty!QCmLu--CD5d9i*11J9DmA*dt&!iYItqBi^9`b@}ZG+stiKV)*m(+x5cKUQGE z?))Z|@xI)m8Kbjs_cMjOu4DHp*{(;vw74>8?jmVkV*Rb3=2<#J1*+7UwDN#1KxdwKU&Ll3FDn6$WVaCRCEORV)PAB(9k=0 z!arD9Drzv=ZmZ9K?j0K)hqIR!^~3)H&9ANWJ`#KW3x75MZe}4JU9o&=1RCjcJVYZV zO)^57MXh*As+s|xMI+Nv$-|~*G~)LG9iHL3O}9)Hvp&Y#ul;D6HuLkX-iuZX+J&V( zQdQLuR&Fs>>e0~9gy`tuI*)M#vA^vQm!txEs-I{vO|)q?`#0%uk(OS#m7kDJ*fjMZS*gK*YJ4Hu{!Afy*G^fSHOHSbSWe8OV!>DHI;oc#(1&z*d9F& zOZ7i|RYqJxikwCYd|Ng@LGCKW&`psOwrPHSkU$bX`)2L3HYjGc#;l9A8`-OL{LMMD z{;U{1ZnVz-#^&z#ZfHvf;IA~Y<(0$hyS?c0rM9$(?x{OAFU_jQKL{8rfBL`rVLTcA z%RO4$quOrdokLwLct2HHhrE#|NdEzf);eAVm-;yH141&9fNqp(Zz&*4ekuNhApq&; zM4$p!P0+d<0-2;udh!_z-uNUB8Um)pG-VX0i73m>6dy3N@ZqQfvAO3Q50ii7_hcIM zpdk8c(WLQ{z~YDnMnR zG^1$Fc#vicO=pfoGpeD?r8-octKg1bNwqgEB{{tay|ReLj9K&hKN{Wtrn#NeL0wYu z{MS0SG^>&OBrgYaZN+Xz7k^kVF_b{XJlHTEXK3%%av8w9|7-V(`ZLPqNr$cjmM6G5 zCH$W`(RG_RdLq~u?fz>m;NM3^#_W9=5R`ar;hn3ydIp7^&c*46=V)u^m6VtuCJ>-1 zeocdQ{^?u=k;mVPxL>h>iQ@(4B0p@Fl~blAZ#5v_<_Qx6iFJRBrk=e|BP*!KC?{v= zWn2kt-533rN}=N3JOm$(gG2wYZXKEa7qSfhEibI%IN#&g$BA(+Vz6jy>4sFHW~IfJnYKA{?x6vv z!C5n2n@K$5G;hfM{ie(G(R9cCp`jQFstM`K`?}G z4-4{8z}r^R;l`Dq_82Qb`XXq-yykV1PcueNVqCgl3Pvd6>r?gWOV8r>E+Jb;P)U$= zaU6N#AS5md+^3KpKadK6wQZGR@>AZ6n~wGU7&>$vVQB&Q?=GksEb)xF8XKJsNInH= z_Hh3D#rZ#r@E`XE{rf*Eg8dvi{PQ2#?fzMg{C7obR7(H+xkD?d`hS0angnUbKVKG} z5b^(fjnVk$y71rq2fyn6&mVhsIr2X*FZrK~!*ckamBU5&pT~-e@ZW6;mhb6LngMGz zIt?%pRXnC75eCqtNppXzZ-I8Y)toL92S)W;Vupki9N);V0 z>|oh@eMwnss+3i!rDM}u5d9Cef0&n-`PS|?k+lV&d`V4d=CX~8DvDPeGJqq73NWwy zgXS|7CelC0%DyGJc=X1=lt!PqFZxOB)o2}FgvBXX5{X6=dDbH)n&Lr6``Z0KYiw&;1Y?aT>?mQB+ZXxDc8Jp-I5ek&DwYV3d^w^S|MrcME+9^~;={@<%9g zs+bdjDDFCCOgKF_e=(en0l`DYibV-4cA}e!r9hs!Q~SMR_(0uVLbN}4lQc7MvvJ2> z>N72G47R1}6N)rJs8Q+I0$5if4i5Msl-pOpegV&HFn}FC$HlaV z28G{Rv{#J*N{fXSkiwHze`!p|?=1KSrKL*=eF@3_lumI&Wi@K*r@YXTwl8}T^d3W9 zBHn%uweZn1XX5$S?88ljUsNzr^dGP0UrTw$EJQ~_VGQOTpVG`?VS-eoXG3}SybC6} zAV`6O=~$=vPp;i#amB`D#4*33eC|~*h5$gauWIa4ZRk8qzvyOqOIJ(jW@5_f&NX-< zpHeT5Zm4!)h4xan89)M`xTSP*hX+#-TT`aGm+c)&{>6C!Qa*Lbr7TbQNAuB7p%bav z9&4@PlJg4(@}r=DSy6^dW+R=!2m+8|W*@|3-Sj;qh$g~#G{~YEs3POpF zK|Bw2J8uK9_OGjWHiLw&h4ck=G~;&YRouV7SOcJV9xbf>AH4t~S_2poXWy&TcNr@- zd~*@)B}l?(h*hSn6-6d@^R^USV_liw=qy6P3X^~;$@hsu+5y>U!m9=Z1w{+cLo96; zP92?Y_LC>ZRHM(Z=*OV2RiRU$LxGq~#&zie$|r!ClL+Quu33ftomb+@RE<&jRDwk>>M2iakR- z{B#9}&#`&nX|zK0ea7?a*OpFI!z;Aih;bJ6EFh)(t8J~n)u%TXpPVuT^p8g+7nBpl zfj~qmK;@slKjRh0+80U({z+w%ccmN_I2x=r`1w`zD&KkU;DACPKJzfo>UmUUw{4q2 z?qjuz&zCspS0##Zzi7t?Z6#SMUz4tSqnY*;zf{w{sjOX~_(1L|E#x;eeTy?aFlgti zM51fE?fYrIt0jKK{-xl2rXX5ryaS;;V{?r8d9+=+`fuKTY+Xf%d_aIt8i*Qg^vtHfz$cTut*0h;A(*e|BMt`woj$;FyM=--_Xxn zoEg2YMfAl3WEPnUkro#*ZPlb-c48Yl`u5nYKiCl5i#slMzv^G5%}o(Vt1bYm39w4w zrLeg=s(nuX%C~fkL{Dmmlmr9oSphblRG%f7ZQ{2>p~D3n0#tQQoK=xdkKgcYsQ@Nz zc=s@eL&sNR-zbC$QxFvYy0rSV=TBRQ7nk%^e|KI^NWxD}lDb0s_&;|F3_Xu$!S%z_ zX>3ubX7gJpOb($-7yBDZ(p0d*5|6KQBb_Q+XZBw=ON&VmG;bCkQx6!3{rDTwxH*TB z<|MK+4WF__@>&ZNVaDoqpW*b~B78f7!t~XUb?Ogq8Oy8x|ktLRjUgFXdl(p!ap`!^3HMX;8(_1<)h1UaN$z z6NZi-1tEwcf(Amz63CWV-_y`daj<>UL_dq*5D`Zt({ktebsuexFP-gR$gEnl@@P;% z%x;waaFO}l^XRwJ9>iy>6P_wWgz?vFeUU7!O4Chp+!`I|^wbGjTM+kSXd7eMr5CTfx6gzP6V6BcP70iv z%%9xPf5!H^5ExbD>pt}J?uG1rTX`}>TR(V~IIzS`yFbWZm^8&c#D|Wp1?P1qoCR7f zZg`E@$=Gdjktqt_2i8v$vRBl%{&a!Yh`YOaww>h}E!V8b-CMYpVpENT>u2J*pbmsy z4P}|3fRq#DuXBoVHeK*)ZXyXb{eK>X`!8h&pP)KC0bK!)$DZ?UYIB1>3f5G}JrI-= zAj;9dc_#M{7Gxti29830YQGdY*P}V3(^hRwda;(hr?AJ$ha3oe*Qrx$1yzR92nrfG z-f^Iw6GFqKm5G+YFXII|v2kv-Z&$4Ep2)oB;WdIyrJXND)OP~Us}kb9KjK5wg}%OH zpJ>;ga&2S>K2DJrL~*Iqzdy1;l8G*p7Wj-v-ZVBgG9hLI zZ(h71wwDu#<-R^&>3;&qAc&=Zf>es*d@bS)mE8Wpml0|4vUs1WyZ@T`{=&+*6hc(Qq>p>4t%}vZGyD-7%#Mlh?(MxNJH?B`Zdy|N+ z-~>w`?Gma3qje`$Ms@_^8V}V-l`{?*0s7DIi%osHcVF|c zYh_aIq-~a&=-T%Wh7VXF6q_uCeS@8-Xc0=)9SU<{+)r|cEi$cMw)$RQKLIJxxOeTU zKZaglmP}mU$Y*z~4hv?FM!3ql%pa1;Lqc-!f#=;=9BMTZhhMxTVl-^kF znD24-Ks8ftuHPUHwTA#1*l%?~Vdt;^&WijQ9 zz?y_&UG-z);;YW9@&0JWeqku5c!(p>z#Trvu~$JUQo!LKC0tW%EJBSbeAY;sax1i8 zqXhl;e)!(78Aen=F%BF~Iq>HMT&@%69^1+M*9XNwT6>^J=CcM0G^}`iW?!McB1|@p zn_!2sL8z_}c}IgT3es)qwboq_jlKxD|rn8r(cMCF_C8u%gS`@M3v7X{1fN7 zz!mt(7d2C$P}(|f?TGzJD1z#1V#R{k}ajo>~!i zt>zzE(meJ?YUg3-tk~_YuP8poUYi-nRpg>s(0p7+^vP#5k3<>E^LpgmiZD}=Z%aL9 zwLV?sJy(iL43{gUWF*5!!4L_+oZ9v1i4zqrYiBuBaYcq9w)xpWu`+U2Dry~Wg$l=K zC0PpB%VZ-6bBlkwedBmhNuPh|tWokGQgSh@T5^&oQ7Zhm%#uHBpNRD=t>ImefPHB> zyY%h5HDe_Lt_t&8!fKi1pQ7*YDE!@Umd(v6&dJ|=Q0xp~X0oAGm< zyFIYEBfJI0P1<>$Kb0v{tXY-wIK$uxePeA+P*WlA|9nYJ^PLe5_{GF(uIGG^P?*`S z!kSb_vKSp#N0i&f9HgA!`K&u}z=~^<%Xh2N@1o8xcHd2gSS8zq`F5dzHL7nRbv%$^ z+_$RmD3uLciMZFCm32>b6@-x4C^H5=_4)R2#`;vgyn30ECIGEJX<~n_oWK7j)rDaO z@{u#wbedK9JRwXp&*EUEOP^2cdhT|e*Qok+!v$&XPA*9usU3C?4*!L!>yL)?r{^uwEqs{;RJDd^>zjhq^WjD)#*Ky%yxa;DdH)RIb zQ_hB5raH6h*a8O3f9+d=Xekd+2mV`)?$wx|8r3bECul_1$MtR;!-7pX)NacFxt1+$ z*-S)F@(r%Zj*(UQ>%~q~RE@pu$Y8fETkKhu<_ck=Tzoe9jI^#VE+vuvP)F>bh|HjT zJ~CMQ+f!YX8z&jG6~dhCIovyeylX)3;?4DmdE3gT6bL8{(*cI6^-9Mb& zEy^f?@Uvs*Eil$T&xv468nF4ic?UU>&xzfOGg_EJ`gwewMy>(Q_^PP)0j)n5d}XE1 z+UfTjOI!sqqmx>$Q9{}}c6HVT7*5fJLtP4zl37jj*|6usu)7`*x+!5(5k=#qniO5t zm>^W?7GXpC)}*}Y$ZE7`>(F&bBDojeau*m^P$Vos1##~7>9>LI$pLS<-1*I!C270$ z&0@Wz=1`}HF3%qAde%1kUa$6(7O5D#b~>p1m%h5fxwkEE8ERXEmRIL0e(Gf#zTNh4 zcf&bfw@;Y9!*IY%`L16(A741{Ru@-kn@mY*|Ac(U?+=|8bV;oLI{EA5)HT&<1=hcA zpWYPT7zYO~I=LV0c@Bw&41^cqR(TqlIEM?je1O6lG zoZBcEUK1XSEnR3b$Mo8tS5j2Fb?C}XN%SVm5d(>|NO4)+Vmmpy`7@JhA((KJn zG0xh0sd}&deco(W{n})gXyNu~pfc^r(ESFwB3BoP#LpFn?E>%*I|~xAWI|}XqQV!t zI*d#A?|SOgshJVa%&r!P*9Vmia!y|8s$j(sOd&bDCa#*_W~?<)NtUFEn`qQ0d6YhQ z9z2@yP?e2AJu+jM6+#(2B!axt1qeV+rH6k~Ai<;8{#__<250~J_3KEeiV)s-wQm0| zor&yD1r;u2=}wnEAhrF^Fi2S)oE?J>y>MI>_3-s+LdXghu%xzqa_G5oUtWNGW6vHp zh8_(FID7G8CmKnew2|Y8aAK3*O`?w80<-$48d^LjJ|>#O3;9(ls;bl3pmLBp*=1vk z*}mr~ChL$(t)n(Sisv<`-41D%+0lUd(DwWF3EP*jB^$DHJpsf*tYV(dIIbBag4t~? zCVnlpw)(7i!q8HG01V!r%~8BNEiFyoPDXh;fmZ!6xca#Pl9K+s&SatTZEDxg>|76; z(?8#Ce;f;O)WWVS_njD|d`f#uH;Re?&8>48MIc6zvFs9O=glwHsHN(1a&fuK5`Vk7 zr$*kRZ-sx)B@0%h1yU7Fi!X?Fcg@##t$&L9@M1#3G`zth^BY0UUQuTxr8KLjCzt;+ zx>wT|S7?fJxv$-lE2$oiaZIVqD!nzKw&yR7 zXpWOV>}>Sy|GC-sYSt&oTWvduXrP5iM`#8`kR)nW&AHKe<7XCE>H^n?sI(K4T~bx+ zkK(c)q@~phiQ;BPi@y5sVY6j^5zp^ra@+Ymh9j9iO%1I>G#}Vg?^Lb-z5gFae>k9! zG6Vdj=@UVOpjXRyOrk2VKO|rM`_E((kqxH1@Xcu@#=CO_d0-z-c1=sitmI(T|Nkt= zkB`@9MjVZdChqs)DNQ9{8}Y$0VC;pN@^gkB5`*4FYAjZjG9QI0H+kRoOFY@kAuYC3 zABq9eNJ(zf@gS4iCgfYkfS!8+G|e+LJ$KRzfdp}>2ek`h13(OV!CW!PPT~3U=dY-w z??ETpJ(ORk-isu5S-uYRaQ&XcgRHFEm_xyEULo{@nx?z-x(-r63&JLHJt; z>)P)rYHEtOP>7h-p)33o;y!3l3rXbRBC2bFI6KPq?=@?Pu4^F}vI-6)3iNRzBJAy{-yw%zI+GKB2j?v#q z%0^%F7igM4CZdH!af!Cqh-2 z%s-Z<_eX7MT0LU}&foFKYhzX$6~SJlZOunOSNGIRS)v= z0;GeKEYxrhE>Q(tIz=j`t$Ht69gch=&X$xjz02=GMuz^ey6@kINK`a!B|s#@V~l^A zDl@?6R)~cG9bj7tRqW!C3oR^W!}mB}UC~$MYVGDhi+Q}z#DrdGnw&QX!d!!}gskdL zUw!=}B8FDDXvyl(WiU%7#%{sTp+jXw_N=-FL-oMb z3tHCs1}R}#6)a_CNnprV&&;i#1Jydyq>HQ$UyX7u0;m!$D6YRUaa++2tR)?vy6Q2EMe@L`rmc-%bZMf@_zIZ`UQV{{WG9jR(k?%Bm z?WeRH<~yAQk2Et>D~`Z~x9RDGN^1(lb(Tq&tJbmRbC6$}S9R~xCq^qg?fP{a5xA4o zwLg2;RYR}kN1>Yb}U!cCpNl&as&pomXx z0(U+&1?i)#4uCY{gMh6cyqZn|x5;Xqd2$-1NF7xRwCTNMb-)S&WWI{E^U7+g+)IRb zvn1iXZ}mvNl}`tEKZkK=jMqkxP-;bmTR6VUS3C7y|EW9K>v~=}h2cj(DE!>H`we{m zDbH6oWi+=!4353H#v%f~dGS58AkZH$XX5@aj6B!0}cO2*vxQ5m*0riyG-|(?Mk;>j zUNvX-?8BMy6GsygJ)6o`&YSkeY-QhGSrn-Pdhs;uKWdM$jm-zE-lEA+);IYe)aB1S z`Z&d(etr*1M5que2Y!geKFN0O*HeWoxhGd-M+FQockR$+>yo5?kv?u`o!+8FtzvPWNcO?RG z$(ydm>?%9lbwq`_ELCp%EBy+p~se8XIR)$})kpz4V;f@>0l^Daz=NpmkeHzp*{dkDa8V(uS>03Ypz?!9u$AnTCctLRETTnmpC?aNLvo-^MF<&7%3= zNfSlnh62ThK4azj^zEzW)x`Ai|DYtRaQT&cVJWFLb0B{8|S|Ee}+XZP6-NT;+ENzUYYND@HJZCwRz)Ax1x0p`(W zjiq^cU8SeE>@;J!q}~tIMymKKx5&7S0;ApW$s&DGM!L?NlFg*ZjIqxj@f%$F13X6M zS>MRiE5U7|;;pWAljbo=nZ|i~bY3XcN^OtsuH&>@Gpe-3@l#>9m5e8wth|=DtKrTm z3JcjG)eJba4jKDuokjd6W`B>-^!(J4W7*&J)=I0-i@JLyCX50>YTLVaklj=SHZvH- zM9urTw7DtyZ1j?$EZ?29p1|By>ZPI_Te)(BZoT=0ai5CIKpF2~qFv6=Sc+j1|4Wb6 zp*-(I^WPHrg^Zu*Sz@%35>+-VR7~5_GAC@I%E*x|Rkx^3($tK+v0?ps842!a zkz8DMcJ{Wcl6T>0J~FwfGc;9wD$RzC9=-e4GH>(f#0#6uc6I0}yWhYEaW}EM%EN{| zP*$<%`qjOturQQ+!*P4(%wprFRX5T?xcSHRX)DL(Q&CmaIC{n)h&9Z9nJcthyS|i;nhZv zx*6&T4xE8H<(6%T115k@)Sw&++p=_;*?ESR{v2Z#n1nf|g^N~Ssx6;}ukQyD{LQ9E zMYfyv1If$V79-c+I5E!4W?tU+{D6ij>QgiCj>kx3{{4D)TycA#t}j|wt{>V-W_g;m z|BQZaa`X_y>1RN`eTFfV32+SG(^^#wCvbW#3u89uNl{ck9nkC$3QhL0-9`~UK|#G? z0S|!SzTr$3N!qJl{AcjT;w9b5-X-T|aJ=rj@_hz_#5@>WP&SDcDBQ)n#SHiZT<{{^ zrszz0#pOV;i*9&mQakM@`X}$XdD+CeZ{O}>z8C|!L2{7-vAH_XEMir%g)B*RX^TH< zTc}Fy$Y`vv4F_|xv)faA9A^L}i((f|#bok&$flh(e|~3XD-7&E@m^+T_JmPXqoKzGycfzz0Z$iVmeV6io9%e zE@HwubbdSHO~edy3N0~V`t$ei_h4g11^tFtvu%Na-S@P?1lp0#Vy7s*3e){W`oX6K z3l@CAA!%_GD{TAg*ZwBeNE#r`(wk;_{rcNxQt`QTJG>gJmTvx-kolBgI1;Bj@{{CM zXA&AAhd}8=ojVYMGVKV&$>Gc;r0N2{EFaT@#t$*c4o+kyla!G{e4No<^LnoBuAoro zt}TMx;nguy-f#SSu0vrQ8^p}nvu^{(><2u)?}lJ%3|@$k+Ujsn3SolUEVj{;t zCbY0hL@GOYTYJ;fy+vv^C+iF@h}o9rWjBloa~@IC{jTQg_wRReSv@FXNr{u=jg@O^ zP?3<@EE5nc15+bDAnF_X($xI=(aDyW)!73FHTPFiYGJxAdRf!cU+d6@jAM_j-Z~`u z+W$un`*lm@jW_GW*@1sTG$dzM@Glj_sutG1n^Z=$+!p6V}5-siwOV$}bZ_ z^qAjj(+N*i6c1g#d^uy;89hC^$V>NMk7_kW8^Y+6xrxcZ))Qh>cVD|dd@J_fJT1f_ zGr+&X$Tyy*aV9Km5Owx5kjysTeR8j8ttg?HjS3fGR~^G=LP9wHAr*oa0Nu7GMDy&){5g3P?~HF2u-SC1T75ZkI~+>_U%Y9HIH_wu`hEMuS~ z(jGMt-K>`LhESw}CNBA$$n!|Cw%2^wRo_JZA!>vNsvA;*-aqNuaA$7M{RXl+Ahc0+ z(m~CfozyU$B#NlcG%Z5q`mh*F!!%?yVU%*&x8}u0+86Cz-v(M}Hnn!Q%*#D4n7w`2 zo$bT4+O(igq3ff$BkuL-)Z(@8dO75Vs}eq*jFaEgt6$aj%+yy2qc+F1w{OZ?X>~lh zs_|`_Z)WO+(-n0m8#UPO>*MHUuGO4AZT84Uy|xMTDyQb*x|zubXNFy((gkoeGZKd+ z>*X^F%4qjZL7mh3==pXr{l5J)P6z$PIfK4H#2tQyk=mQ@va71+`&xMG&-Ui_;o>g} zEqF)C{~5SsC7TOR?s2L`yWqSAj+6-ZmL3$?I;$N^D)(4F6+*nUR1e~>5OwH;<=nT< z3f;7VuyeYnr=%fCH<6yTr7?rO>j&=U6Bt-9^3f9#_%|@|ScEO)O<_lN_VPU)lj+|- z6PN-JWe*v!Oa|;hbkt_bovQ04F!!z4g^{HNol1h7aepzy-Y`>%kw1Z%CUnO+$k5mx z#5i?a9Nkp1I_EwlG}1Q^I^ul5rG zW!CksB4-P_c23|r8_%2~b+n;%-SqiDT&bGWZ?bu>|8sY^L;b4Ctov1k#!(tYl$7OK zo^tnF;JChWq*G;VFa9;esdD7Khw3hO)8p19?VhBVL)Ep~IF3``A4Ug`aNl5YBq(V3 zmO#{(CW{vJxSEo3fAxvDmB0jY-d*&CE#@DjG38oORaf1>djGLYl=H?CXp73oxi3gL z4ct1{DN!F=j&@I5SkT+@VS8`DaU1^n(u^AhVTZJPL|2sy1GcP=MeH%*UFtPq-Km#T zo}E6a$5a+i=dGc;r=0kfFQI{B~7zd5zmL1_>QOLN3JJ}^yF|I@;pAS;tD z0L_2CNW#8M2fQ8dYB0E+mn_V1y#T|$j~?QQMdqN#sk!9{x0lV*mnXFYzLG;s!0 zM&9W_t>BtnaYvv~4|;8R7;AMcKeW51q6wYcsv@LJ(f3^EYkzZsAH5c}BzawN8}G{F z!$*!xbPw+G>(SAP<1;q;+56a>fm+JiY8H@srI;pR^(R;5P#!M`37WLX(9r4q-bf=J zPgS$}ZPhK))*;?lqwb};*Vk$ej0ILhGc@K$=S5Zi6<1-FHq3Qs)T1Ds3m#R*FT2~Q z_YwnfM+`49?Bw<2Zs`iPN}-N-E(UwAEinR{AV6nr!Os+<`Q@4eO7frDB|7&lOX>FB zufc7I)vfrL(??3ez1f z)Si^_X3E;z)VZZuW43;E;ZDhUqw*V7f4Rc5f}FL<{!!QdCgkIOvbkO{0@x2gQ#fo# z23Ay7&Sog|p>lFdW|}r6PhUF+zxi6r1mjBgsf!D$&i%Ny;^)1io98?t=g{@cMrNYq zx$FH>@tqE6RNG9I7FbTkp+j9CwPMHo-0*5-mPV3DIF53g+uU^Q=uts*Ri<=vd@F^Z zXr2DJfIyrEgJTo>vlL_Vjjw0?omx5rTbdo}M3f=f-@bh_ZImY#|48}W^#hs=a$P?C zbCAzs#3NL@GBvhLsaG%ef*Wlqfc1PsFO)>Z$$KhYa9`281=q0p<~DB^4Np|A^7ffeWW8yJ-nx9T(~3FwG}7OD3rlf?2(z$q)ve)yLUmC) z#0{iZZuqd>;>n!bL;)PVB)&o69QXTb{N1@t2%%@O&^!mAaJ^mGKO$A`WiaF)+E&+x z>|~2yntCF}j%w`aO=xBX5~I8%+qn*FvMk(X7qAZ>nW~i$!Fm$oGZ%+Pt-P*ZZNKeYW&ZNV>OBS@aGNk8*&@wT^_}+mvK<+lRxD-_n?hXcH^0fX^eXe-Qg<^lxygCrtH+C~ zU%JZF|2%f&h%OVsE^KIuhv1seY$7TV6cv|$Y#YpQn}0Ya)~Tc~f`~_qFrU&t_IG{SueL{*y!&saFsn&tRJSSTGn_yV`A#=kViAoraGXagNoMzxg44 z>jP94l^z~>Yl@hZAruoTgm_yYTey_pH;m^RFO6f}w%fr6{#&E;tGZ3eQq~N5r2grp z7;rAx5X_*bcl6XLLuu8gg<=fQj;xYgGevD{g?^JSoE+7!Q^AazR^NVWc+C{w1Xz9a zmi@B^qMb+ke=WSOG4P#+*F}|*+Ae+j>jj;>aaLCk`c>KI+Pk}@+pw6v$S_?CPwyFMY^I5EjTRxRDg*EOiM&x5zGBP&YfbCi}$j-jrL`Ci@nHTYfG z*;5t2CDVFGE#xkoS`+y!T z*uXSvW7vpGFKIPq#TQsko~P*e+c&vgOu#kf+C4h1rfY4?lVd|RY}Cr!Le~@qq4U`B zt=Y+Tv5H^ABODIEE8h~p>Q>trpQ-Rg5%FF-i|LSDidp=Pp)xkXWu(w4zOFh2q z%=pB1voL!#rOA9w-l(nZXI_Y`p7QJCIPsamQ2g8kzU-c6ecF!`Fq{yDgXk|O8;6C3 znSC`3)(SvWHcVSPSh$i4{omc)8eQSpy?RvK5kR0&=#qwGiPJ%>|)dBtvc*fSe>ZjZ@PB@dbCpXTF2}{*E{A1vh4et!|QZweJ&s17= zx*HLV^TH=xh@6mgyZ}PQ_03SvnSLRbW)7-Nqf~rD+r{lU-4wp<1=fz9Z?`Yb>QCMM zqIaSCh3UyEb;mwr*c47-i>`GTqS&Qd+HL)VR&oJ`UO!ATCLbKU-5=~B;F;d5Pv&wj zi2)oOL1XhEAqN93umtL?*|KOE+?^9BGu65t;m_ zbpEOIr+og=KD=Z_%%~=3pYW1)fR9tLjvz@Gt?pvBsD*7#XiEWL0P$wsI<_uiLaB!m z8QYZ(OGjUupgD2kGD0#?2yFg*tF>a6E;|5o7Iw@>hGeVeeYsP&Zmj^FXbV!MVc!%U0o|>p=5!;O_@Fwco{dlZGLD1;qw=>eHkCUkl z6x}?xSoFXe^E6Z9D{j6pLo+jj9z=~O&cLXO6Oy*reAGDl>lnrM1kvB`I6<VKpus$z0puXIU;pZvIrQd3bdlP+eQ)mYxTz$9AME9YFd0!w6 zo6!ZXyOrN)OIN!Y0hbz(0jl4gFm__RAFe6UGjX2EO2Q-{J_pGew~+F6^trW6O(!g} z@JjG!Bxr~`vZq~{+j@qaH^K2b(RpGzw-_W3RNorvSHLOIv(96lrMiRbdS`8WPGh$; zT1IUyYPL{n_~!sKBJfo}fFOI#WD1L(4>^13ytEp<70axqbqF6$-ys|D>mQamhOY<( z8qt-m2d~%GI)^xikmzOO(0W6w0j=jGhF`zlht5!hlIy2Mk0k|3Q(A9hW3#_S^vSXD z0$O5LKszq~)Rld`#+F*=?D7p=G-81vuD|X4C5sGo^FtFji-V@@o%5mcMuBfPB`l5=M4GdK-#%R`Q{rG^h0k+x?{nT&#LY!BvJG5#+ zGbz3(;?ycV#N&YK?R9naeuT?;mF}TAHUd}|<7hdkrooS(ryR4XW{KHV&h!C){ne79 z{|@TLsT9Wd(~D`1bf!<2<;o;1ztgHmhgO<8SJ1^te5d}X;iUXGO(LA5$#RKqMxBy` zMzvGFeg|j@2coVJ+>N*0CnaG3$twT(W%Ol912;J~g>l@CS9qd9!Vz-7QY!Rk2|t?SCVfP`7Wkw4MpLnrAKr^;=z z&n|BLwNXqX=kWDjZ0YOP`1?0=to%XO-#{*lF^=@UZ>3t2KXl4Vhps=s5L5+LAp-2E zOV;rA*Z|~xLk9@-px&J;!JY2G+#zAdd5utA-@{`vSU9qES@6*^4&kRZ>f*)-H(6o0 z5O7fh|G<1uuD$Iln#&POQaVXuG%4dTfR*k2T}?Jk&d-Rw_3u{BPvrxDG-pO8 z=VtSQ`6reR)fDi^&*A6U+_ffrpYqqreF^Cuz7|}v&n_t`sf>Q}PRMjAN#53$e;PUN%x$| zUwSS-GJQ(&c@$_9JUm~{Myr3DYhC;_&t{Broybi6f{kwl#xI+H&h7P(PYuttq`?*j zBn+(E;7~6(R5C3czc8a4#>46 zxk^%95d6{(ieodsOK4;P;sl9@noA z+>)Jy7yf}5D&BtdbuoDU54lp8&(z`1oHb`@xi(iuMy%30AV8Qv%b+AByCd%Qd|olO zm5;s?j6+#Nqbq)!x?}ED0ED+MKbc~mP*b@l*RuD7b$2Mv+HMiupBkyI>p*}l8?6U=C0q(<52U{<2L=3q2T*;-x#0*%3 zgU62T!g(mU&P+24{I)_iqGWzV3FB&@WcC@(3Cpwlf@l3T{NI&D_x6XEi1=2+G!5!1 zG)EyZF@^!|*(WCrtTU&4H!Ve;u85jvSz4}7LaTzOie8}9^*4CB2w4xIlAR!Ghz6)Q zGFkV~=Piyt+OEz4Vmazo%=4waBT7P5-w!fM`)k`D0M96GwOa6>KP`Bt{qp~=-~S5u zJ_>NpD9vo?#5(ih^_8)fKL7q8HBHRxT+4lV9V3n||D*N#@3;1+$=lCgZ5m>fR@eMr z%&_@W{84wm#taRYyJw2~(q}c)^)p{%5cVbRW6m9cw6EjQ15DgFlpi%M_qZFGJowMA zuIo+#wa9hteV3yLCgnowF&SB&-Hd{5f{Ux22)1+iRMHn>d2aCOto%R{mwREOh)#Hk ziTsO5C697|tNwDP`FCsfSAELp%B%OhaI}u3tp9@Vx%6=PWy|c}lONr`FBCCj5Om-j zi#{8j`5(2M{Qwj;y0d1rg?wCGb<05J6{=9u2r>k9POAp+#Pl)4@3q~iVw`9quAs&; z%5LpV`^JIOiYU6&^FA9-Yq_?=RqqsAvi8zD&Z8eirA@mK!{u%%UKha2a8wAHYh99| z+VeO@ym8{KOt>LlKe5o=^2{)_o#J79etC_8_&szuf}6_gw*hm~jOEJ*o@VH`R^O#{ zFE+wp;ryl1=~HuI+APk0r?R_kF$MHt-eBE$r{OC%$r=sY(0)(O`QEds_)X)_o}TO` zwCql3W8!bicpHR8){Xsi?bDR#u&~R$*Fc)0g4Xo)*h+5hO{S5vKX+hamAlnOD>(US zCS97s9{jmh&zJW3Q{vXKzKVNrYJ8ap*i6cY!l-iK ziy6Y8e%5}j9vC{zJckMvTU072<>+ZdDIIq4;#0d94CdIeW5>-~w`8Dc?y+e6VcPwi z5$5(4u4MMGH^>7GfX_+46cRZC2uhuT%-(at>2oYXJPS#pAPBKqY?hGVJ~1AYIvAJjHKfkN%nx$|~*v)lLXwc?F0Lb0RwJ)Fz3dGlsT z!thc4MdiR{UULQO_Iax7aF~YZ*>kR7448i-F7H&SAwyqZgj_CRH``5fVz}h`nz2ilw!H<-SKRp(fuMUFV#l&4OaZz>bMU1$}Nxvq= z2dZuCZuenuZDI~!so%6dQyRZ5$O{>?;$ll6In9(caDQz1i#_go(4&jse_0)29E-h- zV*(lxez^D0*qGFL}nSIE2B?VZo`k1ww-FsiSuRVHan^QHmQaz=FT+jnHdFBEaN zOztl0ohRRCepj{4S#%cBK)^;`AhpeO?f0EmjOnN*-9tgKDo98W3iArx4GC7hkd)&R z(&5>*#gw|klP$4cAa@zT9LFh(jXn-l3)yQFaU^s4vSkC%C*lV^Gh!S#klEI|-XncO z{{RWU$u}`wv}mTD9{5F6<11Vlf+;D)m;o|Cg{-1yTQLT?|a8oUO z=<>P$`aXNzfBgED{qKEv67Avg3A%$?}nrZ&$mi^gFYPxJ%eN%hr&>08v zJ(%CBteooEs70hjko1(DJ$gw#kXu^`j|R#~WhjjnN#TRs*ckYGEGf}Tj`{humkEKt zyl)HZ-A!hb&#eIwCk`0gpe)zyHBQk4iEfAArwI}{HcsBVB+C1mzrO-_pps$^2kGj0 zrehRRo&-(smqh4-vJm0SXq6g$iGsQ3x$c8j_TF!xshVPY(@O3? z?v`%dyJwrc&S>~s-8X2w?SHiZy~=%#^N(u1gOzNJBn&;ylk|#(^|f#`csZ%1x_Wx_ zssWh~aL`4?wEkD%D3mbr<#C3?gvXo#SbcG0)@p=e6H{P8w3hlz+W4^2LkO-pl9`FV z126=Kau?c=HXS=6_R=8-WyCdR>q$D$L9wHvFI;FtQwB?k{QB^-rEcY2*-LkEl>y;{OuRrllGh$}SdM+1lD6%<6W!;=7a&=S z&+0OsJQOLUSEpyFDR__M__u<5j(I%PK(RmL1o~JN=jV45Q6EuDY;A|3A~^f3Vhp*= z>g!(ikO0|Q@=(%Syx~N?be--gFS`3YHxKq)v$*$6A(}L=pOM&np;49PWo5D)k_}#mCK!EOnKR1kS5fJz-Xf0S2NA|(`V2}A8{!+f zj8EWvWdpS_^!Xr!7j#;IbzL+Y=03|>w4mtw+LtM6w4`+Mz9=WIdI?ZZ_(4lrS@dL7 zKp#m=bP}+Jj6^poBat00Bas_2x^?SI$;p|>2_y+@yly^@kpH=pmCvktI&E@t^5%2E zQwlMRI5VgQ#(v&fS83+wMzg&eV-URdGPsMVoYP`|mTm$w%1Ai6gsO(^jq_+#Vn^i* zrOZa@*`@2l*6Ux;@sF@Kk~0MJR@tyk%n0aKu6MA`T&>h7L7th8$rd-j+qmiU&jW>M z2qS?bgx4eyeTTAa8ngl)*@oXS576Id4UN7OJ=#;nUk+TlESTrx9GJAbzw{R@<+TRN8 z`ay-Bb}Ob7HZZ|xw`f_3EEx=1#oBEZ0&?N3=lJ#a`*(Ilr&+%}0HNs1pGKJt7n2G0 z?Av#j9#jAh`Ia|}AqMNb)SR!`%sBLfT=y?gsW*seVFk|d{$IyS!la#b7d}|MA|U8C zXR?f>72J`1^HvLm$=+&aqL$tM=68zSRn5HpK#b#YHxQ|Hp? z6C||QYsf(N(U!f>T72u$UC(&AzR8FzUt12Fu^&|2m$uj2k(-;_%i`_3CXIGmGAM><S-m~34Jr8ceH4<~X1P>l2@q2U%c5GmQzWpJ$mYY|yK2YNLTucVA7 z4IV`g=ftTdVdhvi<`u(BS{k}vNVdt56@hOfF#>(u<&*!8i=o)PJN%qn2cmY2(h)sl zDr*mF*1F$ji6SG>q6C^;Kz6(n0X>4Oh;mVYuT=U&afDnp+_a!O4_PM4xwCn80s#?< z%uA;e+olvGX~!?Qx*hZM%@;3v3Xv5GI^z2UNR4Tw4^Vstl~U!B=2XVzX(Iupz>|dr zQ?1H=9(*n|R2DYT!{d?`e3&k>rIGz6kNtN`xi+cTY}o3iK5J^9+|-beo8Dixh3<&Q zDMWP*$Q)*mSG=R=S8SE6-O2-01FJuMQjqre`U-)VJgex0=iQUL`? zS4dhGVH}S7_(yNODBV*V2&?=X)vhvHY@XrfADL4*X5^q!xX}aD)w@h>{HDYdq!o$D zn+*(FQD!)?`YaNywpvn~a#Jp@$Y>|sM9H%Wne4)K_HcxG4Nycfl1Qgfeew%WzFBz} zeU!pVVr*tsf!GTt*X1s_$W96$?C3rTAag*~pxXGb+G*`nH`Er;>31fmq`ZZazR72z ziypkG;#DrigsRXF#^yQKe|*t`XBIC__OeNmn8AT9`L~ zzAVm67tj=<*GDZYuWoODw_($`yPjme%t#Pk$l^x+@fh3C!b zBZQ;NgRBVoOHHERMdYpF$(PNmk{Vfu%hs$J+W%ZhJC?XUT4Ki+wJ%~O&(L*=sPndjY_b=Emp^*I|C3r!9nWMl{d>F^IJj zyqY~vOkIM(=URu4+8lG@;6%&NMvB@tFS-^uBZPvHjzY)AMumid9q`CJq-Ix<9(F;8 za}(!y4p}%1LA`CGp0%t(tPRs}*B2L;w_pgT8Wwh-M&otq@$sX%%UF;Z9r>~NTK74} zMjUdBb&TMtC?f*mF7H_p%P2aoGRi)nDj!&`mowfqvGuIPA}hXvfd)(PcHHz)NppW7 z0u#^^$wfW+a6U#6x`<;*U{FNwvf%T}eR#X?l$Q4A%IVVh3nUnS=^$0rb}U2a%h+eN zBq6oZH@S!g@)V6T=$=3WD4(RueLh18h^5ZS5|U@9Mxh~^cJsjD&WSVh^>5|mC~{Uk zC(FYy8sLAI*ptyEjP0Mc+2$+h5y~nm7xJrLu%odx-Fon#En*|k``A8u&kHBYZEtXk z%7Fyk7!KfB4y*abe-K)Fj7p1=*Yy<=dQPO?*5j{@+oL{1{yYG7RPs=x)06kota7r1 zpeJ*7w>t1f#J|{8j@kGIZ`SK~?}V8wx5{~tvhtV}ciT|p+$kh5;YHz|NRjbO%LRD9)_Zl{Is8D58a6hkb z$Pga=7fy3*JaXQEcLsWTG%wDR>@OjSl+{5Une@ZxN+9-vx%~j(Xm-G zXATH9im+QijYsjZD6vixs1kN2%MIZf6&RsT{jpY=z2Go82<>Ipm!~6yPqo;9o=SXy zBJ{hWBqk2q{e;hLD~Yk6MqnzT=u~zi3aUb|YaYN{q=_;iaA;A-2o;?p+0f5A7ZR-f z_KWHi_PHyx4SCn;$-~(O9*l(&FTp)2UF_n^yTlcfR0tG1M#{-}xZTbY z7a@AV7Unt5XM$BmL+5_|j4*}yrrEijwy+;(pNUPKr7IJHEZD%zU$kJJ*qhFx}q zR=%8-+4Mv$blue^bE)lxuqfwL3L>C@PFz+158aPLOOF zdEvr`A$AsNTzm0Xkbv%str2^$G#^&pxY3gnQ4G|}Q?oWVH+LBGa*0FXWlZiY?pefE zgoB6$#ntcc{HvVeK;FWCQgEVpJzp!D}+_~p5 z9v-rekD$C*6fkLGlYp-2^Hl3^g&`2jDU zJn?6v)}yQ$z^RHDkhv1Gi4-5+vqLM=(gqSVz|vC}{>`doxYj8b50O;3_A5PiUY!_f zz&jBSp@_Wwr@{sEo#?OsWN6kRXb_{yru4`~Q-HYA?ZD8%gAby4R4BR&)PvW5Dyz2} z(&C*^mb!uoeIb;}JZiiXx&^sGq^nH5aQj+M<#;KtyZhqB z;wd2v=@PSs{rrzR!fP{fg(p|o30;o`1ROF5#W&Pe-otjsk!Du? z*MV$Kz^rPu;(XRsCq)zJ-^$HOGFv4Vz+`1*M!}i)^eIDnqW!LWA(fK0}OasMI zC2heu{m(rzES2k=dFaA!T%MC1sf5fF+;~)1Y2R&7F4>%V=zy3;`={|-*RS=bq5i zzJfD=(iXL#RxkDExiiJJ*5NFb`qfV@6|dvZ)HW%<)A`xylF&zV)2lvPPChydpQ39w z?HFu9C~NZgf8M-1eHb(@StdmV#0iz<_D%Hcz$ zaG8mYZaoVfn5#81Bxk3Eej49^$w6MYpp-4*aSruQq0hNSDwZvl^bqT)VPvF26`vN1Q zPgIZ8FNf&cFefYnF_OH2Y#SeHf&tBr*ha{s2G<=$n!(ZXk`2 zOk1qLw5&XSd^dx3eQZ4^MJ+DOe3RKs;#R$-yWJFNrHZ* znw61+Iyf&oBcmk`Wo|K)YxAmKe2f?{qszXI4^bcdOJ3cRL(rmhx zV{@0wj;e4ED)|;6AYW5nr?SzKCXI%BMvV|F=RDMWzl0LVH(b=LtjolahRt$gNu=(SggbnYs*OYAd``yD+1)3X5L|DS4hfki@dXRA(Vjlek zl;t%S3g$FS$$Ij|B9zT}OhL{{P~mn3TQX$aE1lLlO-#Fq-U z+itjP7&KnK^IkbuSJ&cdUz0u)oh1GXnyvC!qZgOs;LO3nO&BzmxxC=q2^=$S+#M?W ze#cAcX}ELuTV$X4x-2K{7*zH0zyIFF3A-`bzE8*9cV0V9G`Q1p6Mu4(JCt26It?o; z;bm*VO}bz1JjA0k)pd?z5CqxiU{F1yG*}|A``LQQDuz*`_ z4GFzLo1mmW3_!or$YwI$mnWspyLBZbL}E~xoV2g+B=aW+d}9>a6~8%``Sj`2WlshC z(@9Q7@L4pvU4=A*8j8Fa^+iLvSaf3*gnlDLbnh`gUtdY$ITgGGK_JgRu|0SnxKDJ~ zyhA^XcP=kJ;LFnXJK(ob`f#j)j%K;7?OwF4p$Q3x&R6{$8JN8-sbdd|b?tV_@(Va&j8}f6N0Thdj|T>}zS6d)@P?4oNYIFT zf0eb4_=Sd}IJKFdz6FZkh`DWBl95KW%L&83U0{H|?-cz#DJl{kKuQh+QX+EgG=%X35W42t`LMtJ-n~`?7bctlOGF3Fs;HPfgj{OOSyA1?4JTc7<)*%sk!> z>t?hxi!@c89XNAvXzke*rwoVqpftOGY*f&R6Ny#*>z3C4uJG+u-O$2&t9DLq?zuq6 zEe&9puh|U*YDlvpqUqO`T<>YqJFgL|Vp37hoSy8vYu~2vT6n-jx&^WIE~yR+v&M}W z(SbXR3Q8B%Ox2$Gk)|}S<5Hi64AL4t!`)hVT>-p!k)BiVYD+75Ra?8;$qi0Fx*)z1@JaAzQ? zufBgXPo<0GjR497n6cmx%XH41IYX}ZzQYFLgx!uY*?p%r{~l*&Z_nkH**SfiNVNNu zvj6LMak!x8jt{*ksTOj2X}5OOutZfIo%am1oKn_s+%~MKXc~jMw(t4 zt#GBSyu8DvzU9awQT6zks_x|3uF9HJHg)V>0|RCYNh6T997w_1MjrkUQ&s(?%NV>_ z#zf)W{3cV?457wEMYJh3{@y(U;ZkGUWB29UD~OIzp*IkqGrQA(z-+9S5fhw?@Y*8} zxQ$?Q`IJAiAJU05RUSL`u(q*6|0x~L&u=Rs@L5(c zDD5$?Cx~Z!pkj)^x9djO?7{2K%^${Z7re($<>loC z4aEiKzTjxPxcN)j#`vo5A*;J7Dc$+!gDbNkBt8xY1^-7UG~<)~km+r3?FvP+`2mtV zx^6v@@n@6Ty`i+CX4YFx9-IxIo-W&$n3%Yu({#)?bESjq!DE8Bo@MXe8Au1gR}`nW ziHwb1y=_Q6`o-5%Y;Mk{HB)XgefPGh!w3SElN#6t7FiGj)&AiupK!a@y63kkw;lMF z0wDC&Ir@i*lO`!it4NCwa{5*1#qUA{jh1ZS@*g~YJYIEAl-jffwjpz}wzq8GMsmjC zFujA^Tmc!hzZtoI_IYLLKJ8Q#pY`z3 zqrC&#ycM2>D=mAPsdNc#q;sfh>H3$&G^6(I+O-+D<6}{>e@o5t+w|HFWK-Tn*1_Ko z2b>F*LUweTZ)T=1brK8x%m2gPn}_whzU{vsbBHp}gfe7IWhhB9lvyQ2LW4#^gCb>2 zW)YG|X)cjUN@k@pq*R*FqLri~DujNoo3+-no@YPD-p}uk{l`A`&+#4BN}u8Ve&6?X zU)On^=XuRzsJ&SOvyVGT-e3%{#;VGA?VdyB#J`pjL`7YKbGG2mwmq0C@%}0gebWrl zC~vhWSj&O8Raf_u$cgc`XK!{bX^aaB2>+}Wm?gRM`Rw^j60*Qbc}2yHS1zx5-Z*Ks z(6}n;VC%LaWv9=coey+Wx6L7$7WBpsue6$b2%s?T3Fmot2UrJ1t$zr`OXi&O3uR$G zBt*GA=KexbURA*{a*uGC>kmWb;W|29BTMey-PuYZq?zXc1AD8a1-+;Dlq`erd?hF4 z1|e^m@ABo#_h;m0ZHp6E({J#jSy#`F95ZHZ+Nfjc&)qKeTjd*|pQ33E$4No=Vv^U25Pxym1{mkn6_U z6g{tf*3sgkUifp>u!X}OQ2G{X#2B|7J@3b7Z=DUu{b9WQG>AT4MuQuuc?)lE(b(9XVj_9i6}@@ z2G}L)3&zWdG-?C&x)G|XJ_Vc{M^LezQa$3h`vMispP%q3)q#D`r6;YEQzaVkU=73$Vw(-G#oQq{knA)e-yxDOs8Mzo276pUB|^`(m-R`VjFAg z=Pr&84)TPtL1>ysMxz_Co73M zQmnMJw7j5}oy<7qbb9I1rAL4vj=@y02rWqu-e2wJI%Y@m%%If`L34);CgojKo?cvh z#_QXeChdlmSctAFbL2>wCN+?F^oC~OAc>B(wRN%!ZrT1NUEpgBVaK<{n`hp`YM6-Z zT}&0S)~$@o(NDgZeWQEDq$QELBdfsQ9-dg)2NKP$w+^dTUf+DQz^Z+K%xwFH4xe;&64Akx}n171y4W#Q)6&aBuqIJgu<0t=H^Q0aPpWbH4s1e-9WiV zBywOqyDW2$WmP;6s;j0-nC}}cTuApw_ z{f{S3bkF9Q>cNi|P?31}1<TcG?5@SI->@Zuu7n{Jo6tm<~_mclXZRxj_xwHg1IUhKXl9 zcM>eR5$K!gbw<|X{q)(G&WXGKDPZ1h~m@s z;`wwL3!ehaoi06Y^=&zAFv~Y9XYJU6_53j7CH6yi9U*%?20pZZ=8>dp*Su_nJni_a z`Gq$&2IPfgOPewlXk zDs>PX7Nwkf8&*aS+bf$4Z^n)-`ubh8mJhvBZD~<>S$Fr+!qtI49?wxX6k}YUCd4Vn zBqp9>mC&Ji?q>I3Kw+YXxQy&ss>40C(NX>p+s)q3d+-H|LO6&SZ? zPiya^N3}W*m@;y9sN+#8!8ywEiG7xzWq&#*WNlhds5X=4UQVgP6&$~hc$ zSLgh~Bha*tP$@Wm+uhoK&kSeli+Op5M_+9N@pqcS?wz4|dcK>|=R@ugS(|&1yskVx zKlJc<|3h)6AIO|sZ)Cfvs;G?pxU?bV8;3yPp>(jAONTVM&_BQ*MMZNdD0%Shl$7zA zY{;26u#~Ii5b(;F*4WEh$G&E^OZI##Em?6q>M&|6>{xA}%OTb?Q&xL;Uk^jSf+{K@X>_&N3|F=^F|Ar=;5D$TtxCAu19{F7p>&SaoJFzy36@=mW9A(ui zqdIqRS&{t%9Y{QG-MTfpQEAmJNst}m*Vm3sac}y$^om6X!DPhl=5}FWZ>UfsPg!CP zdh*A&!2!1=$-msadYEi|I;?1l+c&}fa4z-#2p_Cx)nO&km>jvZ;>Vk7L`4oZ8+f}4$xeoPs2xQj4Ygg4bpa^l2^h2aKoOOhwhl&`aWa!ykQ99L?G z2M9`m@aO0ivIYMt(x04oT%F7nbOOmu6?7I>$!b~_w#JBTUbvL^+gbF~ zBRHupV)~#?KKOn$lK}OA4eYnAi1qbdmi%*3ljD*D)SM~>jE!uc%7-#LjuE?iWx_$ed z)6UoO~UMQL8mL)%Ja+XcX{zQ$oljGbdt{Mj)rOhul{9KV`6PqlA zF~pyOS{Njh!BUWLo^FYmJ49LSiRQG(&BaG%2Sbt_t0?EZM6{5pY3#|2NPu4CUr%nH zZ_A-}EKSe8;dgaEAU39{4_`O%n;o}bDGAtJ*4;zMoi9q#vSwFRgeKDTU$ zh)@JS3(K{J@h43Q(fZS8M0^zMf&n0YX4$2#==DEP079X_)Q!-LALPLlmO#Y0ICS~| zP(KN*gfzA00%H-5cMtz0sX?zDyU6_0ENnsc0{hB=3D6`Hf*#=rg#1SW2u35KO_!*6 z7p8X{LA@e`SkxjA1}+-!G>W$HUl*qxLkk^iC)u*6#l>6m1LH>nqi~`>c=+%hMCPUc zf(V3iklbcwnR7+9Lf0NWgzt-#l$3{2bSg=_EQ(5S0%?eml*Ki%=R_IVuHBB^yIa9< z{zwaFoaVt!#Ro^h3tca4kuV0l&&>>YDmI-5@+E;NqNQ4z>|}S6px*`>LoXEVoy=N&kpA0S_rHkh+&OD4#FvEPGnTnJ#U3M_@A}7 zw&Da2Ks*BU}c6)l7vO1;~S3_g|{;Hsk<3%3c;1A3zwyFX;s9 zT}Qhr9wdj@j1HYysP?Aj=DQ)DPoFjGZf0g=a>;g1YhjKB04B#8MqRYRwj6X=tBp2B zxGe;k<=(yekdPtMr%&Je9zaW|A0c0?0a*I-vgyZ5r%z|8mLzht4g{eeJQFLz4^CB$ zpDS8$f*34W@|x;mq_CBR*&g|z9wWZy645E)C>xo=%|*j@B;D+N<^YO)u_veg~P8K5jE-2SAWLE%2a>>TO+m^%9Q4g1#g1AfokWja#G{En2kNUY&ANatp-0U`cby zCAhOk{pF-CB_yPh{9#moH+y|a(r$)SXe;{AJg+@_c;^&%o}d@G^@+2`kGGWcTdBN9 z_($WaRynp)%VtpN%=7cX#7;%aNrgp3j8o*^u3$661{r&~pM-*^&bFdQ_rjX`)Dz{T z)+leA`^?_W&EixlCDBU-@R77IG3oioHff{4as>p84*ufSKYS?N^u1iO#$~`^!O!}? zqG0hyeSOmlukYCgJ>?4nY?f^?>`}N!{K@!9TfdBD zn*cs3p={lXT?HOt&#pA)-~72-$Zr*W*1)$z;W*RQb|edT9ZKeW^Sn;}R=xMc?c<`Z zGa%;u{&enoAI9fgzT62dfhSNA>l}=X?_!mez?0(Rc7O_j9`R{Q)0FQ2&q1!3xx;qJ z3TtZi+-mcmv<-z2=;5AsG9+Q3gPy!Ez|=44BjU-x?-y5GgHfkRkIbWD97j#m&xu?m zUtSoD?leC9S?v?MS4T&R1VRay*hOtz*1Be3bF&{HvY7TT9uh?#_idX zYb!NS&|BGH%O;nMf6?OLgKl)PcM%fpKlYGt7d zhfOc**17XEouQwGWZS_SdXV6_X_M)vSL;rS1E76+XI> z2M`lQeV9($x}b3dER448+jmK6zs$(UnoV zr4HlwCj%n)J@q|Q&O`DW$&K;n#f$(~|Rf-SsL8ByVi>i|B zilmT`J^o8(&6*Vpg^UFCNj7#I1qlwCXxIBQ4NC#irA@pA~AuhwC~#L7?WO znPE0A78-}sS-?N_gWWz%T=RBi#||CL%Zs6H8GG_nMvkA&S!MIdy6LSG9P&5xp<1@y zkvo3Ege!74tM1R6wCT?SVQ!JeODgk@VFt1@tl#{~c3QGHpSHbHgp_)YKqK;pM!OF% zh}!>Hr9(+&azerhpKA$*PhV_{J73pAV`i0HWnrBe=#2V0-?=lRqN9C{Y2I83D)+LM zsBGK$-y>+>+f!x`f3kkGA`PgX6E$l_dwRz%kinNg?3!?qd99k{?IhfIG()k zD_HN(%yYjW6*-C~5Z-OTC5GD<3Jp+mkL!5Rj~wgoWZr;TLZ>ya2G+wQs$9H~j%dGj z)lhI&9h4L<#O1@>NhK_cxS&2cfnyY0qf^W6i%(HTYIs2Vm@%b=9A{JW8M7)8$UU)b@ReWzWL$elX{2U;VMOXCLSF zYPZp9Fa8p<-;fcmY9`mEOP3i5T#al&p~#^@WFThAQK`OxE;&%}dl1~qTgRVHiClF4 z==dASgA!|A-ZWX?Z`2s$+y1Q|Unu*4O8LKu1 zsv(oPiN4Q6e-Om9J)1>2*63@STf9{pwCf1wmd*Qpj0dD(s@}fG`;q)H6VWVr%H+py z+quAgeqV?y{Sc5qz=2w3g>`c1{CpE^h?aK#3;%DRJF!EooPTC*x@Z`=Oi%z%jjB3u z`Rdi77e*zjrTiST^7@1Kajml2C?qnid3Lw`r}Po#il_bj+FC{WRa^^QILZv`yj^itGJrZyM_frtQgeFpv{3`!qOV)4 z3RR~Ss_de`=q!OKvhJfEN-Co124G}w!Bz&5E?r`Cq$!b!gJ9zxU=#m3N zd$t>GXY0~CvPG}J5j(c5J>5a$Z_MpTLNkDQm{KYv5&Ye2VL5%jO;{ zZf^6J9o1~vmbeK|-(3zm*r~*`r`zgh{eR4p8b}Q;Z#m08RAy9m{h-jsTgry^`Iaj0 z2hKUXGw$G2&Hx!3+lA*GXSJjyeR-b&Gy?TJ>d!d0p=YMdElzUWk9YoME#=gWjrDevKzF7eJoFE^ z(zWVG05ItBI*RU^F1%_S1K#W&Ys3Jw5g+4 zUVmQQqrH2}&({qM4V@wf$f*BUFwI~op%^f&YI9sdLib#&IJdA-@N#w-btPX$9 zC@S1j7#*kY*{<4PS3`Y$UZ$s0|J-NK#wryad9a{W(Lbw+`YGzlY(Kmnyr~nMYL-Q8 zw=Im*J-*V&NU?Kq_~=zuR^bf~gM$3SW#_2RjjI`0c)1pZ?f!&dlPA@PbA9`@t==KGH~T=YzK;5i9Rou;USB481&gb~4o0(#&+Jz8(`#-vt#mke9j>>KQ&7K_R#bTXLwcDT6TN`7+c&HG z%~@AhhHS_gChTcWMUTdO0q(+d+Kqngw<0@nbrMA^t7cKzrU?!gta`42aI%zs6871q zv~a|vvYk73wjf?n$L3bh3>#3|wy!dkCwZ2)|y~R)u8u!F$>Hd>@l8)hs*_Dr3 z)>qaP3z0C(YdF`;tQcOk+ScU|#xHZ!vP!Z!*UPV%#G17Q7E66^S=_#AX>)K9oA2Q* zolDw8)z4WC=4qn?Le!`D#lpK6P^Xbb@Kt95EVq~4l`vIr&)Co7=+Y>*OU>y9xiMhj zFySx_qfPKlBmsKivORhX?c6}WB>d_Ryd&DjwVI)|ToNGwBZ=9#UV?|u;BA~NcG%G| z@JL8~R1&znW1-B-IMpu_5t}sRDq?{yd^CR1nEF0G*AFvil=P+IUV3_ZzK|Tz^kxM7 zxt>aES^{1kLVzHq13-E>g%PvN*hi)IN%w?n6Lqk}BRE(AriO5h!f->Qh%-}p;1~2q zW>s2ZP=e5&15^nb3KP;6M&^Eb8+3RTt#13KxP$YGt`}NfEqOZrR7bmJ+Z@kZak5!d zEi94T*d>cB(phg%!^~Ny_Y4#qqW_L3)4IhP?Kul`?P})8cV6^$p)ri4ii%+lcz8z{ zH-$ANl`mM*$MVSli9ijrx+kuf@Up%Z@J&p+lLcfGdNNp;&*`K{W_z~ zz8zlm)Tj3SzK#x89SjeBzAgsv&^hlOy`{`&iS!HSz8%vh{xsOJWtKos&o7i?d;te( z=eE~LmBuP5J&jy34EgeHDhS+76y9x^H+#10t8Fi@yL7=kS@R<&tamCjqPkr|Rf9VW~e zgn%5;84dx6VyDt3`P4!}T~{;Q}xrCgzrvx9;GfL*3&mDlFHalVG+2lE?*nr`W%eWYyoFSS2M!iHXtnWBrh> zl+x*(>GNp73=j#5(;Z}ExM_>|xL?R-FH;`Cvgn1pf9|EcKLI(WA*>SmL>MqTgH4j1 zI*|Cel}(!!2Dzb!XfRDCEvYez%bURy(9q~d(sznkN@Bi@n%{;1yjb2>dOc1=+eW}u z!Y2|mXlk^faC!$;yMv!iYogNOnCThK%h>2`)+-r5y9a|AQ6tsI6xfXxgsff>z1)% z$r4Y<&Cn}e=KTDt%oYE)Y5jNS!pf$0`I5013=T<{psG4>(4c8%q0lZFyBtJEkW>?2 zshXw)zX|?-sQypEsT1=RVwnNX;eY8fIt#2br_n?TPdMZ6zk%7NbZ}*{DVsHW_P*Os z{{Xk*cHO42cTh38aUS*+7-EPFzPUuGZCMSz{cL8;*nPVSQ0y1MwX2)g&HoHc6?9Fp z%o#3xCc+IeLf)qIc$>dis33{6b3%8vQBSgvW(&4LB9XV6atL~2=EWEqT}sQfWEU=8 zY;JHP_1*BS?5%O3zDmEIf3F=c+#8x}j6ux}2LuT(kLwG3OqVB(uk8CT=^tJl0iv}A z924YrD$u*Ycl`YiVp2Nyv`Sl+Z|keTQGJE$oJj5e%*0b?$`;?ZibzMsPMDC!(EwsA zjO5ta6?L-EPh}N-+JP7gtj%xzjkbhi;fiIs_UARMGP=P@*fD*O7UtCwAzrp@d?Rhw zE#%s@Nx(=*2k*>W0R|$xx`6ToK83@!NK3@Me)Q;(=rDjfVre~4>W)Ur($6(72jG!( z2dVm4WNs&_QJ6tL^c}U<+`LrqwSelPqf;t>kU9O19S|j}13uXcHEkLmSI_%C11Fgd zK@V^XHvFSqfT`0D4AAV4S(?btDDj2gjpw5Q^IaIvaq3co@Kt$q%`Rf%-&}wRFU@uq z9rzmYO=#%)tiRq2*q5r|&b@mriC?SqGxW}Gsh$L4x=PF~5t{`cJ%EHEC$_=bomvz( z8qmw$$te}efe_6)edmA%3Rvy(__S(!(ky{fu{&zcJJcKk$2Mieogj_jR`4-nM9eG7 zNiEO@zG=}x^@giAe{>K`PJY5Vh5gBx)1hkPGk8+MF%QlA?VOx0B!LjGQ<+u-^~231 zWQUuWJ%S!qJS&0OZ`yPhenzK0ecF@%V39JqjB%s%-8is4sUB|OA4Vw)sj`K`pC0EB zuF3(WmX)}yX5)o;ULyf-g+`Qn}oYc(B{UwL# zb*0fMT)1e_cFYj&78m!Wmv^o5`lK^yXR8ktT1)dv*%_-tkVo&8$U#xJutG^Vn3dU5 z(wKrtVc@V_6!y`>YMtlJ>+qHR_5h9y){E_Ezzl?nCr>dak>i$`7J=IYE*$oGD}{l@ z(Hj*1!|wrud|hN>vi`%Dca@dPb~#qP#I;VI<9g!=R7Wy#efgL*qnz z6KJ^JIJRzlo!X(f$Ha*f#}0UVL$Kj~b9g;JrRg)vjOW%?B6OelU3HIzDzvCECok^= zf$z$ASGs@LVLY?Rv~HqxIHM6G$+eYnMYa7tGB&OvekZMUZOIW9@zE+SWqJa1k3kr0 zXk+c6!!j3)g9jKsrGtHY8AT6)$JJ5-%}!yLY@XpEFRzMcX-ME8sWD?VfBD*|kkw() z{$QCfiD#I<1F{2B&p)pTR&$R*XV3Cv5JwTO1+&h~57*snEawO*-h6WlQ=RrqmKrM2 z5%dcU06>Wxu3sZXhtdpYK3tUq;f8ed;J_c-Wv4+Pm6H5I@aU{Rubb@-$4{Pn8&}0? z^ng&3ZVLsfP@{kL3=IW&`CX?t7(RFS3x`T-s7SFK|4c?8R4xJ`fM{-;--aT4Qs<4D zH?&=(tgNlq+*VU>|M>$ta*-n3g4n=Z5eYaA5q=fjEB2h&NU*UQZn>?qv%AlQklcyR z%-%mk8*wdQJg6M<+or?N>h@G^-}jt#LdA&RaW9F+RydHgH1rjgXMm6V|`D zM`cy$UwI=EcZpJ1OFIDHxb&U)pme4Xhxc)xMB*}2l}0z1K_L5kC6pg7W7P=zwdp}t z@P0U-v)A3qsTU1B?3-Hg4N9?2s>x2EQ7t6-Su}O$+XHJ~Tm^(Qu)Idj_+t zG1osdH(I`2s8V<(Ji^lLZ5E{TfzrEy(^|;p$J{cXrJ|w|fLfhApjt)8hV4W?)|xjF zLhgp!Hg3EFLZ^Ln$j@`AH=G%eyX|M~$(zL|rv@FrNS3*Ju8Y%!7C(+=eX8YrpE~-a zv)_QekAvZ84f4-FA zV}z&}p>4n@#Rl4=%_J-ZkyaH9UH;DuA2f4i=w)~fCL^s?b}wj;I%(#oo$c5iT+4<(|GeCH{hcm3Ypq5Y_ZgsT~#d}~ZsJ(82RT>Tnophz{6MWgQB zJL}Jt`7)wx#C~%B{yA3#l*-p_@fX9q87D;Qj#(O{PYq{GU@%X?NcuuZh*QtFG+8P= z=ne>at2G)wt_@%eFeSW{wDdhfPjXSezgO0;P*Wl`AnAcXJH^1yf7ldU-p|j2;(dL4 zwbXhQRP?X7bhq?YqK=HX_byQgodhGEp1EeDry&Y4Z96+V=j7Ys?f(9d@_`ordw}-nR3E#*)lJf zETZAbg`vLCM)^d)hY1}Q$}<54ls3N6;pWoW#1raRbbCq;?9?O@80j=``H!Wot;*&V z{|$S2&9nUc%CBcmp7i8|Ges2HlTomOJWc_VGMTbrX)j;_kpr-&@~(^+K3ofx4w3=B zsuGei;rkv9*dh4X7!RHuLs0wB(BQdZH2+DX$!GuLo8zLNq$_Oi-Fo4>V2qO%Y=>fx zV|ov+MR{ree{Pj{9{uNkk@_XS*(K`omRc+fbuob))%k6*2q;5sBs6W?2>J*yP$EJ2 z&hb5y39%eoBKMX|WnV$TL=($kQ#-p+BywVd!Mv3oFoizq`&&%&+sivCe>~$2#~(5h zNA)dI0pYT0XxN=<8$dveLE85oik;eIIG4kOg`_Ccaaq{GBxxv&rBJC+7MV`DNi#X@ z;>A7S6_BbfZFoJ?wj`+=Fv4zFqk&(i!gs(6t<)h*<&{}zWMn<|rEnNvTd~3>5_nKrFIu*&;QSac{#yVR zM^B&L2f1Ey3m>&Mk}vq0Y=CnmxkVvN%hZdfk5iETm~%9QX=C-?At%Z=bopP%Q^mD0 zwW*Y_IH-}E0$ebdFTiw8a=+~`D)_cC65`5jmO(QK*n_Z15D8lE-tFSN8js_{7Lb(G z8{BHfx^<%gu@)H^+{<{wN!#y)7E6O3FDc7((NO2a7oMMFs2&MNKP*qM-Ht;d;3|{< zROke^;4}x===UeU$iFsp>CX1mtl3XeN?6*BcfAfxM40<@aclMpin_#uO!76LLTd@f zvU0O;G~>sg8dFlu+~8GKPc)k*cM0!+epb4>&ND=PmR%B)GZQb<%^b2S!hd`iZ33w}swvf(@&uwRp zWkKs7c%RII7g4Y=W@QRku@^M+(F2Z!hYuIAhTS9#9Le+%x$UC4-sMvKkA!A*s@$2vsr_E&R55vuQcI8U9p;16q zl86#YFm+8RX9d-Wd6&J5oxoir9>kPIu6laeEgBk0fhTT!BSkH~0c+mze{5sg0(10c zVYm0-Ck86rMqN!v7^fK>6@@<0BOpMIXenS~iXMuKH97AVvd9Xnm6+7io}+x#rpqr! zIlS{@4=qyj|8y4ep(clQYp>}WmzWgx6!t2+I9G{GS!H%*8z%`jpTR7Yc2t{96ejuOS0TQH$S4sl+RWYfnEa4><1B{^j-~G z<6PCg-*9(~ojO+Gn%W9D2(}r|PTUx13*#uuT1Z?28~z_Kn)WN*>K0oFSH+BS-?eAA zlS2`GH^4MGu~J`uC%vY@m>Heg*H>y0$F7141}GL1B(7R9-J zzwl&kXVHahGo?-+Ae<^YFUF*4YQv`hC1vHEa#C9z#4;3Xv;4A$dy7o5>pB5x+~-(wTY4QFg^9oDBXxD%9{EjS_$TFcvCo+Q7L}OyWGt4A+zTkH z?LbKa7qc1q%Rs5-PXOo z){Jf(c~nP8D#hVT!b^I7j~FIhI7C6=_LC($n`;@UtM0!djW~^-UL%;Rqvne$u6^;`nHhsW7{hK#rr4aLl5}_+`s> zb)En1apMiPRRt3x`?!D2G+Ah9D6W7Kc@U3VjJIVJ_<^Rc=b9=uUfVeF%%T5Qq&JA% zy*KpgyBz)`nId`KzrRa?P)EblgDkVkiehysZ48mY!HEK-pe?BtZm@<-%=N}!ydkoj&g4bJ>(WKlKbA z{-15v7bj}5Eb8jFi~*POl*rLtzJS15cAAd1b_*drk~~1SR9$pq;+ZsmJYFEMOZEbh zpnA4-VP8B%x!^@5dfAcn@xBQJEB$?3WnU;cj+Nan$Hyy3_7ZkBI6CqVq?662GVA9_ z0=%D*3);7D|3^hd`UyH8Z3pgRvBauK?lDk4F)7KL2E)#@t1MQFNWJjAP)(anWm%#V zIrLy{k~<1E0Gy@1B#~FX!y;U|t=;Y&{n|)2!e6yuT>R}?edK$!!tMoS-ij4-B}a(+ zDYZdGIP4#_tNioN)OTf&=`pylwWusD)uMEqvfRk%g=gf>-yzKN?lpJ&+d>RH(LZoh znADD2(-jn(=jP`-U)}HeNB+6(-0!28FoAyZlbZe*Cw8^d(Yr2Y0XvdCJ=;{i`i7{~ z_sASkzXAY(D;y(`!c!p;jq3OvY)eXMVfj{OXS)Vok1N25TihOVT;)@&+1R=y>0 zB%~y(%lMQh8VxI) zlh>%wxg}m;q}q}|zi`QtHULC?qd}UQ=N?UXQfgm4fHySP@&nP|54S9cq?f}$A`ujH zOTV-4{?0*7AV(z4Y3(<<(9>nIctwaor^_AY2@;So6pm^{2f_ z{U?$YmMDiW>TihaNBeawLE5=uzmI1ZY|`OCw2=6j3R15Gc0q8D4@T+%wqV`K zH!Aar1SFN!{dIHU%+)NqV_T5`4wTw~AIz_8fP3-%=wEwDWJJ#cMo8PVQC??dMLE>E zu;m7Apppe+qW@FVxsR5Ngg#8`PfA@^!0qlz32r>`bQ8W2Fa9G*l_0zjM}$`+AkVX+ zpGa<7NxC0b9XGBs?cO$p&DW`Opd&k7iq}jLA~=cUf?kF3SLqgIQ)hkG$2CDlg63%F ziqUH;*o4$da|8Yz1$-V|;HK3R+A1BI+TDF#DKZ z!99^Ft`S6dYN@}7@Xz-)Qq+l7ASC!fjVQtw#}yYAW_*u}jb$CTU=GNt)vLFY{z1=y z$>udLQoEO$gJp7BBIDpi;ZBvD7-|}%{}Q>OS2lf^e;TN)8m-&E3_pI|>(CB#SR}V7 z7H3olm4KI5TO?za_Q`-@%_J6&&v;>WG>E*1-0nHKgK^`uSsC;&qqUPMIB!$X(egof zDI7;gbPoW_Nj%QJO|f{?d&RYlyGP+A*Oe_s2oTPOJn!>{k)_Nfq95c_Fk{xN{k1M2 zn5*pU4pRE|)!cR_I3GY3m=xW4_k&S4`=Im~cr5)ArkpgG#e^2BRvME>9#G46gcI$o z+GYxYXDp?{i@GK1hX?cE<#ss;83!R*=68kgYj>R)e`2)pK2ny!bjW!ce_7S=6h!Y3 zDoD>_L5KcA-%zAurzg14vmtFs9AQFHx@z6JLjr0DdMca->APn8bzcjGg%u@caC2k{ zJ+IiE%tn$(-~p#xHzAuASr=9<)JqZ%*ou->&HPMFO;@j5*AYL(TJoxbWNjc4K-JAaXcIez8+VthSk6y7Cv^aLs^Ovrbqj)y) zelHO#DKW%NAPK0#wTYrL5BEPv=UBk1tfT7KC)^6wdMdJ>jOmR+!Q#3@y)eY_Yt#D@ zm#y>ie>Qz|?tJC!u-s!WV(!V>b#2(Q$I`Wv{v*8^9daWK7Cnnn?WSNI@o|a%oNlV| zT~#;52V2Y=97JhK61#W;^h@nM(&-KZ)+RK?Djq(3IN$WJ zMhKjN;dG@rLkxmv`xu1G?bU6#-o4%%Ti-HSaAWJ&>c%&z;_nbgsdD=|^qu(OM!lnE z*<=6ZG_R*29xsi6}^yvsx9S=%Mj7gE_r~8o=MQD3=WHiIEcX`oRiVx$n)Qh}k zjWJHT0LKMO%%xtR@bBwoI!^v4jfFsFNk*8Zdyk&en>n7-m>sbYxF#MO;<876ODKs> zk6pckqBvrp_8v>zyhm5G|B}3^u3xqL^!YXR&ho{C>S)w(Kde4B!|fr}z73Z$?&yT| zD}9FR|9L3gNw@ddRUYr1l3RD^eF1AzgKmlj3y%((5l0xwy=c5VH)3(4{u(D|=OyXh z3X89A{%Cvb1;kcGG~5Zi*p;+sap3f}p~=s%0T`E(c>@z$#l;cF=hS3v{dm8};;ZY7 zQDw}ht*6feIIiiwtwTRG1IjT>ds8yMHUDrESSgAR7XxdlbMk?ckDosM&Y&DgfA2{f zFW^cl#t)`^`D4FPqWyV&f5*za;grIx>G%wU#4&86h^=2a{c5vqVp2lb*uwS?YH7M` zCPnh%a6JVOJ@FD@q8@L{q}Pb0mjmUkKD@du9OJMeWT?itl8fvPYwn<;e#ikRkOt?c zwIT;tK)C9)rlX9^65ttwBnK;=P#9rIjSOnf`2474rd2Hj1&{f6YMA=$afO?(ghO@l zjjb*&uC5WdWq!laHmVF&51*E>r+)T;OuB%%%(EveNT;1gWgH@?+M)IEt5ums)~ZdL zOzy_K(<)CVyxbZDtWW{+mFeIvkyH`QV{FACf zMok6xOJcPWK~semjCs2Mzi=+|+BEoL?Gu|vj=%_dVJkjVOC-e|I`hB$`Tl59=jsl9#;dT&csr~s%oH~EgBf8i@5`R`BV)xV z5WnNt&Ufj1sth@{t5Ln?`murGTRFXKyHqpccmfq6uf-wOM&1{~*3vrR6ejOW4!t(n zPQ0Nbvh@-g@h>;24{6J|6b?4mVEV{KmcG@Z-b`nFP1W4#~JZd=8- zS5UZ*toF9fIM%?WJjbn*J|gB>Y7Sa*x$_^a*n%O&3cj3qkuqsLx>1cYNrdT3y(`;$ zg6!B7;m&U@f7HH>M;niU=D#l1Lq43Fli@cZMn0TjZ7ka)q*dK;{nsr-F?M`>vrRa< zDCn|rSvr35R=@|o36)C)55}+nQ29I>C$nC2EG@%S=PstpC$Edb;;!-fW3U0aIv+MZ zD`}4R@exZ#&%+6ap2!l+M$Wv0V^w0MXOZ?{F^K*`E|mIASO~fyFN-h;_dY)ULOy-t zVZj|T2kYV(nGJ?$ex=~do?EU=yiuhK!$_$`(5jz|uLr$~B>or<;5a-fPg1Pojk;{O zE@|blc3p?9vRnSm>qaw)`^5u0$21q$?Qt`>sQgSA;Q+Kx1OP?GS+LHI%IAjbr-h## zykRSjjPbSw*;WOtp054-k46tg2$(o(1S=|J1AMSB?pNNY=B?U2c=BWcRZ(K49ii(a za@t6&{=$jf)V7O=qudtN5!?M&?rzuZ%-QnvW3w;?;Kz{;fP6lqmKy@tUx!?v$~HyN zXaly0<^2 zhe`@Vh8Q_#%@Llb&S>y>c@GFKPOHI7=U zq?;`ahRe##ea@*l&L;nIKGV04z5R3Pt5|e^@Zj=+Q$# zS#O@S4(CF7UCbq%6-_R$x$kzkk$^AOD;`Sm^u{U=HB$E4K_7=u&Hm}y`5t25448(YOb%)5;!lZ2NwS!_(EyY?0ML?a5ouBDjKh6VnAIwDR zW#ZdQ5;)a&*#*sFgi_<8_P0WnUJ9{TsylFY$BheA*!5ga-pql z6j!!5U}`frya1s~ik%XC#Z019|muH8mp~3S%=w0)cgz7023q=e(Eu z3ELU#t};q`E)C**CNsnUEZcAp&aY$Po~JY`&guC@;*os!2>nj}$juUY0m)3Hd(%&G z{`OX}41h9Z0}^1J8{yM?yzQw9GUMDF^2!L-=EQ@3FM?*t;Hy-3b`37M2dE-cfo?EL z5P_xlkHt|=l1a`y`vpZYaRbc(N5imo4RUva`5a@1;-v?)r52DTAjoZc1usPM64g5nPk}9*c)%K7~1X= zbNj&*r*~!6LA6WIo?*g|)cHz}5r%Ww4oqP@rh*xRuJb1~jHMFs7IIb4pc(s?YCo1p zeokJO+VfMuPI2`TiOflQnKrTW(=G%qtH_N!DQFM}dnwPPt~<$mH2AoI6tgzS27aZt zxslEmkW{TO?CBXTrER&b)b<&vP>9|H7{cMRg{*2$KhJq4(*@fP~lDEsOgTo%nuEXAv?DZFX9aA>O<|;NJ1MCw&XZq9USX{He$|#V zAfJ>9VRfmDn$)j5^5JEs#g%1ULV?fTv7ALVN%bWjGf%rl%QK9R89rsoN*=o)xcNxoOvd#e9>bN*-akqs8VmY(>5eg5C! zoCL7>UzaC--t4c0g?~tT*!3T8H1$ru-#^8mLhko+=HETqANf@eh`+kk z>i@j`|G7E87Rmp|SB_l%&W^7*&NgVni&;$Cx|mdh5>Vsqk?Kf+=rOxVku+&znQPce z#a~w}k$fp~8CGr22(*PnDDunCbFj z=2YVcKN}lG8XPC-1}u&>(-rsub5Sl5&zg?+{3%T*_Hk_;>|Xup)9>x<_%s-HO6Y7K zMf0R6A_UM}4iuen##10u^F6Idlp7{xH03}+ur(P#%y2`s!EfniQQez`1^%-!xJM)<6ur-LFVz-aH@qgFTf7-Hjb*o?(_;O}^yg?Ood@ zL2j)mR~Iv!70q~F0#u;oe3{GKp=i!b8?x;NjYFE+2)~uxMqyHV_#`W0qa$BcllO#UlI;Ar;o4#)c?@s-^(S$O%#1q%aU?7=A=S6`&qpJ4zct)!iU!EAB+;2PJ8_OU zVM$~+8szsp7BtXiqu!WMJ32G-xdZQB-n=Q27N4tDIWsZoqq;f`!7m(+O@>tpO@?d9 zYnx1WtKWZ>QT4!U?OB(ZPbPmlpkKhH%j*jJNV1{Q*c&zG#!KEGK2yIubbdc>1nG>t z_8no_Ax={!mt7#wF41pn2*i@unvz<+f@9+}G#J_<&p;DGU4_qINM&;Er(-_U;^C}* z*4fF3B{9`;?}5yY%cn40X@1$HuTjPOH5-xlh(8`TLp;~$_zJO|(8T-Lo-`|Q+k(}{ z$@+M75~L_P?12cq;MpN}H=`l50eMw4PKs;SP4R-rHGt0e%YDpWigLx9LXQR$r@dHq zRxG=M`V^olm{aD7pNj6@)dr$FDi3b=LXjrVS#piRNZ+Za#Lxnm!6)Ls!|h?cUSr0= z;;@AS1+LO-k2P89Vc}3s_M{^~BA!HbQimnNeuqmON=?>bz?8{p9|b@tM8!>w?oA8G zsHbEka|kY zx|c)Q?}ogO3e>AmS4em~g0m#aK6YD|ZFql}R=$xraVTC;imxRnM{=)>Xw09Uu>PVj zFpq8oV+n^U%TiwgX!e;RYMFqtLP=?dPoBJDF?cL*?*I@e{X>0^$1)uE^j#>ONfQNL zW@J(fTXGJyrKrBSlXXmbq9#zwwDVK7Il&wd|BP+;69J9guh96oleD?##V%$><* zNWSJVu94X_JCB-CJ^KdL@n9^dDH9xFzSzk3N-kMPgUpm=cR+q{It`&GzYz+nyeQwJ zX4JlG#S4HG7mHLF_yhEIO?)mRfnHZt*~$CT$Xr|4K%4u3e9lexrnx7FDk%6uqCEwc zz|8Znj2k>4FF-0bkrnmML3w3zTpNG(7)TQ{p+eZhe*q`hdfR}93>tLjx$XGD>G*!0 z1{fZk&Sa|F7eYe*4C}DOswg3vD*;dODU-he%se85ck%<-IR%7s3Z5Fj4ivPnXx&vm zz*@6j+60$_@;R~Qb8;BqIyjxTwmBEWqILBrT-y=nM1{Xr-WOs8P}|L>pUHJb&b$R5 zZ&V2&wzlBv>pH}SN%}5i!w13C=ryIj`9R}k%EyL=33wCEw*y2h(HTeJ+>j9Shy~7N ziuJNF?dNlb5-O#hVr3Z>_3qulMum$Sy~xhGLkg)MY>iYDRm3ctgTmpY240o-6C zV9bM6^*@enGogscah=zrgbdKS&!--Z zf3Ja<((|(u!54~W-_sq3Bj|&VNt{PlyaTRk3K(myQSE&1NsjN1$G?DNf2MP_02;l; zRFCKjg)n6;6gsfgtSR@ST1F1;bPBXhVJ*0(^1X7MZGSrW(Lg&u@pf&)>phFR%gU}| znQ$4v^yWIRKs<_c#xcNX>=5H|W8G?Fc+NAuzd|M3_-xMzhQ1XKA6{u6`em+B;OF{$ zTWAe4y_eA`SnPz0?ucHeeR-y4I*RJvcPSA!xUK~4i=59|K5B+bx%B}h3(8<#aeecK zJx;N65{C{Q+K06qVHj=gGpTb4BLJ0#RLwbg=6cMyqM>{v$HMg$4dxCG4ktGFChH^; zLU>-plB@5oL$2^0Qp}vbD78Zk&%pbmVkxap<8WvDdR*!$6wvo{#sMcKWF$G)tdsWz zwE!#Z#W>HSW}?ZLyFtFr{cBkdn{y?0cYegwe*Fa`NN$;=X)EnX)&^Hmg|J&ylDq^| zE|>OX9SmWkE|dPeCvb)1Bs7asd-C9(SoLhD%Ot}6^rK8Qnz&Q)x^5K5M58<*%ZVDZ6am{FWLPT&CKyVzjhtziii*L2tsl1I92ebLVYVfSiC*EBdCp&NB)Odv0|(zd4f3Qz89_=m z9A^kBGehQ8^>_dN(bhE6iyMR8tubFQ2cUDc4?BH$PWlF>->v#l)ibjRZnksDdJ5Xy z%cip^=jI9^k1R(Of?RHl$;)rjFc$Q1#yJZ#6AbWK309I#{F4`xpKiRqkiKj~UAgGX z@JHsRr()^P=cb3P=8wBo85)Nprc z?xBeYX-?Ypxr)j(2NM3c3MG?=RW_4;AY8;KEpdNXsoAmML#9NyZKnjx|2#XXZP`&Ja+8ZyFG^D zQ7*o+a!H$xqISk_IDi2JVdTG}YY5y_2Ou{4_rn$Q=s{nf;zY=xCQIV_91=E;ZsP={ zvg4+scNe|PZ`H2rgSc(q#stBjMWnTb0CzE6QH=C@4AdGP#p;2`LzC9=FU#m zo_M8azhiM0`7;ZG74+HXXt*p?|R+{RBm&HJyBFnPL zE~Zwo`HF%|%&ik6`i!nv9AroPmwwu!o;GDclUm5RfUn!OZu`BDK744*99qnxh$c}D z;}o1%?6eD&c=>QqveBz4XSCSR~cZ*|I8qe+%@&~0tF1YJwk`c9% zNz3Wx>1HG5B!@KBATJ)BMZ2rm42AY&7DP$6BjJ!7_S%utG3FrRMCQg0P%SAoC^7?irsdK5;= zH*lyE^AA<6vZu3S^MS~&*yViO-z7~}%RA1YLa(x>&5wVMz8sTnI=;em6nAc;Ya4@U zeh6?@^v+2`7IJN()2=JpPmp862|JOv%=spW&519&bQ$NAfX#D57YvAJlqlP62^*d4 z$SMU7k@=2u0G)|3!{p_sJHC5%IRonifg2CE>v@nKvNhXIfPaMvc99&AqP7F)zFK`K zr39rcXn>|@Y!s$!xk`N-L_o3TDHUFKxxxv5kplTa&mbO#73GlY&#&cWltAQk%eBu( zt+Pa738}rUhF&1|mCH8Sz`gDwSy`N!#F*kpMe1+zh zS1nZS3Js8I>%oi(j(g)`sNJdLA_la*8O2T25lkO)gp$%C>g$J3lMYpF-8PB6RyV@-c*3qqq33%w3UM-3?hajLrl^()0I%*SI+#>mYgze%Z22wmEmwQM9 z>>-_8Q+Z!fxZb7*NZyrb&nS=gd!#eYDY?XfmL(K*i{$7YV^*p#)NsDi^C~B0c7LcV zP0X>pyP-eP#EpUYQI*{Nm3uGtq9Ol|O+BFg}lF(iw(4IG*^3zSWo1YSR6&V9v_;=nhU7 zX)^xOFLcHsF|#+yr>H@jy7URgq%~bP5#r|&DGuDc>3*pG;A_Wz$`*6?m``#sF^^wB zg3L0R=}nR`grarUM+lR7R4BCl^}kj%A^}UKrYU5f+=V;(6tdf$Gm~Aib;iNL@xA!k zzH!RrE%i~N3XGSbNp`~S0Nj;?cd7U9Pa3uVzyXzboBV_m@E-l>d-_r$_SXHAF$fj} z`_!VMq6?bxI1yx5{17yS!Rg2gb0R(kOws%u&cE1fRCYJ(dqT5-eUG(Su%M~{^BhTT z{L!n^!x!He#U>}wovvk&)-y;XO^}E(d@{ezl8Dt$$Mso)-Euy6-gv)xOkoNVdzhIJ z*4U=>DkP=SqkZ_Mv~y`21E1l8Mf$7p(jM(+7BNt zrPkf>JH;3XV>R3TcT;Y}P{l@qR7B7&%rkDf2q-o}Sg?%ZcYCP-1= z0<@cbm|%L~Dch#ofC1}$M1eMbe7(%oAHszIsL(yJpJekw!KmW2zjk5N;|59b0$<|^ zCP@yutUdR{DsqK)bo#_EN~&|UkJ>wfE0ZE}{)~!zPu8=Tgs;EOWD$8O9F&d6Lr8*- zFvn^`sQa^s#hFGdDmVcAUbwto11LJnytTn@`mve$(-ckuIa8Uc|o` z7v^)&DEBSudzhpe4Q17#^crz~lSuiFPIj$}z$vQ9>{>NxkSa>=Zo?K%h03ysZvr_$ z0rr>3AUMmD%k9)TdjMeEo>aE@VzWiI{1`x3hJDm$OsL1W^)h{SUb~H8;&~s(6#-tB zaiV?c*}~UbWxj0bHPL=mNVzlaNl9aV1m9fu0!&fSAWROX0{u=goOE1j@unge91Gca zU+>6DKHQqzwXL%*nf^2K5^IeKsflljYPLY(JYAt#!#wbVjMU>s$7hHU&{$V-pCajF z3p_Lj`v&3qAVN2@jSLxnl{BX4!>p7a^+jTi?@*;%CR4cqDyT|AP1g`xMBkbWGbwHi zb_&$zisQ!Vi5p1f6;)0>`;3YX{@hR7qOqy?!VS+c|6hc?2{hO3`aS$1ij=XUQkhao zB$TO8lp%^Hl_?4d5lU1f$xz0UAwx0`Au>gV3@KBF$dC|1h75@e@4lbsod5s#uHRbk zYn}6)bv*cfhWozm>)Lx?`yzF>x@h6!K1WhqlJRppMwsp+tN{^Fm$@^aOQyo30r^iv zPAW3sIml1#q3?CFT2^e(9(nsf9;Cg)TsN`b$(U9!>@%@x$To(Ma3UZEhmtuu7}Qi%KLOA}|3@sU z+w+`WFhDttOh*D@Wq{I(Scxa>?6QE_?!wwcL_06PbFt2O@dYGjLs04kqRj-?)N9Aq z-|7s_iz6Jr?1)c^@#7feNZV0*qhY#ne_;fr8xIjbgdEMNCrqCZm;tFCY9g(mO4iuh zLGdW!kz5VJr0oRMBH=#v2;udxL`xk&l5iSa_Q|A^JJyQm>L`1y$%p`=m5h=H*Y7WY ziB-yI?|26ImtaW*$H!3^AV7``Z1&G-&ZLqjMJDzTHf)@V*2H7J{pA46=Ck2nH zHoR*{ih*DIP*bA;cCZOCd#UL*1LgAWP@whI*7WCq(Ig;4TJ;g57>IUq2kH`%9+Pr+ z`p2h30e0vSD+JPr<=_vUO#(nfv>YAd59>_bK9FYrY8tTrhZf$L6V*`C0IKaL9q&%}@Q{7(@< z25Mu&=pZ9$MrJ~o3{2KOPi`4zu1NriMlePiak7!XteIO7<{o!pnSJR;IJ%JEUh)@Yg&{Z4II!bgy7^kL# zYLx`|iwoM@7Hp<~%GPFeLAaF+_-76v7Z&Fyi@*5`9Z>IO%%Mb;gaVnMLU_*aB|K5D zUs&yXBKh<#!lG$@#02(ePyv@AV1W!Po#^Ya{F4Ak!Q8G9hdqM&R>Gi>8${r%oZURW z5A13T_WJZ-;}PU}0gp!{`_WW;GS~V7)+m4b@WfPu!M-I-hISmy8$bqqVb=}r8z3V7 zdGQhZ&*N2`%P_h>@xAKBQ+-EOoLfWfIcZoaNjQ-PVN_6$J%YSqr)mHuyWc_SEN@vv zLwzfgqZ0_h@(x8&xL&m%xlR9YTG3vdIVjo);XyR4%?7W{pZH%yqwP^tE*gl-sh6-W z_UYx@Wkj@F>_v3rCIrpG?=b(1Wat#+M%6$e9*I?ym6wMg^o9V(I%kR8Snkj>>>CqY zr>4!{*;&$#&^tT~)h^nB0NumWJT{|!q#p+>#6A_I22$B0CMITrbx~oJbAAN6)>>d? zh>2xnI!$BN1BaQd^>!1N{Yh zB7C zw2}sS`ugr8qI6K6q_QI_@uV3T359{H?RvM9`j#fLZ6FX8PL|ITB9cbEjF$==?IPr_ z8s_Fnvw)4s!@0_LG2!%*^Z9DgEl|6*IK7}AE zIb86WZ2)IjY9EouBQi)28?@3#A-ewqEg>SGx`Xb;=G5~oj`|2ls;?@#3vYMip%t=p?l05= z0i9Migo^O|kio?vTqgmxBT)*HMPh(?aU(F|*=K@10WtWSNtg#pDg!*yX}lAnG@C=Z zxn|R*ROI3viHpd%`$iX?<>laMaT+8TiB5R6=lg(*+KSv@*3O(QZ|$I#_0V5Ttezziy1~2`3J@+A5aQZnz3Q9b`2KVPMbt6*ZDGae8_&f5qtRejD z*&FrC{)|2Doc)gV45jv-_&Ed_A+2b)<;>g($O&~g4#jT?9s6w?J4GZfShD91o$X8% zjg`G&&;5=JT29u)@EiB%X>jj>^5@mFE$?_2HvIw1{s{_;)CnS>McRz^j`T*EXJa(Z z#QdG+=2V99iHbo58w_=GFqAOa+W5^#o_eQKE*)w;PNG=z0acC^9(6 z&@D>OiRAf5SplV)Yx2{?s!cw)rU#`vV#fYw_mK`}`McAQN zpyasm@E4HiiOI<~y?1D=m-?VzM}TTUKzxnE9N3QL&57@M$;KW6Xe>HRFkEEjM38{X z?K&Yx=%*}ndtB+L#k-z=KGJ9@zZz{dPa7%(poTpG89I2>6PBI%%^R`>7rw{)Ed66T zV)eBkk)V{I8F3*u)P6@w*_3Y3Uta8-R$aRd8rVdfu{xC>&^v`8V^xrtkQ`<6&F^eP zB26;kw6v=}b2dli{*Y|~AV+#==l)7DxrO6rNR5foSA2>z>x9EvqTPXeQg^#0*8_5l ztI5WP?RUy1-6+xzxTU(5Ep8^L4q-A;D<;9n?9`ooEy2=-BFCINbzkaAli3w>rCOIK zJ%FE{HTVr1#IqmC^&^Qo>$wPQeFuQZ4I7$yQQ0Bpt@laB+g`sp-^~eE(VS^|4C1XW zq2yD^K@g%pN9-DepA%8|47H>!Js7Q!cAO%$QYON}9)jA{@lG2m}U{EJZe;VW)mU zE_7_9Tq2b;$?*W_J62{4H;fg58iklepWy%5VptW8ms5^YEc&F71p$CeuX2Z0M5D3C zAvA)Jf)q6!QMc#E>mZALjze_;mHtT_)Ffr?H!DO|3K<;fh|O|AJ_UgmltL#EpYsn2c3^ zJ%=&a$Fps1s6S(V&9mPzHlB!kh^CAzUSt$6(Q8K-Yt$kn0U<>Lsl7!+Mtv5@Nr{R! z?!!~jG#mo>K63gKXMaBlLGEM*%AG`KNMsVBXh}wtSU-e1y32;y3rli4v_)tkhH>j# zM6!5r$S`6iWiL_s04Ui>7$P-w3!Aqq=J($kFIh2%Gq3sWZKq*}wd>a>;!xnL{O{rd zO2nZ6OtS4P)rx)<3NN)sWfS+*c5#eIBc%2!}$~mL~c=AGE028rN zK8KG0g`1d}DH{8`nsPb1|A(06wNkPExO>J&bEbOBky5v+ysC(_dw2$L__6q3pRYP^ zhCYL6J|M7>mj0r$2lF}cGQc9LP>p?qIs3c?Nmaz6l*4-!_! z4~g6b^#y4_LYTPn^8(&sCgP^?!>ZlxPWWL0;ICE3ihvunm!$qHV>wxzu^t|~QL<-N zNG_tX!a++=ZE}Do5uXVTT-W|B5@vqQcTkg|@A+u97_z&rlWF=3A_l6|%n86L$kxd9 z;lU@%Au6eEY@9(0nvMAY8pRF=3?eFJFBC2<{tfZzj_~s{gkYr_=2q2s!5ZiWN$u?i z)-mSrkIc*eA|Vo<*CE#rg`Q$V;9k!AH71$aA2CMV?ZJbMfqR!g~rnsJ3oE)>=-lG?qZp^CP1xdNGRblu7>m?wO182 zs|K>!)LFqjvOaNR;+aR_nh|un^Ug~Gr*g2f8#Tid>veyz%2iw_xkt$Ik-Y)n-xrW_ z9er#^Ayr7dj?C5siFh^YiDwm8^q~((~PqvHouX&vfw9s8%d&Jz(A=0=ML5XlZ0hu0+c0ReIgXfZN2Bm<9%ii&O`&}x9iC#`>| zFZ1f0u)wPGLY4}-{-pV#3POqn2;luCOQb!@zH$>D;QMz~zP$EO^;rlqiy_>1sI;w# zPusqVAJ{BH=tNt7{8-Yh%gs|dm#O857yA4kMC7@y2AQr37T zr3JmkEuZ!ke!K4Yp4}(+;R*Gx~1{f;^4TF%XaM>K93$YBx3_sB3 zCNjRCpy554X`%rxh40AiYj0P4yDnW=QC($!)1;+_^lJwXgOF>&5z!o@%CR3p80jH- z=y|Xf>_TOiEkzcJ`lbz@>vHx{@@TERW#lo)qaq}v0U#APO>DbxpIF`1v+(3ut|NinUViMJ>Kl#7^1-|3S$rfP!6s{Hj)O2V$P@UhDpp(H@DQtTk;bse->OIZ)cL)p<)sqmJ9DzDJ1BpQ8OJ5k}l9sM3p{O?% z;~Tq)P9b6zzyLisF=ADu?l#6EkAxFo2oUpfN^dj~)4%+>J`oy+o1%*B2gSX8m zAn;wZUAPFgrOG&kBGmMul9UAk$W*A$60SMZLEC&f;W!PF)mtK$3eD0-)T76MEA(GY zZ9)DL)i{`r^rz_cW_EVbl>*%&D9!)*`sG`Z$rGS2AjiZvcvkl>-_1AuD*{v;#m4y@ ztQJLCRl&t_bIHK-xDNfxzlaaL{OO4MOq}k~+m98#q+RDtPu1tyngS`}Z^;69czg{# zj4Y0&&J(5gPf)QdD0qq89%R#0G5CN9<+sFE9T<~SqTD`%<$QyY z?nUjklg=S3=*Q!Q!#EQ~j599m=7K5XJv_EwuqJ(0`5_ZXFf{zl)oQyg=&j3a@6&``w57r*oz@1Jr3HZl-GwDrVR6H8$KzOenParSZ}UHyZa zgLsvnOw{hnd+dZ+Ui0|aS+%gBpx@QQlQ#}dg+u$Z)OpI^&+oV*`{+O0fc#_0jQGf7 z{m@aEvHd*}cY01p(ZQ;JMV+gPV`xN}t3)SgclEx!**&bP4YntG&VIu&oa;0rg4%Hz z6a`sUog3hvP(Nsg7D9UJ8!A1s=A^YNIYm~5YZ9*_ToXOcEnkSV=z|;1306{m{viYg%|=uY%xDU_;Ewp$*r3fO_Tyn!e_;sns7RG1DPBO%?KYXmdJP`a5Ne}>|}t&Ga}6P%p)E40xbIi z)NCsz)&h_AL4ia|A!WRWVu0rJtTcRY(E1G_k1|F*OgZkyU!Zk;_I?Itfqc=+U(1#twc)ySm@Ns<@ac0!kHm}s=z|C2Kt9ga~Z|Dd9x3C zE{%Wbo&zVi60c#qb_@e<5`xsbz;tZZqkujL;Tf?S#L3QpFyN-2Rtfg;5iokq z796@zWHVyoWPx`o+8%V$4QWK*BCQH^=7eau;`S@pDi9+{Y+E;=Bqf-E3Bb7+qK$j1 zG70Jb)dC>#kg#ZF#XX`Dh7^7U;Ck#iFId-;A-BQ1FVF%;^un8@r2xkthf=EmQX$|{0p z{&7d!$~Tm~*KH3$-6t_)xi{<=0xVQ;nE!%oo~&hZFL3!p{i3mfuM_|&aizs}z~^Bv zOADVk*b_^y`rlxqGXL&^#0EwRrBC>(<;&1=(Hbl5^jnxF3R!Ohw%>a*iGb+sn6`1a zXmKuCa0DA65!Et5WVF}Z2Yg@#+!*~2v2w%Ou)#<={+t$Nu7C9QCU~KsKwA@XR1hiW zIyN>i{y`Kg6$)FH{yC5`{#6&FVSUEO7rN)tO8iv5^U{I%yc=Vi@q`~87383aLP7fp zBCGdC8P=hIqG%N`z44ZaxOgCd-a~?co>-j~1IR}YQ$)fUdId>vYc>`d@sR`>s=CHnGwzYUvHafMhllx5;{=1EJFKJxrIkQnl@hjJbH@_$ zovMp_v`FXX08EpVK&A0Q+Q`SZl8NaBSY9t*-*|Kh&??}1V}T9!wH?4oZLtsDsv&TC z{{%qIGiBi-9uGLGLtfFxVa8?Ik?Ws^VLjsHsqDGrCD?@|-MlSp2jYOw<^#8WWXAiQfu1peJ2E`B2LI#M&(Z9nC-ANv{(xbkVT-lQ?Hd10l9immfCR_nIF zsxo6Sj6Ft2%TZ{P+oyH7xW2udBO*T+AvIv5kU`U< z9u6omWE$__qekuy9_R1nHkFwSea7tul(kh@B>Ky}) znSjo=`B{8h?pVJ)B30R_E?(4(tPRHM_`#RXSszh`&A%cWiv_(c5;HFv2cZ>oTcg}< z>sT1!;el;~b3&~#D0)9tkFB5Q%(ZHHEhcz;jY3jvEd%Zh@B%TR~rzW)H; z9guD7O}B5|`hk-2abVyfoK)0tAcMJeD9(QsEt@Shn#+N8XvM zdgayDz@i`oy5{T$BnGX9g`dU9@n zvFZj_m7YHLawGqd9lvsl*}5Yzz5;C+yg0sT6(G=VDi97mDhN15Fi1F1cRh+H1ju)^FEIfPZ`gIe-r! zu~~ZeD*tT-;Go%7QTWffD-qWjWZRJ2%TY6x(YRH8HvFMIuRt#L4oh7W_nI z@eD^87BZ~@9P3)9SQKlQKo@=ohRXZ8+C&@}uMhSOX?x^HCG+6odptn!iVqoCs3{1^ z(=9RION|0BshrcM% z9>n>+g%Fd@1#2^R7j+z`GaPiT+d;jtI>f{YYyDVbeEBSL?>)SU+gIka1L!sboux~< z1|sIspnENvqh{!li6n>u}v34ULVS9zS4JF@Ot?G%aPJZo{eJ zVup@H*^A&6P2S#6lkmL~5%RJHBlmsw=)*$1*-xmWB`o(KqlBqxZyjW;JQOTXl|kh! zi#)UDKI94SBg?tGA3cgClKY8{B4_zJdwjsaO->3xf57lol|eAX6R#l<>ABJzV~WU6 znjS;1H7VT&OU^)H;BX`E^iP4#d{u2NQBts_FtI5q0r2CY2$3*Rnw&r8nVqR4+!06K z+pF3@zD~dfs#wrja4LRun@*_>*$L~}$WP5Pyz4T_tc1g z%Y}aRC=~GEwV+J68OJKxjo&pqCiS`{GdD}cRBG|3((m9!xfBWb~g368xHc0=!izCT!2NA$enC5*`}W}u;F zzuuqe!o`rSSJ(+!NCisnSm5zuV!y__51qqwNhcPjtAzk8*c1Cz@0A!16eb*KiU>o^ z+0lY&*{P}n2*JD><#N13O-0Vmh*B}zS7O6!+WKZkgk>uQv@vN5pXTALt3iHY{(czg z`!%PPd~cEc+(M^}X~^-N=d!j#l^(QT6UW&O%=hE1noN<~S8ktu`wDic9hxg@q^FG@ zj$ccK35Vb#o?wXcj{$1$bJ_(iOK&}}Zlyd2t5SDXXKg-43flY##!XuL6n`e{-`A|4 zT>E}($(~O&s}VW^L~B2|gj#+r2my0YHzU%fR4q*ln~m?2=Cmgk{zh+p^Y!ajB_-sX zJO{Qh+>qSi0Ey{lZ{RrVXHM}&1MAk@hkYs7{jRh$*sb=%2R^=@n*~Vzrn;6EpQg3H zy2O-vHq#wJ6qd0_tq1O?C*_So$$m=%JAJ#fbOqmQpjNJ4y_GNe;louL5u~2Ea-}&* zIek=$hfkjll~t(8(S*vkKRy~ooD|*dxd%-FX*gUhx&sY(%u5V{HaE1qFx#gjS@DO=H1=aR$Zd_=4ZiOb=3yf$M9% z)zP~V1L52u@k+4rm;0H-20WEF{*wEJHtO;H9_5cwG5ePrb?2R{-cfoT6@MH`3Ju$( z=rou#Yc-|;SgkdFh4PEe1%_WyA(@bS52cSmbMFNnqaw2Tk{3O#E5~5D~;P z&bs~Ro!`dSv&ZsASl{V5x3Z56|6&CN-^rvDk}2?R4s99$2>rW(eH3^ipR!gfzj%?K zo6{)k3}&>Qfx}502$};=uRS{aqEr2G*`%VrsLIk#H`x^ZuA$UsBmI+3R$hljl<@-9 z`S<`K%0-^X;y)|APDn3bA}|^W!S!n^eLMtO9S+b&0p<8|(~7p(lN7^+zPd|)RDSI9yWPMnmMD1F#0bPL zYpXQMG|S~(Uh4LUCjdJO#NCA+jb~1}bsFc{)g7#ohI27-i!YfoNym`&`x{5GzO#;2 zE3wXZ>E`+|zJ~N^Ji6X_aT2)%;HUJ-4!gqwHPHJsra3Rpn)0nx)rJlZa+=6Pbv1}@ zllG;<2H#XYVvw$+7dG3UhfX9;k8a0YOhnj{9iQq{2K1@sF*$CN?=U0gc?c6~F=gxt z9OgCpEj`CYU5U=GcbBLS$}5yVliU(!tO%tXDU(?UiKLH+&PC?N=us2`bj>2`y6u^F zc8j!KMNNC%?M-WHOvD(*x(q^7vtgr$o;cdv1hw~zChq@jY-A+0K%z0YGw5>^Aq(o0 z0Qb}|Wh%x3w)p`fxG&qZ>%9@V9qXd#&Te64RRHnZe_w?n#8pr>8`F~^dg%<6KTzL* z|NlP8mwGPZNLDNWdJ~$Ha$6X*&#(430nnhNWCyz|S9>uUO5Ke_i^jGOF^PR=%0^!z z@?CD2N7hOA36ax37sxE!~auc9S69TW0AKe7)uU& zmBaH})p7b3?_6B)Of#~Q2mLdrTg4GrE7bs`Tn4g6H=LQb3(DT|>=QG|$ap8^2K)OD zAAaEv8bjjEuBMSB{VCFa5~l~=u6D3Y*RcI-_DrgKda9%1eUBfIwheS`vNzbh;ZbP* ze>TE;iBrgWdbU=AE|k2x6mfWWF(+dkA6Hb_N48bR4+1Yj60U&SR0~8d6gbppg(T`Y zk{Hbvq&65pUd0sQN;I?M(bpN3rn zndk!mD!ys}FM!OQfe_FyG;}3pVZbI;hta{f6pXrJauzw6zzQ122CPY~y4D(`8WF=H z^*G{y>;x@qh6aL>LW`g>RSfNjbSi_#8JLe{2dWS`&$7?OnOM3#SJ2u=bH)0sePL%u zhaVf9r}0W%(uwKmnTq44gibD>!#rEnGgUSeSD0OW8$W46w4bsOjA&CC=)Y}e@R z+o2;BlxGu|#I9-0v)$(0g@=u2yc{Qn5`>l37-!CG9TF6@9NG0n6BF9ccUDt^fs6nK zL+3H-faVmXa2F-yuO)QVx_>fL0@U*50EIWOqABGp2MX^BaLW|~@Nw}%cpo1?DNKFl z$wUTDPhoHY&ly>nQo;z&{u~}=q8!G*(HO4&!$4vC9Yzf~i^14iC^Gi(=FdG#%pQip z)HnoQ;|15?FNIkkziwbJ-$!sjQYW4M3II7NS?{hvpz#5$dZoXWK#>qKlEDmB7kehZ zeEH&HzbY>`cbto?AY|JqiSaV>Is^JTf8PfC(kp%Y34r!FWEn26>rnBs5S$MGRZx;b z&&j(2gt@xDWAGV9u1WwhtOIvsp_uXf)#|5|P#0i27&Q~CWsD(s*?YD%8pRF)HNkw7 zp+MEoqyrn}9L6cY*l>d46d|}(E6nrsHluT>7>EJQ@GWzudnLt|gJWYXc<5-Qj)I;| zcc$ZbRPmCQI^VaP)P*vxjD;i|7Z5_`wS8i<`0JgX>axADrRB_toNYUh;wt|q#a*n#QoavF z`vqzhAetDyk>gZF?}9fF4POF$2bgj>Hns$vr#O;?3&`RU&gY1rMkIr*0j|8W*lP^f z^_dk^1Hc2Xvvd-hZ*Z_Hl#dL8BqZ~M0owvNMh7Jqf>O<7cbicL#$pj@7zQEs5i?|Q zp(lEoW8r3`9OZ6|93WJyy9^2)*Wzc8!Vr`Z!rgm-Q9X*fux*fVlR4>#1%ww0HgZo~kPgIcvit|J#^hWIKSh`M#lmz3?S9cvRg6zfxdC9s zlk^V=h*mwML>@AN-1Ejk+@=`(Bz4>8m5KTg-vK)Bg$30MSWFp{;mD;T^4jKOC?XjW zLls|Kj#9IkiDa^MfEphlL~w|K4_5%rZ!(?sRZ`VvhSte$Mi8MP|5p7DeB|7TW4Uuq8DgnR-7%L zSygGx`BYc`3L|3^2?SMD2XB^NwD;!pv92y18B$O-^v)}7Yz!QxBl8))XAN~FA^z-9 zrCsY!#Jn1deDXE~vpWugAU>L%C46%)EEkWd2|%8|>^PgM>-=)UZpp8m`0M;g#qrNLFH)5IxMteZe8(4r zXDT*cC6kdMZwUrUZMYCljv&z{su=h_8wbZbZ}s#=5pSEYh=|$&v?DVBR3YQyfKj(k zBS|PmI`J|wQipDt3#|GlXjP!oiCegE+vJ}8yyqgr&R>ARe4$h!$9S&o05fF>iAU)0 z&XWnn#($vlA~TjSSeog@Cl8pje8UPNi}b{KC?@VN;VkX)fA;Jl0?`E|GMZ^@bc=vx zcjG91Chxo%!jBfYEwBPTB_0XDdl~A8BcAMAC2pe5HU_xrVm|6>{&qVu{G3aeJ_6rN z@(vJ7q4AYYeX*;oz!r`cHM79D7t!?_xnzLT1d7{l-Q6_GTDvd4_q+8Z5U~(1ItuU# znVhEu1_0R(vGYfJC>tqv%6|8LL#^KN5=Y#!6k9JHH}~nYdaT2=D5Ln}>0JPk@_;i% z-@!qoS|}awfu-n1yeC6~M!yz%1I!{Lkf0z@#1G8m;oxkOR)_APv-UbP%s9n1v~YZ; z-_t6*9pjFkwo3{Lt)zCNgq?>}tf5*J3!`!BF3A60!j)QV?5EcPq!1HVV0sqSRF`W} zd$~Tc$b&tD2Mg(SAfORUaV$m+LpQv40pdBEHrNf=$l$$x4Yk_1s(u~vgr1S1Aww4< z@2J-0YI*OoTdioaHJ*lqRJBV!I?Vr+H`~T5HOiL*Kbu`bArO9Wdc?GUCNtg6dSScT;4>+-6+0^gfaVU8we~;kqr3-V2)-t;j zh43?&L1~hL7_>oc<5>k+luk3R0DNYrnsH?4HLZVm_(hzvOk2d!&%288=W{Z>qqmdl zrM>-m!^c$^rUPVu;C>VJ<%jrAujo&=fE-E0pI9-i?aOBWM*83#iyVkCX%z?qqMQ8n zT!g>BA|^qG-boGma{S7cBT7m@iFIFoG9&v>DkXB&@*g@v&v8cGVj(E~`)ksHYVfmb zRAGW8SZ0%l-;P`mI_fHD+V+hKc+A%R(*PVJQ6w{bHgo_m$Da_x-gF5=sUJi5awuIb z$fI?WQN$V=u?x+2)-EOI*aNN|&%Q0j>77@L)}Thya=G8R+KeEAxCNR)CLpd!-d5lB zgeSXU1wB3HEIvLwafCE_gwDd1IF;=O`u@=$!lIr^Nm&x39v$k?G2@;oxMrS@u z$OjBrK)KN;y4zV#)G$b-rNh_nIPXSAW}Vmrgf}^USp;IsD+0@u4A$JvgIf!f%<9>u zp!LsA#A1)#GC)+h&Q9R=lvLr}=+Vdy|8d6XkY7YM7Pn<4(pr7W*&A zQnTY&&|wsE?|9O$+=lbfM}M_%iwVH_Z2ENOBkOM6hwrdp{YwlDrTH#=#0r_ikfPR? z1VQDChLr!2{vwLEv$S+V>z_k`bYNg~R1>6D_nxN77=~g{H_Cjc3iy5r$F&TjW>Vkq zB^0qx3z|8Thh8@)K)r_^h(w&b>E)Qbj3s%1hwbq>y7#vr|B)EPnfT?-kXTy8w&uxe z*pcciU(~$5)CPjB*b%ve7L+`0El!FkoKc)!l=b3THS`VGGet!P5riI|uuTNgYbY3!PgKpS1!odpIMq&S=vJ07> z@=7-tO90TQr{TiF+Of4tWj2T1+%~ak0VDOT!ArRJw;7lrBc;AF@lpdGRK8`?9y^@F zpKrZIypBH)@8fsZdHCLrL2+3#J6{{vV++1cV$#U!lA21vLqE4SsO!q)SIzQvG_y1v zTrmMQd+V#W5}usF;I#RM)uVYNp{X9ovUq-J4yK4=Yy$di2+2XAaDp_HQ%Fquto7rFpVOdCP_{+f1uOrrqsvTw47=7d?Ww+v#|qs9c! z?|?+dZ~kK6!pV6greR|Qcvy~T+_g#jclv~>yYzG!u_7&dqc*X90#+6LLqk=ydxgcX zhQN&xkF8e}kHmj&KRtYRW#NTsCinC+P`}LJptkxly)nbu8o=b+({xkpCDbNf`RtF? z)fbKQ7F>DPgAL)9mVa|naQI{ChWC$8-u{8b+XVTlt5=HF z)2qAB29|F5uNHtyqAYD!H*^E`5m)K`C1B&L%XmXk0P;Mn{5@=Jgcu*DaluKHyyJ+l zOX2UfE4MURRYB)MprNQNz*wW(-lc?N{PRst2X;Qy)OcZ)3zGgP0mN1E1we?P1ah!P z`piRRHi><3%{r9Z_te@MMdS{zg8)Bz>CoNg4@6Kooj0KD78!#m7(jPHuz``!GsX69 za2K+=L*%H04n5$#OeAJ?c^I$2e8qA5S`PuSB6&vt7#|M9zbV}h=NApO1<WelcGAwGFCw^_>Cg*28+V@9P0 zj2@!_M4H!nORL`Yh>Go5bTcVyT;k`vNXR&5mYx4wvZ0YmqJM&dSxZyXN01qo zR7}KLGHaro?@>Y~&NAdDjR{&WBoytirVc|+Sy0Ts?%j(QFK${SaGpl${_Z#X?IXfL zXaM_!#~_`19n_LXitPnd5R9JLjQv-S-kMx+ZsRzLEr^+s@V9VfxfVF)BVne!l`6P@B6CKH%fl2w6O1d z)Xy6d;bP4xx@aV(U{FX6iX-e_WU^8W_>UM~}8RB=Ze194u`B zp|0Qbe()O~ke;e+xV?Mp&Vnou@^vkqE6lrB!=%J=KmDfH8T`d~4VT&jN-lELYby91 z>A6($@#D^xP8Ql@YPq7YathRJ?S?`a3ttitNtXIH4lzEY9-AM$Dn|QCh#B(4nENmmj@6?Z8>iTRuiPIkJVFH{^L+v1l zFdB18V7Sqpm#ELpJ{h1H{{q|1y2!3SFHulR$weN={6Aj(Tt`Hdv~i+cp8xYp0@muQ z^Xw681cjPuSSlZFtXxW7CgpWM&2%tt&_e}X%W@@Z?ieMeg_{y(R(Q=2YQR_Z+4jUw zE7llO^s-5hnRe$f?zEw6W`2qJq#vrPJ_$>0_d19T9}WCux7HUpTE;`YR()7RDd5K$ zi0eW(sXO0SncE4Fd043d2SCkU!u!BW^Z|;kyfH;(u6D2ryOq5JUlMI01u@*E=&H1i6>2ufxsL?>AY2E8T~-~OVSZvJq-To zvmB>axsCnqqheho3+}lCS_%!`=B|FFLwztVxmeR9nBpxNo#r_(02M;39*YY}zb>v; zBSRZ%n1gU`d%{F(WPCFa%h{Xy)oamPSYLgfN`Ry>wDU?{O(3!M?JpRy(!#pO)IV+r z4vsbMMX+lq*yj;$fUJh}dL9@v+jbm1?slTR;Mcc4#Rr#_< zESXS(!XBWz^8m4f$_jJ*rDO<{uD~Vr05B7xdhfl?QRgzmj|Q2^zk_{!%D^SQmp>u! z|LtVX7YI2Oeco>~FIKTXxT_0~L3PdcLZ=&VY=*|huFkxStpMya8-BPtFZyWv%{}NV z5kKbTG}ahjXZ&Ob@2^+?5hX6|{;r(MbnVPH)PtcbbQC`@4l+;kZua0V+-+iNI>{7w z&eb(Vf1krjH>c~@_d3=0Z8hM1dE(=q1jeWHy2-!4@^2hud96|TaQz`bct^8WZUj@^ zDsojZ6eOhgB!}pJG7Y_CNJC)rJmf@WU-z0D88|#^D+Q5X71u#+EL}hmIRDMc8<{kl zMZtU3X%`>4ixy1|+NHNqu7%pU7N3~O1M2MhL`C~4f1AeYPy5PmCo_h^0WB1`SI!f0 zIiC@riAw2?X@U0p-293m5bi#}yfftafwG&5?1`R<^E{%ZdWBI3m8MWTUeWg}`K%4{H_5M6K$6l6k80Yz?9jzb+%kc>o>X$}c4XUK#khTUbV`(@y zt7>+O>_mr~+N;A;^ylkpAn2|KD7qcW>fVe5!DD4hNW+h=S-pObThzIf;r1NS8AY1& zrG?09upFH#JYS&FBL-SuZa(H?snf7w2nhy`p^YGY_@yd0ZkZqXoUD^~FF2ooWqgTH z^r2TxJzXR?>5?^6H=+@YuMUWk&1s9B9ZLTIaL6A2nBN_%FcA0e;;FhCU;|&+RN?CN z9NY>=;=0G1zPv^7I4U4L(Xqz%{<-L?AQf#VE1&h^?v06_0-tV7@C6X2WpW;$C=l?h z2Wjy2SC`g#--r4`0rJ^T!sb#3wYAyR|9W<=K*);*545_sKt zpAATKB2mr0m@U*)Q+s85l!q_>THngLE<6)b3Bt*56&llQ!cdH#zz}n^9GvBU^Me6O zDe$RVYcemNJ{{DV`3@U`~~|BY$i{5P!RDZp)$qx)zw#_K_#>VGGo1$uq%8$PK; zpy!r9Kj4n5l7Z*a;n8tbKR{JBUOdCH@4!<`yq2wFE7Q~#tMvT+2KiBJOw4#~!M6J^ zuJ3|!gJXDRtScS}<-puS7_=V5O~qoP9XBzFdnbW4Z3nMsw^Ww~xLYUDcq+&$XL_qaT8L zm|%Let6M~6{}DGQt4mUuo;-48-kIe_&%tX*2{>91SD4mat2_z_L$r78W?K|t7dN&! zzUN@$U~rXM7qJWNP0x{?bELEnl^-kt8uSCf^^*1x4FPFBDJZKJ*}FwN43C6n_t2kA zwbxYIuyDonYgaaQROjzYx+DGqQNKG*K7A1+z{>iHWvG(@*m;XtkN1Irhr(59BT5FC zcOR3v>UsZGwMAG^LpW3MId&ETm=pY1@pzR&2AvTNHLFzYuThlg7Z z^;+m&yB<SIfo`e(go7O3j9=PxU6F`ZVu^dCM z!00-0u-yo=d-IxcHfpVTG(dXBJyVn#(7ih1VQTuDThjb-MFc2f)0$A_b>8JW$j*EQ zcke@CUjn*ZRoG?I^w&(BXIK6G52O~PxVHDmeE)!Q@yb%Yk>X!xcw^WvbXHxEt(4+h zGB^oP?TS%R!q#HIRM#FUPQJQ;UDRW8%nE0prZm{ajJwDOsjiKPK5z6peCDEe>0@FU9Yx8N62-pPs@uMnZx?M@8)QVYu&;94Hl0F~KLOCC%(OedCu0_{jF4+^a zCF}$X4Ebk!dwbt$^8vkU@f$oAX1(pyZiUykEta+Uf7q$(_p>zlcxuS#s%*D6^$YU1 z=OiLO?&ONv;H#c1%d|ZA&Vpl&tM55YA}QUlgZIdL-w}&@G+y~DmM=G-VD~+SwyiFA??>--VIYMA!FFSnh%tiILniOWK= zHe;>d)03`_yuFtm2n77Mk7#kdpWENARi>iC?4sL**LhnU^DLtGVVFUR5-M)W%yGB$ z%6U3k0lqf$Iyh|&f({a@ZU~=c>nc$gy?Xhwt=AOkEXqPMWJu}sgg$E+$)eF@U>-w@ z!~8Ikz($pPB-b!!i~%GNMCW23_6t8Ooe;^h_UhMys!NzOu8puX`;`#v`Yt~2Rd`tp zhaZhRw0@x0b=Hh!*iHtLN-`|!RpnoR_QYNipQsa{NcR#(`rFVY0yE)W%O<0bMG9DI zPiGMG8o(M|hCqCSWhVf28G#P)Bg(iKf>!~tI0^S&VsE6kh+2_oIQ=3cw*+1VZ}m7R z=rHKXi@UibWU8`hM#`)xWi1SvIAko!XSAskw=jps)tk?wP%=(|RK6zjeWNTmL%Qiga3Z+cq2q0|_8&G%ZaxuG+n8mj=hG-Jr^bi{Q3} z7Hl@?TJHXJfW}TrD(YONf!PlXt#BWif^#@|7Mp50mWE5HNJ$uKZ~LqR&Uc_w_g*^L_CSv_az2Zg1va(Mi8us#!L-B#&Iy`}>My zF>BVZuZn4a8ZkmWZ}~l5gNRu6I+j|G80QTZj5kmNVvp~w3nbEdC^h$J39fU8Qwdzf zJq(*y;Kk<&wubS{(%p>-;)YDXNSbx}`UF&#nL+6zpg9v~JKo&5sTcW0@hX|WTZOE-Ma5D+K$Es+$MO2(lD{nmRWQJ;iG zG2P6)9yHwg_%otWC^$V-m7e#eG!Ew0dEN*1TzozhI;=R+j2cq zoC)Z&l$2?~k=ERMa?|bxt=$Uk3eQUQhg|H3s7RxNVxj47;e_;6%l}w_yF5saI+)T| z2B|r0{sYNI>`7Okl>dH}iB~Wk%Vpu(t?(jqr~c^wQI@$j!NcXVvEDYunGW9344kAe z6|s!pwvb{du>rQQOL>pCJ}>Vz=U8eqlzoYDn!)275gjaB4#c1&VNJQaKU|USheXKH zsc$9AkVWoUG4k>K`)_vt6h*30DzAoqt-Lmgy(g%%^%BmFO50hY>mp4dL{@c6GxdeA zoJD!Aw)$(`x3@yTTPT5aiiJjYeA?C8nY)#J)W@P79Al7pE;3t=DBA4XmH^M_l7&6$ z&mBN9Q!>OhvI@wppw1;8x16`-Mi4)3+=EBL*K^$zbVksyXd z?$Alc8hWqHtUBO8o+l?{C^Il`y4ilW|MZ7l)fwjAdu=aL zc(NZ|A6ZGC4A^7t@%JnmG(9<*0FoiBs=8vuS9Z?k_FTp!us zyW&C}K-`Rihg?@ta&XpTEOq$uWm%izeIoRllx{%`5ANK9$cw?;M+Ho?jr5F-)%~JC z6;&==1Q@0Hx3$rw=}^%B=n}PlNb68S23Mz?&+%coS3&`*tjR+LGvC=f|4}E~Vm;Qn z78YC48=Ph3W=5z*x$d^|;VHFH{fzWq)p0BGI8BlAhh7sQY0R%kC9z)&Ne74v}*{56ub=Q$N@! z9%12CSa5w~kngboV?coUh8vZ_wxgnuTPK`MWJk&A1}|tsDAl10J9aU%U^h(4*9e_t zppK)24L&L;ux%SZrlMY$L#Gi%+EZ~>5S9`HI(cvhkW(K*q4jPU<_QeckFFwlwWlJh zbu4FLs%74A$;8A6*~<9u--m&@VMsbHW%ji|8rC2F!NDHb0XB}xTJ=asireJj-%!&> z`rat;qjyn~Q^g=Bv@pfsXXhJEsy^qc!D6Zq`d1(?qNC9M_a;ss89ovTHfQG5tLamU z1`wkLCV`t++=HRrH$*4}3k%_{Bl_q@MKa?8YMv@K$}j{{Lo#L};hjdMyMlT|1Xiug zd0#SNGD*hLv^GKv28xV`e1Kx*)WIIz6>{|`q@vrkqUivWJx=>;?G6Gf8oU$?_*s!% zJ;K7Gq3{oSsx{M;g)&5jZE*%YgU=5=prxQ!9aribxKBFN0Hu-+Ks%XE@m=bKJN?gB z&!tj?4tWtWz#Yff$>h_kAy7d_9lFiZ)rm>{)M)2Md<#8VXpW0SXToDQkp)s=!4YzbX7R z&vpg67ZkyG_%@M`CS;}ay*$rn?>c1_+T4o0)A#Qx2X#M9)EJ1xtXkMoC450nwJ+KD;yD;g^7hFQ;&h*NuiE z1>u*H;zD04WB_-gx6kY0(cGy{ukpDL(7DNnKKZ2qzl9~zDyggm*Oe_%(AW_@ z304Rj7ncWg>wB~;m@asO5xrd7F2Wsg;PwXUKQfq&*jnF>A^V|RfNwr(Y)Lw$e&`|2 zW)AA-Iw8_j`&Kkz9c5vu|JwW%x|;ZTc@@PETMUm34l?Rg5yb8rI2u<7fbeNr_?cB) zyD1zv4@wLb@Tf%he7_GC?D7G4qH^J_DnaKahEfLGa~VEa3Fs;f1!6}5?8`H_i96-z z=kq}XfpaJU?ND&5bO()1YB7i5)ST9r$B5S4{J_(lXPBu!H@ktUyF9Tz)AAZJK+1)< z3nw;Vg3bT^>Jj^O<4vo)h?`aNuBP)}?yothpg>)nEy9Tv-F@AD#vNv@QwOO8d zqC5_$oMfg2m5f3Im8}d?ftGC7n2m;uEb~znFw2=rY>+%xg8m6+dqYnT;5s^Kxk!cc zmXDrXv22aZn}dP-z~^k`aMQT2`7(Mt_a95hMmAXLJ>QhPedUTY_Ul?#WRr6~B>yXx zpv=(1-BCM)?=p?Gz5X~@xJmww?hE-{Qwdmns@SQ|Oku!s*!bLg6|DESPhl~YZmArW zU~jRh#7x3`E}p^Mj7e+X`8N!=FY;pIn$OcisR9 z6+_(a|Ll7S(FC(E#1ib%A>K;V7sv@!Z1q)&;fDUu!=us(bNlpemvLW%UM;@C3KlHs ze;*YfWdrhbf@A*p`^E(4qHBSVZ6tEM6keB#Kw=t?YGhKE|C@^Ikj+n3r8TfTLjIU~V9CXaAX(6Dj_GUH4<>ges1S*Y1zik6WdApY{& zj_Y38&80IVxpSwt>PNg70G-&&w+heQ+qW_&b z2pG+suG5LCdoHAbLK;Oj)A?$6pHVkv=qhXX*Q<%=X{^0Ce=yZI4Y~}e< zJ-<#65RJlCWW1h_^%4ANFBL)FqnyxK~yf0|ZhnE401-SE>KYE*Ad+xLt&k1{jN zAoMjN;5yX8;x`sgU+kvnofSXC7-yg~8+Ubc^x>GU_O`A|+duZdxpB@y5HQ9!3X2;B zI?BiT5&W*Drv10HA^%%8SuU@sU4fbGFE(xD=3e#mz;BNKY5{a&8K`ftE+&#hya_Fo z(ZxxHLf^OJ8IMSeAq$|TzB(`6{(KwAGdGf{>82r)G88AR75=^)0E8FddSjf2D#woH zyfJ~ZTClXOAbN~}0d7E^EM;)%HY}1-{th9BMsGI@~NZJ>LFB(rYoWs)J z6xA?OQ(aw#HG5%C2$lTMs~EyR8sY0;$iZ{EcBU23q7I-!Wtckq5Lnvuir`H= z8U~9BqgmEZX-sSW6!E47Jt6HyL=1`ZNh;;U9m_Kq{WUex&WTMFYBLqNG{1tXM|Tlb z4BVZf5UgCFq@jvGeq=(nN>Q?_=iyZF0_ps0R+KHVGTV;Pl~j~riEGMC4Z1n9uUuco44 z3jU)ZmZ|FsoRQuESed7WTeZ|Z$<&oVO|3P5{`?_EC83KqvGd6rLB${ zEk}MdEGq_|KON1wiKedLQ7+RfqOS&8&sDg!pJEX&p z>O{|Fy%$NX?^4ms0D z>ybfbgWHfJ97J!tm{mvaHj)4LG5@PuN8$HYcb-plC(E_a!oJLqw*GnL?RUDz-U8s6;Ar zriv8J3R{Ma=%Q_?WGF<5sHBoPqCzSSh*X;AIrY3x+xPz7&+GXIo*!&-=nIUCK>zX=%%La>GzI=CX&(}Wv)p?0uujcP|vb*a-PR5VPHjkV@mKE z;e|S6PZvW(LzXM^L^H^AVg6ZVa`OIg6T{ME6cf?WruL ztY?Gd-NDH~%rnrbeIgvHoXvMq`rT;Q?c@Nch460$S{0RY$dWOMD1)`(uN`-i4570DMNV%eLbPBALnG82n zSSCV2g9A&nIh40VZo{*8JFe{gF_hgfm*m1>S#|J507F)lmRRrL7#GP`<}X+vq=mlb zr)$Si0rz2rJq3LA?tU%oc2GFb0%Lw~ z$pgzD-i=8bC}*< zJ8a*>mS(4#sO8x^EmHAw6x9(ygU-@ZG5`S?@gQbhOG3%)=n=#5pDor!ZpkWg8K@9u zxn)E3<>K&{%-5-4Xj^w8`0mrZ_3UoN%y)> z>*8#k@ZR8__kv;ZM?QRzAE9)p$GPDH^e0X(o_b>HH$(Y8C0_=vscE<)D{t8^%|ZLt z(ZX%PdxAqt_LM%?U0wLOv~jZ#2c_sWKyev?qJl}UKP4sUb8hQ#kwSIP{OdQi1#+=# zI9Bk-{L8QCxl&hjK`Eebf+q{nSb}>HrSd4J@^5t4eq1^p(6(me%uhI%ZD&Y{DaUCCZo4JgN z3s-Fjd7`zlQtk0+tw>Fnlf2|4R#V`PE}c=xJil|#Xoo#1pX-{0oa4L!4zt(nsrIb4 zJjr*NQvju$?N!xcEG`1^_|3u;LWGWo%X9Mbt_fXMf`DNL6YVrXS2KtEPl&>;cvUM^ zX6gwgJwdijU*ieIBo)$%jx7Cq2(MAtU5A|k;&{5c^Bp!gAA9Lhb_5WT@NW?gCv=#C ziiutcl^MOdu)0!(Ql6-WI1{&#XI#kkInyuP$=-eo>^|_*{j7W*GE^qTDESJCAhv&{xznDH^&ip^4a11~xobv)Rzu zZr&${fdhR_EE|#BS2{;_v@)ZAwYS%#t?N-2MjP~X_-AWfhh(epGz;D8n=HYzJ380) zGq2GoIFxt#!Ueo<37+ac^Q6mre0qFmTn;_G#dGH#tVhi%==^g|0->NUlN6NB?kFG=vSuy38{zCiz|EyOow>NP{%B?;q41iJ`ro zklP%$4(#WVL^2rkd<2$dn}WKQ(X7Lmj9y8&%XEyZzuoH{wteO6r{zvrb&J3NZucsr zhPjEZJ~#*No4x;az)nxSvv+GkbtkA58%{@mEQ6c3ebpgjsXC*YV0`1@svUL6_dnz9 zGD0||C$^4VC7Yk0KU`BYbN&Qj2cL%Lb9KuxFYyo3m}5_xnSAS?bLY0A0EwjyZ*b*m53StdwlkfW!q_{!EVDR9>!6g2O~M_It){17qDC zqlh(;`7W|Sp<{Fa`8`9-FRN%eDT2; zJQ^SecP(VL`AIwi0%!*j*r+>G)S0f&SZ-4S*_j<;8!NE1l;1X8EJcayW9fwO zZ)nlOPZyHf9`gn)BU9YXl$($OkL!|J(YRqZv#VlZKtd0t@D_GY%y+%EkrN`!+xSai z%0-sLjIdCy{1oDfKFTUIj@$mx`yzrkM&ht!29M<8Du>|B1N;8EQuHU9TSBH>jLI>@ z`Hrl(V$67{z#v2;&+X8mLZr}|}VQRHu{GHn2j9qYax z>WQT)r)@s6A_h2K^&F`%o7)Tp#m9kfjWCeq+5#P)*gXZk6%RtIrKwT?VxAZgV;7E5+bt?9+<`8-&bd9BW6;1c=H$scrYbz3^Hp!OY(fB2(7;e8| zmdmxlh4GmmTS!GjYA7-!)O-Dk&PC5U_=oT+8>T~t#sHWC9(A$&UZI;WY|z-*)$bRo z<{uexVdT<*v}-Ss9t-yj1i@mEj=f1_+sbazE$%qMsoIdO?8ib!l6|M}(&mIm;r=3I z_myfMX!qXac9#e{(A}L!Pt!c+?w(NlQMON{U|wxWcG&*zvRjgkc$xs{Tt*Nv(P-iY z8aZ3z3!+bre-%8uvSpRl_kPm{+C0>a)sTB|yl+EXmq11HIgB7Doc}Y}>&;5LoW6fZ zCsDx4%F1r#I(2=I!+?NgEuEp!7;gF}!e3NDB7F~{L zR@g*wBqIpCqO;v0((khz44;>E{z1idj_Ip&WVl~y9)@QV-iHqxmg8QVXk=c$dM8S_ zoVx4I3`km5s2RNK2NG!E+ctdZtZx1p>GJ0QDtZ5;X3_(AL%`b6*kGOWQN2KI4Vv%6 zVr@K~?hLSYnOv$^I1Q}*&Do6Wms~e=t|i9z(HTy{y)}kWzC5F+(Syv#Wdr6w_6=sR{&bj9{Z;x0*Sp8mF>Y5R|!qzfl^96^wl+EGMrNxXKSCyWB zeC}>aMYNDe{`W-4{*~4D>5r*+UOj8DFr@O+B0i!DE!58y=beZR;-vXfQ=Joc$L7Nh z+c(Cw}AmZkC2$?+dzMiaE%E1y5_4gRbm&_b8DaPnc^WJeAj53`uqF8 zqG)0f3PC_69q_eX+gj-O{b1ZWC7br@YTHOtau8wtde7{2FQO%b8uQQ@xSX7@tk>(o zG1Z-f|0`Q_8%b46<6TuvO%v9)5XeS`!cR0_nHj=5!+IOT_h#aPK=^-}=C%Iy%PqtO4%YCY1ZpkmtLx}83P|J?w~!bTRl$9qNJ zuD|X-)3i;AN?F!lU4`|C+o#U*!uL@-6Gj(Uo86w-2&S%@xMQPio!=EH$)!j7V{>|tnmZ|0xb9yz7{r^8T-}eZYeH5g^WQg)4 zPyL0%@ii_P`uh6SA2*zUQ9COg-BjD6kC%AnFY!vENp>ALc885YD{;d!)>%({arQ|G zn*1lgwl|GUak#l-epF?`G~vxw{chgC0K_FkCJGWJ=&j5JjMCO#9UN5=XIg3lJw@0k z!nwnr?|s1cM7r{z%Oe;ZxQSYc2Iem$>^mNm{ot4q!duKxta|JKY5&;xi2W^~bw3aR zM#$^l>jj;Kdz{DwAb<%&!cVR(KZQFV3FsAed;votsbycEnp&&;dQ(=la`#b-7Irg^ zU)>aNt{cNEXP>XUo6YR@O<~|5OadFvPPA$n`owhwR6ISh{9i_TqNF8DQPRQk3n{(m zU8a@zrSEoL(W|W=sO9O53RCCt=&G&VL)Ld&_A(W z%_q5eGic{k;Yn3jH(v^8IS8c4+7~`c*9LI z)m!K#(Q+3hHLr%iFeV{u`DS~`_*-v8tD->*8snT>63Zn29JmP?X&i^!xPKo zb83s3NXxr)N#X1_am*xP5>l28ti$D$A!i0O+S)rhVmt9FK0fGe!|z*d@@SvgvY%Y@ ztNcA+27Te8#nMj>G`c%YV-x)*v3?Y4y4yxZ-;T6eAvDc+?8-$bYW(`;de-T(-=fuA zsBrsP9=LKD$s|(>-l!~!jpyf?kv(Bz`nFE(-*UzSUe*3J*X0=33tHW7b!w>(`*S;T-RypJ@ENt}Uv?X76f&Dj z{)g`qcMUIM4st<;JSX9o#U8r>e#N}!?({FcuW&fbL<{Qf3uj`8n7m2Og>)pYi>*hp zJC-2L73B|XsXN4;$lVnMiY5dJl#N3CSYh(ry9?Iys?aw`uU>;Z_RA@Bx0c2&uIBt! zQO-SdjvxeM_S>)UBmHOLKg1}6xE8_YAfZdCL_YVtC|z~LUsCCPAWzBYn5C zoZ z0-%QQ#(?|=;@c^39z22&p8CK{ za_WfuCj=A^WMCCIgW!Ev912HouQsSef!nGtuB%y;#lCmm%R7MNVZ z`%5XTDK8(-PZ&mWR<0`UUwTRj9nI1DAjXBOwq%3_AxAo1bY+vTk_YPk>_Y~S>w0vAZ zf09%fB?Vc+X@1l5enzpac?M`&P#7ONMY;%6Ch#%f;n8(q?6;FuHcK4CWomgAHtbQJ z1K`G;nad9KYb|&I{d96+1Ba!Pq(1NXpzoCz66qV#o1oOMVs`CkZq>s!ZQGuw3S^0b5Z<|U3a;+=jNjYt;_b{+!^{u{yv$aj z)3IEj1^z{Iw0PoUbkZTcUuYBvJB$x~m`|eT3w=J00R*aJj3ig!=bLOx14ilx=TGy5 zC;0*$v{#$%3OBlx8qn%eu@m%-=cSzmNLYT$BrTn(HXD&*@-!dVmtO{3RyI2$TMv%2 zDHH?lT7xi)v}wHq_7}dpa;PMx#YIO-7Rtr>fB*j7dErMM^#WAw6yQerky~bOaYuvI}8solL{O=P13|QiJgArYJVe0_IC1 zPzKgecnh#FB=`hX$;v#3Z%0Nb=>U*j1pf6aa@#m8pQg_lB|5-!PH5GfReJU5lRzn? zN_&VVx<6T~2FS2i-xo~|_u7x+RcM&|PHxLFav$QT`B>8j9~>3K*WXS10F>uo-xOok zOB{zxj}r=Xk+QqfkbnJ^@7=&ft2=63_%BYk8>F=GXCFBI=v67Xy0*wvw-|~VnS;PM z_zIwo)DJ9wp_E?9Fzg;{Qz@N>nW;{ohAv$o685n&XQQe)f6e$ zDa;Adq5De#Kuj7fK0Oe*5$;Ow$PWT@ne!qw-@Y?+)A+l4phpYqI3TZu zthFT68t>6UCIX@tt zef$M2W6lUX5(0Lg`f4bk%WJV+HOuy{cBwZLP%*?4f@?9~8H~ByDyeny^q6IT#wM}m z>EtiK<&@O2I^8^YEA(Ml9^T-GUqc>6(-_n}fqbdXsMx6*1!;`FehC2UxAj!I7TV_D zH?Vj5(J1|QP67nGxAw7&juS^h`MBA>Cs#2Lq}n`Sp1hoOJ2- z2mt8nqH~v7FLB$$3w`W9dqg^Yu2t%P_sl?t?;a+J>YM(aHg!|S42v)mOT`RW_(5;q zjc-hU+*>s6Kdqnb;@huvg>n2dW^S&Lv8V{`^aj`%lW1cWMo_avLvM8`$!l-GK&W?E zWJHAe@g=w~DZS#Qa{;=RiYK(Rv?_~zue7K=bXA{K?^QidT3vkP-o1M!vGJw$B&gU! z{3XoGi9qJ`|Ai&RX|0=1c$n3HK6c+ze=*{ucPoC;M%lvRO}zS0V%1A zH58E<%66Ys*bih%RBc51|zXl*vN?c?5d~F`??hSJ`L$j4|aWgeN5HJ+Q2-%(=1CzfZsET&Dgov*s@vr&?6+|06tDjn_HR zxy9`%>qEl!@SCJb0+kkz?I+?fiM1bjc~T|11zTv)&`^*rcTrO1GS1Lcgk=__ktN*) z$_4l7Q$TSi)u=%_0-pyUS!?;_?&cG`y-|RwTGb!)X)Y|~ToQ%6@QfGM%=Ek}yvHJ> zq$@xY3KQkGA0yH!H+%N#broB5J!usk0<2D+I0j*pm}nD2&qhZod@`?TlnTgEe;O4j z00%vbjDXd4;5;njp%egM1r>HN?kM@K`nmJNniVz2<;_yR$0$My#u4V>?x)W--OYzP z8+I!gh;*eTRytIarWdofr-jS`0YWt3&J$Z57MS&|F!voRzmJ)y|F(RQj?OYpQei?5 zrH1nF2Im}u1zx9P!&NK3)%|SL>R-BW(V}BXyC=Z%`YyGxkcZD%4FN(CDc#|Gx=_R^7=p-0bKUG9&!$Q_c z98<)XTMWq0mnO};USAJLCOkmg4ji}+KUjbX;EQJA89wR%t5f06(-6l!KvDRU_w+0l zq?wuaQe7QLW^ay!f-n!PZlH;KnaaNKET9@A>r#qVDhad=QGry*xjlRI7|QDDJW#tS%w1?Ur&&zFOm-fiodIXhZibD; zA0J$5>rBSLPhTOb2aqw+O}N5R@yy$)7@Cf_HiL8{5GS?#c>A&PP2o5EFQoP4#=O$| zTPt~ZH|U$n4oCzb1Xp3od4|X?XjX(Cwpv}-ZE9wnQ$cpNjq!#v`e-W$eu+hk=sHhQ z1FV=1{zwKEVO_MipZHztXHL!?ASALxJv8){@WmWHabnURn5i-%lrn#UbP&&_yVWAU5^9zJs<^g#L7b?Hf|LV@h{9iLQk~F|gg% zuXpbsABNL8>Ob8j(_4E_x*#(Olb%hS)-P}XrD&pQ4YEQt0U{NY>M$CtWSsO3!PHtS zuQ#lVl6zVcCcNL;U!=LeN+V-Y+?x}&N+(?<-x)_)7`@e%!fNYzy8FdccWoGuFysBFUH#p<7Nm0p{t576?6M zL!OJclunL5#$bfPPe9mHbM`fUid_g*6Nsb=fHGp^rDca;`Uo72cyaHRC{y}u=xCA= zH7NU>r>8&R?K(^t^l`AhD zN(ViB3o0cv?6vB${u0iotdStc%K!Yc=>uh$uKM?vNmk9@-v7dNP!}`>Hu>+bESWYX zzke&aFWL8B_-{s5m*4+=Z>J{Gj{gDwGAB-$Fk$1dQU3#ZJ@QT0lDi*{T{%#f5II@s zUJDabvhr_^2hLr+ozttzo1S(a)gZC3a5XOyOIJ3Hy;NR z(1D&RZe7URURhOjI)2kBFE8VDcK`NHB$DP2njIrsy9xbF7H`r(>swCI@(W3zLCgK0 zl%V|n>sM3$C;f?;cE#!b)H*Lg)Bqbl06Tkndggo(dhmTIRGBv(#j!`SzX*G!o!joN zf8LSP;0Nw>_re5lPOY(m#gPMIM35A=F9M%}DQ8n{hEgWZNq_%FqA=%+b5ucl4f%v9 zrBOImgTsj*Ca709n~K%QHpnS0RptJu5RLXURK24fwXRkd_Tvpz&?R#W05d_@xA8h7 z-1{gfY(BmZWC_C84RY+9ZQ+pcs*5vLa4V;Q*u;=jJXXz)&A)LoU<9s5reEIS%ik_fmL&Po9>=s!UbY(P&BQ<0Hvn)#H)PDG*mL~XX%3Da$7^PjJ zohzVpF^VG<`cxS2&Sf-D>PHKeqR)WJBbi$ffR&CO(wCHJo>J)$9U2%?0UZ)XNK0oV zYSns!KLxRCMN(;KUviR$GzGKgSYtzuxc3m%a7-A<;guX@yaIw-jK0&7C5c`SZ;51$ z5do$khbHC+82&l=`CF?aARCLKh3XWRiojn5n@?gZ(vu7Sl$2+9~$|TFN|`XeJU#HfLOj{Yjm0 zk6krq&YXOj{O`y|kZ615Rb$4Gn@}+o?7OjR9-2re(Z11n57XJ7e14%+fC=~t8uI>= zTX)qwSvVC~N;Kj?TFBLfM-PJOY}`=TO;Wn2IUlsu)r~0V-jiR6_8#s2<)nK8hENjz zc#wWiDp^ujixP!XYcgD}QPVQ*0CxZ4NePyvB^jdl1WMk(@j8naN9Xs3c~yut5<(~Y zrfko=&bg~h=|GxtI%M+`#P}CO1o-u2L9qnmkp39FLN%=^zqfd%c}c*dXb|O;qMZ~L z;`MagGi)mjeW{;l%uxEDRuV{Ht171AeKk)Mek_FmcrQ$={8ty!VvxO8Laa<)pZ53G3HhU8rN0bIb+V&`_Ew74BF% z?^(>lblB%GM4tzy{xh-a-_{R&v%j5g_z53!p8@2Km15!3HzbhxlW#4QvRCsyB*^s# zlQZR=Sv!`{W~8qmGR7di(OraH_}zijwwxeg0~AIZE)w)I{%=R)WCwfuk?6y*okXvT zT;(!wvDgcSdwulDAAAOU!IrpV*RHALL!pEp(e|Lm2oWbIbHO8tT?{i_0k9mQV|aXb z?4laFxoCIPPk0$|v4|dhWw8_Wi_d^*3!Y8g^a9t4IdMB@JrM&aJQ&%&zZiAA&-*Jf z_4hR%e{97|2y97s^X6XMX)wLqh!&t8PxFjDwVy_?`dPnASgg9$sW6Yv1t}984H#Z9x#+X8xT?r5Zdt>xj4wlRa_R2~lNJ13wa5L1dc;;G9hxH6=>z2C2HV-ynshp; z!Erf9DvT*b(}sZ$Lu8=gXj;ea+4<%)WqZ-$3>t~oNz<^9T28qu7>>-@vMCo!t=&FD z+}ek5{5q{>`f3zS%V}P4FfAek2>KlbUlp3ntBO%|F52aNXn^B{ z?x%@*gJ3Z&J}{;Sds_f7&0|Ue;Jr;)`$$4x zb`hH?nP>h1Dm+Msm|ztY0Wi&q%u>%4tKWeIT;ev=lNXo5?V@V8nzyH%#ty|e@$4$N zxPz0^Xk}&P6-M3=c}L-`K#xLH-h6EiQGgcn0;wP{7k(6s26$bf>O8JE%}_dtB1Gps zb>>(dn9Lr0B}XlU`s}Newy8_<=ch>J%SmgSk$mvMnXCy znDo`ybzKR3d=!8DeNNC4xkVS60BTNL5vL9DZgZ$2zhOG?r)KQb;PTfyoFLf@a4H&4 z88e^bI|Ti;+@h0zo%Qke(WCkxJ7i3rk)QLZ9u(EBXG1_0t;D1ue$;ocNPXnteGoef zNvA5Rs-p6rToKGsE@{C(W46lXF+MWk#rKZQst{Rd&fH)JMf92;t6VE3N^uhsh8C z&BZM})_Y&$K)L3~nN%twjUp-0(W4(kGjzBPlHEyMYf$&8zaNQJ@Mysh80_}x$dgT! ziEjEy@85HY!vwrRhW6_{(<6UUa+zaYa30>iee0F5t!3g)8yo%Evkw3RD(PVNW5`#q zHiSydj~%X!q~3DBzry5TpZ}H&GfH}5hxPBTN0vjaexFv7N3!iR|MTCiTK%s=WbY%z z-#;!<81#QX{(n#A{}#djZIAyyM1oJxX>D8+l!V)nJ6FJU+{)xhTwI)T(Je_GRD*XU z7sSg|7i-86X%3h?Ow2iys4l6!Otzj+^I+ssW9`RPCi;;;rqo_M}vkv z)l_kXwv5E;TFH?|pW@>ebNVGw0S8$E^f5Q#dZ~(I>+?HG%}VF(%wUnZOG6rcDmjld zQf$KCQ&hvQ3P5N?r8shQCTC>>fMqp>jJ)j%$$T+o0VBxABm>Mbh!ODnRVJ9uo8L;D z61&90A`p0jq;-emF)*kAKGH$kj>%2h-NV1^0h9=$!V#xUN*HygfJvyH?uH?|CBz*a zi|)h~3Uz0_ckAZ;9kaiz?S1;=f4Bgr=%&1? zHbN)tRiw4bhGPu=`EeT0mkKdbpA5N`<$c;`%>`gdto&jJp!;BS-s^fhGA^&>435H9 z`@xC798JiL$2^pN0_ERWdFL{+`jee%EX-Tzy^U5M0FwWE7^kvsfky(t%R!(K0*5SJ=RGZoNhIL{iiJDxp#%`U>X+lnVz1#k_$l0{ z+`SCA85tEUkz^im8g4aE-P%ud_DSmV>YMnWU+G;#!wpvN1NbvaTWO<;>`;JSB7+it zq|=jZ3$!7cWTe;P_DPbAV$rmVp!yX}3RrG0&yPRt3$QM*Bf#mfFsPq;W^t#N0SpKZ zg3f!Y)M3BMRq>Ai!9pp%NqACNOv^9Ll-1FrJtBDVNSNJlZD|J0T@G*)G+iFt?zPwuy`3M-yPF@ndL>*ug5htpP zeHnW%M1}9hs?ZxiJwRP&3%zCw1_DSAk9VDAKiXM@zbmv^riCg($0GzdF6@skjkOhjW4ho8R(|nrHxfHmY@Hy|>PdjgK%s<9IovazpxnU9!!i($K zr_WZma!B_}8NL(XB=biadwPt>%lpCayxmtY{#H2Anzw+C`bFvkyCj=WbvshoB=Fp4 z0JaO_A!WYT<}Z0Pc?oA?7DV)ulu)^x59?FF7^0a;eMU(BJ}NIJUtDOScB2?DTnd)6 zqd_fKKw$u*Mm>gCG)8J(^LAAWUU_FGVoZIfT3r;66&OL3chDqGDp3XhfXOFFjeL~F zo}+g_T6DiG-A30$`)8HD`6k9s-SRJV$i(4UzJLEfc4(d>%#?>o(_8A7Oy2r_HqHP6 zJkVC-wLf^F=o$->3VrlRNNQ017Yg%YacMMlf>uYb;^ilq2S*Rr5tyaGW+2Il zqiI#NV<<*_PD$D&z#&xC_1YAXjyie(;JZ;R7UNC=YZXmOwrf7437%X$V)VmwsN;Y< zJm$Lh51^{u#-?(F#Pf^D`SJFjoNuB!eArkrt+S$r0l{lIg#qP46|lrjih^x#FYXfp z?F6DxP)+H_g~$Yhi!4Zc?7g9>7adrR!~iVx>T8xs8G@7V-CLAjpT17(_-Hxs?p45) zEhtx{gz@b+_#0N>%7?y#rT4&=05SznS9F?1{lvPTFKwP)lc1@6wXmfn*rUD9qBi5h z1`StI>ifsCz7vms?7QH)f531*J?*-W(z-!-d8O)Ec37@G(sM~t`YgYhqxyy>>mBGe z|S2IedeJzyGyiS*W_x|K1^tQ_=T8);F{PCqm#R! zsz+V7|FBhI%2>2Xg!b%51OzF+55OX!HQHK2*3fRmh!IVUkf9L=HEae4V;SvnnYN92 z0R7WifN#Ej|9*herPaX|$50L_gX1f_prcF>DS{hy>D`t(Z5taK{A}b99uWg;>$Y!q zXNxH?mvRWHYaxV#pgBf>3vG|xwvl=K7o%rQYh+N@8sNV_KT0@tN}ILI@>gOsgvZzzFF! zpg%X5G@duIfvHTK*Y9`YXkNQ{^C2S31~#T-kj2FrgGMUwcpwl6tJafabF?ko zxvPL3>2PVxY~ZvU%S1?GJC@JKbaGh(|^*?-T&fK)X( z0X3WVh>xk5ho3st1ML3Ps-WQ#GbYQ!(DtWisbT%SeJi0@CSdjX{(9w= zFmK+1%8eX4^e@uAm$9*jK$u&ElvD?a`0ig`SgkISR4qmJgYnW+dI5gyjd!45GZy$u zkyezGgTH|$V8OuL0O+ZticoZ$_CWq7TFT^>iT0Fw{7of0=PR z#G<_%+A%%I5n8hIjvPLGksIkQw`}H2nNgk#;$FX=Xta6u>^8D(+g2pL8Ls6}ae(O- zu6mh{P6s(TE&H;)lDC}FhH(RkGUqd{Kqrvu1xzyf0>sbgz1BoY`kh9etRM)ul zT;nT3osDq>a}&%74;>;%5`chLrPA&XTz+bBy}~lXqrsI!(;3Oqe=VvI1*XIDgB9kd7x06Ipa?+>O-_$V zReE~&C%bFS(nOZzz8Om$-mD4BYMHcUQeQmx4Q5 zjcRla&j;jOxFA zThFkmJb>^lv|X3{F}8F3X6Im~9IqV@AM;r|IrbJL%f5;pefO)-)KwKns@|(bXm`l? z>%EFDY1g^$0d|P>iE5Gb(s^VYcIsZD@ULaFNZ10u@mB9K&%OWG4h5qfU!2w+dZyMy zWpVGZd$t?iOxFCaoXzssJ9v!3AD;`kVtWw1@eq|ze^(@JSW-mfubwtgP z8H0#rt_M?x`~88nmJD1J^_H*g_7Ypm2b%S6v+iuSbl-!h+N@`UNE{nHE$Ac0U&j*@ zpYiz28kxM_%S2Rr_TLLCqMdMdAh`7;&K=|xuMW;LhMZosuj9c~hvMR5JX@c?Mqzma z^f~{6&1y;n`VgCg2M(Oh*q+_I5P=+`_h^f3dOjRS2J2#Y^$I84+++`S9q7*F`0RP} zP#quGt5>fjX0s%Z($f0$Juci^>quhCK=)e$YNER_GvI7~1;a^JLPVb##QL z;<^Hbxtzq}DP}&0Bt1mLa9UsB^8WGTR@`@P*aTJ8u9UvxCQh8ScI_b2mVGe1uiU@i zdt2xOz3SV~{$eWE!|kDRu*#@62S?yNu?KYg+oc|U2=EArhrNT>yk%*dwUC4#Vv98! zeVnmx#vuROx4SW3)4oH8eTNRU`_eKg@vP?_l{4CEk@xRsksCWdmOH4qURPH)L^g&O zBAkudckK8C;`MDBkrz&Mmd<(0JDDD?EhoZ5R$@hZhZ2^>S*+85&!5!pE>7>s?Ba7m z%TB@+BNc5(3>=4_@TTe!`Ui+UsBr)Y^)asO^5r4IZ5Nsa-82uyB%pii9t+bxew-0t z@Qu&Fhpz{<#2uOn-*a=nF+M&I=wPv<16m~g_{3Oh4*clDL|kGkgdQNjWlr z^EjwPa-oDk2S(SEGz16i7~R)x=F^zOVfg<6&{^ z^Y&bkXcx43p~x7*t{5z1pQL>#?7K z@>c%Gz{F%sk@t);wJQ^9PeIQ!;w6@Ih2n`*rK~$Y$+)=t{lC&5Rs5D0=l0_&y;T!bfejp@=hUk5#Q+_CQhF z`TqOFvjzz^5%Sr2xwLRxTuA32qJ&gXQureRR3^0DhK8X{95 z#X++F+MGXIYR8p@U%Y<3J+F;%hFqIzd92K(&_jh(V&Kh{i`MIpS$SJR;9m)P=AW=+ z_RBYKzK@^s8d`7HO`A4d=V*W+-~XJbl6;b|Js`3Ura4gjA&1 zq&blzk2W0kH{lmZfce6Q_B`%W*rW z`jn!gBIVt|D-8_VxXo-eapFW!vvvsy2}n8|9OHcE*HNr`G{!TlS^1=o&v8OpbN;wL zf?K<}xlOgok_hPZ%qMv=ZEtlX%r?C_+X^blfrAINlOoWx8V}m5G;G)NvrOt6 zKQVl~w)TJ>(bc_{*q#-Y_M%H7Y;Z_wz`odA9kcMVwATCDY42W>UdO$D3`{kunY z6nSJ>NVolwzb=SBh&TKDe-ihls%*XSzyHhczX%>O(@NogeoTCV2`~81Wy{{Z-riPn z@&5ff&#eoMkRp!mRqWhzq_T4NpGuclBtz`oW|VCk+{W%dUz0U?Zu?2Dss~Og+4m9p zf8sF*aZkLk{WC8;0@760%;P;RrN3YFIl3_*LmwGeiqboo6KKO8iQn9{ih2iL5toC(3t}b%B*{o!DAJGBS(w;A?U5&ufi=Asot2 z-n}c2@Gd0Y)nVwejts$V<~~?hnrA8vXER-$RaDe;=0o+3b(&{BW;&!a87Ib(1YcY_ zvWy0M^atDaZGt=g_lYzGImpd?fAiVVZqn7y?gUH2&CR;;=f^j*BI=iPlX7gw_IMAI z?PzIjdHL52F(_t`hg_t_=><79J4Rz<-C6=Dbq7U7>({G{jb{ZIT=w((9+6y{l{Khv z;6JxlU3vEi-BXgTwi38);ZJP9T6+>tTN)pXV_^u5O&;PL3~-8yi(90QNC>quHqKb! z8G7fAkeKy#>Ib~hikoD!YS-FK?`)AUQvUB4zlSSw9?0%rp*Z+{r{9a9IYqdAcN)kM z^0m=-&V0vr-^!Ehw?Aw@IABO(JeMFN;kY**RUXazWk%9DNKxhLYQm_aC};ZG_|^x7PE*O&II;O?BfD^Zj|II<0ao=P2cb$PBv;7|^9% zyF)R4p8=V^Qm%U{d-?eMe3DT)VV%up&+e`nT!Nbu+rp! zpMs+DK8Njw2Neb@X)Q@yJp4R~Lt|(~rnBM!rLPgA?Bz_N?Bzhl!AB2pM`HAu%6rD8 zrNYcYvKQ+)p6r0@yi^w6m@#9rva%#Ty0PJ$Y){kE`+`l1zY7cs8V`go4&Yn2Ze3py zJb-impcup@mJTNkbLdCc#fti6>eQ)^-nsOTu`%PQ4S(S-Xrm%2`F;J_1%C<`f2Nw>az z|3+a0l&F92-tB#K55aD{1foV@e9Q;75>Y&)c@b$lA-I)<^lmOQTWhy(@8aa-^yd8J zPW-)q>AxZ@2~c*KN~SknqP(Kcd>GR}Y^A==kCR@!XbXhZR-$QNCeiTeLfZEXQ0G!o zKDqf{+{YD`0ZX6@_sCU?XDeJc5cGTmgG3^sH8aoNekyP3FZNR9ovMlo_3~;hVF05ui3yDKfqd8;7DqWy>H2Taj*xn}9Y5Y#JZKCPnrdTO=3x4=&df}< zU%!643R5~GZ(d+JV^u&^*ZH)1hmYrA>#=8qpg3UdUZp=9I#?!ty zgjx?S&fU-!37Iha0AF?mz@Mw-`%tdF@Jd5=e`>Gp|2aIGb4j;lW&kS<2GvqgQSpz% z_QXx{7A-5>SsZ{(bOH<@#C3(YwZM=S6^dH!9CG`iWGnnUwBebojO(|@vN4zx7%I>l z{tEP2I9$Hp7AmAMh72K_=+|nHL>`{mG#8c*$zQ9++CtTt}ls#6+O*#$CJ67_n0ODXPobC31@Q`z(H58Ea$K09t7k9y(k*?@W@ zf(#deqDW0$5v%4pM2pG7)x|}dD$FA^bh4Zr4M<_42PW)+_hYL;OO`BQR7}OrnI#|J z*jd6q;_7zgB`6MgstL_=Fj~ZV%AQPAE+H*%sw0OvX?WA0TYH`0g~1us$Okmz95GQo zSKZjym_)<3elv`%zFLmE0<5|IVG=RAIb;YtvcX&)kiu{(DDjzJzy3*hzX)cQj>k-C zJ3yPik01B+Nd$J>l;Ewy=-d!ofwXs!mn3zd1Xh z;U}Zcs;w>p1ua{9u%IxT#($(i}EynCKH!mcQE;DiBQT*rw(C_MB;Ta^|H$ zYS>0caV%fCNOH@Bh*9gRfD0wo(F^2MUF&7780oK z_eN^v!-oZa%39sH;nj=Q5=H~0iCsMxJWqTFDH!LTZ#nGAd7PD^v!f5+a^uhUP)yTy z1NaqC?eDn4>4gxA9+hqWE)AI(j2wKoN#Omh$)F^!H!-UQF$}qVJFB=0YiY=3q%-_K zG;P6gamQbre-`fHTi)%LEG4Hhi)FK)XfZ|g&}jOCa7w%$eO#{i<$2be^7QN(?g@CsgX~S^{>^7s3*DxTG9Fpg zr1(e6<)h>mbtozGwV3%IE&yv%Out$0+&NexChpRnUN*crjA*ZtA{=&1oIU@ZjCkGm z_3pshAj)Nq*xJt~T%cX9yHQDr409PNXWi53J^BEaV#l+%sfmt7lQS8>h<5GT$vl!R zplNbukX%BiPMsot_$?iI->TJLORJG%9@1mK6OUa%+O|vok&U%;d2_6CbmhZb@vVdlLZ}giq?He zN%@CGG5^xiZW6|cgEvqti8-~r`!CRmfGO(6@0;4HstF@@GeNSG(1qqP(kh`CLbl~`EBd@$J! z=4SIMJ$=;_VU)XA@{;oRgskKSg5}JGoMBh1_DDJw&SHO+J1Jug*}TepWzPlL+i3_B zk{@RPAk8H^xJ+8D?Rj!nW$t2vm~a(r+)WWG8rbkqPX#I#m9m!0!y4-AvDQhx|HFW$ zGBn`Hqg*--&Tn!3f?|r0AkC3clH9=DPfiYMz=hI6kgA;T-@D2E>dG{;`F1|;D%sOq zpXZlaX!d02-PZ4)KPT_((Wh6>w1>2+tesvwbOK}ZBa4fBp`@wl9dh?>eI8(doP?TN zjDc7DWWl2Ko-qAx=|^}TLIOC%h901maV?F_ospgPA~lnc@qBi^n6%kIQ#kH~=ie8^ zNx%rCiQx%@>#kV%w3iUdm*H~tC9#()bkJ7>pS3Fw4;n(tcTg+AsjP5Yk)OF?!?o1H z`m1WoI6O;OO{xhUo2!o2N;0pXXQ4k1xQbex{n1B zsKi-U7nm)gDMt9J+y9l&upsS-h=LMOpu-k1_jJR$8LeFT(z2T8dib!t57?4GX*ODQ z9~rE>FKhSg_9dbuJ^yrod|U=sAJfMRjhxrpEA+=hZ;=_)z>%a z{y%4ub>Oi%GZrOH>E~)ilWP?F&M8tf4OvXH1O)Wt8Nk36qHCtpS%*Sa?!des!QO{IlcHflfJbJyov56aEVv>#3G*e0=<0W z!e%t?qO9@Z86!-Oty_I-@%c#}p6g`vY3$L)tS}cUkO3OhBS+%OGY@zSY7U&)U4mSe zL}Ay;jI+0gR%f1e4Ekr7OG}cQ(iB~I*ua3Imj`EH7M;nw)PxrY()z!Es#NC^uy@qY zJsvK0KHlDk4{u?P*?C}(O#jPk@k?w`xn&X|O%?UM)*gR!TDEBFKLcVLEO;Q!)14ZRC{@Z!gbO@f!1fZr)f0yg)3Dl@7r5+7 z+v#Btt=c^8*KYPRg~$CB70teM$hY&2H`_GAztf^Xca%C_6>RGCn!(k<6QV9XiCgex zn-Nxxk8dyS_-e<+xmP^m<0-r1EY<=_)~}p+DIG@)vbn{Gd0b@qy-wde=Dx7?S<_X= zMHQ;Yn^@1WD#Q@)TdSj$?~bQGCQa+Ksq*9H&XK-#fWmc?Z$CfHa}~L3*!eX16gy7l zYjg!?+5WV+75nVj%iQJ8&YCT{Vc5b--f{+SoHBayv=r*nfWHq|zF#V9 z)%$vggZ6Es_|3WsnutQ0a<*z@ldZ5q;mEAFoBbebt;L8m8TlTCVCq|$19TqT zU81OIfAUb+x=x<&W!1yxpY`<>Gf~ddN008D`1Hm5SFd!!BylBO&t4zv=4pg`5vQ}d z&B3)R7fBw?IslPs@0rP6P7UuI^W<}hkgyDV!>Q3hdV3ZyMRtrS_dY`aLi9BjXH6-lj~WE823f;)?vssXRHe?Dwz>SG%XlWS38Q zxP4UM4*yQdvuCrDhPHh2NRSO(HP+nNVRy$i!9$1q0!pKD1L14^Q&;Ms)Y{q8Uhb7d zHhA8I8T+#4yd@up+j5C6vrhS z2FhoNFo^w_o?g+?k7!Kt*h&K9FiWQm5nga`1kAx`m~iY|Vs+lrlaY)zq9HD!;$60M zsYFu8ls?#q8!e0YEcQWpvq#@EYqKz@&y&w8@@ncG0PV^>)$+!)^r_B%(7nV7kj6k|pTxLqGERkTx)J`INbg(jJ0ZL~F#0J0Q7zPI!cw2>2Z+z$m>UR`=Kxycdo-s>J!I4lel z?MY6CGECH39rW7++SE=0l>H|tEH5vl@{ZCu0qoGKf7H?v6#iN8hJ;&==tSGsl?`5E zb&AETg2-BQR~X0+qBAj0$+^v5gs&c_ zrJdUWX5B_2cwb9Q^Iq>A_O#7j;Bns!PnHG~H*PI!Kw_bGU3|C2e!Ur(4#?E2?xWDD z>Q5{^llGD87(y3;F5CaZ)_cJ9*!KP7XHya_4J!?$rA1alB}7QOjFgJZ6w)pYA{kAI zLfU9A(p2eNM5I#MLqk(b>-Rpcao_jz`v1M2`?>Dx);PcCd7Q`b`MlTX)0s?H4-jnT zQ_IlijSP9de7OPQQJJ%Gzg^|(&G@@j)63aHw<=+-54zVyY?tyOA|lgML1Zy-a0322 zIogDZzJ0tpVhcMIbS4nR;B1tKMhA0?LjDXsNNj0pT8*tRB_l%<;7xAJsc(Gv0Gi+> z5!U7h2Fe`SW_kO~%me^q(@_ZB(K>LT6tW+KzSS_3m*8qCZxzMe&^@Jowb_K9;{%8U zyPi{HB?3bhfITR1xkEH<^&x0KDDc(m2@>7ha}`FPAe`(lbwUR{K9yuPu~ z5*>zXbFlBowCM~FE7RIKXe}u<0+FIYsRU${{&m_!W4Nj5XyKQ4DRS{h<6#NWouQXwbx0h6l4qmS-JxOrRoqGK};cK@zoHDSg5hP za``eN+r*o{mR9EZ#?UZW&_(bWJ`-gKo_5)o@AwAq+TOlC$+L~=UnMy5Zm|>{14}b+ zfmLY%I2(Ac4-m~ilS9Y*g!m|;b|vo*P}^%*B(OP3b8FGsfjkpQ2MBF~vJwpkLliFwR@!sTyif66wck`)b@-g$(!l z(wl;JkTqFULSiur7jIkwjsb51)kCg1yMRbt@->#_%fM}{1aeyjB(-c|0U#;1C{2K# ztv`SIA(YBqy$j$3@WI)Wk@rJGnSm-o>GOVqZ~1aEM~SFf=>7$L$%p#~JjHtJVlTBG z0i=qVLUhb_`2Xs0U)lg5&puqQ6UheTiGa44(^CJ|Wy=oL&6|0*KRzh7wODQt-@6N& zLeA95Te$H;;59u4(Z~)wee@YXtZ56lrd2?u$$P#w2oS8Gf&!N&(N{LJ1Mw?Cd1>9# z{|{6PfmAC*00dMwSD0L^VB4 z*5H}!#$$EL-O}R9{q5T~s<4!eVqsxXLkBU{gKB4I^yiC0vDj^g$H#X;3`As4xTV8s zdO|mA=_tYpX*AZi;nj)q#M-F0;QWSxq=S~QsLuF4a$;b8XuVfpMQUfp3(=;8O?-DBOWS8rPk3H&EOCo=BMIdf5Q{Ko(fo$rrjwvuCHHGlvbsBo8{;YaV^;ni8v1lpkWNa)-5Dsp%I(4c8%kofy z0h#OuGM6@BtmX3@Y8(2%)O2iFs8K&>oYu$mG!1vwNMekR9qt;Qu6!cj657_}M!{mrKy6Uz8_Je?;<77PsGRMQ(Sy}>sNU|U12^opE}Lr zJ-n8W?*<6Ec2pvNjc;!yFhj>G#WU{;N|1bCj?IwF1P6AH=r}gqi4sJQR1Q=E-W@GK zt8yFO<&1L;T)>~L1xgra(I8l0FDETNL?9w>b|By+yebkv_*$i_gPJ(^ta?zqk|Ac) z&0k*c%up(gq~5-D%L`BwXdt{zm`+)z&}hS!t^_?{@GsQ%JsxK_t(>0(Ym22%clPXA zV4C|MZB5l1$HpjxqY+}5a_D=Y5?+MkIOolq4kGD6=fjs3bsamzupPE>aq|?3bDS%$ zyIc`_vC$pVrObFK*m5ux>^fpNpP;ycVi?SY02l%!r>=y6pdIqVi6t!b9Qzfb<76^85|WQ+po`CVw7M|gD2{DJCM%V$!SE6tLC{qk0?X%b*F96z^Vso z9el|435^F)!1gynA0$2Y9c|fqmtW15mHt4=e?rX`92#0yZEB>Ugcd5<8kAa|ZNr0< zx?PnTFO4d@;}YtEDu!88!orLb+;u@6bauWwZhK>$SuDo=fwIVt@?9wyJyo?YMvr&Q z3Fk=OqfH56zmMn!_J(qBU$0LduG6=l0#8tG%3J&kv4c1y^4jCU7$YbLAx$7Z#p5QeQe zs7U*;uJCR36#BXcq>4J%rETli@8MPO{IF|t*xA~|U1+p=<{E&42#l7Zjy!G*@m2zd z8W=(4ECrEu>wG5HL>O0nbDbNno2^GyA?+1+;P7_McO_D(7uVLjhLCk#1OxQp%8O%y zMeN-y%htPIYc^x6=23cWcc=>5y`SJ3s>_--V> zZ3Oi-yW**WL!h5k?wSXWtt?)c`vo1;M2PFVNn%fNU^lw|*s89-r)ST)#dVvZ$i1Ls zvIAxGeF(sGMF-ZsX<3FQ&F&jsrK7Zi*L{6I;{@I**VL0blLcO$_9{x$4+KzWTQRy< z!hSK949U8@5)_U+<>Q+oA`Hy5t>pur!>AMT*SFCZ?quCt@_g^F=a$l_?Y#r@x`keRPEjlS@p?x^nPD4rf8KMYeeuEMmUUhEblfFQ; zWDY}X$NGTm4FQX2?Mt=S%9(h87ah(8t>UdWc74NY980&?R&qI~Vk?N>-+}~6dy8X# zJd1d95VN7Csfo09QT}%OZbAy!-RBSNbUhbINCoVwzHYLCbn`7GeRvWe*X-^;m?JzX zmPe}_lnpfBZKwBtYi%_T(g@sSmJ=N<5+I=Rkh&OQy-y3X2wJmZQCu?KY!z6({9W}H zm=I+Q2wXUH>QeaPN}{;dp_OG3(gt;tldCB|S9qY+GPv;WL-Ty_o}XgPA4AEI{Zop( zO*l+H{@TDDi12qBPgD3kD+>!^gwoU`a zI@-~q3F23v=kbU%t}{}B+c!o-56>iOpVpb0=Zhi5^=Ujham;G(B}+?7Yp)~LOp}m? zVr7GIcZ&2x=~NHn;(t4y|ut-D{uD>pNN#r0>pC#n~8wkETSJkaa9vNDC+}+tSP~QuH|UX6;%$K+BvxyLXRH>zXQs z-@8{hIfE5~JXz`M1z^x|$rqxrd6sg!q?JC#30T=DpA`fOx@)c#!qdB!b0oprY_0#1 z!J(mQzHgOjK{Z<^kx{%jYEjwTqMZjBw0I35Yue3+VtT=0FieGoxKWA!+Y~3 zC|mZ+t-BPp=`@!IZ)$dS9BSUMH12an#xIS&;3u9&1(>#7DlN$QZDhHfae_ez;Y`>3 z&6&=Ah}XJ!N&h(p{ep75DSk~zj%s$ z{+zt0UFUmF1db~6CC8M@TX=~wykK#7u}OlL^D{R0=@P#Tof~W`G{AJtwmtk|0|qI0 z`<6GSJ%0b>96B4yf6J*tLG~9SCx<)gmnx23KgIsAEYd5stbVy1SCi?FvJ-MEL^CYq zM*LKy(Wr;bOfYnqGEIULs-&g5Ywg|JHuK=nM%Srfy{-p`s_uy~zybUMNxuPMK%AeW zaBg^ZD>$xKN$f;fIXFIn?e!YVxThOdpJI<<>mI34wrNnFLpuHbtV;g-Y{R{vJR(^1 zsz2Z*9T}6qduDUpbAj(fqX1b6sk)w~Nek_LD80v$eIb$J#V9LhqWl=#)MLz-V_Wee8lo)&X$& zj9U9NAP5D!e!Nvj=*kWe+7uaA)ao0|*^M4Y; z6L?!?OGD$*{lDS+P}wo*KiuS_zSXO9sSL0`0%&g7iozJFK~G>ck}+_{tXFI23kve9 zx>)v}GeeVaGEr6&#Tht%yQh1{F)c{IIfl{^D)ecUZJs&?lerG63-hmX@ea%0`^%Il z4gBqJZgnnsjTp+#^9hDYp;fBroeqThGys8zp-)53kwLqEYMg01%RIWUc%=YOEeqHP2#LT=y6N>>9LPR(rK9hV6ks+}m)WIK`x-d*vGs zbn{meI_N%u9lOc4_a^MXR<94Hjx;o$?P{nX z%HfGs1sl%T+Ufvme1cU>D~m-_me#{O(H#c3_XnoQTlsnbBNe3fYN{IyZ5bCM!AjFP zD{WCU6EmV-QtfYKbkhR8Lr<-*7Vl#6!or^`;VH^cwkCqJ0g@|5RngmKMtc%oAuo6 z>^?Ug#gzvVPHm6?D%DxNsj53|d%&+wa!VWnkIg`G9GOU%&7FTUn_JW*WsKM5Y_tor z!%5JvRGPcXXa`|MqJl|{0 z`lXeHjA7WP4EyNp5c-hzC+6vn=WZ)kuB5GPMY^uzTF^?b4c! z*qSv5%Aneba%ltv@ZM)#w}fmdDx@$8cK*eKK!)1343+`f@LNgQ0oI6!f!8tg0Vw_v6d85b(9|Gn=s9~7kpO@S8@;g) zY6I+xu6IfVPik$+in^((XOXC2ur5cN&%npIolOVs7*1lbWVmU#Jg({{T^&=zh`Mj{WR8)T{ z9T*3?AswjJ6z=ZI!bvq+VEf~BsV^Di!nMx-3c*jJyxA;^R8aQdpq;#J838fs92R1X z@;=>bJz|X}4<2AQ*WbJMru0$nMv}mb$VaK#mUAxmBO|Odv`|WN=DvQ-#kM52Ms6## zU$T+%srkY}74?6S!D&o4Q0QF}+S`}gP~hRwT;TETQaaXajL-8e&5qtgZ6RFYm6nh{ z1otXm;C`nI3P*&NezuY(WEIQ}PTLZ|8XerF5eU|=WsK&0A&?`G)`_1PQykhm?hN~7 zG}!KjXV)dbmY43FNzG=*tUz`0k?%J=fb{J({8IQr0fm!9WkVyXAPkEfnEZpTC1y3Z zpWlV%yoz6w=w6YK90fBVQnW(vnqu;INO15WWDiIWJd=Puh7_!6E?>~I>rE~LHXnxr z3EoEg1klX)z{ny6M9Kq^db|RJZRX1bx}kxGF2=9XgGWB%(m#q3yicGdeqX#sbqTq? zI2HxvjgY$=_We@UPua3JJixN!Dx52%-m>jhk%}!tPxbn!N%e;hKrLiKT<$)A=LCi8 zQ{XQ878Xw{6mayAgwTC^_ul`oMBi=ll!co?^JH*9C91snud}lo^KL_#SipLJli^?3 zs#eg?Ld{~?&?jh&Pp0`ChqM;`4REj!(d-i`jE*F@A>{HMQEn^#^$Ecz9L6=N)B1ifMm4w2&!1ZFUqhX#=eav2;wwN@tHWLj^Fw7&yy4}yI+ZOd zE1sbKrCK4e--*5w-0mGxpDX||hh?k?NIheW-c4dCLa4}2Ou8LVMp0XaTS`)QDNi)J zcy7Mf99dlz&7d=i%JgJr4l$^=qaKN#ybc&LJqS& ziM<4pA12Bb(StUhpD`g%;4?ICnBcqwybH_HrMu87I;I(iQrQ5k^Oh1X=Grj?=Fw9r z$h4!>ASO1~+6+KBu>nR5Gxy>TtJ`U2{QtDoOuNsz`S`cwQ?8+WR!EcmkUBDCLmY@ zW+p8Gss>E=8^L6bq~DtN3%Ne6Y+UoL8Ss^es3;RC)U9^yj7Ubfi4*r?#1Duu2O6{Q z-ep*oO%%Rm8t^SILl(j(bh}V85}Q5ogaG5aO{B>XqvSY^iGk6x14)W;NtPhd>T~Qw z2%QKhDI_fd7#t(#Q|y7DCcS_(fx-e8NXUu_Ac!WfFG~Qg;N;@+LS^2Dq&}jur*>+n zeT%BeRYfih;ocgHu=ItY`~^*80`d((>V9~z(uXrx0HEQGR)c~Ab1@(@F8fuF8`##{ zdlQ{eG$d)t7K*Em_c{^>2v7iZ$X&6!I0^6HY>eZUsF!c^%hN+xV*=F#!JuJy9%#z_ z(rLSiLgWY&tSo4aKiQ)w6?~@W)(8lngHy+VWoOzufQG^wH*#b4P7XY3guukD4}URq zg$xv)b-z_K=>O>PV++`i21g+DdxxAy^OGm912(6lz+qj-j!w?^;n7hIpwj!+oC0@( zw&DGtE!+Y|iH`tL;QOt+kPKs^P;n775J-~M%C1u!z|g&RM_1%)!cQwIDPh3Vlo>P2#gDmo@uC`d zR;#gMgO)i{leHm}D%Kr(pig=nY)v_3qfwd2c34Zz6ElUQLu6UW+h_Hu(g#z%M%>ob zEtc(8mpm}BS5tX~V3H*q=S|*zrH-OI^>z^GQpnmw`Uvm(FgvJ^LHSFP_?fg0uzipp z1r+30nH>o$R^DQ2ukCOS8MQCmPb(CT{s|s`nqboR;;xBJ5H@eFbrn?j9tjuG;{Yie z8ce%$Pt&67OG~?SoN_kWLRD^<_+r!3$97Rfh=^UIp|MdPy_WCz!_kXjWrCs=Qgh-W zn^TwfN)@u5j%PfrBEEiwIRw^-Hzlo4<%>G)2Y4YEYG1M;er&PyvQo_U_%V@wJ$- z@V8~s2bi^(ZMU7?5yBIiAU)rU%Q+Qe=aJg^xW;t}mOdF>{yy&{yxrns!J8%=-O%&^ zA_yobZUI?AqNpnlEso7EsJirJ>cDOMO$Aqv!d*4U&C<*c9M7=f#1Q58ffgQk?rDb> zBO5YC!)8T+Ub2Ctb@Es3mY?+)%<&=s3IM3wr(8j+osl?ly2%3oCn=H1a6#*_JHGn} zHBIDo$h$lUSYCPF4P7z}8#fEKS@#{_EgPF?+EkkEc;R5g<^Y#n)sP^(e}8GrN$-Bo zN$dFi9-&>i)5aos;>VZb)kNa`4br&+w-*LmPYx2yqRiPpbX)@a1sS+UOqfyHE|}SA zgXl*zwq&Y08TpIV#j{jEc`DOIL>(?lO!C~-+}sQ}SQA+M6QK2>ufrUFm_ljD#K`!G zBzz{!eC+vvJ&lM=Je=Ob*gXDk9b6dPYKHI$9Qj=%Mh#~dq-EqeF(^fuZ!fwSHOO>5 zHgDV*O{89k#L!BrB~ixH{j~!YS0G`41E3dWqGq6#r*!N(&d-26oZkDw<)DYGZRzL! zo36Lw9iMVXC5pJ6R{87UT4iQeu3ou9VlRk0fG8lW_DeTsY+50>LUR=_Z~0c4XYJ999fGo&Bv{0nB8d5&2x^~|MfvBY+hj@8>_uZ4R${S=6+WWV;v32Mg zN7HcyYn2ohGo9bgZ~1kKw2OjU^BqS{$h`X73!up7(x4pR?;j2FmxE2-21A*wQcuM^ z6ZChgRCb5(Hs`9s*acV+1^6~I(9=8Ch-b;m>%WHPl1yEa*5zZfI~y~uP=s+Dfnlc+ zcO@+*zb>*PHqS#RQhBeO<6G_0+i8qfwc3@^KWrTl9UisCE2<&j~C>XgNi3(=b8;&u0I+ z49hO8tq(z7xj8u(We@TuhmD7!S1FJI{I2o>juRsE96Ggk@PWB9f?4(I2D-XRD^u&= z)tt5VnjvbynR+j#{qGt=FA%X6)JK?%*>zrDe0fYaGFZ(MQhym!>l}l&ExCj&pol|n_rpR3C8Y?LJAfI&4)dF@($+LKn(~7Pi}p@mK`1BP$`hK+)^-J|ruXt? zBwoGtSjgZ1PEj;R7Rp_7t=aNBr}hq+oY3g_V==6H^27v6jH!8)z;>y@w>5vmdoj$R zyuThk56s|sHVdxVkIi2+_K!5!8Zo_+dp376r?E{D6BGAag87yI_&R&SEdDPUcYAZA z^rHi)o!G+}b{4CKvT=afsu|`UaE7_DC`b;2Bu6&Ox4FT@=Gs<4qmcm-Ru$CC7cYpf zTR_=SP4ivPSEwnflOxVU4FD`-7izAi#>XEvfYa;AxqPj7>xw78T_g|ipO#!9c$*7& z>DvRv#laM5);LyZ*vr}WVflt<@CdJH^%q415vC381JS6nMzSrr6)TzdDc8T|VlTcb zDcPL6Ym`EfoitS@F!+214hpj)MUQW8AFwD$V<~#;TCa#$u3!Xa?<);**9F^LW3$O) z?=kvqI;$e4hOUoH{sBCcajIH?ga^D>&Fuhc_}r+n^n@ck;2?({zvoyF{`zx_&sU=E zr!e{JUd1H>{Fo2l0tu0||LZA%CS61?J< zzaC;`5ZlGMnCXLecGVKI?GKFt+q!HdABN>c4(o~U(PsLR!QsncyIz4q`FZDtadAnT zb|&lP>N5S4+^SoAx8ayF%jXH?>~a*RWO} z4k}L6H79`VBsz#*y$m?n`r`l;q!Ewbgm#aCi)#nUtg!2VgF{vod-9iFQiXSpq98ee zn*j?ZcRK_s?eN2&?2uX5migO*uj^q<)B8hu55;wAr6hu&`xQAPlbp|?fd=Ua#R2tz zVx#+k6RK7yaqy>7QYLQJ4}!AXzD($Xk;r(9OnR?%2YkB2(Mr)0+m;D-qx0+?I;U`T zuzZq0jrmW%=3)1o+nK%Rc|G!!s8#?QHcdJ55ODYJZ7tKe>F*5hrK;TZLw|M zbfg@w98@z)Ag4jE0*R3Ylo`X5ljTSvzd_na$T0A)d$5aPCE&{z!IM|(jGu~hLfKY- z*?j0IXJ$&iAD-(cpL&e90LTh+p;<{1N%Zo}# zeON-lE54@|V$e&q{pe`njYSuPPoC7QLoccQ&6MZC*h40|fH`bhE?Jkj?9>Vf`Eu(9%PHii=8BrN!wJ1zHbjo2|H|&J~wWNAfE;0@x4pBhYw2iL=m zquS|#Z!cGY|4PBpjL`+F@$>NYi;y5U^6iLig>|HJUxMV2zbMKEdfG=j)S|0ZoR?Gg zqA;CaOIw?PBB@mHQG`_T@bN*7w|eWaT4Mnpnw>nDU)is$!Uf~cU6G{k0%`}OklTV) ziDFS3n%QRv-+*A^3~C+z&FA=0ceS;*dm-+l6<;%X)B{X1cBW4-&EShqp!eMBKD(8T znSo3Yo57&VRm|S%^A;~ymMrluGQa0Bb)*k=ksCNGip}NJqCY>us)l$cYgXj7FyxW^ zs;=alv4C8v-L_rnTMnxu8;+Tb^NqX^8U__@rE)H|(c?={Q*&@~UL%?<%;OAq^}u^b zz8mWe$#2@O!1vK@QxwT%V)mxPBR4+3QA%nF{yQpR!%RM2-e;gciK^)kuXzMG2Gndf zQHb*Z<3dA4a-F1p#NpX9;ajMCk&(;1izx3RPa+l{9P?Ss-P+zxk4wVDzZaNp|n-Xj&j$Rt&u!Vw68c_H}~@))b?Qn5SBu7xmLJ{ z?w7y&@`W2NQcn(g1nSufpds=CTd1Cy5B|jhHGe(i7yv2}U~q(Z@`xf?*TCR;-zrSv zuCunay?eFUX%S4JuP&P|11Bh*$PQ=wqmM*qFU%r6Dps0RiVQrZz>9jN_!x zaLA^BqWP0giKbnDP5EfE`^mD?8|)ZTJqda6=2xl_*k`0_V|Bb&F}6|# z$htWZ;RC*P7VoXx$^d@FGs^+ME=cOWGKGF}9nb_n98WYgQmp@FcrVA$kc&uyp;Gw$ zjJ_l5cm!ka=qdPyllnw_)a>m?-9G3Wh7_EB!g%&2q`G%zO8JhzL;uPF)CM9-3%vh7 zYm@k}ic?{pWzCMBRZYpvG|YsAs@5U6ItwDtq@<+2IFE&S;z5T5MY8FR!u)7?^(OJ- z4USan&GnHK?NwV>-4S;;^7;Y_90q?y-d!A85Q&x`f`u5YevUgsg*6gc&@Y(|^%IeS zVRu#~NF&}KbSxA>6Fvc`Wet1z(NzWj5gb8|kd}~}g79H>ki)wGdLW~!c1EBe;a0cq z)72oe`D#s$yNw(E9%>=uR+8`A;WfY?UB%i7k%`)v<@=;`rVnS0c64=#qO|F(%g0<3 z@fk5OF`7FR>i2Wa*Q{A1^&!R#d)8QquC9YpLm=i!$|7wU?N)Q{%7HndN{ z+GW_2fx2{moVoKyiPO@-R~-7j?hRp8-`jOfl2_0*I9Mmn9x>B&YQF~>^vB7J*9b}w z-aWBK_l3EuxwGKMrJBm1)nlSkp??ZL5$j4@X<^@taDZcG-j#8WWRt9>X=1WN-ZcA)?{i)2+m;UQNs6-NBxl4^J=ij1Hq&V zT0L-!2%FAk#0#q2N;xD#c6niWdEIWakCm0&sCP!4NfR6PQW{q=S5aNfhg*bL4nLF) z>2{LSv|UUR@rm1`(2JjdBY>c=8o_hT2eq|>3cS(RpUcX7wq3${(6I0_a)9YQrvS`I zt&#m}33JY+&Ii*?0xoS(wQJX;QzJqve7E{bM&S@IUGk*jx7l~TXU$f@h~8^yO-1_( zXHjPrY0X;G*U+M&@4`S>*L#lg6sX*Yj=f9p^7 z@D-lCbY`W`#t%gu<@*GiFTcTu3GVUcnuTWkHrsDAJV53hfW|LZ|5CLnT;r+i4uU7?98~T> zZXwF~vFZxe`RLBNa<3q$B7JOkuATYH+j^`@hygUnIc^yK23<6*@b&4GJ-J2WxG764 z^iu4>pAf~m28$4e&k9bqp=?X$5bNp1Ordvp`G>YmPSV=$q#bR1Cao6B_$TC-1QQFg z7rJ_$Niwml<=I#0iVdW=uFm*tlCjQ{7gU0MI(%tr%>#}d0b5W)+XD^AU?a677>B%3Ks@;uWO3d z;&{3#C$+Dv2YoXmjrA(TTnVgtuV25uh5g_rcCv);aP{oc((*$TuSVRLn?TtUUK!rP z-&AbF4$PBsZ_6U+)2#r2FeXNgdiYKI03w)~|} zVRasK9r2`_B*n6sen`JRhX#tD_*WH%OLLNs7c{pkjzb{JO})dpEYX;8_@(K!hFcSR za_!C@W;13H^3Qw7+=TJZqKAy0d^0fYh7wNy$qT_md+);!mIq+^T|t8*5A6!P>B+_0 zlFk$!bNT@as#eiBSAHU=HbdyI+Wk-Z)EB0v$_0yjl#AEWPMp_Z89_qLViR#O2V7)r zkaMWGPM)MXODQT6Lrbh~{@5nALu6zw2}DtFJpa0hMB^Ts=u92m<7ypj9nu;mjA@t@ z$xck%Moxyr7VI|G7qgYWv|pzk)p@j4mnF#SGEM(G1n;4h5;`f8Iwev?#$VcoC%?Z|Cw$SD zc9(shE&<#;ITx&!smk}Ht;K#ptrqfP&fIB^b{|IA#A;p2n0gd1vu5v$iPj{6EtXg0G?9pAy>XYd- zMz`v{We>6y6<5E6I0CZO$zz9c(m#baEHNL2z2OEDD+PbD6y=Bgnw5Hn7hrYmvL4g^u5Q5j8f2A}jv!U%IK_cGZT#VBTwEL_X!}h(DjC+XbXz0knSu1; z=4P|}3s88AZ`iv&}b}NRE9;dx1Jm=oWs6PZ=Ik{Ys4HzwcNP(z8oh2@7Q0E(zdkh!*8~;vrBZ} zM^*oR^u}fK72DB=7xrws5F30+zrj}2Ji4kHXIximqSlpenGG8bFz@l@AZLa`>CV%q z6O_w!9WGV=-gDZRUZ*RH@okt3Q_}(4cov~|0OgZd%_Oc#VL{dA1PeZl>6jANEn`=c zHp?@C2-c4bi{LqT4#ECN4ZiKVMnFKO;HKW^YV^zNeK_oo0hkUOLiDup%8SPNPe*}v zB+?IInGtwkG;{RjN?nH_t?*01Dy8{wLpq(OefYowg_JOs9s-&UFdGN#jz$7WNS|{& zV|mD>y}4qL3|Ia(N9Vp=gN1X&3W+eqIh7L+=e2Sp*J5M_bx++xwDr}|I@+Qpo2L|JD?;qniEKnZp}xM zkf96q3UTc^1x&c8{Xp!MhGceuu|%s3Ex+p%?1r@u#+~0bC=O$dCL&B%K-x-H5k+5>%&-~VJhFW9uCKAW3UbxC{jgdQ!Jpy5MFPy7uYk4RV z5uZ-)h~-Clg87Kxkx4?i6;d9zTpLUDIpgkVPP_#?yh75p*bQL7g5tRdZ{z*oU@N2g zWZ|xIWHkriXct_+e$fIS_xz5o$?U|^rD!ldBQglYd^`3rl0Hw7*fWwxg&bsT8W*us zJb5u3moQqcx1wWi`B(j0ZKjfcPHjJ_J+t^pO|iFP!ZUn&{@@(~tTB#HC9GR6wB#?P zNc=1bl*M>ZumOTFB2vgr^Mov)my9-T*q*qNWCaoI0UZAb1gIkN@|^e-=qG?&r~`nx zy<5b5)JbY6w4g;=H>lNvnXh%hG+fC@P^c?cl$X>X@P$&t6_f6g znnFW$FEG#xR!QQDMfAx}U=N3kF8{{wxdEORZSf6kIV2moKI1euz{(Wpmx-B2P>`Zh zY+F>RLNv!Iur`5|XvKiPBHW$N(DL|OV(y$ck|@Aw_yR&AO#4MUJ9R`nQGYpW{1Q(T z`z$6oz2JKM{^5s7iY$rV0_=ohcXmA4!}nkuaj!JHO&&w~)Jl+dL>NGs!xxI6vanqS zs5||!r3>NCLGMC-0LUa=63Ansuyrdx8H*}?IZ-<7!2_0;M*axot2}!aNGZa)ZbAV< zL>fVL;|25M$@NIfqDbsFG@gr*%nkPB06Esr19+ws zc%k8W{1uehjQJRl0}C88nG~@)`5DkL-nzIiy;a|jJGL>AAUH@tkRhr`nn?Js(ybA% zlzOG#DBVGO#yd?o54%e_bQ}Z&LM+|1Df_ZzMgbyFw}1pc*&k1H-Haq@n85H3eBebuRz#-&!>Xdgk9B{Y z2G9CtP}2dkqPj)j523P~<%>lG7Y4U>60VMGa@JHBeC<aW;*9wrVp0S{%vE?WjVguFhK8pH*jX_ugEUJCUK(Vqa^>a@p3mXem1n5m`<0QUa9 zd!B72H$-5Z8aK19yS^s?rAQx1;ll7{A8dC>2{4Exrj$f?NH^$dUacTe6DJYm=ntC* zG>l|)2IYyGfS$tS%=31uk-?Zqoq@)-4aQU)5eBDs?6=J`IdTLJ7)B%(mLbSNCb<;r z_6AfMq%pDWEbROf9S^AlIvh@JZf`8+r+5Q@e$SM`)A7a(X*}IFSYAgDyF-0L6#^Ne zqX1)WQkutpKH7rEns{+XaDOI18-O!*1NHKSoy>Pf!!czk{Y)<6cGZ(=HKISa0?&C- z^GIdvmAn}4AUdKwn$6rg-mCprRmLiJjwd{ z+wSku``L_fW_kRAX0Tcn+B`dCEH%tS*;$A-S*enzVd88-0A)bYtm!@*|KuK-By;wm8S!~_Dom8fY=Z(69 zbX4!_m_Cz!aw{#)Nh(^I=`DsdBkPGa0a#K*M1%p=9djiFGISImKs8LHfQ5Exu*#30 z0|U2_c4Ll(4KRB*-u1*ygEOD8V{cVb5&<2ixC1RwXu1C4l>nkv692JTayfQRGUh}W zXeXw?s%K`CA-6^7=TNc)ok!4tVwz4U^kQoBZ&0E|?jcVSJ3E9n?11c7?{HrY2oyU% zU`=VXKd#$z^7^XQ?Dy&iOehL^2)h2KubrN|-pR)xvswp);ZxW>roXyffpL^wZgHql z7?;+a+qVte{7=AoL;RmR=11<%93EQx($&0v)BAW=e`X}v{VqqUJ@%8^xqJt zgX~;Raypdt0X7SLaX3+=MGtXufBH!KPD(Iis0SN=Q4i36zN*U zN>jx6Vr!d*G*L_}bz8S?T_Lujfx~7E*-D9tv&z8**Gb@K%0&?wbZl3+ul-#-_zAGz zEfF44`%-b|aWrmz1bvz(qW5-p3h4}Ge z2m7v?V+Iq_21%}j``oy39*7VvEiE-?=j}k|TD!Vp`VeN! z9;~9W5|AG_K7;Ag1H>|F+adt@0#V5Q&7|BwDVbB#73u!xG@5oxG=Kny7?79dhj4mC zZ9u_?3b7%Zv@8{R)K5%Mb4>ZZ^ad z-UPq;45_tnIxy1ci*=Mo7|D1860MJ5Z!h40Y~sedu)I=`1dbz}oUQgBDV)oDP>tSy^yoHz>hE8Td|>t`Glu{uFwrg?BpNAF z{WfGteL;Us@<3bMCf5+w1%U`Cl2<`viBSy1y*POG=-t3Y)7P&-XiYK+AV=L+Czq=` zDfc7Cjsd#xV2RTz)cE`rC+J__`7sx}DZv{PLyxCf-R#R@;J|6njuJEEWAEGU zkHM#l-UGD{f9nBj6^0VUt=x%q_zq=_Rn)DIBQz69uc-n(&y;5xAHbD7r39gsHAvop zyfMQ9JY%|`;Q^91l{_<=Pt%{wR=zlChM=)m`VE8q;>Y^-Q4(GRKK<`LMgFK?$SgVh8?T!OnKlL;EE(v4q za({6o`{OxRe3_4rk00VUw6ZY2jYXHY)98DwPLvEZ8bW0L;P+&J*h2fg{?GzoEGny@ zrt#hA%dgQ7YOrAX&a2lI3~JbESmE#etG^%Jz4D(Ms`7fiM~@bKO5(Vkp*Yjb*o6FY`rgsE@uL#05utNs^ zLMVouRI@TP-N0ehdCMFwUD^rYbbkZf=^N2HTaL7sKG=3ij8aRg72dvmB|1MCMv6g_ z%fn|$s%IIQWpFG(etdHPdc5n96CQqKsXb<_>jGU2iDE|F0ZA;tR<|3Q5}AQkFxw@I z?kTzZ1=rvAQTKd}-z`ZWy^tUIZmaNCl4uSb&4!I7PYOuXgap8gtQS>8C1V=S# zoY~!~fRb(Xm{*1_(A?HGnYOLqpVks}Igot9{1Qg)ZSG~TMDY8U0AXYPh}cs>AGsy7 zJ(#|Nf){dMC*Rz`q_dC;{QMHf4#jsW$}J$^>`^#MP zalP;}m)B_TFo&E6Iz!ywXAl&R_B!I2epgmTf{!w{@BZRBvzBuKiMWzaiu&{FmgpWkRE$*VAid+WJ%9vtGWcPg_ zR2z4`LxK<{)UzKy-ZFDA{P!MAhT?~$^z!yKR4Wc7GA!lLAr4%$H;~`_tQ*Mm`|D3_ z;rb>_8TU=FDTcv+zLESx(Ub0KVqi^;9e7LN}xt;XKbldwHHcW}m}AJzcOI)7EXfBuCCe%x&QtExx2get~8m(mZA#^>WJ+2TkL$JpVMIpu=#(&%TKMSK>ei#yW77B+vjf~G^ zrRY5oKp2F=i{6vecw_(w4zGLn1kveza1ZW6S*QuC4;b+~Ym&a7w6jaa(V~%5dkcCy z|Bmg>zvGXFMMOjpP%D|v4|%AxeDw8!zp(8h<#{K?0Vwqm^57@1c|JZjIX1=(9FyJ? zKZM>B&4XTMk1en(aIEmDNIp7Z9f8h&^a`BY1C#LBXj2>zz=Od<@zVJSw=Jo=w#H#U z3FXbaOLL}JfNM7l0lTv=xU&5*3{jzT%LJ6gXC%rOd$O>ylG$*hNBOs2e1hLc;P$lY zdqO)6Iu?WQ>=>Dx46A(e=8ZoV_Y%+!7?9ex6$0zMII?M3L_zba8oYc~#9#|1iUgFq+b-%?TbL{b>$wboj#gk ze(g*nZQIZ8ZZY5)N80Q*ENnCEK8ND`WY2wtJ17CCbD^f;1Y(jlg!S9GHMn{SMP^MH z?)YnaBRkxlQp*(=5pB*(`Ise>@d_Lu3SlVyj2sX;HJFLt7GH4#5l!z2IEf2VP&7+g z%!JsrE&xxZOL2HWIw^HD48jqL?3-4N;N3pZ5266eLY1vG0qq_B267i)4h$m^nEH65>5j=`-UB`;erK|UV%r`@Cd(Ko4Ft)LIK_%`zq8T zJQ^&zDDKMcu9cSI;6!&i>trtE?~5}yhsFKx^U!F)V-y#IZx;|seXZzP5h6iPk(vVF2_0o(YH9&+fbv9-oKV(FogK<+hd4^5Due{#XQ>Ie>5p04D5r3_?3|0s+@4S@Q)7OYp3KW2r*H=8bBy(oS;Q z^noul6TRB$7w{T_R3L-Vh)$s+9j70BQcOUJ3|B6^#XzR^gt*AS8FE(9QE+TCQy5-E z|CjI(2=?kjMphH(uNf&|pkLqrciTKugO?9xFYlTje`TPU!ZbQF@ZNRy5*Ic)ETS9^1Poy4|-Hwc@gL9)km7hglR zvZy(RA6SGh$-{9EidwM0M9+Okh#PEhcS`4pc=5g9m&(TZG zK+u8yAzSWP$i}?c95}H((^kpR^3YrfiHR`-^C-lKz7z<6aPc^;-bb)a*1!c-+mDwc z8dvJr=F5lqJ!INlNkzqCsB49(2VFa4lM}~IgNwqX8tfxaV9#?zQVki_dGw9LQY0=K z1u!)!UFm!7JV$hKVq@{0>BzqbJo5s80V8F&;UC(T?0UXk@joq}fCwWj4psR1Gbb=& zM~Fd4R#$pHl!Vu_OFC~`QxyMtk_(W%1!3BlapVsyHlZ1JH;l};L6`R8Xf78hN1x9& z?-s3f1rk^}xh^;^3<)25(eg6rYGU6Y41)l-k&aTrZd@-Sd5)=|DlID1e z;*L^7;nEf02@#6`8H4TyK*tAtljMgFYhgKHfCb@ccqIYBCm!klq zDVU${12d<7;)F0k?SR72CIG{rbZJLi0Q3IHL$+`kgIzT2$LW$k^yG>Yh-qM#g@7H1 zy0L-4_`vjwux)U5MNlgoD)Tf8=AFoS&mRQ};=Xd0Y`&kiEE+!ov?Knn2(J+U=x2D*|>C5<0L``p8!!c`0JQqqk<%kUu(9X0!Yh$n(^Q**UZJSE znjH#G9;!9`RAiAS9Ybe6G=4{pzQV7kJW=K)j^#-NFH6fCM8vSC0!xx)r+UnGtYyzz`ky-L;e?5@SYl@zgpQN)h_@u%EJflGp`9cH zYw;UGuf4-(M9wIMx{$1S++}y{)8RXgBFCA1MZF6oC!Y})AOgND26dPO!jyg&VXz7+gbt4kWr{aUXHS! zln7>Ee*OCm?K6?aq>)@#0>%Pg6m&WSXdTCzH33Ktdhhz1b|3=hk_8w7!$=*J(S!)W zDuU?iI)?j53!h6^cJ0}0k3rlQ!?T0?$Dvbo7l`=(Ma^A){AW*N4{&57@Fc0>DGoHT zxkxtPgyMtmua<)nghE|}vD`QS;a0ORKq=W@8qFNa zwnIgY?1`#~EkjQ)^jM@LVcRIlcXxEcuc!aup7=N_H3Zem6hbQo^w{HlmcXQeG&q>u z=$Fp3|EII?3KxV z>HmXn9eaIwF%dqYJc2qx4z&p(umKoh(^p(oiK^;TzMBg!mmp6~IlB4TFi~Y-EFndz z5d4q$KR6gnnur?i|BDN?p%FT13Hf>nfC?XMSx|KfV3*kn#eKtega&r4#%d!+8diXO zKeFc}&4VW zQIhIRN4^!3Axw-6z+gdhps&0=|8vLee&dcc z(1-xDDMmO4bj6TmE`lwYRNt_&0o+UYgA^=-*T>12^Yu}#^c3ocQb6m(s0NRo1;9fr zsQZ?K_%tY|$i+YhLnf}H+AM?i^GRJl9R<^ynwlC#6{6n8JNf_GJJX=3>oAW0{;n)4 zo;hivqN0$3O@*eWAVQ!iD0r}<5XTs0nxT%3N9v*sM;tm{h>pjEVh)FR1Yv=0gNm(| znjs{Nii)MAlA0ig^mzioUiG40^rC&kFuSn3zvDT+&-eL0?tppB_FV*f4n~qrK?Z9F zFM*6lUVxSj(?&grT*Zz7V6b`p(O&0REzUFh!+nTm3^aZh5m+m3or#oE=7XBd<__-d zSSCHh9t7Vb=>-=7EnsUMqY2J2rAW7{+jED0UE!VfOX+@L5Tga zAxpbbvu;ly)65V`7a&NQ`Qj^g(pbfs$`O-RJaXn!P?a3|o1n-FoX=Zew}VwH4Zd_Q=wC%5HALTSVZh0$7`_FJx82$9E+3zSq*%Nzdc2QTd@P= zcIIeHPKQ*mgylpuTToiso9_y7c&P8=LG=Vmvh_qOwiKDjRYZU#Vf>ubO8XY0w4%(} zpjFF6%+Cv1IGK6T>ybqS!MLWR^g%684Lz79==IQmSI=*GOZS;U8y1nlm<|C1HjJxd9oZPXNX0Md&}$sb&b=m zB3J^Q644<#XU(gIb*k;&VyYWvIU9zA0XzF;l|t}>q(JrFlBy6=jGCec)w9T_eV=}# zm$ZAHaYZy@p5YirbQ;hnhQS21?K%WANwq6DkQ7+5s~I3?jfL??{6knKxK_|!9imiD z5ew3AO=-o1z(g(m0lXGsZzRwL@DUd(m;pBy*k6HGv{l>Yyt8~`KCbLwj$yZcpGBC@ z&e4A5C4WK$nR{cW?n>~PJlVqgqqhgco6u((0#ctek)&iZR|LvFK3G#uVsqNKm4Ilt z9d)iATaEO|p1pkMQl|6*Q_MlO)OU-~W#GVq>nps!oIg4TV0+%L-!(E5(U$lr6z&{~ zO74&)e3Q~pmZH%xKeQs|KC9Y*eg7uGA`%aOrWoFks@*3?pW?)qU7 zuu|BIiABd)#h9`8NIFAc@;ysBpPUdjxv=WUH`8kyslTKZv!{!90CkCY65(ANka5ZB z$mL6bcD>VuhV2(sS3{NMnsB|2mfYXEvDO~R>7oNS^IH9N?XV{o+m>l2wi8QP9GrgH zvWYu&q|M$qM%pOFDT{^>*csqE*(t089JH_NY~mm6t%q6Vcy}pewI$pOkQ%zxWZDI- z{1FUR?5WPKy~3qD#fPq_B%)~#{7I$W4My08mbC9ic5%?A21@Lo&Gw<&6Z9bgD^M?D zLoQ690V6sA1U$p%($)1Q(>S0hEKevSeP!H;WJnk@zvI*z2H4qE99w*?^(MGD*racE zs&;}}Arq7-@cJKL?ScyVI@k^}pPe4Rs)rAc7gz4 zdh?=YGEZuVI0jJ}(HNli^`tP{BJ+KAj|I(G9#zTU2fh4PnE=FSvqF3Wbg(F#qOG%Y z9{?4P?81x-a|N+lNlNTA*OhrOMAxex^z#tY+$&;uWPQIQCXV62c&;ns+m8HWVi%`knB-~Nw>06 z9s`%7q16_-oKdLtkn$uDK?odad~zoEU30G%gP-E6OO&XyzfCmmYF5VdAr7-QbQxQt zMAYrp_dDY;tU%KPIAbK+Zn$^4V9yf^#*Dp1?7G9%XoGguuF&xCS9PL~*wsDR;weIc0@KqHUzSmGyFoO7U|i~qMx$WULf><9 z(}X5WSQHAtp8UpqL*j?=&$cUee@?>(x_d>7z}oX3m>q%f31k8OUb%VkH;QbriHV+E zp!pvs?9-}UZEJ$NPxA5-Bz};+eH%sT0wPLh#VG?_%ko}>_FwbkQSP&{f9z!>d&0_p zWL?OKzM%$*3J|Ep1gzlvPhxWcb@)~^NeA4Xes}!~RMko1!IU&bNn1v@2!KElZy7^6 zdHu6Dpl%=SliPX$yA`R2amlUEddyhR@vl$+9S5LgGi_6>P5&St`LDh0FOAtUvx`S$ sedf!Dj=a_;q<@(vzyJU9UtWi-vl}-}` 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

m)EubMsMEu7TSQY)L*}Uf600nvy5&#QV^ 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 Uv#ZuI??$O%gS`eN4h&rSFYo@P$^ZZW diff --git a/crates/grida-canvas/src/io/io_figma.rs b/crates/grida-canvas/src/io/io_figma.rs index c008bb2985..411f8692e2 100644 --- a/crates/grida-canvas/src/io/io_figma.rs +++ b/crates/grida-canvas/src/io/io_figma.rs @@ -1,7 +1,7 @@ use crate::cg::{types::*, Alignment}; use crate::helpers::webfont_helper; use crate::node::repository::NodeRepository; -use crate::node::scene_graph::{Parent, SceneGraph}; +use crate::node::scene_graph::SceneGraph; use crate::node::schema::*; use figma_api::models::minimal_strokes_trait::StrokeAlign as FigmaStrokeAlign; use figma_api::models::type_style::{ @@ -21,8 +21,6 @@ use math2::transform::AffineTransform; const TRANSPARENT: Paint = Paint::Solid(SolidPaint::TRANSPARENT); -const BLACK: Paint = Paint::Solid(SolidPaint::BLACK); - // Map implementations impl From<&Rgba> for CGColor { fn from(color: &Rgba) -> Self { @@ -85,7 +83,7 @@ impl From<&FigmaPaint> for Paint { } }; - let repeat = match image.scale_mode { + let _repeat = match image.scale_mode { figma_api::models::image_paint::ScaleMode::Tile => ImageRepeat::Repeat, _ => ImageRepeat::default(), }; @@ -351,7 +349,7 @@ impl FigmaConverter { } }; - let repeat = match image.scale_mode { + let _repeat = match image.scale_mode { figma_api::models::image_paint::ScaleMode::Tile => ImageRepeat::Repeat, _ => ImageRepeat::default(), }; diff --git a/crates/grida-canvas/src/node/scene_graph.rs b/crates/grida-canvas/src/node/scene_graph.rs index 4db51cf8a5..baa8448ff8 100644 --- a/crates/grida-canvas/src/node/scene_graph.rs +++ b/crates/grida-canvas/src/node/scene_graph.rs @@ -445,7 +445,7 @@ mod tests { let id_a = graph.append_child(create_test_node("a"), Parent::Root); let id_b = graph.append_child(create_test_node("b"), Parent::NodeId(id_a.clone())); - let id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_b.clone())); + let _id_c = graph.append_child(create_test_node("c"), Parent::NodeId(id_b.clone())); let roots = graph.roots(); assert_eq!(roots.len(), 1); diff --git a/crates/grida-canvas/src/node/schema.rs b/crates/grida-canvas/src/node/schema.rs index c0d9979d06..33c55738f4 100644 --- a/crates/grida-canvas/src/node/schema.rs +++ b/crates/grida-canvas/src/node/schema.rs @@ -240,6 +240,27 @@ impl NodeTrait for Node { } } +impl Node { + pub fn mask(&self) -> Option { + match self { + Node::Group(n) => n.mask, + Node::Container(n) => n.mask, + Node::Rectangle(n) => n.mask, + Node::Ellipse(n) => n.mask, + Node::Polygon(n) => n.mask, + Node::RegularPolygon(n) => n.mask, + Node::RegularStarPolygon(n) => n.mask, + Node::Line(n) => n.mask, + Node::TextSpan(n) => n.mask, + Node::SVGPath(n) => n.mask, + Node::Vector(n) => n.mask, + Node::BooleanOperation(n) => n.mask, + Node::Image(n) => n.mask, + Node::Error(_) => None, + } + } +} + pub trait NodeFillsMixin { fn set_fill(&mut self, fill: Paint); fn set_fills(&mut self, fills: Paints); diff --git a/crates/grida-canvas/src/painter/layer.rs b/crates/grida-canvas/src/painter/layer.rs index 2afbe41227..57e50d0107 100644 --- a/crates/grida-canvas/src/painter/layer.rs +++ b/crates/grida-canvas/src/painter/layer.rs @@ -772,25 +772,6 @@ impl LayerList { out_commands } - fn node_mask(node: &Node) -> Option { - match node { - Node::Group(n) => n.mask, - Node::Container(n) => n.mask, - Node::Rectangle(n) => n.mask, - Node::Ellipse(n) => n.mask, - Node::Polygon(n) => n.mask, - Node::RegularPolygon(n) => n.mask, - Node::RegularStarPolygon(n) => n.mask, - Node::Line(n) => n.mask, - Node::TextSpan(n) => n.mask, - Node::SVGPath(n) => n.mask, - Node::Vector(n) => n.mask, - Node::BooleanOperation(n) => n.mask, - Node::Image(n) => n.mask, - Node::Error(_) => None, - } - } - pub fn filter(&self, filter: impl Fn(&PainterPictureLayer) -> bool) -> Self { let mut list = LayerList::default(); for layer in &self.layers { diff --git a/crates/grida-canvas/src/runtime/scene.rs b/crates/grida-canvas/src/runtime/scene.rs index f1f566e63c..81c5767263 100644 --- a/crates/grida-canvas/src/runtime/scene.rs +++ b/crates/grida-canvas/src/runtime/scene.rs @@ -601,7 +601,7 @@ impl Renderer { fn draw_nocache( &self, canvas: &Canvas, - plan: &FramePlan, + _plan: &FramePlan, background_color: Option, width: f32, height: f32, diff --git a/crates/grida-canvas/src/window/application.rs b/crates/grida-canvas/src/window/application.rs index 1f7e851297..d929f8baa6 100644 --- a/crates/grida-canvas/src/window/application.rs +++ b/crates/grida-canvas/src/window/application.rs @@ -6,7 +6,7 @@ use crate::dummy; use crate::export::{export_node_as, ExportAs, Exported}; use crate::io::io_grida::{self, JSONVectorNetwork}; use crate::io::io_grida_patch::{self, TransactionApplyReport}; -use crate::node::scene_graph::{Parent, SceneGraph}; +use crate::node::scene_graph::SceneGraph; use crate::node::schema::*; use crate::resources::{FontMessage, ImageMessage}; use crate::runtime::camera::Camera2D;