From 6047959b3f235283d6e91faf7e820444531816e7 Mon Sep 17 00:00:00 2001 From: Mark Moissette Date: Fri, 22 Dec 2023 00:37:52 +0100 Subject: [PATCH] feat(nested_blueprints): added support for nested blueprints both in bevy_gltf_blueprints & in gltf_auto_export (#65) * feat(bevy_gltf_blueprints): * added support for nested blueprints * added example/test for nested blueprints with multiple levels of nesting * feat(tools/gltf_auto_export): * implemented functionality to export nested blueprints/collection instances * added add prefs to control nested blueprints export * experiments with nested blueprints merge modes * when exporting of nested blueprints is disabled, will not scan for nested blueprints and thus no export them * docs(): updated docs & added images for nested blueprints support --- Cargo.lock | 14 +- Cargo.toml | 1 + crates/bevy_gltf_blueprints/Cargo.toml | 2 +- crates/bevy_gltf_blueprints/README.md | 8 +- .../src/spawn_from_blueprints.rs | 23 +- .../nested_blueprints/Cargo.lock | 4629 +++++++++++++++++ .../nested_blueprints/Cargo.toml | 13 + .../nested_blueprints/README.md | 14 + .../assets/assets_core.assets.ron | 1 + .../assets/assets_game.assets.ron | 6 + .../nested_blueprints/assets/models/World.glb | Bin 0 -> 6904 bytes .../assets/models/library/Container.glb | Bin 0 -> 6144 bytes .../assets/models/library/Enemy.glb | Bin 0 -> 2020 bytes .../assets/models/library/Finger.glb | Bin 0 -> 2416 bytes .../assets/models/library/Hand.glb | Bin 0 -> 4880 bytes .../assets/models/library/Health_Pickup.glb | Bin 0 -> 5656 bytes .../assets/models/library/Humanoid_cactus.glb | Bin 0 -> 25928 bytes .../assets/models/library/MagicTeapot.glb | Bin 0 -> 24236 bytes .../assets/models/library/Pillar.glb | Bin 0 -> 4188 bytes .../assets/models/library/Player 2.glb | Bin 0 -> 408 bytes .../models/library/Unused_in_level_test.glb | Bin 0 -> 5756 bytes .../nested_blueprints/assets/nested.blend | Bin 0 -> 1465452 bytes .../src/assets/assets_core.rs | 5 + .../src/assets/assets_game.rs | 13 + .../nested_blueprints/src/assets/mod.rs | 35 + .../src/core/camera/camera_replace_proxies.rs | 24 + .../src/core/camera/camera_tracking.rs | 58 + .../nested_blueprints/src/core/camera/mod.rs | 24 + .../core/lighting/lighting_replace_proxies.rs | 25 + .../src/core/lighting/mod.rs | 18 + .../nested_blueprints/src/core/mod.rs | 35 + .../src/core/physics/controls.rs | 12 + .../nested_blueprints/src/core/physics/mod.rs | 37 + .../core/physics/physics_replace_proxies.rs | 101 + .../src/core/physics/utils.rs | 175 + .../src/core/physics/utils_old.rs | 75 + .../src/core/relationships/mod.rs | 11 + ...lationships_insert_dependant_components.rs | 15 + .../src/core/save_load/loading.rs | 218 + .../src/core/save_load/mod.rs | 70 + .../src/core/save_load/old.rs | 137 + .../src/core/save_load/saveable.rs | 14 + .../src/core/save_load/saving.rs | 87 + .../nested_blueprints/src/game/in_game.rs | 85 + .../src/game/in_main_menu.rs | 113 + .../nested_blueprints/src/game/mod.rs | 115 + .../nested_blueprints/src/game/picking.rs | 34 + .../nested_blueprints/src/main.rs | 33 + .../nested_blueprints/src/state.rs | 54 + .../nested_blueprints/src/test_components.rs | 93 + tools/gltf_auto_export/README.md | 37 + tools/gltf_auto_export/__init__.py | 19 +- tools/gltf_auto_export/auto_export.py | 15 +- tools/gltf_auto_export/blueprints.py | 113 + .../docs/blender_addon_use3.png | Bin 18866 -> 18475 bytes .../docs/nested_blueprints.png | Bin 0 -> 86937 bytes .../docs/nested_blueprints2.png | Bin 0 -> 29244 bytes .../docs/nested_blueprints3.png | Bin 0 -> 23896 bytes tools/gltf_auto_export/helpers.py | 4 +- tools/gltf_auto_export/helpers_collections.py | 89 +- tools/gltf_auto_export/helpers_export.py | 30 +- tools/gltf_auto_export/preferences.py | 11 +- tools/gltf_auto_export/ui/main.py | 16 +- 63 files changed, 6719 insertions(+), 42 deletions(-) create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/Cargo.lock create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/Cargo.toml create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/README.md create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_core.assets.ron create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_game.assets.ron create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/World.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Container.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Enemy.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Finger.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Hand.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Health_Pickup.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Humanoid_cactus.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/MagicTeapot.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Pillar.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Player 2.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Unused_in_level_test.glb create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/assets/nested.blend create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/assets/assets_core.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/assets/assets_game.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/assets/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_replace_proxies.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_tracking.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/lighting_replace_proxies.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/controls.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/physics_replace_proxies.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils_old.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/relationships_insert_dependant_components.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/loading.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/old.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saveable.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saving.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_game.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_main_menu.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/game/mod.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/game/picking.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/main.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/state.rs create mode 100644 examples/bevy_gltf_blueprints/nested_blueprints/src/test_components.rs create mode 100644 tools/gltf_auto_export/blueprints.py create mode 100644 tools/gltf_auto_export/docs/nested_blueprints.png create mode 100644 tools/gltf_auto_export/docs/nested_blueprints2.png create mode 100644 tools/gltf_auto_export/docs/nested_blueprints3.png diff --git a/Cargo.lock b/Cargo.lock index 2255f8f..3de9b01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -779,7 +779,7 @@ dependencies = [ [[package]] name = "bevy_gltf_blueprints" -version = "0.4.0" +version = "0.5.0" dependencies = [ "bevy", "bevy_gltf_components 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -857,6 +857,18 @@ dependencies = [ "rand", ] +[[package]] +name = "bevy_gltf_blueprints_nested_blueprints_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_rapier3d", + "rand", +] + [[package]] name = "bevy_gltf_components" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index 8d610db..ad9d436 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ "examples/bevy_gltf_blueprints/basic/", "examples/bevy_gltf_blueprints/basic_scene_components/", "examples/bevy_gltf_blueprints/basic_xpbd_physics/", + "examples/bevy_gltf_blueprints/nested_blueprints/", "examples/bevy_gltf_blueprints/animation/", "examples/bevy_gltf_blueprints/multiple_levels/", "examples/bevy_gltf_blueprints/materials/" diff --git a/crates/bevy_gltf_blueprints/Cargo.toml b/crates/bevy_gltf_blueprints/Cargo.toml index 3dfa415..bd8f504 100644 --- a/crates/bevy_gltf_blueprints/Cargo.toml +++ b/crates/bevy_gltf_blueprints/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_gltf_blueprints" -version = "0.4.0" +version = "0.5.0" authors = ["Mark 'kaosat-dev' Moissette"] description = "Adds the ability to define Blueprints/Prefabs for [Bevy](https://bevyengine.org/) inside gltf files and spawn them in Bevy." homepage = "https://github.com/kaosat-dev/Blender_bevy_components_workflow" diff --git a/crates/bevy_gltf_blueprints/README.md b/crates/bevy_gltf_blueprints/README.md index 8d998f0..82e0116 100644 --- a/crates/bevy_gltf_blueprints/README.md +++ b/crates/bevy_gltf_blueprints/README.md @@ -26,7 +26,7 @@ Here's a minimal usage example: # Cargo.toml [dependencies] bevy="0.12" -bevy_gltf_blueprints = { version = "0.4"} +bevy_gltf_blueprints = { version = "0.5"} ``` @@ -64,7 +64,7 @@ fn spawn_blueprint( Add the following to your `[dependencies]` section in `Cargo.toml`: ```toml -bevy_gltf_blueprints = "0.4" +bevy_gltf_blueprints = "0.5" ``` Or use `cargo add`: @@ -281,6 +281,8 @@ https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/example https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/materials +https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/nested_blueprints + ## Compatible Bevy versions @@ -289,7 +291,7 @@ The main branch is compatible with the latest Bevy release, while the branch `be Compatibility of `bevy_gltf_blueprints` versions: | `bevy_gltf_blueprints` | `bevy` | | :-- | :-- | -| `0.3 - 0.4` | `0.12` | +| `0.3 - 0.5` | `0.12` | | `0.1 - 0.2` | `0.11` | | branch `main` | `0.12` | | branch `bevy_main` | `main` | diff --git a/crates/bevy_gltf_blueprints/src/spawn_from_blueprints.rs b/crates/bevy_gltf_blueprints/src/spawn_from_blueprints.rs index 71a518d..6bc6b34 100644 --- a/crates/bevy_gltf_blueprints/src/spawn_from_blueprints.rs +++ b/crates/bevy_gltf_blueprints/src/spawn_from_blueprints.rs @@ -34,7 +34,7 @@ pub struct SpawnedRoot; /// * also takes into account the already exisiting "override" components, ie "override components" > components from blueprint pub(crate) fn spawn_from_blueprints( spawn_placeholders: Query< - (Entity, &Name, &BlueprintName, &Transform), + (Entity, &Name, &BlueprintName, &Transform, Option<&Parent>), ( Added, Added, @@ -49,9 +49,12 @@ pub(crate) fn spawn_from_blueprints( assets_gltf: Res>, asset_server: Res, blueprints_config: Res, + ) { - for (entity, name, blupeprint_name, transform) in spawn_placeholders.iter() { - debug!("need to spawn {:?}", blupeprint_name.0); + for (entity, name, blupeprint_name, transform, original_parent) in spawn_placeholders.iter() { + debug!("need to spawn {:?}, id: {:?}", blupeprint_name.0, entity); + + let what = &blupeprint_name.0; let model_file_name = format!("{}.{}", &what, &blueprints_config.format); let model_path = @@ -60,8 +63,7 @@ pub(crate) fn spawn_from_blueprints( debug!("attempting to spawn {:?}", model_path); let model_handle: Handle = asset_server.load(model_path); - let world = game_world.single_mut(); - let world = world.1[0]; // FIXME: dangerous hack because our gltf data have a single child like this, but might not always be the case + let gltf = assets_gltf .get(&model_handle) @@ -92,6 +94,15 @@ pub(crate) fn spawn_from_blueprints( }, )) .id(); - commands.entity(world).add_child(child_scene); + + let world = game_world.single_mut(); + let mut parent = world.1[0]; // FIXME: dangerous hack because our gltf data have a single child like this, but might not always be the case + + // ideally, insert the newly created entity as a child of the original parent, if any, the world otherwise + if let Some(original_parent) = original_parent { + parent = original_parent.get(); + } + + commands.entity(parent).add_child(child_scene); } } diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/Cargo.lock b/examples/bevy_gltf_blueprints/nested_blueprints/Cargo.lock new file mode 100644 index 0000000..5063b29 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/Cargo.lock @@ -0,0 +1,4629 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8410747ed85a17c4a1e9ed3f5a74d3e7bdcc876cf9a18ff40ae21d645997b2" + +[[package]] +name = "accesskit_consumer" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" +dependencies = [ + "accesskit", +] + +[[package]] +name = "accesskit_macos" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2", + "once_cell", +] + +[[package]] +name = "accesskit_windows" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" +dependencies = [ + "accesskit", + "accesskit_consumer", + "once_cell", + "paste", + "static_assertions", + "windows 0.48.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e39fcec2e10971e188730b7a76bab60647dacc973d4591855ebebcadfaa738" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_windows", + "winit", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "alsa" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47" +dependencies = [ + "alsa-sys", + "bitflags 1.3.2", + "libc", + "nix 0.24.3", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android-activity" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.6.1", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arboard" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +dependencies = [ + "clipboard-win", + "core-graphics", + "image", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "winapi", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-task" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "bevy" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "329e344f835f5a9a4c46a6d1d57371f726aa2c482d1bd669b2b9c4eb1ee91fd7" +dependencies = [ + "bevy_internal", +] + +[[package]] +name = "bevy-inspector-egui" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65b98d6fca1209c36c4d403c377f303aad22d940281fe1a9e431217516f0622" +dependencies = [ + "bevy-inspector-egui-derive", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_egui", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_utils", + "bevy_window", + "egui", + "image", + "once_cell", + "pretty-type-name", + "smallvec", +] + +[[package]] +name = "bevy-inspector-egui-derive" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec800b7cf98151b5dbff80f0eb6dffcb4bcfceef6e457888b395ead4eb7e75ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_a11y" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271b812e5734f5056a400f7d64592dd82d6c0e6179389c2f066f433ab8bc7692" +dependencies = [ + "accesskit", + "bevy_app", + "bevy_derive", + "bevy_ecs", +] + +[[package]] +name = "bevy_animation" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab94187a1253433e14f175293d8a86ec1c2822fda2a17807908f11ec21f45f00" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_time", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_app" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "172d532ea812e5954fa814dae003c207f2a0b20c6e50431787c94a7159677ece" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb2b67984088b23e223cfe9ec1befd89a110665a679acb06839bc4334ed37d6" +dependencies = [ + "async-broadcast", + "async-fs", + "async-lock", + "bevy_app", + "bevy_asset_macros", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bevy_winit", + "blake3", + "crossbeam-channel", + "downcast-rs", + "futures-io", + "futures-lite", + "js-sys", + "parking_lot", + "ron", + "serde", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_asset_loader" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d797cc907daa293a2776fea1517ed79f9e54d9901dfd35410743cbe536d4c2b" +dependencies = [ + "anyhow", + "bevy", + "bevy_asset_loader_derive", + "bevy_common_assets", + "path-slash", + "serde", +] + +[[package]] +name = "bevy_asset_loader_derive" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43820afc6e2a7a9e09adb5f13a760bd9a973f391c106411f0bf229d9958c61d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_asset_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b3245193e90fc8abcf1059a467cb224501dcda083d114c67c10ac66b7171e3a" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_audio" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478de80ff25cb7decbcb22797774d1597e8c32914e81431c67d64faadc08f84a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "oboe", + "rodio", +] + +[[package]] +name = "bevy_common_assets" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9397adf1558aa3f08e20aa567538a7238b451362fc8c6b678d409c040c221799" +dependencies = [ + "anyhow", + "bevy", + "ron", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025e6800b73048092a55c3611e9327ad4c4c17b60517ec1c0086bb40b4b19ea8" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bytemuck", + "serde", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4b08a2d53ba62d9ec1fca3f7f4e0f556e9f59e1c8e63a4b7c2a18c0701152c" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags 2.4.1", + "radsort", + "serde", +] + +[[package]] +name = "bevy_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24bf40259be12a1a24d9fd536f5ff18d31eeb5665b77e2732899783be6edc5d6" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b5a99a9fb6cd7d1eb1714fad193944a0317f0887a15cccb8309c8d37951132" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_log", + "bevy_time", + "bevy_utils", + "sysinfo", +] + +[[package]] +name = "bevy_ecs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae11a1f467c372b50e9d4b55e78370f5420c9db7416200cc441cc84f08174dd3" +dependencies = [ + "async-channel", + "bevy_ecs_macros", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "event-listener", + "fixedbitset", + "rustc-hash", + "serde", + "thiserror", + "thread_local", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f642c2b67c4d0daf8edf15074f6351457eb487a34b3de1290c760d8f3ac9ec16" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_editor_pls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170e3ee3293f70be7fa1b82e8ffe52dcb190c68b2f0ef4847afe65626b417ad7" +dependencies = [ + "bevy", + "bevy_editor_pls_core", + "bevy_editor_pls_default_windows", + "egui", + "egui-gizmo", +] + +[[package]] +name = "bevy_editor_pls_core" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9bab331de653d7d976a1fb0ab3ae8eff1dc821c5991c09bdbe945e70234839c" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "egui_dock", + "indexmap 2.1.0", +] + +[[package]] +name = "bevy_editor_pls_default_windows" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833e3b3d5c69b92527e766b470b27cb4745406e2087be19be81b595cc48792c" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "bevy_editor_pls_core", + "bevy_mod_debugdump", + "egui-gizmo", + "indexmap 2.1.0", + "opener", + "pretty-type-name", +] + +[[package]] +name = "bevy_egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85450af551b7e1cb766f710763b60a12a82ffd6323945a8f776c6334c59ccdc1" +dependencies = [ + "arboard", + "bevy", + "egui", + "thread_local", + "webbrowser", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b9fb5a62c4e3ab70caaa839470d35fa932001b1b34b08bc7f7f1909bd2b3a7" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_gilrs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad31cc2c84315e0759d793d6c5bcb7d8789bbc16359c98d1b766e708c1bbae49" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_log", + "bevy_time", + "bevy_utils", + "gilrs", + "thiserror", +] + +[[package]] +name = "bevy_gizmos" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d1cc978b91f416b23eb16f00e69f95c3a04582021827d8082e92d4725cc510" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_gltf" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f933745c0c86e2c07948def581259b466f99708328657054e956275430ccfd7" +dependencies = [ + "base64 0.13.1", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_tasks", + "bevy_transform", + "bevy_utils", + "gltf", + "percent-encoding", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "bevy_gltf_blueprints" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_gltf_components", +] + +[[package]] +name = "bevy_gltf_blueprints_basic_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_rapier3d", + "rand", +] + +[[package]] +name = "bevy_gltf_components" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd745a2988c631286404e12d184d4a30a634fbbba1deceaaa1ca7fcbc607cc7a" +dependencies = [ + "bevy", + "ron", + "serde", +] + +[[package]] +name = "bevy_hierarchy" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa240011fce8ee23f9b46e5a26a628a31d7860d6d2e4e0e361bb3ea6d5a703" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_utils", + "smallvec", +] + +[[package]] +name = "bevy_input" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e86e241b3a10b79f65a69205552546723b855d3d4c1bd8261637c076144d32f" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_internal" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55124e486814c4d3632d5cfad9c4f4e46d052c028593ec46fef5bfbfb0f840b1" +dependencies = [ + "bevy_a11y", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_audio", + "bevy_core", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gilrs", + "bevy_gizmos", + "bevy_gltf", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_sprite", + "bevy_tasks", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_ui", + "bevy_utils", + "bevy_window", + "bevy_winit", +] + +[[package]] +name = "bevy_log" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "011417debf7868b45932bb97fc0d5bfdeaf9304e324aa94840e2f1e6deeed69d" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_ecs", + "bevy_utils", + "console_error_panic_hook", + "tracing-log", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf6fba87c6d069fcbcd8a48625ca8ab4392ad40d2b260863ce7d641a0f42986d" +dependencies = [ + "proc-macro2", + "quote", + "rustc-hash", + "syn 2.0.39", + "toml_edit 0.20.7", +] + +[[package]] +name = "bevy_math" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "752764558a1f429c20704c3b836a019fa308961c43fdfef4f08e339d456c96be" +dependencies = [ + "glam", + "serde", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b596c41a56f2268ec7cde560edc588bc7b5886e4b49c8b27c4dcc9f7c743424c" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_mod_debugdump" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4db8601f41ea570b7d32f3177292a608196c59bdf3298001a9e202d5e7439438" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_render", + "bevy_utils", + "once_cell", + "petgraph", + "pretty-type-name", +] + +[[package]] +name = "bevy_pbr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeb6a35a78d355cc21c10f277dcd171eca65e30a90e76eb89f4dacf606621fe1" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.4.1", + "bytemuck", + "fixedbitset", + "naga_oil", + "radsort", + "smallvec", + "thread_local", +] + +[[package]] +name = "bevy_ptr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308a02679f6ce21ef71de20fae6d6a2016c07baa21d8e8d0558e6b7851e8adf2" + +[[package]] +name = "bevy_rapier3d" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f0a2641af76c9eb17da0dcb0fb20cd9d615b93b67be0b85f1867487e956b5a" +dependencies = [ + "bevy", + "bitflags 2.4.1", + "log", + "nalgebra", + "rapier3d", + "serde", +] + +[[package]] +name = "bevy_reflect" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd56914a8ad57621d7a1a099f7e6b1f7482c9c76cedc9c3d4c175a203939c5d" +dependencies = [ + "bevy_math", + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "downcast-rs", + "erased-serde", + "glam", + "serde", + "smallvec", + "smol_str", + "thiserror", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f627907c40ac552f798423447fc331fc1ddacd94c5f7a2a70942eb06bc8447" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90d777f4c51bd58e9e40777c6cb8dde0778df7e2c5298b3f9e3455bd12a9856c" +dependencies = [ + "async-channel", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_encase_derive", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_mikktspace", + "bevy_reflect", + "bevy_render_macros", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.4.1", + "bytemuck", + "codespan-reporting", + "downcast-rs", + "encase", + "futures-lite", + "hexasphere", + "image", + "js-sys", + "ktx2", + "naga", + "naga_oil", + "ruzstd", + "serde", + "smallvec", + "thiserror", + "thread_local", + "wasm-bindgen", + "web-sys", + "wgpu", +] + +[[package]] +name = "bevy_render_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b00c3d0abff94a729460fc9aa95c2ceac71b49b3041166bb5ba3098e9657e7" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_scene" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6294396a6375f0b14341d8003408c10aa040e3f833ac8bd49677170ec55d73" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "ron", + "serde", + "thiserror", + "uuid", +] + +[[package]] +name = "bevy_sprite" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f7d1f88a6e5497fdafd95c20984a1d1b5517bc39d51600b4988cd60c51837a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags 2.4.1", + "bytemuck", + "fixedbitset", + "guillotiere", + "radsort", + "rectangle-pack", + "thiserror", +] + +[[package]] +name = "bevy_tasks" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a45be906618192515bc613e46546150089adbb4a82178dc462045acd1e89e92" +dependencies = [ + "async-channel", + "async-executor", + "async-task", + "concurrent-queue", + "futures-lite", + "wasm-bindgen-futures", +] + +[[package]] +name = "bevy_text" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c136af700af4f87c94f68d6e019528c371bf09ebf4a8ff7468bb3c73806b34f5" +dependencies = [ + "ab_glyph", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", + "bevy_window", + "glyph_brush_layout", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_time" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b29709cadf22d318a0b7c79f763e9c5ac414292bd0e850066fa935959021b276" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "crossbeam-channel", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_transform" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70262c51e915b6224129206d23823364e650cf5eb5f4b6ce3ee379f608c180d2" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_ui" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd5ecbf2dceaab118769dd870e34d780bfde556af561fd10d8d613b0f237297e" +dependencies = [ + "bevy_a11y", + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bytemuck", + "serde", + "smallvec", + "taffy", + "thiserror", +] + +[[package]] +name = "bevy_utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8e75d4a34ef0b15dffd1ee9079ef1f0f5139527e192b9d5708b3e158777c753" +dependencies = [ + "ahash", + "bevy_utils_proc_macros", + "getrandom", + "hashbrown 0.14.2", + "instant", + "nonmax", + "petgraph", + "thiserror", + "tracing", + "uuid", +] + +[[package]] +name = "bevy_utils_proc_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7dfd3735a61a1b681ed1e176afe4eae731bbb03e51ad871e9eb39e76a2d170e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_window" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e60d1830b3fbd7db5bfea7ac9fcd0f5e1d1af88c91ab469e697ab176d8b3140b" +dependencies = [ + "bevy_a11y", + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "raw-window-handle", + "serde", +] + +[[package]] +name = "bevy_winit" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8294e78c6a1f9c34d36501a377c5d20bf0fa23a0958187bb270187741448ba" +dependencies = [ + "accesskit_winit", + "approx", + "bevy_a11y", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_math", + "bevy_tasks", + "bevy_utils", + "bevy_window", + "crossbeam-channel", + "raw-window-handle", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bindgen" +version = "0.68.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +dependencies = [ + "bitflags 2.4.1", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.39", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + +[[package]] +name = "blocking" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite", + "piper", + "tracing", +] + +[[package]] +name = "bstr" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +dependencies = [ + "memchr", + "regex-automata 0.4.3", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading 0.7.4", +] + +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "com-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const_panic" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" + +[[package]] +name = "const_soft_float" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "constgebra" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd23e864550e6dafc1e41ac78ce4f1ccddc8672b40c403524a04ff3f0518420" +dependencies = [ + "const_soft_float", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.3.2", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" +dependencies = [ + "bitflags 1.3.2", + "core-foundation-sys", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c" +dependencies = [ + "alsa", + "core-foundation-sys", + "coreaudio-rs", + "dasp_sample", + "jni 0.19.0", + "js-sys", + "libc", + "mach2", + "ndk", + "ndk-context", + "oboe", + "once_cell", + "parking_lot", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.46.0", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +dependencies = [ + "cfg-if", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "d3d12" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20" +dependencies = [ + "bitflags 2.4.1", + "libloading 0.8.1", + "winapi", +] + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "duplicate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +dependencies = [ + "heck", + "proc-macro-error", +] + +[[package]] +name = "ecolor" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf4e52dbbb615cfd30cf5a5265335c217b5fd8d669593cea74a517d9c605af" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd69fed5fcf4fbb8225b24e80ea6193b61e17a625db105ef0c4d71dde6eb8b7" +dependencies = [ + "ahash", + "epaint", + "nohash-hasher", +] + +[[package]] +name = "egui-gizmo" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f732ad247afe275d6cf901e0f134025ad735007c8f4d82e667a6871f1b4a5441" +dependencies = [ + "egui", + "glam", +] + +[[package]] +name = "egui_dock" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a52f67bcab0eb6050cf8051c614966c1c57129fab23dbeae9c157214779053c7" +dependencies = [ + "duplicate", + "egui", + "paste", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "emath" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef2b29de53074e575c18b694167ccbe6e5191f7b25fe65175a0d905a32eeec0" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "encase" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fce2eeef77fd4a293a54b62aa00ac9daebfbcda4bf8998c5a815635b004aa1c" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror", +] + +[[package]] +name = "encase_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e520cde08cbf4f7cc097f61573ec06ce467019803de8ae82fb2823fa1554a0e" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe2568f851fd6144a45fa91cfed8fe5ca8fc0b56ba6797bfc1ed2771b90e37c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "epaint" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58067b840d009143934d91d8dcb8ded054d8301d7c11a517ace0a99bb1e1595e" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "nohash-hasher", + "parking_lot", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + +[[package]] +name = "euclid" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gilrs" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9eec02069fcbd7abe00a28adf216547774889129a777cb5e53fdfb75d59f09" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11f4e03be4f1beda399e4791c11d33102fa48f368e864259e4e810d3a3d2ff5" +dependencies = [ + "core-foundation", + "inotify", + "io-kit-sys", + "js-sys", + "libc", + "libudev-sys", + "log", + "nix 0.27.1", + "uuid", + "vec_map", + "wasm-bindgen", + "web-sys", + "windows 0.51.1", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glow" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gltf" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad2dcfb6dd7a66f9eb3d181a29dcfb22d146b0bcdc2e1ed1713cbf03939a88ea" +dependencies = [ + "byteorder", + "gltf-json", + "lazy_static", +] + +[[package]] +name = "gltf-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cbcea5dd47e7ad4e9ee6f040384fcd7204bbf671aa4f9e7ca7dfc9bfa1de20" +dependencies = [ + "inflections", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "gltf-json" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5b810806b78dde4b71a95cc0e6fdcab34c4c617da3574df166f9987be97d03" +dependencies = [ + "gltf-derive", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "glyph_brush_layout" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +dependencies = [ + "ab_glyph", + "approx", + "xi-unicode", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.4.1", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "gpu-allocator" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8" +dependencies = [ + "backtrace", + "log", + "thiserror", + "winapi", + "windows 0.44.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.4.1", + "gpu-descriptor-types", + "hashbrown 0.14.2", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "grid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec1c01eb1de97451ee0d60de7d81cf1e72aabefb021616027f3d1c3ec1c723c" + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + +[[package]] +name = "hassle-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" +dependencies = [ + "bitflags 1.3.2", + "com-rs", + "libc", + "libloading 0.7.4", + "thiserror", + "widestring", + "winapi", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hexasphere" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb3df16a7bcb1b5bc092abd55e14f77ca70aea14445026e264586fc62889a10" +dependencies = [ + "constgebra", + "glam", +] + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.2", +] + +[[package]] +name = "inflections" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" + +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "futures-core", + "inotify-sys", + "libc", + "tokio", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-kit-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4769cb30e5dcf1710fc6730d3e94f78c47723a014a567de385e113c737394640" +dependencies = [ + "core-foundation-sys", + "mach2", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + +[[package]] +name = "js-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +dependencies = [ + "libc", + "libloading 0.7.4", + "pkg-config", +] + +[[package]] +name = "ktx2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "623b5e6cefd76e58f774bd3cc0c6f5c7615c58c03a97815245a25c3c9bdee318" +dependencies = [ + "bitflags 2.4.1", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "naga" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ceaaa4eedaece7e4ec08c55c640ba03dbb73fb812a6570a59bcf1930d0f70e" +dependencies = [ + "bit-set", + "bitflags 2.4.1", + "codespan-reporting", + "hexf-parse", + "indexmap 1.9.3", + "log", + "num-traits", + "pp-rs", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "naga_oil" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fa9518ff79ae8a98c3abe3897d873a85561d1b5642981c2245c1c4b9b2429d" +dependencies = [ + "bit-set", + "codespan-reporting", + "data-encoding", + "indexmap 1.9.3", + "naga", + "once_cell", + "regex", + "regex-syntax 0.7.5", + "rustc-hash", + "thiserror", + "tracing", + "unicode-ident", +] + +[[package]] +name = "nalgebra" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "serde", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum 0.5.11", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonmax" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4a593ea4fffed8684ad13d75c82cf0b6dc2b88947e0ed85b9e70f555a7e422" + +[[package]] +name = "normpath" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oboe" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" +dependencies = [ + "jni 0.20.0", + "ndk", + "ndk-context", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opener" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788" +dependencies = [ + "bstr", + "normpath", + "winapi", +] + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owned_ttf_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "parry3d" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55dc0e6db79bddbc5fd583569f7356cdcc63e1e9b2b93a9ab70dd8e717160e0" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "indexmap 1.9.3", + "nalgebra", + "num-derive", + "num-traits", + "rustc-hash", + "serde", + "simba", + "slab", + "smallvec", + "spade", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "pp-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty-type-name" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f73cdaf19b52e6143685c3606206e114a4dfa969d6b14ec3894c88eb38bd4b" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89dff0959d98c9758c88826cc002e2c3d0b9dfac4139711d1f30de442f1139b" + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radsort" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "range-alloc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" + +[[package]] +name = "rapier3d" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a8a0bd9d3135f7b4eb45d0796540e7bab47b6b7c974f90567ccc5a0454f42b" +dependencies = [ + "approx", + "arrayvec", + "bit-vec", + "bitflags 1.3.2", + "crossbeam", + "downcast-rs", + "nalgebra", + "num-derive", + "num-traits", + "parry3d", + "rustc-hash", + "serde", + "simba", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rectangle-pack" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "renderdoc-sys" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" + +[[package]] +name = "robust" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + +[[package]] +name = "rodio" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b1bb7b48ee48471f55da122c0044fcc7600cfcc85db88240b89cb832935e611" +dependencies = [ + "cpal", + "lewton", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.5", + "bitflags 2.4.1", + "serde", + "serde_derive", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "libm", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +dependencies = [ + "serde", +] + +[[package]] +name = "smol_str" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spade" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c39e369d9638e42586b226e67df08a7358d1e02eb80629d596b944b7c16f44f" +dependencies = [ + "hashbrown 0.14.2", + "num-traits", + "robust", + "smallvec", +] + +[[package]] +name = "spirv" +version = "0.2.0+1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags 1.3.2", + "num-traits", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "taffy" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c2287b6d7f721ada4cddf61ade5e760b2c6207df041cac9bfaa192897362fd3" +dependencies = [ + "arrayvec", + "grid", + "num-traits", + "slotmap", +] + +[[package]] +name = "termcolor" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" + +[[package]] +name = "wayland-scanner" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "web-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" +dependencies = [ + "core-foundation", + "home", + "jni 0.21.1", + "log", + "ndk-context", + "objc", + "raw-window-handle", + "url", + "web-sys", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wgpu" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed547920565c56c7a29afb4538ac5ae5048865a5d2f05bff3ad4fbeb921a9a2c" +dependencies = [ + "arrayvec", + "cfg-if", + "js-sys", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f8a44dd301a30ceeed3c27d8c0090433d3da04d7b2a4042738095a424d12ae7" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.4.1", + "codespan-reporting", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a80bf0e3c77399bb52850cb0830af9bad073d5cfcb9dd8253bef8125c42db17" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.4.1", + "block", + "core-graphics-types", + "d3d12", + "glow", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.1", + "log", + "metal", + "naga", + "objc", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee64d7398d0c2f9ca48922c902ef69c42d000c759f3db41e355f4a570b052b67" +dependencies = [ + "bitflags 2.4.1", + "js-sys", + "web-sys", +] + +[[package]] +name = "wide" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-implement" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-interface" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winit" +version = "0.28.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +dependencies = [ + "android-activity", + "bitflags 1.3.2", + "cfg_aliases", + "core-foundation", + "core-graphics", + "dispatch", + "instant", + "libc", + "log", + "mio", + "ndk", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle", + "redox_syscall 0.3.5", + "wasm-bindgen", + "wayland-scanner", + "web-sys", + "windows-sys 0.45.0", + "x11-dl", +] + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +dependencies = [ + "gethostname", + "nix 0.24.3", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +dependencies = [ + "nix 0.24.3", +] + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "zerocopy" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/Cargo.toml b/examples/bevy_gltf_blueprints/nested_blueprints/Cargo.toml new file mode 100644 index 0000000..1d6d485 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bevy_gltf_blueprints_nested_blueprints_example" +version = "0.3.0" +edition = "2021" +license = "MIT OR Apache-2.0" + +[dependencies] +bevy="0.12" +bevy_gltf_blueprints = { path = "../../../crates/bevy_gltf_blueprints" } +bevy_rapier3d = { version = "0.23.0", features = [ "serde-serialize", "debug-render-3d", "enhanced-determinism"] } +bevy_asset_loader = { version = "0.18", features = ["standard_dynamic_assets" ]} +bevy_editor_pls = { version = "0.6" } +rand = "0.8.5" diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/README.md b/examples/bevy_gltf_blueprints/nested_blueprints/README.md new file mode 100644 index 0000000..48b807a --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/README.md @@ -0,0 +1,14 @@ + +# Nested blueprints example/demo + +Example of blueprints (and thus gltf) nested & reuse to avoid redundant data in blueprints gltfs that lead to asset & memory bloat +- ideally, to be used together with ```gltf_auto_export``` version >0.8 with the "export nested blueprints" option for exports, as that will generate whole +gltf blueprints hierarchies, and minimise their size for you +- It shows you how ou can configure```Bevy_gltf_blueprints``` to spawn nested blueprints + + +## Running this example + +``` +cargo run --features bevy/dynamic_linking +``` diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_core.assets.ron b/examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_core.assets.ron new file mode 100644 index 0000000..8d0a099 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_core.assets.ron @@ -0,0 +1 @@ +({}) \ No newline at end of file diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_game.assets.ron b/examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_game.assets.ron new file mode 100644 index 0000000..5b1e969 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/assets/assets_game.assets.ron @@ -0,0 +1,6 @@ +({ + "world":File (path: "models/World.glb"), + "models": Folder ( + path: "models/library", + ), +}) \ No newline at end of file diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/World.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/World.glb new file mode 100644 index 0000000000000000000000000000000000000000..fbd0e66b5a2ef5dfa7cfb4d2e263cd973d2887d4 GIT binary patch literal 6904 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 Hex3av1rZyn literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Container.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Container.glb new file mode 100644 index 0000000000000000000000000000000000000000..b54dbc3e8ae7f6e2ee697c28ddcd740ebf78c0a8 GIT binary patch literal 6144 zcmeHKS#R4$5N7W?z0W6u4|!r#-iIF=#jew&wJpPT(*i-jP|`|fOOpagxi$;~`XT)< z&QI$%%Uy{QB_BxIr!J(O+1a^wc2*iDhYw#@FuqZgzwao@&j+2|b2TaoR;ugg>X4-@ zkIF1p*VSK+@+{4YwIM{-HWHThS-$r8`_9^l-O^jOrE2O4%ZoTm!ECm4^+HpN9u%nS zy1)u`{pq>NPRl$3dam}4qIAgm2NjpP9e496KZBy;&p3?-XPhTXQ`RfPV^$n-O+7&v zMLA1L=z(_OCkvw_;e_%i?){mvg0@?}&WB+HrXHAqrVe75&BHk+)6vvuG)m6GM)9V4fN+!|+|(_6*x{9NYDM?M5U7jcb<{Nklcs({WF48M=w#__pDDfe)>k z{%qdg1C|#2{^R6U`fe`qy{H8LQ_m43DwX9iY6&5ptNm=;P1pevjyqkIr%3WvdctcL zVU4=^4lB_*;@*BX9v)SF<6P}V1w+VL{xItC9{5y8Q5deR+lJ|xmTNnX>uVqex`i~l zmSg$8<=GZ!qUm^sV>*s!d744a2{Te5T30SDPH8O%WsD}AjEZFB2orM{&eE(5%OgyR4-f^k$-W9>-;TA{e5w%;WAD z-I*HjUgzNP;p5IOf75n5`#TS|`7?C5_4{V0v;SkLtLx^4rp9SM?vaQ!y8w{6;CERz zHf~clZf?`oRB02BW8J2^(x$P@<}Kp%W;XqKo54z(CTt?jQ4c9Vuc~f-cRU!d{7KCI z;>nx#DoP7mt07FvbAaPC!ww! zefv7)SBax_-dx;lSjT}k#W|6OW+6&p{b2LK_JjR~0>s`_@Tziyvbj$ARk`7AhzZut2Mb$8OK$nH1|+ALWS<& zX|>QyZS7u@@0#kuCAcnzSqhrPi66T+7e@x+&8)WT7l~h@?pevUSvoB7OWec{50wa= z!GQl;z*|;E`H=oNSa#r|E#U>_m+*R7uI#4L_!&QM+3~2#Z)n?F5ccqb&k0+%aoo3G zCTznn7mQz(wMN{AZQLU8#(^2GehceOaX+|)^@j7Nf%`C*c(id@eWLQ}3{Xf1G})bqATm-|GQIgvbk4Z0lMhXq@-C*^nylZv|`d%yC7?+PBmr*UJS z`#_M!gwK_3ffI%Mu)rhf94^uG;s;@eAilJwu?AkUPmsoQT8sTQ(TER__-Va{Zyi1- z9X7(py$DI4l&eGHqxB+uL%~(R_ig1}<$dK#%wH;>D_$u9Gv!0fA1bdYUnw6bZ()8*`2-s3=X53B1~2)3387WE&^Ofs-Ud#xlD-Uw z4I13mRd~C`vkE6YWJ~H56RLf`)T60m(0 z{@vYO+UGp0aG~c#O-}7|ZM~*L%HyRT@ wFR#4?9?nkr#+VSC+&~X>EZXAoLbud2r9r10w8!^}Fp<<5P0B9v{9ph70G#mYm;e9( literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Enemy.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Enemy.glb new file mode 100644 index 0000000000000000000000000000000000000000..2d9f3655d0f803fab518d03295d8d13ba1f1110f GIT binary patch literal 2020 zcmbVMOHUI~6utri;uD|Sde=jpxzm|W8}0BA1%cMI4KV?1rtPH+X=my@fTkf~#mdBu z8~1Jui5oXAjF`BSME`^f#rPjQ_qK(pw19RpIgfk3?>z3Amde=&JqV%i0|-6uL+DW^ zm8@gKb*YErbzGtrbqvpTa2(I9IJRZGp%Oqs<7H|UsS}#MlM1ax!eTfgV*#&G$2DyW zf=O7!n*w$VK!D?7Q*&{Ap^h!10zT}~N;Ss=a+4OV)BtbUMap7CK@!N)=F*|3j_HQy z7;sp}8QZstbB0G9(zr!v#o=~R-_CR6FTu~{6K1e~3G zGLcH9@8?7uCs3Jb70m*J$eVnYMgc6>cG!gLIPWhnQ)k|!>zwCcD%n~UT2myV3b+81 zhCLt=DA(8km=xBC5{)T}ERiVDG>r&qIHD0%R%1j{6irqH5|%`bMBrGIh^R$kD(lvS ztymc8fG1(1s#1hVB&NkQF)GQzNJk2f7l!92CuBa^U<1(oNevtaC;tK`N3zSE;M~c_ zC&T(Tvu7s8X2;U}{twF!-Uq*ne9fb?)GB$fIWS}aGe>H9nSYdw%y3HV`;=j}aM7*1 zJQ>T$PK%aeFqU9uB?>EXTC@sv2EkDk`UrwyDItO{VRHb1t~H{;&W1vvyS)gFPbc9Y z3ZdHI@aXpM{!iWXop(R=M$Go^DRey$)20XbN4x2O-EHP#*pqZtPb;QPXZ)X^ePemH z;QeoX=g0oX4;y=lJI>55;{iG*x4@q`$)EqVs+;~^g2lrNzav;Z7!$~)9}~aZ;_Ma= zoSkCY>hBg4y&)TRN%8f!4{z&VSN9V^$^7Z}Pq{xR8PDtL zCg*9$hW+x5aF4~cY}T7#>n6ZTTwyz?vg6X7v`UH)x6u> z-`SZ^o~A<4=7bJKC=#xsgf{87M@bY$X=w;+a98s2dE{%sr8@F=!841CruX5hsD^gi10oKaVmMXWCg}P~Z$%g-jRzW;T2b+BDsO%M{)taQE{wEs++B zejg>WPf@GPC*<|>+29v_k`(!N9!i z@fKA)8S3}G<2GvO_pGIt`?&nQy)~&+ElFMLgf1F2%VZm#L@d zyKIx^D#k=D&+&}-ch(>Nw1U;-(yPYtIbAE@WKhl4_x|{C{p{>B*pSy(^6JrlYlU<2 z?Cfk!+x_y-E#o(Pp02ZV^7FIus`gtU?~xD43jS}9_sLCi8{fCd$K)1ymwZY-B%hFL O_`Zga?~v={Bl15bXXqvX literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Hand.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Hand.glb new file mode 100644 index 0000000000000000000000000000000000000000..747e2fc7c62717da336e9bc753b46b079ad77ebe GIT binary patch literal 4880 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 G*8c&389pHZ literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Health_Pickup.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Health_Pickup.glb new file mode 100644 index 0000000000000000000000000000000000000000..d02828b0dbef502e303936c312cffa15eee02207 GIT binary patch literal 5656 zcmb7GU3(i>5gtlEftHq!5TK>%Qot#Ss@>Ixr53rin-4dR?OIMsG3m0Bj^u4tyJC0c z*m2y3hdZ8!rx*PJT=xfXYx6u@^IN#+Ef>6Vc8`4IO0tqR zH{8L%KXm#b$}{sun!s@*6giAg25j-L<@jP>Ad3l7x?u>0TE2__0XwT_v-K$ubFrX6 z91OxJ5uMf0_hDrMB@2PuM@VDK^L;l0!AC}BSq+24_3&7_am#lP$1OL7>nD587U~=h zbl2N%&ui}pcMvAJ`A#szyE$Hv;&&1e;~W6pVG=q$Kj~hRNSh)_Ko3CjOEGq*8!`m| zdt-eCRc2POi?W=SKNN$=lP{4(LoqrJhsj{bmwj{>E`wI#$7lCtZ#d}AEL|5}gxh`8 z?xbf-2$N-e6h?lB`^ir`an72Son%1^Za*9bN!==5K~?;|URvp@JBWwASja6Lp! z1Ma3Qc2g~gx>>Fk$~F8cE|yAFt5UA;1D;Vmh{6GiG}8@~J<<(7e84+m(28!01OxB2 zx5Hs?FP-)yqvgf|j}b;%4fbNOY!)llqGj17tbzP!DOAm}RW4WUDoj?@v}_BYYNc|; zwraMl6Fnf4sBl;}k;*r+70SnwUo0uvYkI=~UC?O{TX@Wr@`z*o%Mg(8@DqqfuW_Kmv56A`339~-bb$>D(8W_5FW;~sc1mZR6hM$gg)q2qgf4|6RIAU-4b3@=EI*ad5y2ME7Sk|gq4L+lQI^R3P1 z+RobMhTOOto7=aS*VDD=1s$)=J^-j%4o=5%{M=Nl|Cu`1mT~g<33TQ``OnlfP8!p6#8Q3Im`7*cG9DUF zpfeB3f2PhDGETU*d3E+x{xfxLUYHX#M`Jo;)%s*EUE@T}5!X9QS3I!KOr2}XIC=a8 zI`g3XFVf-quhY!`LOtVciF<0Ajv(AuT$kEEGj)!I`BgC|>e;)U#K%y z#tcWbA7<)W?W%tm|Cr7QG9J`?$+wxHixHvRpi@@nt&i)T(7?>_jL zfAaSd+i`xv-^$M4%75Bj-TuG-{##-#{MA3zW8$0nAe?g!#?W946Z{*TQ}^dPe3xVL z*(5xAoC*Fi*NnWU7uC*Km5-)3bgneL!B|zjn*YfJZ1OE8_)8up_{&;!e@&NXlW=N2 z%&o$v{AI2TC+o_7!n$6U#{beZd&ct#;<1nFF`bjK_*#uidi*Ik8x#CF-qHlS#GvDW zkLu4!{xVMHuVRk;^*DN6oIB&3xl;A=94TGK(%xm{ugBD}=`q2BnjQHzi1Q6>nZG>O z{k1qJn$B;bVsbwyUE$<7%Kv=KF@MxJ+7+5Ul?RPmwSQzEY518pjw$VoBdeEZf3!C; zZq;3$O^JEhUEN>Pr`D^-(R5Xp%zG}*2m@+SI{S}m(R9hFddG8dxHshaIe*0i&xqoI zad3~xpHuQmUQ{lkXXq6yrdQ}WdYXPpZ$Q35FVpk%1G)rxiM~hQryRWr`6m64zDqwQ z0V(KD^dtHed5|7;=qL0uT7X=j*Xid}pbBJ#uFx;&*YpFmc zr&ZdbeaL+}q8oIJ?m*t54f=qdq8A`vpdH$zk7yTimzs2!zC$lTzC?eZZTgt{kbOF! z-_wiKf^3mb*QrDfq(f_D(%bYJXkbR^* literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Humanoid_cactus.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Humanoid_cactus.glb new file mode 100644 index 0000000000000000000000000000000000000000..1e758be7285506af74b4743a8367a129578fba26 GIT binary patch literal 25928 zcmbVT37AyX(XFcI3Zl5gU4)Lf4&!vsjxx<62*@TNu86}h!00f8v#YaP4Zq>c7+s}FJ z)5i!Ajcp~mb|a$k()o!-p5`8> zRp+Rx7?Q52(kZ%In%mX?Nd43Ot3x_dM|ZpV4ymfFs;aH8NjKJ3H`FxNH)d)Ys%k5A zxTdl>G}bMD!6k& z>!{8J3p+bnJ9Mb3vaznd3jfsCWg4p+Yihk9iW4@g#UAU{Nc~CvfBDfE(<-Pq^s35q zL%O~yU0>g*q1IM6)_xOrRdrQ;O@o^Hs+vZPv?8s-HS~0?CZnOgroOh$MZTc5d%i1$ zcp<)7>sj+!HSC_Qr8;LOg=JpQ+|%0C*4+M0vCQf0o!#C#t!+;0oYc^suHM$dLXPfO zG;6jle=K(4?5>HeJ?sZSFJ1CP+ebBtz!)?|5X}`23B8PUy+8ucp4+r>h7``3uBeF zD_k%dv@2wPQB+^YoR;3%T4~=z)H1)hW1jvsSEJSdyPD^;X%}b()M`n#oq&o|eb87@ zU5Pqv?rNDer)^PcXiY_`y{+RLjN2(4oz=5+p+1rtHF@f!(Nm}CLUzuXGpl(?TlcKy z_O^N2p7A^#owM587PM)txq)xXs~}J_RjbcyhpAiJqBxS~o}R9@*}XmZb6IN2hJ&iWf95(dW{YRdw}^^;M0H>2!5XopxYF22Gc#tE)-Z z)z)Yk>Vp}rTW!Sp>N-?qm5yT#+cXW@=9QUrMu#%##)kUFv^H?Xkm}0D`i%B%jS{4* zGW8AB6+<$Wnc7T!y%MC;jaBuHbxILudB*5b)voFM7}Ag%cXCn;>w8`^w(j%Qg&b(K zy6`cMp`m#Cj7xoygle?UHxlAtya+P70cW(32A+I0(a3R=X#b~g zZF+Lwx@_;X&+VQtj&4=LA2VRvk{t$fX|K4aqem1}A zo_r|&Q2lSo+>wQUIlTK$Bb%Tf{GnLXAN=qyhmn)+T~BrVp}0%^!4Lm(c;c#Sa;85N zn`Zcz!>F0PwVwZV)~aj>M$IhO`dKsL*=z_#jL`7jbx(@h6mO{h;D>)X3=QWU{HOiFABv}_zv(ZBQ8U)FAsB0Vq1F$2HUvZS1{yDVHUxw7 zl`(yX8Gkv9J{_>fRymxrNf>9}xmVB3p{GJH_L=Jz_vGxHEr)S-8-EB!p5bpjTMlFI zdh?SzbLgoM4E>+p@p#V8*>V_ruknXq^c`}7nheFasXuBG{^c;v8fXT8DE?CY!4Lm( z82Py){ifp&#doVe_~Bm;I&0@(2tGJBAPfEI*$@m) zJI6yXa$-FjimgxKUk*dFol~LM&L;Sm!n^d_MQ-m?cD(WzGVC%82cpp z1^gixdfu?jg0c6auaWZ*j9!30^oL-?2>)px_jU1>!{`O$55aif zgFp0#V65p&`u*3|w;aZrVxP42Er${BaNU<|eam62sd0v2tf^@Z!RXDs_4|wUX(^1} z#MxneS`H&doY&T;xDy zY5wIf@&o?ygD-UX3Blkr|8n@%;UDEpe<(K1@Gpl^GrL|I4M#nPVARY*!!{oNm$-h) zVdUrS8Ji5Z`YDG|GsYQ$AANsl-g-6(@3_%ndGyq(mOFAGxc0GQ^61&i25)?K2sY04 zOD<{(#n!X%FNZs4oRvpU4OsegE(DLe{ro)o6#7H3ao&FYElnX9IYCXL2SYLH(EQ6` zXa@h#kuT>$F*wb?9R7H>OC3M*6N=qan8 zau}M?r&d4Zu<={{fPa11`t-id24<76oqb!ThGj#rovjsbk9P0*=->5WJG;Rjf~`-t zQ2!8YXWyy^7H31SowK9IoaXeSf7gfY>;``bwmwBpLNV&l{L5iGo1i%qgVX%WVLNBv zzvAM6k1FgVSp9JY4@=n2K98UE$4^=bdOe$c<`!*=#P9oG+fYJJ$wS*scJ?E0{s z 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 K8i7u$G4%h&(8GWL literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Pillar.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Pillar.glb new file mode 100644 index 0000000000000000000000000000000000000000..5ef0918a0c40839f00e4e4a011201c4746ee6bb4 GIT binary patch literal 4188 zcmb_fTXWh*6yByudP^^9oA#C2XN4jm3GhRc*l`-Sw(;0*+8Ng)3s^vnkQiOuco@&{ z&)lEVpV7yDXSEVSU^|&~2kD$Wd(L+*dv<}5fBfPOW9*Nw82k4V#(qBP?$5Xz$0Fey zGd>c5h}!+#ztni# z2LRt_C@$t3Co?YIB#{et#`|M87>U7Arp0%?UgSm>0E%CGfj7L6I$;oqe&S3-JeEj( zC78OA2om4`UBxLJ*Y~9$8GHTLfrx3j-fqaD>m8%fF*+I_dT<*#OG<{Nad$fPFPup@ z;2XNeGY5_vP241nkOpLN+H-tyF5pE+e#0F@c;LGi%aWJE^^>u4fIQP_S#{4HdHrMI zPQ#=u{xwKrF>t&fi{D8^jCBO)rb+0G{A9Q-BRvvHg7P3p+9`_N8HQ8>1pCwOCbCpg zR2OMEJwFxG$dfyfM5!p&!!((uWbC6+V2rW~KVI0&-f+-p%H7cQV^~j+yOXU^iKtlo zw=nVt9I^UYhg8?|#yP#jo~Xj+G6>+9U>cgP8K;zTE}8M7tCqII8HsQr60{=i%c5Ut z54|j#J!(gdA9^Eiuo(`}s{DobMhsw)N04o;(+?-pFp#ZEXqiW}(z3^X4o&f)+9L8$ z57{Y$Fzxx`2#(R0S&5bHc5v>55uG7~GVMisBEbRh`iEgU8fV=<<2^SP2t15lxP5t& zPl^-K(k;WXTFsW$s2fewu-dJ*)i#@Lv!k~))Qe(Kn7K7hTa?2Wvbu%Jsm^|ozW$ji1dvvs>;*m|dFm=Nh!$7-3T z*=g9wx@EpgmQpt!%Z6GU*|aC>jYfwOh`foHc;`yNO_Ip#r8sPKo({T4JI6cSeR)Og zcMtcT?aEu_c>DLQZujuH)8HG%rN+Hr;PuI*x#$JhT%MM%iOi?<_C8IG=RR@Qm3`XR z`qbeQDZ71y6NgdOkiB#`6wxbB{3R198vOWTik-J~!^Tw@rU9-D)EnLW27Rn+t*oCs zd_SB#*3n*%slO6w#9wW1HRWk5gX5Ik27Z&d@h;}Zigy%$)w>kR)SAdrc|Y2Ew)^aG z1pv9P0{maK!4}>Iep78^80um=UcYY(bJPYqwb+?*8^{*uT_j>x1fv9B(MG!sT?o3v zq5K(v8zXU}5&fcQnjISrj!Q|l(CxMo>}{>_{l4tkYSA9OrSDe7xMd@cvT^fW0&kn| zleVrK73ViqZ6$Br)K?NOHc)L|X~%TC(Z)G{d7rV(oqhZooL}KZ^vTWqKTj7r*YOeu zcm?JfUfL@8S{`vo98iksI=+YjI@j^i_Ns)lhA(2sagGr%JX%S z=QYW748aIgJ`{NRKFuGn%XQrz9giP|~M)4NsY#k&ar=?aGw&XCwDOKV(uH})d!~vb(z!&jA=Q>{ET$OOv@I?$cj?yXQ zn9DI&gyxDT3B{P_Se57NvWIWO!TMSpWhZN){7OB==RWdU-53L6m1C|5VJn^_gu51} z5<^*s`c}?~;*os}tQvfgoG6VmnydAvBm>VtNuTC5JY{-DI%++)D^t>^d6g1gZdazH INAqR+A48EWd;kCd literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Player 2.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Player 2.glb new file mode 100644 index 0000000000000000000000000000000000000000..d5705b395ea63f56370e7fce9e613e7e2a07c511 GIT binary patch literal 408 zcmZ9IK}*9x5QU?^B+NO)7<4LLhTlpp67jEc;1(s`|W1k0a{BAk`4-DGU&8{1Rh?EW^MgKzW8%RoRjhIt~P!< z3!`v$0|B&TY^hnyaTq}#fXxH|Ni^LoB+nf%R-%EUs!m5k`l#?zV6h-r=QP-&;QG)X z&hHNB!x@xO2PeBA#D6O=gFA!S8y?lb6>+N@&R6Kjl&C~{(mEexZ0Xk|<)$9>7#^pY zu4>K1&PwyYadXvBZAy0QQ}I14n+jQ%d75G78oM7eYkcP=nW@4;p>rgwctK@Jdg|&} V4!eLAnSzGpO!@y{&>wo={{id`gRlSq literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Unused_in_level_test.glb b/examples/bevy_gltf_blueprints/nested_blueprints/assets/models/library/Unused_in_level_test.glb new file mode 100644 index 0000000000000000000000000000000000000000..4c007d06ccf595d97600010a40d28a3a0ac4de94 GIT binary patch literal 5756 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 HU)e4eT+xSW`EB9WrN>sdZxrXO6>*9?WWSW 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

~)oRc5OvxboUxd zJiE@KGrD`dC7xY#(HY&n_7W#dKh^{v9SNfwdY}(s`kgrbh!FOgj6T_QdAK<1h#u&Z zU88ppXC2W4eHcfKL*n?uLKq#f9r_Vw+!Dv%F@zb@=trC|Qy`i{=fqLn)HwoxTA73ueE@T>oV+3R_5{?y+ zIbS$VK;~TGcmbI?!chXYJ42xFu=QyI{Y!t%6c{7)S-rs6ps%M1Q-rC)sRCmJu1g0pfZoI}5%v@I5E_L`1-M!Py@_8YpbI))E?gnN9VyVC#IF?41sxe9 z^8~mf1p1$NlYlPh$e5ZhGznt`#tZQU0=l3hV{nlGS0gaKh+idOKXhcwwg_;e1jZEc z#lkMa2;myxS^@5G0lkSY5pn|DQel|@H%35j;>(4d1h^H#bpqU>0(ui)DNqmfUoWf@ z;0_Z;hxlswI|#_#AiP zcT4)YwLQ>MYYUe`za;9allqkZtM*Y#bu>bazR z?0mtr`;+?dsrRuvzMa^f_&3HsF%6%3;b{+X>c^*Ec-ljp`thk39y=1RSG)147v4Vl z5J$f~U--9P-ua#Gxa%?RdT1}@P(S6Ew?1(?dbl0t-45(YIkb;*%)7mDI_1#s_~vaV z`ipYtKguz0dpg~5_k(%&1LJ{m7$1~lo;dZ!>BMbs^X_Nc&*|np9-QvD?QGuT$o6!) zd5<@zJ8nCh_c*mZoo?Ra+3Akk&gMN2Y(M5W?KkiF;`F|FI^NBDp4p!62lJkfPIugP zG;h1v9=4Bp;>`Croj7)hdE3qQuzk!ECx4ty9J|E4?Z$e@{I~tgd%cR&k+0HwIQZsm zH`~MZG4J)z>5gL;$}w-ddED84=82O(PABel%RKgEeYZWGZXWx_>5kjZmcyRpvpt<| z9{a}Wj@!zNdcn5B<4vy=&D_U08p6 zbicq}G}aG&%6-j*{i!F`V{6qjO9lH~ChThaYAcrP1KCsVF0hZ?M__-=ex7r}p~5JE zeIa{H_OR@0CkX7fPZT&ma7JOnHA9#!Gze!2=LqKs?9thSv&Uu+-6Sj!*yFN?Wsk}p zlszVU$Th-SgtrNA7j6~)R(QAY9^o$G1Hy-ddxU$1PY4eP4+(39M}^M`Ul1M_zA8K+ zJSD6bz9D=|__px0@O|M2!aoY#!cT>t3%?Lv5`H86PWYqniqQL>+=TRQs$PcGzfE>$ z&+dIsF8LvYO%~jQjMFzqkxeKs&N5jM`hou3PxVxfP2cHnyY%(>o?NbWaKA4`-}?P9 ze1?wWJQDzGMAmivE`49xc?Y{s``iX>U}W2!o0$IYob&eQXUpp^-?rp=2E_Ff2Zx~i zX1Z6yd$ib%H9vNbt^DiM^$&gOYtx4xoPV|F==|r-9J|4La_9W>^B+TY$W_Jy>_N1z zu5!OotNV^QpWNMu@Vd?(k+DHqC0yGBRqOfwhh6*XXWvbny~jwCMf?@ZuV2iMeHBUC zEGqZwUlsmMpEq8S)XyGup!wlFa><_oem3)-T!<%oM|Fhl!+UZ(lZV`p1%@n8J_|6< zZq{Pwb%6K!;(0dzucJHf{>AU>j%|9h$v;)NgWSAv}@;&6h5tM?@ly%YagG7 z5Bcjt{<@IAPJBlw$6@l+sZ8=9TcQQ;GtkEy%hh2fniH9y+%QI$ddy%Y|4>d14abcg?@!hgKz#g0*beW2q2-IQZ~4dLpZxC+AKux$*Zb>!_<;*MZm8cQ36H+Cu8#2A8oyF^*OB|>$G!jN zj*j>sSS^IXUE|MA0VA3Nr#{0ZVeb^XqDx4m_r{E@QrC2u*t?#|~=Nb)cy zr^pt$=-IG&dnVmvV9ekskB7d`Fg)XVzK?f?e*E#gV3NG$!ly%9?s9KVzjNXe8sD5g z<9WuiH|fv$8C&XmF16td<9ZrD*Y}>uTzvp${dmuiGcWffxIF~yxTk=uu&YolP~L$8pV1v8AkSTlK1NIS9mu~?z&?ix z)OVP`8LdV@Zj?a&(E|C#2&9h{sONBjd`Aeo2}cU#uNBCDlt6xTDb{A{q|G?mjE=OK z{InSzX)`=+K3()869Xd<BafGv(7}%BvAJ)@IsB zo5>%y8J;%d(`M4_V=Kb;$wwSp61I=+h+}KQ_Nk9JeL>hhbr7!+2;*Z5>cOXdgz;%3 z_26R%!uZ&NdhoFqVSH>xJ^0v_Fg~`e2|o5GjPE*_Z}bm71?>g}5XX?Rs z9r(-%>cgiF+Jw(|A&k#>@IIb#vVVvZrXGC86JdNnJ@|}A!uXWM_`_#T62>Qu`tgYq z#y?s(CSaWWV}h*!y^4 zl0cub{@x)!UWbM$zOCFaD$gi@j;-Q+@6oO-!v*FH_UX_0UBr^lL7)G5^1VdYQ++^s z4x@hT-Jf&)r9LBaBMbk|K;yg8->je?8K3>Rvb_trzVJ6Ht3RK4Mg{xu&J_2tIL0Y` zLzFP{0|&<(!r?O}aroGh{N!c6GTs^6%xU_YImf(bOw(@G2F5eve1d>IkVlsJk36!h z5y&IUI)Xg1jDKV)gLPpip+;bB?f;heHR-ArJZy_j8Q( zKiLb1bSUCOEs zoA`MGHe!5Z;|l~h#t?cFzfi!YdkGf_7YlGl3+PS!5@A1K51~=GRDi1$(3|*W0=l5% z;lgdg6~f;Nq%j7L6y7CVDWDU&GG68ha7PG?1L92rI-x7$YrfDVj1?F+#1{zYgszOo zMFL!nz&Im*m4F@5^=hF-fEy(+wum1upx5OBdM_5P6?PG513bE4BhViBTZJV;PN2O@ zg=GTV7=gABUoPw-^56-(jPE(y5pHen*b_;i(s%cbbU%-9zey zw@>?tqaW`?nsr)k z?;JYaaj$RYz0P?Z@;YJO?@Gq$=;L+FyzOaw**9-{T8=pHOp*`Z`7D=BcRus(H{03r z=IIB@b-Ls35A)cae73vO&HLR_r#tTcFdy5A^4w1Iezz2Rk#66-ee*8g_1QO1KT{6< zi0}S&-2H6c<)aUC)b+R==ks$e8_)8t$NL2P=CkFxJo7w1(8K*{-@NT-J?)!M?#CqW z_o3PqX8*)qb|B}^FiL)x_MpOdSsSDKA@MMo622omD?Bg!Ncf5HGvP(ySHiD_-wJ;aUJ?Ez{Fm@& z;jaS593kX{-Gz|?`{UmCP*2*@_fS_fFI&*8zpBPxW}8G!Wpgv6-`YPE{;q1Ng;)Rk z)5&+k87uWdjnFE*`uk5Ozcrn^^7Z*1YQs^l)Avx18QkrT-@hcRq1^jU<_-!Q@UhF? zd{FX!Tvk3CN5-6{V{h2p_UOCK`^60|WB99kd@v7IJhEQC@rPV#7GU4N^VZLaoWjNIzmxd$&zU~&`c*4eFIY8i@xm1=m#^R2ZXi`fO2 z-?4@lbJoxLSijuArTWEs>u+~$HT{a|250@OkM&y{^t0aNmF?!Ox^YEGV%sDc3+FYjS$zGx<|T`-<^zTbINP^Z zAJrL;XX}lA%a+euvUus@RTWUHw+h?W=L{0iuWe#FK1pvC;d4g2(wMLPjdvxL)#W;J z1>cM4J}~`lunDSVw6Im`Sg6{sv4{NejD--lSO>rca-`*P}`p}^}m?jf6y;A z>IB<|??sF*qQ?+5WP#WMjGK0i6_0D)^Jm;Vb;!6pn6~ns4)WK2_x${Ccm8AtKDg+f zE8}o-m&us|p8O$Pr!qQSj^sK?3*~f1(ltcZIKD5i_IE+3?o}iDzN%_d?4Al|J#8wGUxzf!#Cwx>_EL%sNK?m|V)=%>$i7IWW~uy(UP1iV!V#uC z@{>mW$e<5pVlU$814lY`N1ilvhOZIO2mRo&BQiAtd1wRSQ3CydJbAD!X|$Cvx)a6* z)J1;gTD|;u+zeBE<8y7`9F$9Ae23MpGO-2vG8X!Cey6w8Jw)!vT?*!5W7tDcKep)4 zx&Bh;VcV3#`rAYOiCts}>&Lrxtw9;=&UnL4gqdrM6La{CH^u^C(inT@@EM1m51tEf zp0|u2}AOub_T^NfWt0_}yTe`^Kv=yte( z&hU(fqXc;Lr*DrFD3^Yv?I#N6Co1eQ0#E-=5zN!BV+G2EuMzSBJT|1iPZcPae#Ms4 z1oMoAsRHG~)0cIEdF*wvP$R%I-cAzW={NfJ2!V2s5wO!Z!TczN84r{TkDVq9=IN&i z0_DPEry~V;^ku9ZEl?Nj!A7SD=1))`=0%c-%Y<0X~ev-np2OZ$C z9qonpI@%RJ18EnB{;pHOqR#t?Qa^iMmpO~I{~|q$Q9pL>&z0+UoO&|#cZd41ON}az z^+TV5pGw1qSuQSjQ{`?|`Th)2!QS>W&zN(J4aO|vj4?$2)(Ff=<{e{?KBixpCye=e zVV2M!%n{}a7YdES6+)A+P-qdB2rGnD!W!Xbp;hSpe7J5)KOdgEqt&f_Zu4Kzdk=7&K*0rKPOce7JPO|zxuOF);z#7DeD@>5AJrm zjrM7u!)`Zz*5#^pe9e45%wEQA#wQL~LrZa#Rb0MdhE`pnb%Wn2T5;CDzfgSHO4-_X zoc<`E3+HBkIQhGN#mgUJH`M|>lX-r6T}KW}=cW|i$9r9GR~loZ*qjhucGq^#akulk zM0V|Wq~8zaSw7Na5x-pb@wuL^g1?o~{+l$;9&Dib;XPofXXz=?=TJ1W`d5AT@%4(^ zKHSIi94^%{9Owp&zh5nrTwAA~FhD@KfM}1nO%B>&wgxC<<*d;bpggNMW zXj{kS#Y~A%JY|V6np0WobO^v9lu>w>AukQbl;xZn)(NtzplSjTjz!s*54S` z56*g=75a1K`hI!Ce`Y>Ud#P{!(tg{AI|t8S`Y!HU^0^((M;^un`EZPZ8u_k|?{~R8 z(Q>UEZG+zz_FVKn&U3L+XWYi@TnP55)ET!WQ-62VKiDtU51Rwew^%k#V-4|nNWnw~ zpYnRoi?d5QFP8l`ZP9NQjo3<#wgalb?+SL$Eqr~R7u${-+~+2BVZoV!er3OpV_gEp z&Wl|W26wyD7WVzGW^T~#_<2n_u3>TEIPWW={}6Khr*69x+85W(GYAZ{A6D{49c32J z#Pce}@L^TYy?@u8^3Oc|G}qNtKbw5i6$33>L+8cf7Tr>oXJ4|P4C}V{lf}mTmew(l z+`7zX?Ct-O?x#4j478st*LkoZ)Mp*LL%dSw!M4nPrTW)>`^kDKW&4!-Jm_}!od;Vx zH75mJGB+KD&qsU`_MR!$pLrXf2mMU+9<);D!8O@Eda!Aw&V%ilK5dWsv_>|vew%w9 zjLVH}&HVNA$n&>i=fTYT+1;V7l{ydhWa_W}O*(%nbsk)s9c!U}=0|cK4Ep(;$2_9% zc)qg6I-lF&eB>dWd^qye$aj64dmi*Y&2zC*=fSnvxe)AAsq^5vO#R(a|8Q=J^-JcI zIInH7Y@EhtJtpbGrz|46@g+IDr}K3Pcx zd(C*?xjlzz7y89}W$%-DHzVtECk*a$5$%cl!|k^XutTx)V8g`0-R`)}gkw9!6W18(_c_n@@i~u7^j-Em=yo_Cd02z9=Rw!Ex#vOe(>xb9 zcG~dzR_Z&juV&{$un+aq#{OKn-hs`9bBXKej{1jlOROLI0G|hA**Govd@w54?V!Bg z^WX)go(FkDyu9u-D_X{4Yl9tVJD>{uHG$7vTeweF(ssEA-q;?Tc9AFED|??@>^#^u zX>gy5vi;=t+XmR7*m>5@Sj`M6e#p1{pzk8yPII3H*~ z9NVJ5Fl7}_+mg=*)5UD)^TFa4-BOlkAI~?h>y(3~b4L`uPwI8u`%T77C0wrl*~0fZ ze_!GAVyMq;?GEuuofoG>`wn!d{zKt;(e^3(c`>xJ)bnDjKjSJsFZ!A3J!+-Si&L_D z_+ZmYofjK2ecB%NX^m`T{WkZ!7?&H{x>XTBuRMP%bzW@9oY%TTTPt;5Y{}GL{m06l z7hAGpE!6MxqV3~zpt?U2% zO#R(a|8TB}^-JcIIG-0|**J~o>6)lq(r}d5dtSV()bk?Wj4ZD^-HL8Pv74H;E!cs! z1LW|#1K+l+a38It?Q)OIUUncyyGW1s(%wfGJ1^!=8rO*FBhH{ZJ)BA7ehNsJuk-kGp^$EqMw=G zqgLv?*q+_P2b)&vytp>gr|nUn*2qTIZ*$L!ak;UrIWPKo<@sBw^I}`(yw)AsTB-Bm z+D!e`FQ)fTm3rT_D?8Rg{XQ?+K0XJk`-`3z-45rYe_4aG=SA1Ix#vai<2)BDbzWST zoeRM}l{znWW$N#a`iFB(tY0#x#QD4!%f@M(7rUc!NyAZI?|HF#OV5j2?^oCxq-gGc z(tF}W;WGU9YOup-l~pg)2(3c(J1$7R1D;!1xQ|xScDYC1*dCoeCJ%GcdA*M=c3x~d zd2pYbvi;=t+XmR7*m*HGb#S-aeQQ6q18p|oW0xCu&QEzy&T{?v$T%&wsk!aZcbf}!*}pA$Um7^hjs?*Nwb@0qL(&!x3@6@Gr0 zU1O}D^IN}$zZ5>#_)W*H_arTD6KrJttdI5U3Hn)Y^xKwy&&2vzzqY@o_KWr2mVeL0 z`dGi(|Cj1#z039YOu91X2l_B}e#V=lf2$RV<%-RZG=JaUGqL_|PgiJ<+esPQ^6!~g zAM4lhzp1@ry|?AxGqFC_FBjGc>y5q3@%K!6qJ4eZhlT%BKd@sw5Rc{P%k1AXvA)*d z>zv!gday13o{9Cber})jM!#+O_e^}wKrigO!QV3p=M3L}uxF`+YkT2c1;2Gw-Tv_B z*aueX`|`OX8VY~E?SRVuJ(E{6_aEKANT1)#iyC!;?Zf@$=t^|RP#uHX0*o8}o{7gb z_tT7u!Gg!=3oxs;jPw!<;8@dH6J#g!3w+!{tb>gS1di zM^ui(l#|GZavXL!9g#jAQ8^t!AIc$2Ik?V9AHtMFyOMIKpG;A^Tn=q?IZ0We9EV-L zq}O+bGO<;{Q?AOi&IupY70c$SC+HCC=5lDG%R%Qn{WVqs@jAfz%;x|DyL7M2V(z;V z-%VEPbAsHnr`#QXx2^kq>Dpbf&k5=a&pM62>{~mzXs~{KPEb#$$YEQYk`u5$h2!oK z@Z0RfIiCT3_a2|;I^aA7$Mc*p_w>a1twO->*yHaR!0*_@@!JVt?-1WdKHzuh@wpoS z{4PD*8$y`hkw>0AGrID-{OHK<=~F+yLr)$)i-zMa4W0PCddfOXpw1crT}BC%jSM!R z&6G=-glQvnP!{@-mpJ8gBJE#?3IrK`D-MDa3bJ?J5jg zpl>C9!?Nv!_Y~}*+V4*1A@yU6{#@C9!}3qh7S!MP!L?R9ujv;YbBr|X3g`8K`RaAYbKaciay;K@YmMM>kqhG{9vA32TA&{K zn0m(w<{1lP1lkKv|JDlT(d}>no#7b|M+xxgPv0IVP%iyS+fNkCPgK}r1fKq#BABOL z#|o4SUnArNcx*_2pDIu;{faH83Fa9KQw7R}r!VUS^VsWTp+c`IgxpIA%voTYDW2hgy)Tr`UKlB-Rf7ti;OyY7kRqj@m@6R9=>}@~uj5){HV9YXp z8AJ4Mjli5_-ZA#*WBQeO!kDiYW(f_#9AU0-q0lH?Av6gKg%)9nutHcRtPyS&T7}-v zhg(Yie7NktQG14rTl;~+J*iYK$yNU;{oSFJD&<81o2*woxr@{HoEqNz`uu#jVcOvS zoK)S|`#C0`Su!vE*(GZp;F*+lUHQS?Znx1s?Q_`e#?QL8y3KDlWw`9^*>}5HOSh8a zF)M8N`S9rd7SCYpZRk?A`a3^(WdB>V#y4G={9Tg`^9?bZV*#G!Z4&TvBByXM`?Ieq z=jX#+;kne+Uif^Y_^)A=v!#!L0`EV>(Y<{GT>ic}SSAQjtzbCZE?S$K! zpAU~n724o`+uQos-fbUF?H%jAEk7T&KGv@`tP|FohLz*<;au3yZeXZDP(QH4ehC-J z(U;lJhpn&m_d4fxu^w#8&xfs#^>h2IH~MYM&xd`^Krif@{eFwj8SP5rE~eNXO?25^ zZrxW3eh;BLoQXMGjvS!2a{ZoquJxIM`m0|`=Ph>voO%0mzLO~R_w(Amke+j0Ph+T` zc~PTFEZc|AhdCn-xgiS-SzyQlLlzjaz>oztv;fb|Mtxx6=Q{7l@Z3B_?~#CW|Kq{V zQ=ZwkZvVNTt=sX!M?00&%DW!ZrhgW`!#qCt^o{TD+<)$|b?d(VV%_jZKA7Y`@69jQ zef+);!FQOajP#w6*53DQRJ7g~nOsMHg~j)VIk&Y6@{_+|;xPF;qWli$BYhO^)h8(@ z=mT$k@@i{`+bdax_f6Ux-d|~@y@Bt*4uq+L_Nq+^ADgsSWp|(}?G1bfcA%W7y$6h_ZZ$_edt*!fjQZ+^mRORqlpNS`Es(8oObxV;^re`!n7F6HH2sE*LT^l9AQ zj?ll@Eom3|(L3}n{T{bB(KEC?(KGZ{;FG>fc*>DeJCpu(*yF+Z85>Fd&|dU$KPK%$ zFz5qseP}P^IccwC72Y>#SK24~>@n?M_`1-)N!vsJDtv6xE|pzJ9ie~W>q7rBo`asr z*iQ5$KWz^Ey=w(+@>&6}dXqK8V=u`c z`U0C?QBF@fluxj^TW{vCl5cpWgTRvOhcGEXz5T z&#MP=<@&q6xe2%2AHOfx9-SrQJCCd`K1-JTw`S*e7Mx|fqq8J0L|8xGmwPcNL0^p) zIB#Ps&i=R&0etok&wVveF-cl-XQMFp%Y?b#0K88?K0ZGNyeEOr`w)QlBo+t@1n)8)g@2$&i8S@OZ`;GZTRoGy^JA>fSQ zpD7=lC0r<6B+L=c7U&afbB=JXKzq*<<_Z@G=L_UV?h*l=k-b`2B8(I+73kl~1^SQt zlzFAFShz;GOqeHJAv6orN8dCF^ufgf<jd&F6Uc); z*b?1|uMl<>b{CK(AN@q1pbz@8@KQHrk{|uhdzb*fi-6tUB%uFrp;16D^n|A!9$QTc z(>`oV8}}3r5h!nm;O{6O>?Ba$&LNJj)VEu}9`Z?}48nT}q+@gPFt6aTJ!$kM+jd2M-pIf1?0@Xb3aEz$k${qeFO%eDc!Aq|s@dA0r$mAjfb?SFld>3dmkUh-wx^HjSMtvjm^;+7 zRA?3$tLOx`NVq28TKVX~yuoJ61Z>GX7$MNcO9aYg%uzS8%Y{n?^kS^k2$XT1fUOz? z%5pyIi~i__4mkn)Q5SMM2-Jm*unE8(R|>R`b~Oom3ygQh5$Uv#boVX#GY%Llvw+Tu zFUrqF&&^?qgV(a7-89ngT(qmP*myT#_W>I2_lZlr^Uh5v+$UB4OM2%{{fwploa--n zpHyF1e`BaWvCGaH4?#cPTU{Rp1Ky4TW1leg+DU*TJY0}y@4C%8TOBxL$hWJ&*d~lD zwuU2&?4AM~VPttWz#&6E?6XSo6QL$TB~$FJWYvD{zF#$2tN> z7}>D`95Uo%PBXVX&sb;RkntJ>M;KY=C-d6RoC6i6U93kue-0Ah2(!i=EWi=26~+m0 z$dHfqgmw`oUyT4qn0%v!nh-{If&hmM`3@6k7vUOVlmJJVd}9PS!pI&kz#&7v!v)$! zn0!YFaD>TsqyR@4*(m}XGUS^tU=zaRyIO!FOui)o9ARXy6X37~Yud2_?IL`%FkXNo ze2j3M07rPLP%pqCL%tIP+C`XrlLR=zRrCn-C`7asiGo`IZTAgppk;z+sDN z!gQfNgzMzb5a0;sg_!~zVcZA-u3jMDX#(vcOuhyIjxhPo6yOLWn-k!WA>Zi&?IKLR zGXyxo z8UcUXLVzQT>~#WM?{hIcH{<8xN~Mnwh7081 zQMg`!$Cj&vodo!|3E1@Q0z7i7g|-Ungn>{)(CqD@W@pQ=md}4uEGsMPG}N# z7v3zuBe$n;qX3WGfxTZO#^c;s#uW(n}ftrNa0%n^`d zZqZ-x$o-x0oB)p;bBq3g-$!_d;IVd#!fz1%Ch+^pzg0LufPb%Wgz!EA9=Y3ug9Pk? z+#$l#0z7i>5)KvMkvm!#CcqFoz$163Fj{~|?xVt&1bF106uJfMg51SIs{oJOH-)nVc;qe@o)O^32=5n;6tK%( zLap!t0se5|Zs8~a{u9E9!Y2iI%Gz;*Pga?I_1nhFZFhzJsfS)XUN;p}7zfTx0{DT0G+*)C( zaEgFjo$x&Y9=S(_dI27}orNC?@W@RQ9u}|*a(Uqq0lr?CE__CSM=mF{2=K^#PM9fR z7vw%KEEnLBdrX)uz$15)@NEGexxW`W1?+;{1wxGgkK7Z&5&<5$Il{97{3nDj2yYUw z<>A6h{Q`223l9kJ$TbKv1bF2370wahk^73U zP@u1nJ43igfJg4DLYDxK+%3XW0z7h83%L6P*{wkqcctL(X3-dBWIc{5A;-g%*MNg)LSIYlNGHR^e8mO}In2OSoHT7w#4A6CM=S3ZD@k6CM}V z2~P^^g>MR7!qdXD!t+A6@PhE7@RHCY{6Tm{_>=Ie@D~9ijKD6!?!ri6KcQMUM5qzQ z3bn#GVS+G8m?BIS>V;VXzuP)Tm@8Z;GzwP;O~OKD}6MS7YunRz*68(E9}S(}IL|b&i;#6~GY5CO<2DnfedgS5 z{H$x3vH9($441t<`)>Ds*+!Qse%X&7s{%q4CzGAOF(jy+v)*Jn{ z<@XhR&X5|3ez}_T_m;7Ls}%M*qh0CD*J67#WXtVx4ViZbex1&n394x10F{;P`--;} zeqXUY)X&NBkOAuVol~jrZnS-=@Xo0_)K9uB_)vaF=wIyC5%q6J=wJFh;X`{n&@&3VzXG519bxxx z!lN&3h7aSx`57AtAL-+Mq+a(g`oLQs+RJ!O+ACRwpHBLbKB2zQzwk-FlZQG&|0?`) z(vPY?$shU`KIwPLp`D?<4r70X|Lp#9nEp-5A%7Hhevb$86Q+Ny5B+F;lKki&`q%m- zZAa%Xz2$Amd_jldU2pG%Gf&yb!sFv~C#wGXGat1lJnaKfIn$zY5hpCoUM)V}uz{Miv_ zS5O%EN991&LgXf&ypp-hrgik`-+XBex8ZED3lBO4SioR zeRpVqI-*4wD;zEyAsi{x3P%ZCj$S1kEgU1jj|<>^G zfXTr>Q9d|Hm?H3w7w>+ZDohnv&{$ZRjKu2$rpt$)5im3Gv*d%>!9PttI9(ubL%oGtKf6t+1>I9H&(yoWSb;Qg)h1@a@u`$6c8?A5{&f%_ZY1KUTq zTzG>(e#+$CpT)v8!ezod;R>Nypg#JhNuUod7AT+oq3neMvh)q_AW`R10lO_1u;X^3D_}XSP7vX(4>Nd~k+9o-;%EEcxVRjFNt~ zKpy&^v~vaYVO+Kdiv?_i{^tqkgT2ld(2sFBaYXYv7j~>h$Y_?3mmdt|@0&ToRpj^frbtAi6xKuzd#!8Jq z8P^HeszIPE=d-@(k8bFY6R;n3A-97-UDybl0PJz4K>KJ{ld!kIcxN1uPWwoA-=aU` zfUzgU&6>TSKtVfk97o& zFtTF>IAqAjoMvu&p0UorA>%a&jxe&!Pv*6sIR`3CyI7BS{v0I05oV1$Sb!s3D~uE1 zkRc!I3GE_Gz8V3JF!@FcH6e`b1OW~i@*O77F2Xg!C;^Tz`Njxvgpoa7fJ26ShYPfe zF!_!U;0TlNNCA#8vQq>&WXLyPz$S#rceMaVn0!kFIKs$YC%|C~*0f^<+C}(iVY~oG z_!!|h0gmugp?CBPv=zKH_uB1}G>t8j$Lcai`{ z7}?nZ95UoPS)g5n$#;qXN0@x43UGvxog=^@L%tOPHX%&DF&K2MYBRf)nLxy}U0yZH`z6AmtVe-96 zfFq3Tr2-uGJ4To*U`N773+D-NgpU%=7vKoj3I_;q$dK;>0b3I$--QAkVe(xhz!66F z4FVi8D=#E0sP%7%q^1 zN8x$_9$T&wb`s#+yM?0!_)iEY3ZE3IHb@b{2jpz#}(Jcv!$L$mNAc1o(Pky6_nR9=V**BETc}Ibo)N zU6A{{uv~yg?lEDu0FT^F!nXx@1JaSJ6O9Xi2<_OOU@ShOAAiPPy zmWKllVMtHCAWdRBiA6z5a5y9S2#z2NA4@a zLV>Ri3Gm2WE#U4Gko!mBIsqQJYlIyHc;xmG-X_3*S2#~t zEMSub!q$ z!WV@a0lBXWa|L+h8ij8N@W`DdTq(dKcZJX_Fb0tOj_`c}9=UnKA^{$`XN2bkc%P&F zosD*J*y;pfAm{u3lE1I`c;UNa)jfTmHw+s@JKH_7kdwLxdWEFjPRK7xUf!m zQdlp1Q|J<&7M>NJ7rKQPgcpUEgdX7!!Yjg`gja>X2pC}mb`f?LMhg20)xse{jWAZI z6~+k@gh|2_VX9Cs%n}-eIl^4wLZMN(LTC~e3N6ACVTG_tSR>plv`qe&=t_kHTv@yKjy^jh! zSlCTCQRoVDziU?E_qdcaD88eW{r;Ftw}IZQ?cfk0>sr>PcFvYFSmLy&KV7i}$dM`I zat{ygc4ym6^US&3_*vI=Q{ne=Ei;f$83Uznt2D-RT=#IrL9uZzdXpVx#+hGSws;!x z2kZVdzvq3w%Rji{t(*OQ#qK@-KYM2aAVqcOe-y=51{m()9!`ftZV(Y>8blZzPz1#B z2Dt|1l0#7u2Ssfo8gBtDa$JAUt5uWG8Rt9Cu-KVPxz#vhYrU+G1FW2A(tu>Azvcujh5 zB6}u(ueihQmv%fF-9H_jG92rlmAC$teIx334E_5Of3Il$vHry#O7_qCP5-{k-z!>w ztbbcw|HA$LGJmgV{jvTPKb(x8_4`PDkcrQ-7~${k8tv zI%nfzJ@_(zuW0?T{t-`J)^GavW&U2#{?4FJ#5XY}_`Mg`Swu0h-2EpM{g~pd?;UZ@-^=kUH6+yDzS(1MO&}z zU3AaPFMN9_kG(Qvw>*3LPsB-f_`_|W*`e5y+dkt2iakTxse@(8VL)2)Sni_VtGiFVlvwT0F z*Y~5u+T`EwR=(7=Z|i}@hwr*Mzr`z6cg$Bc&<)mN&nQuP$pk?GxZWcoAR(w6Bj ztTFQR(_U;Nwk?>(O}osqjo0SG#*3egm%41MY(L@ptUoq3>b7mh`e);!Z>+7fOUgXA z6?~^fTOCDvft|AW6C?V~cqz;0d7_<5@u9CB1TXqV-01`D(iZhoo-&M=^SCzuBQ&t& z{FWE#V?kP8biyrjLun)T-qP}-6`d#fpC{8s?!BeuMNd55&;LA`HgfMREid}TsOJ9X z$+VGsZ)tha=v%%hq#wz&QA%1~^yK4@`=2M%M((|(yd?j{zL!5;;VLyX>!!#e)`r$|5}Ls zg2sO>q@2}f^%vdph0f`e7bVk1DJijx>!h}Z0<`^T+YSVa3zuU}h4y$eUIE~1@l z8=p}``&a#~pPz1e;~3vQZCzu(+)vl%`F{TTsR^_5kG3BhD%<{EnfmUlIOXriiqQJO zHW2u3ByEb(LG={#N^i3T~IvZl&ege)D#o^byaAD_$2pCrf?d^P2xCdE!A| zS=X%3tiRAjq`rzLMZa?~pMR8;@r3(o~V+3OrG(X&Bjfd`ikv1 z>rV7;Wot|Ev(LgYHQV1~YUAGDF<@#uYI@Ju%)b2QJ6=T857iR`@+En@#SDf{q*nzH=_`#p4;`r?=~lixigo=EPO z5>H3>PpNB+_0P&%{|cUr`f;rJWq$Wy{jvV-aQ(A>)4wnCy9eu!^{?!k$@qo){bhdl zVEwWF#hyy`&-$II?;grhju}&RZu@w%qd$)Q!hSVvAIb8;cMsNo8_!lZ9vdfhe3{=p zSbwa4#otQCJKXOt^Sg)Y{wPkwYOm{`^_zHS;=6~k27dPt_M?BP-#u7=ExxwS*|=B_ zzRd3)tUuO2;>pYUP5-{k?;h;$4EjWT6a9kk9?E5~zccuolWn%9V>FpF{))vne1+pa zdsS@xpQm`w-;(^TSlcU8-#x_QO}B^JuX^)UzkUAZ-ruz%cD-x5=PYCMqW8C`_)T)% zV4aNXWRb;(?>_h&G5g9!ARB>f1hNsxMj#u3Yy`3q$VMO=foue_5y(cMJ`v#W%BOWQ z!v5~%+A#jE9P|FS3s=whOVN9SMizbg$K1kq_cV$R$emoYTHiDL;MBw8fBu2)M;pI= zo7w+#_eX`}{`PSZW$u1%WZ_xQ?eVJc=a`!Kaj%a*E(RKL`Z!`O~|NE=L<_~|b zheMklehBp=U;BzRoTz= z#~b%y}|@)3MZJ<0Wt7r9AevKWXawV!uN9TR%C?w;!!~ z$YVcJc`JYG=`W8VkA0f*^vA|ayNv5@*B{1vgzFFX-4mORwefa6w$(P9$6L0Zx6S7F zsmoSvvw6pE<0WtN`0M}tu3w(<{?|+IY_oaCZsVmM8}AFs+k8>p=Ij3{Z}a=okYD?G z#`UW5rU%NK9w=|)z1#JNas8X?596f_{V}`gnen0x=9hUydp5sjXWmWEjQ5R?TNg3E z%;V|Xx)#~|nw@z!Ju_a@GvlQ^^UHjZxA_|S-~D_$^Gn|5*UF;@D~}#b&y1ILZ5}CO z^J{kIow4^`a7>&&6Wi;%Hj8gjADBC{6Hn}Dl`>Z!m+R-57qeSEjM3`3O8v2VuoK%( zdwy5>mRl=|PyegG-BJFy{(tkgYcytdv}ffR7xs4)bK3grfF|4NKfY)GGPa$u)0Wwp zcPmevsUK}K7Rr;ycgCNa`gz7;c64avt=&(h0c)4-!rG0ySkW$aYnSpi-hR>&+X($( zUTnO~yNwsSjhFJvo3$&t{11bRb}YVN`}gm?w(y5dPA%&2?1Jt1?tXh#(d=K8ZC`ug zo7>F(N{?YhKT?^`&pl;(^Jlgc{&3cYqMN;`e)$Jp+*tH<-f7!+T=uWq%>Kb|PAuA^ zdb}wkwp;$PcApgWz2dP#%44@YcG^9q_uanT^4PzK|7n|*w>)VG z7<*J4U&{YxRxD0`%>LHzM_1Z-J2ok;+%@;5LdHAd?b((0>HBKNi+%Ctd$wUGZ{uAy z>&D8im%m@gcqhMjn_r&sVt?^l&u_y{JvLs;(@)Be9{*V(GSL7toFA-`tY5N zm-};PcH)UIc4AJx*-7jCc`-ZnFh;9~{#ZR`x3!}26M1no!*((2_uc$$4b9)*qemQ# znccQE$}_I_w5?Iz+B$0UK;L(i+WL<-hWhhMTiDT|mAAR0ej5wrZ7e10kB_4<#)2Ik zlBYcFq5*4{m{_~ak+o}f+O_hG_ea`xY`n~ijkmuvZ{syP=)^H}wFW_A2e^)gl<#qY zYq%-PHLbvP*`#XThu=xe74rn&V{+{`*N1c6wp}C6_1kuBIM+k~*K=d%8gStEBG~yZ z61Y~9w5y|=Qp)8!y1SIILQg?I%0w^0^|pP)v7$h5?d^QAK=c#+1@-|BuFJ)awqTIp zGvWwCT*~*QpbMk@a>JDZSKyLzZ7&=zMu`)|XmO$#Be+;i7jknkb@hE<;>wQ`*vC6g zQW_T%94EVUqEeV7C|m59?9x+|LW!6u&Ja_?RKc7On^VPUg7Ka%rimG1x}ZFMXA1g^ z??SOyFu!LB=Jy=I{864d&l8KpMdEC6fjC#p5wyqL%ofbSEJ6Lu4|UHI_%b&a3));F zh}$wj94`@+St=+)e~2Z0=lybVjK~rAQjU3IPUsK)CFZnEos_44^!qS@{b)hl&KLB* zu_zVvi+*Bf9Hy<=$}>J<%NUyrG)sMlyYxt<&_qz*QSLo`rM;$(W=i>tI>@&Wd``?M z!*+$8*z*~4NqucZTftmhDCj5kuq|O{JA;mbZLpKTzl*@$)#bY>h3`GN-tFiBig< zQ9hq4D8u~o*=d6Qpvy9`NDw3Xf4ZPQ#A~{sf9UQEfzDbAwAxyrP3l5(=ZM*Y*fYn> zE9EZ`Y&*2GM9dLrl|EscFD`OitdxGR-4L^-f>^R093dFvnSy%J9Bt#fOq?a?7h1^| z)NzR*R>gw4teo|i{?j-55EI0Yw(vV#&=xTwCO|yS6O4~>%@!>MdPhfm&iMG;=9d1W z1GF+htPm^3o#N|al~^sXU+TC_DfTsv%booSrEsN7*D8gp1ZCGbu6Aj;Qdlp3Cf*m< zh-<|Lah@PUJ+*)F~(81E0n_r(vzYl8Cly)Ni8z8{KD1@rq8!Ti1{m_N!>=iA~V@v+z`-W6|& zpNj2*xp_}82Rj7yGe6Y*zQC8c`9#p>XM(ux5ybHeL7ClxGW3U7(s$l}F4l^50^i+& zd3r?9ANotoX`4DJPygsQ+YI(A1#x>v(Eruq4MD%?Cw9hR+G0G6kJxS(bu;%r?0ekmE&rqd{!>VuNQny%qhcmg`L>*8FNW}*NYnjbFoX%PwHV?!p?RE z8wK0o%>w_g3hcMK{B26%4ndhaUH&emlx2?joUv1ex#P1}Z3}zA31eZEJ;iMxYC}B{cmbL49mX z*q?K-?NIjHf_lCq`0PcOe@Q94EGYAe%fG6WvS^ggD+Oh?3qJdvpg-vH=i(zljOhOl z1pOgiuL=5x?tU!L*|h?#UMJ8db)mU81zIEa%<&C^^6v_^9oqR!{8XS-`h@KR@v-9* zrSyaChM4UZ#FFjcQo$Hs7u1X9XdB->;wOTBp_SVOb$lU+)px~iVdbp9^q;=bhbsi} zqb>Ya3ECn?!~}@P+k){iF2;MUK=0^?&lw+|+uYKBbbwY~5d6Ko{V?rsLw`5wt$#eK z4xHKLfYl`=@>F?)GaU*DhC`aQqgoC8qt{dbFSRd62;= z*G}J>JP+f?rMdL(`p56z%Nr*AgP zjg36z)UeE5EJs0TPCoPr`%G3jXb_f1U6zZR*VyImoHR0 zUSK0%Bu*08$n!cvV2caNO%#laJmrc7Hu97^MPMV3Z%kmrhjNny<04PF$pRaB%9RLg zcqx zJ5yjIPq|WojXb_>1vY#rcbMQso^po^Y~(4|SYRWMZySM)IGimm5X6K0IbycJM*dte zN6dD4w(|=GHhd^IPt0}s*-GaNY~(4oKwu+}??QnMAIdEf%olmeT_muPr`*K?8+m*e z3vBpMZmD4Y$y08bz($^O%LO*__+BEgtq?24W#UqoU!`=7vyopdE_XKa*Nd+>8$S51 z6<4@CzU!QgJig@u8+m+h5#<6Oe6JE$x;*8sb~f_mV!gmd9^bDDZ1~`Nt+>YJDYwDd z$W!h*XCsgA-Oh#&zB|QFTpr&yosB%cZ#f%zeBX99VsV4GNiZ(*39(UNBY&f~Szsf- zS==wM;X}Dw1>+)5x!VOc@|3$%U?Y$3*9A6wD0iD+T;wTthrmXja(4-Auu#w021%VA8$~`O?7kSD(DzK5K z++zY8d3?Vku;D|wCj{dnPq`-rHu9AFrocuX-)#aLK9u`h5EJs0+as`%r`&FVjXb`e ziQR%&d`mnh7#I1c#q$Ci`Detp1vc_4#H9ioK9qY=FfQ_x`>w!7o^r1UY~=C1LSVy( zaxV$SMV@jm3vA>m_o~1~9^WekHhd^oDHs=d%54|e$W!inV!O-ZdyT+`59NL?hza@a z;%5RIdCI*bu#w02CjuMsLtoz)#E$%Z;s*j7`Fq7{0vq|w;zofDAIkku5Nq<3`;ov# zo^n4H*vR9X5ZLgc+z!Fqkf+@10vmbCy&RE$Wv~$z(yY5 z>jgIAuv5G%hzI#M#d`u9`M1PR1vc_;i(LX6K9qZ35MT0?`#@kLPq`|AjXb^|3T*gL z?jyl`k*D0p0vmbCeIl@t$M;i#4Ij$w7R*0+%Iy)mU7m8E3vA@^{X$@?{=3lq-FWh0 z+Q&532YRg#M+n|tB90U*1@^-Q@oXZnuM=&=dVw83;(N3>O5oR2%of=3TO*nY?D*x0 z^;Tp;#fgk zZWRUM4uQS5xKs2M*dGuh#Ww_Y{O%S51aZM{ptw+A$8VDuEU@D@T6`w3<9D36M-UhM z28jxR9ls%Bv%rquiQ-X#9l!g;P(fVq`sl%en*L)3hele6^{wxf?tt%TwsrjapFmV9lw|;6WH;4N}ME!3x3}c%LI1( zo)#wy?D$eP(@s7a$fOtlnFNkGtF;ToPu-_^^ z5+4ZcJ;hhWw*_|mCW%kPg95+j#n%OP{EEeRfgQir;#7ehzZb+j!Cc`tS)3uT`W!oc7mHp3JAM^P zpAZ8Ce#eQE1a|y3DSbv@$8V6BD6s!gpI@l-Ka>)e3zYv)rE`^H|C93bl>V1e?8}sI zA}$fw@mrwuzm*af{Qjnt=Tl+FZ;{gfRf-+IW5gb3$M64%g|ZPB{QgHN&&a}#pC>MI z_C3lsRerU=j^AQ&m>@3rEfG@%cKnu#!v%Kyt`v6&?D+9)trrDx!EdCPEwJPFkmxV4 z<9DL?roi4D;<8-C#7cqvNU=&BEwEoL+KFogcKj|CIfA(0*IbMj*zvnum+Uv*zsE{S_$HU-&JCpz>eQK(OO`~?`F|Y zV8`zf@w^}|_>C4P3+(tkEWRbM<9C7>C$P5>8$^3ST-J*`ah<^4R$MPS2<+v8?fg-t z*zrq<&Z48hud8@UV8`z!kuR|0$9DdlQtbG35jP6rf?qfB6@eYU?qZ|Bjvw23u~O{# z-6DDl;)35-#c2XNez%I=0y}y|Gv(?h@GXJ660Z)(iaZ6xRss_!WpA0y}=J2?Ld4$M0@2 zK`>YN^%WxocKq%UTLpIfE)ZW6*zubrcB{^ErTBeYoG!5AcZy&g$BrLs*7?r#6qkRNac^j>eT2LBvZlIPe@7@E6FDMRv=Motv&a`5qZWt(Vz3x4Mu{;Z zE+&X#F-1%hGexO5SIidkM44DDmWx$ljaVzn#RicO8^x{SPEjH56I;YXVyk#kJT0CV zFN#;hcJZ3nA$E#)#4b@KJ{G&hFT`H)Tk(7GXYm*DH$f0sgJL2_ zazz`FCpwFK(MuGF0b;NiE=GwlA}%I~VlhQb6Ej7rI9JRT^F*0gES8H^VvSfU%Ebne z5F5p<;!aT^?h{+YLt?9VQaml57cYue#CGwT*dca`cf>AHB|a9r#V^EO@mukG@n`WD z@i);(+r$wfCUQisXe07OXOS;@i2^Y|3>L%1C^1IF#RO3-rif``rYIHXirHeGC=-jt zaPMVvd*!Ws_VKn_U-D+3_XKJ7m0komrY={&ZQbVBjWw<&&8OE= z&EB!iXZz1ruurS{J@S8hpWXXzx{3Xjy-Hgp+vjh*&StD3wZAdby;isE*_7W5|9kK^ z-mNjsi;EBE3E1amU)cy`Ban?iHUilQWFwG`z?U5Xjvp5{(Q%49j^e(J9H;#D^hA-U z+`Oqnd`Rr-B2l^ESKZ?Dck`y_s`EMvAIrVFJ0&7DKl)?b1uKVDCyHde=j`e z=cz}ZSKDbP)K;anMLYN=+uiQx=@0FwJ->e1vHD#-MXt}(QxxiRbzXh;%TR~v^7GU| zpYT;ZjNR&C?7lB$87F0K{rZ4G(Y17;Om=wKGzR`BdsQNfLiJPz_59W!m#cHT`MUB&u3gF(h1w0}8^tN3@;%J263Pk9$}tEV!kXSd(~WS!M>XXS|@?NYud)NUy6&k^Nq zF07w^nFR|*ZeO@y!L|hpepNJVSa(0axkHn<&K9~@%B&C;Ou_ zj`25l4yZ1(a6v~ufA1zwZS3^>zj@PP@rB8@3PWub($>OcorTo7Y13c*`qie!R^a!i zQTZ0tGtjSd_^>o&hYb;*}UmPJ!|`aRA#;E{80XEs~yyb0o7&R+?nU+8H<%!u;2x2t1#4- z@^AZPRA=EP)k%LAF8I}}ep?-iHRcZ68tv{9FI#YqU+0?}yDFYjs@obiY*=-E=g#4N ze%P=sO8t7qQqQJjJ%!Y>vaDsH*!GtCyZVmBg+lXH==&{P@JMxDZ781{QzN}LZ<fCC_^3OY0H(@ zy!q`?z9`hL^pflY?YZ*w)5_CNzx*>R78QZ!YAkgxSnyDFp7*?xHgfT?DqCsgW%v6N zvg>_yJ$~NR@8{VE@%>ZyZ)yFx{P**HsQN-58>v%vo|yA2oMRa%_V>!zz0tNcj-2PH zDhSSV=rlvEFFVhX?r(yNrzFo4TSFD0^Bi%`bGZI-Z#2GF;N=qkeAE$of240sUboGA z`kf$F6F!qa2_B3d`EYe_Eg$S^cIxsuv_SNAX@8dv zPzuM1!D5I@hbbK{MhHG1>E0i&bd)&3r6(%wCkDCqEIwmI+;Ni9g`!N*7yKuPNupSs zBBqF`EQFVw#vGO2t_&Jy&TDL4Rk9IWC>6be@jJh1oM#) ze1?tmdY9gyl(EsyWI>!}3&wMpINYU2xb!HcM~h=znxphc(ah0YDH>}f+6eU3RuzXsUt&=Dzf#^+}^&=DFsTktutK2H$u zIpRW>q9fif6pO?~VxCwnmI(ASU!b2$#0r=4IpxvF<>CrKd9-3wKrOlM05!N5dwH4HX zPMCkzAMEI(t3VH=-9-=4Q=qM0?tO2ieFQq`Cs=O=3f2iy#)d}NZb^v&+CUd*f^~%y z4HOD=K{`%gAMZdP6U8LK=jej>r-kt16>7k zpD(DVr-OOt^VGR!Jz$Q93+6B`m|NzN_v77ro5RU^Um~Wsl({=iusvfx-MwdCVV1y7 zT!_!vE6^hN_ zg7~8I+FlvEM@?1qUcII6dq11sy4p|ocr;dgTI74j3fDey*{+Q@=K9CAsa)T}i-Z_8 zcKIWe9_egNl(NmcqSfmMWw5b^93w2go()uW#%}SyL%P zS@N{Q3tM>2>#q0R1mmRN`GPvB8#`sm6BEi{>mhmy*2vy2&p7EfHtNh5l%Xtn>ZS~~ zKH^wGzvwG@#z`NsQ783ar!0BurVO?M(O2{n{av1M(r;`7#BqW$lqF9)l)*Mo3=)II z5SM41^cx#>QV(S)OP;!IeH*I$Fu^`xgv&Ed`i+e`sfRL@B~RUy!8TGHFX$J2CC@nN zBR1-!9_*AQPu-NkHcFfzMvD_&evHzw&Q_?j$k{1NJ}xMO-#9T|V5cnklSEu#qfY9^ zPFeEQO&M$x#K~f!nB?-bgC91=S}Z6-S@N_)8EliqDFQoX$ZS~~ z5-~+g6{ouVX-cO#+v!TDJ3D2`&k&TsZ>BgyV5cnkS%NaysFS*}QDh|BXC@2Q9S_?&X&`Hc4i z#r5I_(ck6yjQ7-oKc7>MJfHEtKqLfxpkL(qjQ7-oKQ_vd=QG|{@7LXaKfGU`qR(#= zhl#1;aB;i9eup?!@M;T_1-Bc_pYGc(*@I}O~t)}I8YAzed1%$TzpNG3gXaAV5i=*1?4^x)Jq&Fhy8x> zsmK*u#3zC{JRq=BZwo=Wvjp`L2g+f8Q0x@+v!ys!5C{5+oqAgd%AF&qmpD)kduwr? z__}B#ZW6@dGl9LGIA2h%t+-hb2g+gphS($8i-*LK3f|Y0ULdejZ&yLN-GX|F1Ld$k zEIt<<#3N#$*di_z*r_*9P;R!MUgAJG?2n3hf_`=sJq2-~pV+Cllc3yOLA}I*a@aeI z`C_Z+A{L1E#bW~d<6@zpTsQHB$QP8uUM7AiDEEZ;rsysxhn;$#6qNggpx#A-a@aSB zi^Wr-m-xA$AHNdV|3@qql)FfLOVAI>VLwIm7L;2emJ0eoIqcN?w4mI-2KY~}bETj@KF9X5SSRSy2=V^}{lP|EBL!uy64b}%*p3%hi&w=c@i)OZ zUlG_xi*iA^6U17y6hYN3+v zi6fL}+}8^1)H_ye7uSgO;z~g|?B5sH3Hn(ij*^}6(@*Tw8yA$DBdGT(LAkinABb_{ zdNEgw7dHrOCy6%%Wjc!21fOI3p_m|U6tl%d@gsqax)Opij|l4Hb8J5rJH*>!x0ob~ z1vcvXilEFxg8KLz+sWc^^_f1k6|W2WgN?dw5tL~osE^OF*?A269YTd{hYPf{zn6Wl zmG*B$pNn3U7R7#66cE9Vy;*yE)q+{C1SN$Bi4#?u|XunMscgSQ&foi#1`?8*eaeBPmAZp zi{cegDSjY+B;F8jig(2>Q6)YSpNY@Kuf(s#zlqSkW8#l*`*DmE3BB>xbZv`P?mKc%)(|SRpX{kKXOzvEH-AO`smtcgU$tWX{QZ=z z<)b5NvHSP1sO_`*+D%7^K8=3)A6M&dG{3iWc4mV*o7!&dlcY`)pC;4T?Dzb5Tbf!v z)9*EP`+emtjNaE^zlHT--o`im{-cXB3BktqtkZ>!)9Q)+M^ayj|EgJM{??d(+Uixy zSFbXk14%!AwCjwMq{v|2l64*ER=#C#o9493@!EmC?$%)vsmP$z z(@p#Pzj4gFcKL(ol=$araxK2Bv22&M#d*f+6$|FfZNS#&x|puNtEN$7?ST)|f3X{n z@V7U%v>D6hUOazQat5tjHcdvLq3cB6;N)+=O(&)c(}~5`^keU5EnB>LNyBB*C|!T+ zN8?8EtWGQ#2Qe)j66l2W+}3Yf&#h@&=VSk!T*qUcTh|YB#}O_aKWFa63s)>#y|jUc zSTC&lOKxk;e6XH3u*TQh`s?{MHh_Ak95)^O^?bXn=ZTc{+{M?n)5PCu-fy0?Z1J)c z^&Zo{1=IDn8V|Sa^!n8GykRXQUVVMP$D`KnKU-QcG}umaHF%5Dt8TwKdi%UtN*T_HewJDLw7T z>M00qD3>=Pswaz6R8QQ0 zFBXu4l$MSR^fXFs*xx~%M-0}dpm95Hwc}LNmHmCAKb8F#x{E7k=f7GhUsHXo8T?n@ z*OVDLH=;&jM&i%#*{@%=g(Mm`QkMG_^PF|(+;E~wbT(cvtNkEUA0Ar z7bM5Z`^J93l=C3*&J&~OAcOLDjxt(*@?FNeT~j0fN4D5f_ji*^(IE$0X78cF)->K3 zbCxV$ylCmdhIaEv-?6+XIWN57?;Bk+qkosH!C3xJ{Nruz@v8sp{hB&X$M=gD>CEm0 zOXjSazhcpx#r5{BtKjJe(vkgCrr&ky_p(WnIzzWcwWDnOc629S-}>JblO~!Zw`20W zipNFYC$0PZ>(|BgB=vf!96I1jQfu$;>HIq14W;`seI2ax>xu43{lox~1v% zzb=2s)((plQ1PL3?p+{rbLU zS&ipoCeE3=>VVEe#i;HP|DdJJ>Zu^Bry#VUT;AxYo-9r&dh(A~!+J9Pn4V&--TLI#DQjZ# zY11v+pfp|opwXnBGIf5hIIE{1w4q$-iBUaSoJ>y?-Mr}~e_yAoiznFr&h%q?O0;$B zlUt{(iE)dUm(8&^4M@}V51P#E`c#(HQxMuvu3}77PZlTB6Z^Zh3w!#1lSkGkrytW( zEYGb^Zk@6wPF=QQNjj$_()G7~9Hy&2IetpqlzRL$YyJTqI{8&5vU;-6M$)RWfu8d8 ziN%R$Pt|l9BlUX-(~;>a(b26_PH)y&y5CEs>u>$wDrR3-nfjhItE(Wipy#Bu)syMR^c3sj)+x7Mncs}n7p_cRnwQ@oX{76K{m}V*Ur(9(J8wr;PeEuy zxzc!4PZlTBQ>}mJIsKTP65ZVTr;=X{Of}zELyp0&e8+8&N)_@Js%asHpo?t4|K(T&*Eh3R4eT*q$#JT z{Bfoy(~s#X(aWtsep9-tsm8T%Fy}Ef~=l`(1vn(6QX*uIGLW1)&Y)DkettWN}K-)4u1+oqkMDu>o#Gf%AR!>1_L%F=kQ9W6lQr0Ku5$x|wKc=VH5VtE}SLQi$#hj%pmn>SjQtMMg z&X}j`Z~e&helNB>dEIAFe>O)1s-^_G^3OxLIMumMIsKTP5~JKY<#cAzJxM<*Y>19B zFA>dE3%m!3>Nrl;76Zhdk(vnG5!1sBU5@D+FI`ddFTt*7Fw zo`TSZa;2w5^<;4h>*=fC|Bo?Am*BYE^kaHTjCJdiTc@lEUk?pBL!PW5U4QF`=_ym! z*_CDW6ofXEtC$wmlf}vOlq|a4U1wJwoF{ksF+IhWyWfGhb;_FX_0Yg`P}GsGzxAW8 z^H5fry4_5b$V1!7N&$kLf9KnOmov&a8=~9)bgNv)4CG*FR_{v*$PWX7v<= zHk7M4BdRBhQ;MGU{XWm>$Mh7t!mUqEXVyeg4-G$%O4r}|QP*+QfqtJCyCi!a%3>Q% zt7b*@WO1tVILhhA^ptSF)3$ZW+Bn(HX*TdT#OeB5KkCwxm8)-BkkwO-p~@?b>dE31 z=qcPmP2CV9W`wRIKT=kx!Y`-ShY`^(-Qy`PE2*S7cAhMMD? z?)|>g^|!EP?-y>7s9)O9`yN%D6KwDPedV1lOecx!lR7c|SZ~t3-*>wH){pG{!YvX9 zH_baQsuRQomfgJd{HHYigPL~es3LRs8BSz%6@)gFtGFQ073Ya9 zPSL+}qW2jdrE<1kto8n}DfbbKxxb5Se`ojk<2W|1`s{v?cK_IX*?8sq|MJgadfw{h zMzP)XJD*0qJkTs$p5yB5>%b#$bnNKXO^-RIb?m64S|8PD9eQiEJgEJ9I3`YuB!%ecQGr>Q`_2Q~#RlE=ik11`aA2 zI%sgo;Ny-fIj&#-k^z1Dmh?OJ*ph-?z5RaVcj;2nv3>iJc5T}DWTGE=?c4VrI%rVI z@F7D=MhqQVGHmc*zaR8r(0~DcKl&H+E$Q2*Pf70{J^fg8%*#vmp>>;*_HEjhG&B|+ z^748QA2PIL>=)ARggZ_cH&?#Pl8 zMjl@>YUD`0A6^}Ya36+B7t9BJ=wDFa>!D|Ueo2>(9sT&XZQZ(B4|OX|&v8|(lVeV{ zJ^J|L)d#h&IE4FZZ3Zz&>Y!zdTy_<;zB+g8)SGyppfS_#iK9;N;XN^+4?!FP zEwEjp$K*DV5(BLZ^^F1ZOuT7(^eDA|g4!2;48nboHlo{v+b;b%a60JSy96C{>d>Kj zdt_T+U8pSpHg3Od#%}GaFVQ~OJS1a~+$O_1Ol}LkH3$B-pmotSP+R-Wn>BCkkDYP5 zw#SSfT{7l`(aC~p%<#q741;$^S2AVgg zecDcGpFW5a=?8sqdPE0or^$86)`O%52K4Qx_K)?~M8EwG9ZLLdLG81Ts44z_`=Pdp zJ?)MieWFrG#=(yPYl7PrMreIZZi`6`RBKS}_tBc19DiQ*{;6e)7By}Ik@iFJAA92d z+h?7Owr}fz+SfY3eu=SnXqTk6_!E->{rZivxwr9$#~#E#82^6T_s6gH)i(R*4kD*% z(^~ak-M$;Y-v`aRuR-SC=`Xn!1lvH3<9G9))PK8@Jk2}%rTy)Tx^(W`yIOxX2Y&mk zLu`YrLr(t@{n@@btiR+M*tJt9U;F5eIMk%Quq_z_+YW+lfw9}Zz+VT4+xEx&yM3~@ zKaN${{tDds)44-({h@vBS8I*E^??}BmOozF^z%XN+4fEQ%zg5>g!aShPl11Y#<3Y= zX1izpt&O@;V&IS0A9Hf;NHuzrTJ|_ks0> zc{kV>`|Z2^kAFPG*oi%BzhbXr!XDkaRUZ%TPxJflLx07=*1V+lO#8|0F1qd=XX~E7 z@0IQ}=M8P!`Zb_`|53!k*8Sw%qdn7Ia^5*6wqp<09M*iRBi)p>vA_Dzub}U!>bVbT zk2Tkiy^ei24sO$`Rh>F-XrG$t7^zRM-lKZ=>@`Yljq25-$Ecq9-AA=+)ApdX+0edb z{pyZ@J*OkltD(>7n6PZs%6we~u3R+p7n``xJsoY<$(F_sy7Zqsrj39pi&40;}mJ z)~BJmIeF=&7hJe__54PI2M-VG%|vcyO&xAP#RsCBeV*@f(|eKUOjaDg^IhsO@yXF> zoc?(|ojgpq_Wqup?{Y>4=E3xJ(4Oydtb4vo-(;GYlbkn88z7qla6_< zRHQuL#f{IdhlsgxT6?iu+<4zjrm1zT|e&hV|t2J zxb?~D%$i8!C+B_@>H1qgY<_4__PX#bxhS1~WDCySHmi73?gd>5x5(^F!z zTc4cHEPClapCw&?>xbznQ~SGute%3=Jz;THPZrupnzt~}Q=UGtIMw@lLZ>6sRpJ4+PC30e> zBh&l6L{?8hXhXS*MNvIjoJ>!({+;LaV|q$FseYb@ zR;NSh`7Q-nJ=qjT(yC=qJz1Pm^tA8!a;G2DQ|uYHKDl+u8mZP(18)hHuD|u8uJ4Br z^nOsqSv^^3BWd0xQ9W6l?EB%=>%6!Q$p2lv(~s#X@tj+qoX)I~>Ydyn_I#JJte$L& zBWdZ1sGclNDeIH-3HEoUAJbFp1-CvqomnFxJsncdcS&URWK$eTD^^DJWO1rXPo^K! zQ{qLpKDl+u8cFy0Eb01NKQjIO%hs%(EVPldYE_^o|2&k7Q}jGk;Ihy8a;GEHRqSQA zPPz5UJkxzXOS=Bnk4&F8*pby$5ZX{K@6te5{&^@Dr#jaurytW(;#Id!Ih|P({{6)p z^vz4MhIIX{ADPzE-mIR2(1voQmqqntajHvCrXSN&Y`a^ZoX)HXUk|~>atD0pnRNZF zADPxuY*qF=R1n)BSFt9lCyP^9Pc=T@#p%cNl=!||pWHfSE%8Y%4e9z@KTJ=V zy3Vd3tEV8ep~+YSrfh<8h8$hI@0yG ze$;gy%F5L@Ezatx#!%&58P$`;sm}9IPCurn#E;$j!iS2Ms?kPuJi2Vf(#IT@Red>M96rC|7Y+pez2) zvpCs)uh#3LoPJDCiJfkpayqjnl6nXZ%*|fkG+qCooy`9JWouSXL1;s{s&!F4S)5Yz zwD0$MPCurn*xPP>ayqjnl6q+PfmFKw){nZ5qYm`@yd7CRS!g3^UhYr*`vLgh)9Dk7 zQ=P|APCurng!`Sgty9)W_470ivFE$&&FaafIFgpOjOxka6zC~jJoJ5@(~s%NO4&MP z@2mB6h&|sWwmN$r%H}wnRL=DyJT7Sd#dpBUEKX5QuP$Bn|!*@XGz!J`jdUW zi$&t#rd6#2Jq=b^IXr~7=Cbp35~+2^}hBk0C$>1%_dK!b$aH0uo8Ihwy3c1x*Wdb~GXnm7Z8G)!XmM6oL1;s{s=Po~ zoF}$8MgPv(_xUciU##`{E-CjBwEO7U{?6|6$N8VQ+O_*Z?(g|7;~R}{6#H}i{$BO( z1E~Rp%V*&Bi=oK<^JI@|-Xq?mdCz#0X8G|ZO*_S#9NkW|W!etf>!>yZ;;m1(rm}s> zlU}>Yk9%z=Jmj@0-0Za(d6UVnt2mgj8uTB;wp)4uKH7C-6b#vkx< zhi~+9k6r4u>^9SD-St$jL(gemlUT!I(R}#)@(xSh_VSj!n`Fs5Ui*vR^4cxhne4}$ zA9*d${l1rb=Br+dX)ky!CO_%5D0;waG3+Z|i{2M`xm~7vt-4J0+IK(gfctP%r{VEV zD}L&ATKzMh&Z~BLomT4oCGUA1m%iiWUHqmWlQxP)%k#ePwV3sa*W$Eqd(9_3?lm8C zuh)Fg2CsRK3%%UVr}}-!>!Cgzz+7}uyIn8;!0UEJm6tENE8l(1`(FN~Kl8e&A6*oa zj*3Nl%}bjLiNp827H7QdHJ|#d*L=bwUb9hmdCmK+@tSu%)64BNMRPILYnpp(d3`k5 zZS^iMf9;1}k99xydR_gI*XQb=dj;!0^a|EidB=j(|vDg3FkG(-+$Tc5%L)ZV@8*=rB-oUjVc>UJ=%}aW{PI6>a#rH+ubt-Z1rHz-7CaJGxlp<&YEcqO;(@y@?{kGJA$d%SDDvB$gq z;XU5EEuVQy@AssH(>R9UeBd(d7YR8>9ECF+q@jD2TdnF?lm2~ z$!pqgt(Vhzme;JqDQaJR$Qxaw26DO|A0Mi*AHQ*rH~y=8ycu_X?p<{6=iapsf8pKr z)ED07r@!!Sdwh>~)%~A(^KbviJ5@0lyY78&kmjJbbl7FlPrP>87IV+u?&U}WO|>RA z9dn=8^tkn2(=KQG?dM8|?YmF)YSLgcwLe00K3Zd+aO>yZnRk8eEx-Q@@21DU@E&;n z7v4iJ{KDJ(t4^`$qO0Hc24D75uTMw=tjjsmU-Fu2J8U}key{1k z4Ql^fwLe*F!6{yD`x9y$e~TW+$49FD6V?7n8viV{zw~Qgc!{lFc=tW~3-3Yo;hv{H z_pW*HGjEaFKV9t?(*7Ea|B^t1EzkL$movk)U-*D`%)sl^{yEj{x6G@#ePYtDY-=U$ zkJtF8-SN3MZ`0@A6<`0t+xVDb|HS9sjgRc{F1znjZ_ceBdsD9e&^uA_AE@!O4RqEv z&`#SxZn%Ao|CoW-s{OOPW_iV$|5K#DKIJvVA6tLde$g#^yyDwF_hv~03)F{I_wVs8 ze_)Td^4`z9`FDQe&D{8rH(|qv-pIA@d;K;4Jy;91UuvuUK?~+z>tIu@0nGm~1IoRo zon~tM#ae?-(SD%zHL%Oc%gV=W-0c;r{qbV*t$V!bx9{=JxpTL7!JVIZ=iK(GH+|#B z-o)#*4wYAVgRXer>%&^S^lh(0*-yOI+9x*GI_&Fj(i2Jj_r2W9>2RvoTP`HL*1_vP_D;Cw=icC}KJfZ#9qzH>J+HIYz;-%5 zXnDa8y=G@_^O|a3*mS~HZU1+8O?xl%W1rip*vr{Z?5z(yCoU_W^3~nmWO0((F4P)0 z_C~G4H+HO>b$oEqn_ioFuX`=d`+=9E{b186&w5R@{xu!) z6)&gjc^dmfuWi>;>KwcEVZzc!D`#unJL9&`yh$6?e&SPaq}m?1{v&UI+U}$MV0Z0{ zyJ+kjqqJ4*TPpU=+}!7|{_8j(r~g{5z1sJ5o>cF)tqiL* z;yzsazyViPdA)Qj&`rlA9d#VgR%36avFD!un%7LnAvx^-PI}m1`E$o@vDe}J?|B{0{I1u2>bJZ$@%z2DL)LqFz0W=1m|L5v>41U9$Jc-5k;>)k zzEQcZ;(c%S_3wI<*1YMBT(ZOKKko-#uXA4Ux}E-v*ZJfJy-p*p^_sUImDZS3+Yi6b z?=w6;W$vcR(P!OVdE9BYRrZ{;v9e3ywUsS9!!4!w7-_qdQQjg==WE958`t=CLE#jGj2RBH6VsRXw{PCgXS(;X{Mm9*b=g0=B_U5uds-5#?kZR`~ z7NpwS$Oeod{Nj8rq}n^n2C4RZ*&x;4OEyTg7sv*w_5rd%s(r9*kZR|#G>~c^B^#vL z$H)e$_PA`2YM&q*q}q#RgH-zz*&x+EO*Tli&y)>P?WM9os{LHqAk{uwHb}M4lMPbs zWwJr4eX(qiYF{oJq}o@>2C4QnvO%hSt!$8LFP9Bc?Hgo+RC_`;h>7s)R=t5#dxdO} zTF-s5L8^U=Y>+Faj;nqSQlqE!9bn|0E!K8&;B_snHFD|+$UICQ=c+vOI(0CA0G|PLfATv6bWx`G+xYC7 znS>jswG;coeK&u7^1G4PjnOpw3?PeCG!0)f!~Qttbd&c;^qLuquYDJp_+|8%!)i_U z89wRyTR-Z$Cfv%^H!aJ47g=Md@;XMpi?le|HN3Sx1IX#e^c35h)RXDV8cX*XKI!^f zKREiy`z4dqHZMfGHHvhTKQ{SB1UkLfA#uWo;kvQ9Pp*H6h#rt2RJHM4r! zn$=Sf+EA{db5u_jrxZOEC0#v}ZJ;nabtxry8)r~+YSrh3#!zW#T>xbznQ@{D$o7Gbg+E6a9 zTU1XLC(~1Me^0>j!5UIWEuCey<>_t01(YTt)XlSDf3k zIN3U7MfbU^%R6Ql&k6y)sw}^^i=EL zc}_p3r^H{~`s8$GO@#DtNIe6nEUPD*;z*j;E6@}BJ&RLxzqg-f0686*u3~?4>y*=* zH5SsM00qC|A)Zswaz+>52W`uwl;?JvC{4(Xe4FgL@k~{g|F&hb8N=b;_Cu>7n{| z_J_hVfOcf{WK$eTtB#H8$>J2&Q{WJs-!%Q0o)V3d_1HRPKGn}$(du+4Jp*WOR!=s? zkuL<+4>xMWxy=Bs_wet%;Phj9O2pjytv1b4kWc6fI97!wsNA+ZJ zN?D(rPq4o;{g|F&P2KwBbY_i&^mIr)1E@HwC!69(S~Vc5CyP^EdNTc(o)XR6`sCIr zYb4!g_@wJ^{mAt9FJ)OhS!g3^-oQXl{&^@Dr|5a8z-6EFNROdS7^kaHTtZ?g;)0s8l-^0E^-@GJiNY~%` zk!d|`&FU!#Z75eUII1U$Q(by8{g|F&tKItKbY@NXdI&C-J7k^#v?Hr0o8m}XH6*Gh zi&I!nH9iB#>BsbxxXi6jZk@75d_6Vj40*DKbp5R#wmxO*dV{@LJq4i+~+YSrfh<8h8$hI@0yGe$;gy%F5L@jjhR^hpH)7rNg6o zvN+Xw9?I#*^psfZ)+eVkYs=TeA@~fSf~=lwiX&;oh(J&Loo8{X_uqL=N2aUT)oz_~ zdb7ro&&X)_fqA(`_ItHn7v=P0dP=N!>y*=( zHIdXqaA0os`ljjn2km6`_b+8xJq4i+F^<;5M(bK-)=Q;hDo?;u^`s8$GO(gZu z@B^uI{jDE$9Y-DL_j!q|o-DMHwDg3io-9sv9!EL-n4S{XyY|F+Eu+Tc_-OwVn>KX8`TU>dB@!l2)A<)sw}^_IJs` z?)OyTX8^hTMWpH}Qn}uw`wX9S{jERQX8>6w4sMz^Hqg^xHD&k5NcR~)cK;H)pNWma z?sJm3DcNr9j$~?|Tbg|akVPVzhVN&>CspPY=5%2?N!*(J-1K9;N%t8(>H1qgvd;jrNF3a>qA02p(}n58 z*6q}FCEaKEr0Z`{$@KL=d$Y%*7TQQ!6%Ta6d18xGea{n{j!aipx#`W`r~3?_bp5R# znSKUP?DFjQSwU=rT;BLVSDYudI7R=?+4mVhwqLC689>#?pYHy8b{{?4-`RcsxK2B+ zcI{rXbv^?q_Ll$b=wJjj=luIXYCy42`3&5CvF64OaclM&K-p&i@w|iVGk~(s0LnfC zD0u!#_8CCgX8>iN0Tg-$QT7=?UeoL|fU?g3%02@qt-pw}&j3m*d|BuHM8KW_6dRPz zGk}(@n6q@@{6-`9(@+CGD$URdinN{qbXW3xkad65_;>1az9o6xSAF}ha{l=lp3~vl z`+Is$$656qhXtvI)bw?*p3{*SoYZe@s7vR%`;57?hAw5)WasZ{t2FQ81AI=$L&@{A z=z`~T*!b*wZ5yYx7pq9>H1Sa~jeQzTv(M?UNJZ1|_u4$CV~0JbV|((vD)INfuXORX z?+X%}qw9jzn(lKp()G7~)OFpam8)-Bko~@(#!!`>l+=N*6P2(y*>!er?VM6{fXhXS*2~j;2yExhRPqqF|!Rg2J zlz1RnPwG0=@Lwn-JDIM3Fw_kHP9dwOAhe-e)yYvkmDQ}LeSfFm^kaI8eci23PG{Cc z8b2NOt4P=1`eEx+rhY%1$m%HwZ77#FDXJ%nldVq_t?@Y>PCurn#6xau>$Y^mSo7vU;-6M$(GOfu6W7%;Hq<>%yFlOjn7=+&bmfD{HLbzZ_21kgmV=Bh%06 z*qhZ=5ZX|#>XblNTo-0>vUSRe?sMNUrytW(>`AvyIh~nb=>F0Tl194z){ji@_hMIM zuQLo{8|3n)MD=8GGCkG$cb?Oa=_&D)Tc4cHtc8#s4yosK6lC>eQyfW4rv`fR@0;P` z6y5Lb=Q$ltN2aUTGj5%7db7qtx;mtu(@~t&l}&LZtvEH%75hDlldV&=KBvR!$MlqV z&aG2UXVyqaPYpU1kgmV=Bh&l6vaFth(1vnVr$zN-aWXxz->dOC9Zo-{r`QW_eR4Xp zCPI3szUB0x@SKiBR!=s?ku>l0sGclNVLb&7!TAHzkLfA#qFbMw&djI!xd>XF4yEUG zY|ZM)rZ|$8PLJxz;*_GNeb1LW{g|F&FT3^0ty9)WwVoPyYoB!etsixLKYXC~_1Tft zlZ7^tR?LX%$>L<+4~L)8LEg@9ntn`AiC5kFtvFCK`&FaafIFeS)jOxka zl(IfKpFmHhAJbE8yIY^!I%SQ7^mIr)rz3V{_B@o$aX8JJ71fi)sV+U4eoRk^@4NNM zty9)Uy3g52*Wdb)>F-|(vU;-6M$*zV13mfYpu>$Y^m&8gtgeF4hH@39fv)`XP%ch&u2W7wrl-V@-8$uTW=;6_nQqWGFUcCx z^|yXxT2EzJJq4i+<*Lq#>dE3%m!3>Nrl;5&Zhdk(vnG5!1Q*L4GSBHqWc6fI97*%e ziR#JX6xLIX&*^abF+C-Ay7kGeQ`U&Drv{xNPu7sGzxBh`r%YXEw>7J$Ahe-e>A6uo zS)5Ey$)Ytpr^D&T^b~vBtxry8)`YKz2A+eWj&%L4A9bCFvU2rJcVzWcW2h?5i|WbZ zROfjprytW(;$62sIh|Q!z8((2=XC7N>dB@!l2)A`=*hqTnu}At|ITwdGF`=Xxpm6v z%^FMI$G+hQ=IQ!dKWx93sq2AbYqRI0g4hPRyjyqqzpu65Q(2sBzgO#ZQBFUmr^Nei zopL&}7Ls}h4$RG7-!xtSpqZq{??DWj-w9r`@G_;o-DMHwBq)to-9sv9!EL-n4au++O|$vBh}AUIK-aQ zQI^${O>rcxx+AJ5i&LPdaPiRhdG2@qrY9?9>y*8(*3%*OoQ_0RPd3GoH1Dpco-9tb zze^Ub;W-`dei5m9id3#Q={{#8U4QFO_BkCEiG!P#-W}*^u$r>_W2F0>4!eJe-Ot2E zVfQ&n>~_andy}bsZfW*89Ttgb8or+ipX|2hbo?-SKNE|uZSS!!YL0Wd&)G=V-$s{x zPKQOJerc?M_dTk(C)nQo``$QRm`)PEOzOn+W4%fDIUDKvTR*bT>99x~+_b79suRu*uX^z}env&W+r+DMwWInW8`i7ig`Jx^>pGF@5arZ;<^?sGQM z^|yXx`Z*mtvbqXF8_Jd58|aGbfh*Ksoh7<_IGxlKh96b z)vnzSa(~b17~E)Zqgdwyd`?HGde9KPqs(fqvAc=Hi_rAZW8a5+a%tuS(A9% zoF+`$L3<78a#Z}9S*7Xmg_A#v88v$ zpw`~Bf$hA44D{o||IglgfXQ`L>7vCQLMhrt4sBzDFvxC|lUl)+6P9daWP}5jF*3pw zmAbpE>aL`wo$~D9iqnrd;4-W|`I#Gj`Prj`Uw@vzV}f7d_sg4) z34ZaJV^EHxgP-g=QfTsn_aBZjEDaud^J36pF>tXs_+)Nz@Yc(g1o<(BQDfAghdgMD8<4!`3OK0f%(7f(Q0jz>A319}`A{B+mRD8sVg`zXV=+Dn25cPVOenU(TjG@rgQx2^Un!>d+T$8zrF2*;CHtz z$MwYEw_kZ-uy6MZQH~b|zy89BD8uuDzy8#7K!+Z*#gW1H-g|hk=j}^^``)-H_UUB-8;AJZhLm7?;&OPynJ=5i1x%#l3zyJF4gU4=P5j=LsDfsmTf4F0P@Q2&a z4}SlR7X^R&wevxX^(aFhFtIZD`Dac9CXYuu90MAlZ-NH*zF}eTwbv~SKAm3}yzR0@ z!E4tpM*d5J%`24#)Afhn-Sz_HeNyoFou>wm-?cV){F^VrZ&UEtH?Iu-aMzaL_qShx zGQ1?%ckB7VZ*EzQc36pacs^)wT=0Vr92tD;oreVv>|7Y!(OMXMVQ^vazE>;^wx7EQ zZNU6N1N4WJk6FBPDjNLZ8z&>*Q-UYHxh8nx?iU45+;ds*#C@;EZ!mcLzU{#u?(PqM zf5)qW-+py-@He~93x4&5GeCnCz`+UN4MzvxdH3PykBfqDjxRtPEC@dOs)a#oK=OgD3A^gS=l9{PF&m2Y-C19Q^6gHwSm_wr*aE|8(+FG zc-5*X|I1E0CYX%=lK)+OsQa10AMe{3{PBTT1b=$C8vN0qpyE6FAm(NH3rvn2oPz<~u`M+aHaQ~YYpdY4#&*T>bZ++Q<;MIK# zgG*0d9J~}5JbTLeFWvC?U8ws#XQBQZkpC9sUqSxw2>$N-pF|mM4*vL^kD(22ME--w z{|e-PUhvD$pN9NTGz=~iUL^T9(!pm73(yA^1ltn%Pu&N1zoU20llQDg{VxFhFAM(o zU_SWMBjZAYKYsfI!IOL1p#Mnl`#ZCs|4Who*~tGC>jTH455)3k{R`>fEvWysXDkdh zouu_YX&OGb`yDGK|0nM~4`sLnWw;t;C;@{F{KkUE@2>-Y#o%|hUlsiJwvA~2HK2bl z@_!!ce+*>f5upF#;J!Dd!2`7YcV4<6xcbyZ$bSjw|LkDdG`d0c+T(XVaW}Ak&$)uZ zC-1!k*DKNgt_>c)_qyP*yI+O=cO`hh#oz&Ffd`xl9`FL-?|9(vDBzELcp-RDI=HQx z7W|K2yfCw_l|k$e`{kf?s{^dBM*=eXPji zAAa!g;5+YH1f66-aOX%m_`<+~;9W0Y7+kk{QErdVD zp2CTH-g52nd#+r2#6in*Hs$KRGdBwOIUVgab3LcyC6(&vcq&(!TmI9fdKC;5z4y%O zT#V^Hlj`W4j=xXNU$qbDoR0LgUH$7K0j4(`fM0hT>{JPRDhGJh%2$$St$6+1H^J-a z`KABS=0FeswO~KJEP3tptd;lO`q1oFqW;il(DN#6vguh03k|9g_Rdp@0> zmC|W?FUL&2xBlL2ujw~-*9J^Rt6iT;&iOc<+*k6Yzxeixc;3qYczB=hyD~2D(Q~Q4!e=?kT7M-4z(rJ1xhvR9! z)>gK=c#23H3+?(`5>HMi$CJvtNzPg^{5YP{|7QHjaOPQbdR9uO>Af8D?%UVJlan@a z-S_zjPvYBWbegqqpW(=H)&6(mQ-(LsZ0@VS^$VS*_j1hlSu10*0?&j}ixruTBpx7>TGi>HXRvC!6Al6Z1DIi98* z=NWz+Pwl_b?>L|GEMj;#q|RDNzo~17@-~iNcYP_s6Xl-MDJl1+IcvpmX15XrMHVKZ{oyt-qdcc%s~!^sE)bkK-x5$oP}t%(IB$A>20nP&jL4u!|>e;>309 zSCV*gI>qr6C5Y^sjvvQUdx`NU!VPPe9AKk@ifQnnL17H<(O%H_(1n&+TF#IlQwbP_thkxoK8MJJmpy{h9AdM z`=5+I8O}VDP{nvhaqanf5>HO23H-^@MDot@<9JH{i}5GJnP(Ei(;;=% z%2QoDc@rnDTfdRSlhbJ?JUMbLJW^GpO!bFz@@ z7dlPv<#7HqUw(G&E}kON#zMR9PU6YwAf5?*`fTs*d@iZx^_T7`jlhbKNJCxza@zj2%@h8KXXC`Ev>6O1~(>kK?Jm$oQ1u%(GBDM2fk`&-U7B`Y50IUH_7Pt@^1(-|vP%k2;_7 z`w&lu*jX!sT|9XcC$3u`N#e=r_dTYS*=Ghvob`B^JJOYUdl^!5Ip z?wOp;QZ z;*>bJ*Pd@DapJgeoTQC!Pvk3|o|V#RdZ)^K`vbMR`lypOaozfz2q&}?JDp~0Cw3e; zuKeSUH^1-ntdvgEdpYL&td-qeTt%dfg?4>6!WHerPN(=dhp)%|%hu!G<>FLlt%Ulg z?IY;pBA0i*&mYH48}L2f({sABR-XH`=RPgHLCcFI)BclvAW@0-<@s;mcl=HEY%XzAQAfx#Ss7GZhBn`A^IKZ0pEP+G{WG4=WZ_QoX4H5F(pMz0vr`u%Mi^s7I{N4G! zPDgt$gVSKX^XB(FkD0Cqg9bC@Iq|voh54Yv8*jMbhKb*w&Ha3oVXk?5`B;Xzmczf% z>6Lxf%Q2hw=(Nt$m6v5951;run0ZcDp6;{GDBx$Uq}R{&tQDWxI(^lub)A)EV(M4V zlYye6vsRv$oWI(4KxeH?tkD$rsHfOx=zn4P{Ux2#aos$$gX8O9ozu}iTk)Gd*UsxG z{zA^HXxnuP%FkQ0+wZ3OV9(G2p3`xA@|+H@pU-Q1Jw3nli8gUZZ}r|F}r&ht8j zTz8#9MB6B|b#D?+X`|BwJYAqEV*C0SejHEfQ;k0v&OC<>mJZ7&I!*88aQ-x3>xX;0 zc#23H3+?)05>HMi#}i+j^qdaEkK?I*y74E&nP<`IIUAj(_i{L%=4)NvrY@c$(#Asj zew4(M)5-Cq@@|rIIt)LKr*xn3C&QU%(djuGou>D4%(q|IU>8qL+QhZz#}S_B7v^-D zwO^Rw$Z^$PV|>c+=9$fX<*Aa*cuJpXe9Ca<>0?m3;DPfdAFhvCQZ)IQ(%l;O-XiQ#EZrhrbz7G9 zIi2EoiV{TjO~;Spsr@12Plhv36P}9z?sO=f)3K?GCvW1!b>FX&cyc;Tz|;Qra>I|~ zDg9C7PsXP_lMqjH+}fwp^j?mc=7$e-U!TD)o}9FaYtL_zcyc=V{BV2^miYXz(;+X;>qbWfj?QANZvVq98c*_7=JQ8<(b6rbV!}k zvAc^WZ{oyt*S;j4oK7?0$?@ZOYJbZ3lkq9fq|l+kHM zK4tiEJheY(e9CavXzTBjcyc<;geS+3<0<_` z<4=Y&&q44IIm;a~=XCUT@#IaMxbFHx5>HO2IG!dwr^E2$cxr#i_>=J|&qVMvCkwfL zq0{tU4(CtvHXRvCzK9l6Z1DIiB>@NzUmo{5YP{w;F#koOu?4hdJ7y_>E4} zdpTyZL-~8Ny$*KqG%2Zio=_Z!UkcuEI?ZT@GW!!oQ`%EPu|3d z>((bDJaL@obei=z&v4|pN`Kw>l;O=Y(|zpcu9$b4-pk=~Z@&D2cXx3Wkv10E^~VTT z9OpTmT<%Tj7iIWyJhg8(K4m!bEEErsV(#&?y>^;D%4dGpzwGVeDI#qwwC_(zJUN{v z;A#K)Jj0LUDSemmC&QU%p?H|PBGqYnFUL%J)Pc_DJ=MjNlQwbf`7cR4Ih|(IqYOWe zr?#!rc0T2qgy$;EZJBPW)AU}BnegQA&GwoucI{A;(Q51emBf?NDZ*1cRct=b@Z)&$ zx13M;eTauc?3|9?E}p!J6W3k;cM?xdCzp5nvaP3zpVMLcMNGs~;^VlP)8-Mek93;e zKh-^_!zpoault^g@U#k9`TiK4p3~v`m-v1rUJKvnr2T;AoBp<5{kdO#*P-QlyoN{5 z`ug^-zV4j=2#ctKmPIHrkie(->zM|f{%UdW5I_%{NdmOANWACMm9^m+iU~Ftm%8<+Df-A4QQs}_^GntH(L0Yg3Y!A|*QmIH=Y~H*%Si5#@uyWnKmU0t3(G;8#LGZzyzz~144TbmFgQ3EY~8vwxbVUYh5o(0y;6pwk3M?mY%s|> zf9XqK3U=?_9sa)j%1R0q<>KUSIjjSAyGayDj|j{?=P>m2#0LUIw-W@$kO)y)SsjJKiDf&}y}U za=9!tV81-|)KdfI&$f8}^Pj(GIvQ-*vSlap{o2>Q7JU8dUk`u0|LRx2D&=DNybQzx zG0FbnG+@7Ef5>LD0dcT;^=ip~HZ))zneXkl-yYm?#~q0up@?q1aP0|lN zf8ud63^ISVc|89IAAB%)^wCFy?|=XM!4H1$11SgTK^n175QprqtFwR z>4&dVEOXpllB46pKZ<`Y47=e?|a{qGJNY>-wN0UEaznT6NBVM z%)eHv1r+f_Y-~HU@J{R)-IPaw%LitDClzJ(35VkvX!5b!ie>V5vsbG1^^N2gv-`hPd`>2bN z?-6&@jbHuhR|n^xf4<=D*kg~KQ{G-a)Nc=X>mKqV(t-4+++n+az<$sC$@3}qiFwk!zrR1A9u6MYQJtqNFZne3*B`puT%v`N~)BS+i!%LCbTx@^qhdMgc#kqkZ07&*|7w8g5kU*`ZvsR4?Z$sR|D4 zSlwBnEcI*V$w1N3IUV0sdyrSC_oBc4F!#Nm;ok*({*2j{AMc5MhUauxet${lbYy2+ zk7E22TO2_ayXvmYyI$3 zT|7mkjfM98QxZ>3C&v?Co%Eaz!;j;s{Y&FdhBMEi({naDP4DG!Jk8g-ymYC%P9dUg z6zcisB%Yj3jwi~yHw?T0x)cA!)+rc%98c-r7=JRH>H9pNu08~##GLZ@;kK zE}opUiR;#XiSR_fFsIY3{lW}Kj;r=Q<5Pw=&us21hxH4cruTBp_c6F ze8pjX=9;%|C+>; z)5-BPe`8 z%IwF6H_t4Ft3&FXj@?~cc@rnDTmM&tE6P2mlk=%5&*?DyIG)<86;IBuJd+rn=41-! zG`*K&zUAKDE}kON#zMRPcM?xdC&v@z-lXSr7=9d2>2=1R3}>E23=iR!(}%)29Zz-f zHa+QfBhki?VI$>)b@ z(~SRQA4NEmIDQ;Y?emO38O}VDP{nvhaov?t90*SE#OXAFKUtbc-Z_38 zPw5McKN+9$Ok#LCq|WIW?BdCrIC0(gv?QLKPBY=j@#A=EZ#4d7e9ANF^qh@O(|bAQ zd;X=}#gmgZaqao52v1^%GCC#gP*IZo?B#|d$5r}b<5R}3JY}cnY;>C5%Q4?}gWX+R zMWl^|wmv<=mDr(-PBZc;!;j;seTnfY!GWX|b$s*5LY;>2~|Gn067I>qrc={X&SAIDRB zv+*b6Q=W<7X-*b${X(bdy&TS;=F876JeRGm?It)LKr}X8< zpA2W7gWzF~HYk3h)AU}Bne0&h-fXYET|7-ns;vu>cyc<;XooWVIG);98hB6DO{_7DjlI{nw06vmWOejvQC%Eykw|Z=RX%V?TGrywmhv4wrlLDkX2O%dH{0vpE}kYO)vm*m zcyc;Lc#0>B&F9%Vf5(%*<$TKTLp&T}=X5;P#gjL2;=1qfB%Yj3F7Nc^NzUo8{URpf zDe-aKbb8K4r|G>s-E%se5(oF%^Xv#utB{rNkJ0Hl9ln2w?`Pt*@O@6&S+pjUtH z*X}tTPKo5z_cGy?PySy&r{hn_{Y;#`-rv*t$?4qbIUAj(_u6&O>2ONS?mE|fkG3w0 z`n#OdVYqOdw2S)O@#CfG^qh@O(|b9(=X5wF4(@f=kx865E*vM$wW@{&Q967H1+m1KC@ARCFPSbli=KGwE-Y%{p(#AqP z$3(cIo!IG=9OvwRPKV3Ism|#L^-tSh&-c-DdFT85(f@V>^R@jTr#q+PrqoTq{Q;iS z5qp0gwqJ}E9p0VtiPk*}n4kiT_BERP!d+hqtSFG5) z>ZFr4pZwhCZhql&p0oM+Jw2O`Kk~@UJx3g|`563At`#iLe3s?(7rt*7RMfW{9!pqPLIuH}jJNjtBgXBMlGO)g9S-xklS{3H+bcmOMwD2;pEr^E~9CzI2 z6M)HMPHSg z&)f5tGEG(nmb62mHAMe9QIo z;=|j)@fgwo{W7Ehc*1OHz&bKt`7!S`Yvd<1m{5j9JH+~>_esaWb7K9GePKErgfzE$ zhxz0F9Q-EI!D--qGQ=VJBm2UNSYL1qOqKuA#fz7P^|rd7w|4Dj{^I3e8P=nX5?CZp zh~dyNK%PW?KpLMnF!1I?jH@Zvy>(*^P55IHyLs^6l%pYwPwt@2l@J3=_zx>e` zr7s|V%81D@DEUvIJM%sN%riHiXTLCi(g69B1|eUJ)t?xkY#;``{w|-Ut-t5*^pEEs zuYW9mVnBGoH2Jgc{+lX)(&W??E7ng*f5U;(-|IiC{6TZppJiCQV8N7paAN+%T^xh^ z^#S7pQ`MjNb6LRrDI2GgMJF74>{}u+GfCXBKt$GLQzIx9}w3o%eAW5cd6;UKHp5Z2RXz4{*NY-=6LD)RRtH ze-3Cb`67Sey}UZ_n;?He-fKF*iN_ur>Vwl^e!B9Udh*HZ&vBk-c?%6df9ZD<_#XMr zO7I=>eUZIr^SS2jheGva)%Wuk6+((>i&S3K`|>sLJYx$9qe!U^kN z@SNwYKl+Fx4qBdbEo(R3%oMovvQ(-E8`P&ir1Loch$IJM7r6AYt4hPgQhoVVrADjL zoH@e-c;mGPQji1qZuiwL1-caIQs6)+&|d#DIsc^hT)j%#G|u8lJ$=8=AbQGwWASr- zm=wRs*_`j+G3BS`^kDE_J!i$y za&fx=pSSVc?HT`oaQyj9_5ZJbg*T?P!_4%B>7TQFTk(q9kNzvdEZ z%{?Da>G}EhJwJc$<&gZQ^_KD!(_gQ-B$e8S{+)hG=eN#7e?JiZaLpwb_E(3SnBE#_ zRdRD!I6Y1AatBh73Ew#{-zry{8n=trTCklfB6F`$b>A@_bUHR->26Jk5g@n_v^&xet*S< z9!g#*m&Op~`EX4#i`%w*{q32)pT1A$*Zh61>)>}j^XMx#Jj=p-w#nAtOhpnekLT~@ z@%no?XDZL`Dav!(-#_C~s=myhzrk6S$Mg5{AgTQGa?VtqP4`buAAZEkLz=Z`QJxRr zJ*W5k5N5hmYWcTFYYE~{6kfhD3j0%}dHU0z_B0USwLkgo1wZ-m%Pv^6<}DkvO>U08 z|L0hE`Gp7a9k%0QWasV8ocaAqwUA>MORYF@4c}p1yshGOVLRcG{ENcNH%4K9I(=Pg zufFC{ee=&7qww+zqwvh%@wzxxm?BY^?{9gn*Tvg8UY96`cxd^?_??HRYZrefmHKlm z?ea-`_Eg{Tx;W1G&B^LQp5T~1-rnK6@qgYIy>IY4{C7qE`ck2}T($)7$9cgGjh^#g z=k4ud=gQl!sy1^?WA3T>V(U_$f>(MDwM*Y`y#0YGc)P{7r+DsJ&dA#>ALm_dyZ7`n zegCOxcvqaa@16zk5?oCvPul9|^q8qU?FVM&rEHeHvn-G2@AL`jV&$BvJiQOjTpsf1 zr)E(e@ZVtovP8g1!Pt8}!Lk`D_ z-rh_@de_;@z}vH>R;7d?qw_>>uY**doy_0rvy&mKkA!*e|E8jg*T?a~_ou6mxA(!Q z&*QJD?a}hyywSs~kB7Z3yv|e~#~a_Bsy@;mt^ZBQ=dB-jKjF9d?_lxyy~oX!&tF|? zG*yMy63*Y>qE~tjpG-e!e16XqeBR>QQ#|)9XXNvikMps%-Fy0(zQ1=0KKAdszOpCI z=hJ1~n_()Fus;c|CX^@rkkP^7XDZL&LzDB>m$&<9&Js+s485}~kLMrK$I9b$nyEbL zhbJ#j`|#rVULNxKO|vXd+w%AFq#ri=c)4c4!|o}{!}j*_Fg!TR@_7DUp0<_8%Q+K$ zHa#*qed6U|d$ng-9?##)lYYeL!xK2Ob}JZ!Jsvn-G2@8xM*dAyu6(Wkv3wwO@~{m1W?3H3-^;^x=f99nGql&i5j{r(*ISd2VTKlA5}QF!@zEIyucTa@z366r^`JM*jX?|IKwM z=YY_RTrf7x;P(=*M&UPbBV&sH%4K9I&~SS14i%v zITl`iVH7{}cUVrbT})M%Si3k6j@Kp1As#w#j76zC8}A>E4-HPJ%T&6$^YFj)`m|?R zAD01t>Gjz?%lfzsN!G{q9~HoOn0WJWgruqZua2Mmed5i-v@dyh=I^lY&~L$I7*mj^ zH43>(30LO*2C*s(QH0`b)3JQzkPftB2_7CYz@m1Dek6GM;V9fAc*Cy!i5s zeOv$dwA6hcdn8;=#JslP!Q~q-d-0J+rc#;ya=p<^Why!TEtVREdbuV><@#_g+i2yR zr+|?C|^gLb;fY%5dg&sZ6a}9&W-WGElF!YAL+L-|AFmxHN_; z;5#EJN#KR=ujB?&!?~f-wlh%$R%I3IQp`1TDHgX0Q%i+`Oskxg*lMj*SIc@6Nj1f4 z-|%FO`a6RI!XEYlgR|i$>H-L%AB8W0YmCl=G=fuF)tp zmA2XtXh(d!T!4WKFX216O2IDK7V1#VwuXzC^ZO|Y^%j=;~W=m{F!So-GffYG^wt8XspzOS$b)o2Hx=85T9mx-eybxl$5v zNCo;z}tzdo(&kNW{@?X!=3^AcK(L+~T1(|8_!eHu7F+1DuWRL+seHbQl#SBB5E`&yx9Bb8X`l-b zQYZsvfU2~p^pcDws)N)(3Q}1_t=b@Tq6o_^5#>3DsVwho9zCs?t4o(9uv6$Kjb=TE zDx%YDSAsz6M59VLH&Az2$(s_{C{_G20^ga-$Y|D!0vCxe|*LLY0R{;vX0+LChgH z`5NEnO{F|kZbFJh;oKO*jb^#OpIv}AY zYB@>H(Mxv4HyIWgo;^46dq}W@o>=!4OUX;RDWNpe>K%O;HU}hvq+sVPxg+lkXfke zAVG^JIMMd{z-}_C`%>RPr()^Yr$r=60a9@xLK>G*AypFz#;hdCKv$5?V=@}NNthw& zN#>=KdQue9e;eAnT$C0DL!x9xlZn1&?URBq9w;>%+ty#lUXZn00k3Gj^>PkWZlus8 zkU~@`wyj>rMrA~{P-X9yV51BIm!NkPL=h;~(FyBT4FW%tFYQ1>_1Bu-2ey~S73`|9 zpm0Pz(UffrL4O=94-cfIElsBpexW2M@I(q{`vFmK5s5Ggl2@Qx61=H?>xL31T8k&UPX`2g78IC!d6pMD1(#iR4rKp2vZ{y zh9tdJLh?C~0F@M+YtVH|Q9K}wi>iv@yRos8DQs+3^p2{06Ez^$6UizNPGy>qv!K9m zC6@(83fq+;8W!ScA+@C%DbE_OfnT%ri~-{#*@zgtixGskQ5VhRicJ)~Qff9SMp$j- ziRAUv7l0q~OK1hcfGDq0E*4!Pik?K-yXHDF`ttB#sa|fXR$v_tij}9zA?zs`j)XSv zBm;1yX3FH`7)A|HK6dD(j^PMDlwyEiNr7_#wiC28DCsq{lV;9-wVEAEbu$5;^f0}r z*waCh-b>@gUX9($t8x!2vh^Y&8S#YwCLW|n9Tk@hskjtYi+)(7k}S<7+LtsH;-HBQ zLxeTJP%+@)=m%VcX;zWGl+99p)gh%kgwYfQ3jryV%C;I9vS|>Ug(@TNb7Q4O7FteO zga-@IkO2g_0PBdckql*-EztwX0M1{j${@;v%1|OcmjP!OL{A5=uZ?5C1qBGBzd~sk zHUo^KL($4HHJCM;6LF?6hGQFnqz)H7PU>z$NRNY*!+^D)!U1C&YMN*SO%{73q*#OT zPaRGa==gaIoE72ykj~DT8s&jui~&IMO0~K@n-jc2^AXjwKygNV%8>DOtx^j^1j>d{ zuodK9DN*47uK`v2Df@=Jdm{m#*^j!LDfI=x#8{P(X}!))7-#- zNeC9I1&%Y0ZpDFDu3V>`CacwuyWH4>J0#Kf@FX{)X<%1qR7pG0Q&24E1lPAP#MKYU zJ@l}NxBOK2jNg)*$vy@hy8yMPO65xG3xJk~Xt7X9LPnpfKsrk&F$zH7aAaQb_7&Y0 ztW-t0++AM=|Ep^vPypbNXbC2gfj-6R5Y;HOg1lof$?vH+tc*bQq#}*+e6c)2O-#z6 zy-(zc+^e00YMb0P2l4g6D#l^Txj2Z=)fzFY*E${Euh#da-;Faf{Tg$OKCY}^Bg(@V z?PnX*tbn=JNLCA<%GZU>(6R@6Py>QQ(i@Z0%J2y=rc}%J%WXL7$Nc~}GPSvQu)+3_ z;+6Zy@qqeRY0L>~cal}3(5lpsmI|bW8Lttfws!a-t0Yf+s12^jJ2LHJ@H+r~@l)f`0&w=$DcLR!%5lWRwbh!oG^USWcQiMc4I6 zQ)huVAaEd00X>+j7lrNiSE{4XV`%gqlPh@|WQUB7jF`~ASZS7&L$(?;AQ*cjIq!6U z4?A&*B7)XQ%cO{LH%bIqfnhCz-m9(mh}kRZlwKjHwU=I6GK`ciB2lVrkk6=y$uLp`fZAfduCdTS91_$N`-KAN@h_pHYs>i@qsM8b!&M^$*rlmG$DnvXI zrr(^Q#-oS^t#$HMHB(|7Gz6ot*ki3lv-xt)Y!kv~XtgXi0ES^v-8gy|{Q`P43><31 z)Ip)tk!1Cr0F4V{HIFf);&`@H9H91xVP-himdx z%M)x0M%;KhjS=kv%_XXp=AsWE$go_K${EI4Xju8GJ_1eAM*2ZWSF(;U4b0y#TE*_| z(-wo41bY!4z-h63wKyK4&{<8qkd0Oykb|T$F2sI0p#hR_pcg=BH?!J#l@c+IS!biFgh`)HMxiu~YCW5bYz+f_T-U&fC1bK+qL}vy zRiS*PRnKDh4zr!VB2mJvD5Nk<;bc@s_-rx|VzQ>G9PFe>tG?Jbxc!xYJWu}zHgA@NesA2>vX zB^=gQ3A+stlj3GGMsXThZ4;25HvqM=bhRBzTv%Fk)H>(yvi+Eysinf(@WW9InOF2e zz5*I>6f=q*gN{{aH{tXL`UN8)jB<>zTbV2K8!1<0x#8<70b_BPAF6Q(4h<2u0uIVp zZAdG*(tHQy6K1SBtOTm($Y@C|t#|@9LA^%;nBEvH_v4Fl8Bbk%Nw!$+Ck_0KexLzH zXv|*^8Eft@HwH`Npi6ZGu-CBUNG49hviKrIH;|vuTnA#0qB}hEPtZg?Tpfb$o!!1_ z(pZ?EExY);9Ia^~;<0Ncja>`VdbJ-QNMU}KHBIrChq;A=U8tZyZ3&Q)-a^HGpo*?_ z5$KV+XrxTFk1R)wMKFL6cwI^Y+rEy{EuQ!INYQQ~NyW08X*puIx-RaC&;Lj09?TrI3K3khUFveWnpPu3tRK~om3Gu1p|Pw8axlZh4sMn0W9aZ zzyjId57v*Krg}4GxfK>Nj)EhN)=Los`AM+}88jr+V3_#uc!uN8EMDp!Poxp@O$`bY zR12;!O5reyZL7u8mz07b}`IS!`@2I3o-afHPFx`TBbS*UQg4b$$e!a@f#3G2NiVDpz;Vs zXTV+%1Ge4h!~kAM6^#pDd9OZ`TLxZjOKWep#hff4o2Dh(jZhRSyEyj7#hXfBYsY*63QJCPY3L_rK4MFQN zQ5m4JJNX#?|W5e_dFT21F3upyo6hkZ<;R;!LeKUSQG@lNKQQYBbG zbuL&YM*WF;KIw3Sf*I;EM(yg_)T+r_5Z|h;V@?59zB+7>I)h&x*@}6Pk!$(qRhR(V zir=;Py^6WNj6-(HZ;&+%qb2IOOLjocj6_aUJRy%T}{gpEdY|p16!mg@J?F5-W31} z2;^l6>8OYr6h>kgOt@r|c<9I&o`DCbuOC!u)tY5w=ps-C$mX!ALqh>$5OPYNcPNq6dk_~`jjvgsiAyn1Y)1fg&JrGy`Va*CW#ERO86e2&~z4| zqK(#~fq^DW>3z*nFnQ|%5;T6$fHP)ACba}T&@!5XE9wRA*T?$dy4tRNU<~30;ql=; z@wS@mO)3c*V(N%KdnPBzZBr~N)N?2u!dKMjYWABo^rkR}Uez84`^d^ftgrSEeXs=$ zY+V^Mx|fFBV77-&r5=|OF)qGV)Rs^v4F9Y^%2{X+2AHK#RI4yuC;n#|E6t^`5+oKd z*Qok4M=u&Y0g7E;uq!gqWlx-x$-+uWECrPT`@)ulk zcmy*K8J%&};fOkSYm?WSa+SFWjuC(pP?^R;G6X7D%HzajA>7s;>6kOyDnpV2V>Vil z*##MmrZk22baiN&K+VAt{TPE>qV76bEKB@ygKr_$ab2t8CCg zl$0FZh|@n9g+mM^5+%%MGxjl*3Sk^ZYTPW-%dQV)x(!1YKXBVQRlly004?~UW@oEJH(uC?$vFuEgBasWFu>HuTZ zyf6)Go-IlYVgpNyV2rIR4XkQ|o$&LY4F8Ot`5wJAADef-i0=q#9j0eR-S@DXx8ZkhD zyLz}ZAYD&*o$|gBvl?jQ5^(M45GEQkKhDY9lw~dIbMp(@1jFdpOpF!w*s3olKejC9= zD82tJhyyqf5p;Nj2-me55T<|yKZzJ0t=L2KG7RllOw2@J)Tk?6um(%KKFyGg`a)pw z1G!=jZbERz#|*ID;6oOQ_&GWoqp2Z6hi5P^nll?x&3Pe{6H?Od2_7&4OA>t2fq56z zv}7^gL73C<8J&|CwZ2s!Ch5iRLmM5OZabI&u>h;Fe@XA5f2wb#-jZ91BYiBTf{d9B zSIeLt`j!q=^%m--NfEtg|HqUQ`~_GpiHoHb!#vfzHEfNL8IyBWhms5%gZ(_l+~GTD zD!K{9A~4^Vh=3bm(HaOcUkrEfP79}MqqvaW_lrg+(@zj0#H$Jm&_O;On_9OK9Lv6z zD(VQG9mEw$y`cDDoiZJr$aWiU^rCp%Mz4FdcYQ zSV9}#Nm3PMrD4t}YsxT&d{^HQ%1aOvi1cKD8o@H3N#!{FtO%m;P8EX2a50Q&=34AC z7(BqAVnQ^qGg&lUB65?yJy|r~hWT%jPbXuyPt0oj#7wql^NH`k>mzZGHCE`V@tnBo z3c@9pcMX2XaNh+Z@Y(;^!&VJieyCT(lR2|Ud<&u?&oLa=q@WX~oJXof((k0Z`wjIE zh&Hwqqe8~z&uwOwt+<}8D0;7|yXd9V72+`*_r>pPInH#;NM-+M>9>=-P5@03?f8Hm zCQEljLICzh9IGSB7mJ^py(lCNlqm^hJp}L}^ zgZ+Paq)0cMXr7QmdU1>Lhk`e48UmxQk0u3bf}snIMC%G29pMX@gp1n9GwO@X$^c49 zEm=G2p;9`8<&$c>kPenHQHmikeP=KbsW;(z0W}RmQEos^uq&=SlaTs2NKi$o1PfIt z7ZkqzExc{+w-oPW|NOAI$@y%tjk6-(lCZ1ENC8T-^lP|-YQc1>*l(;)+uWyrGmn)e zBbXrz(+Fx<;k7K8vof)Cg*J@T>&p1wco+g?UGxT&fjgIw6)JR-h(%!m2egOgIBa}? zHiya_fx>y9T9kDR7^M~HH3-cpR~g`h-QW<0C|D2_a`58zde-Mg&683mB;?bao8G}u zCiE`!pbWGC7q+pI5G#);1~}nGuLZ$zR6%$J(WK4nk+7l(t-Ej~l?3hMP_AV; zYIU2?hR#TqR0pXXb`vY;e&}-?%W^{yc19W;2*<3>=R*1n(;lsuG_ne}irJfxRJ_pD z+-=RSW)4p=Aj5b0o0Zkp1IlJO5|du4w|vA~+Tj#>GFkzXr*+OY`Q{7g0n%a&OZzaO zCZT9>ruT_St4srq_t>%o)7_OIbj%c@pyy}{4cuc>ga_B3sY8O@ znr^9gN-`51skU+LB5Tr%W3WRZGQF2qJ;MJ<`4)ym^OB zQ|bN`sHOrM0qq^CC&;Us3VlT2s!Sbl!Gwz$wV_*}1Ih$666orfgTaH74(??y|pG2Z;y#^l()&Zs^5JZ=Ot5HD5@|>jNRwHWC6LN?} zn8T$3SOVoOsWTJ{ETe>j4Ky3@_I}J%N&sKStZH@y>lbZzBYEU(qF(6{6e3Gi!Ky21B`pf zBB>2p=B(^f+9={2EZ;B4EZv~=}QXseus zH>>O9GI=RP3)6{ZKo>#L#A01Tg6tbIyohuv)8=#(tMZg10jV|?0%9@_N-lT%p{}dF zOvC(^ZDj$!Y@J0{zcP%=ns8TkZy0~cI*{Lj0Jel2W=w@<*n8|=ID?2?E1tPL(yHv*%AFZfDCiJX;zQNk_F3J__}a0MK! zwq)si6lp4LBqF3CFolH8EJQDko``deFXU*#F$X;i&OZ`Opy_N*?0syCa>U*`_l*+|*%IGJ}G;l4JG;bBeNehB?5?h!J}Xp@Cq3hfyHfD~+RQX$e(0#R3UI zq4JDO7TcQfuPUJEJi2`v0R(oT<76nZI#g)D&l*e$Yx|=Z*>FUacza4#rh1n=<1M#$ z&~iWx;tqT9I~^Qm=m=($-P!~)`)qEK;-evg-gb!aZm75V2~{V!T1*Vv;W!-Ipm3^2 zstDf{ZjPb@Aepy;gFQ56NKg2hV3La?Wm7-+n3LID(Z(@2YE3&cmgjRxh{Q>Ctc-j| z@0C@OAx3fR+>C)u6_Y0XJ1&0(O}rItlL56UFeFr@eqYJuOBG=zCg5yBh?+i)j&5PZ zK0Ck>ia6l`K#$1SPHF1E$f^MhaPQPAHL(7Rj@7IltUh#6q%t-!LKQlE%_+(tM=Esn z7g91H5R)jOBX$qsP8l-ofl;09B*)b{4eZJX-8$E(!9S!?8&~j%&k9!X*fJ$CeyYC2 z1`|7r8%31dpsEGJ$q#8YRV5jO{{+o5kO-hrsk#PAff@$$7?Nz4hR7A`1v&^qrq`iJ zL22b>#0FFt)nHXw3R@-$gM}#!T8J2jHALT3j*r0+s-v8GWi!#Q$~Sc22QmH}vKdSj z8{+OCeg&3F3=GkMnV#>0LvG`a4-)3MLrROuKrYka0CqL@FM`QqSlq2fu_1)`UdaXS zR=gXP?IT5eMADbDx z0N#Ny(I}CX(g3$#;NY&J6QUp!npf_lm%&09oq=k~(Wwx<7j-F>sI1sVh1wUCN5zsl zG6^v>rpoFp3n*=>d(-6_s2PWlf=Ip^2GplFHqTS2kJq?Zja$daTk!}HIAHFW2`6;u zBo+x1GFk9(B*TC%CYLpy5Qq?08q`rM7JiZ$p_jllM1ngkD83?? z3&-+M*+QZ*SRAGLQ5=P71Ap_FamB2k+8QZHhtXFs^C;_kbI|+P9iR=1w1gE+BErcl zkDx{m)22SvF$lFWG@B)~8~v=^L`o`#fmpZzz1(b)3}Tc~kT^7@%WBcJ=&Q-0Q7CLx zyFxdPuZ&|aS_46d+F+2#Jt9d~x>CW2BlZaeD!3}VIym!56@W%%g$?VA@c>Qq^t=F@ zAn4}X?OiIWe>-V?NcO%-qRVDhp!xS(CcBQ6#L)@(bj zLOX)$?qjT|`mktY?Ml8(%?8Q=9BgchA8Hlx_8|(S87X695728P8<{j-6cdG_3{`pI zTEdArfRwZu4?{hcv5ah)7|ThC7Co26YpS&hIin}CuOth*mH_eEIYh#H;wJtAbZdC3 zGu=9Is-U4eqFls8q zootbb)VRX3fdErlP+672f!pZyW?r_6TpZWFY%UDt!%%^tj6(|Vjg+zQ6Y@d@w>*6r zEXqtSf8k7uFm^hTr6aj$zCREDZqgh3hul8DSuE@a;U z-5`ZM1|vuLnz%u77zvJ92ju}xYSU6Zj48Q~fZ5zcEmMCl(WgZPun>f|w3EbH2yq-o6!OT}9p}A6yEvc4?(j@`F~twi26jw=giflCZQ@O4!-Hy}3BLeZpLN|c+=ZcN zaXkeq$QeoQ$6-O)qyz0P{uDlIZFgoLusi>VZOe&?Z}tSJud;qP3pa1BBL?fzD;F~P zKoEKZObx<8V`eh%!?7qG($MxF4j#eO(d)gqB%qa?6tbX>KUIe4>omIbSyC8bJjm$P zQM3mcy(WrAkj8mxUS!em-H|0-(yh?hWQc|<6%5Tsa?o!hhy^+FJp|WaNP&g^&>Ham zwmz7L6*OYF!yaEShjV=q6+}~4zG!TYi=$ADA)1bte z01Q0Qp~G7ZiZ;g%Znw5{TBEh=LsdkJwxA8-r?0tkEu&o9qeLtWFzex6F_K~2LH}k< ztH~}N@_^tfBlM1LWn{J)`ZC;+Z0$g%HsZS7|gUrbo9zT zA^y(dL&}ZQVKcUZW#E+qhZ5WSW+0#ASV|_Aumz3WaOH}J?L9Tu+x!8_?ri#7za-iQ#>Q+iU+j{F_^2@y{3 z872_&sfh@Efm_G(5xn!b3R~Jg5hLD(D%R4T4Skd7t|ih_YnuZ zy#{TBmxd@ISpEcEG&Rzf8d;rEdnneps=b;OQ5!RggANVtVohpfEm}(~2iS_5Yv{)K z2Lt%A+75Ib+3j;R>c)jebXL~UypFSFV2_1DXkQM{)Y>9Jg*UBr5Ir;-l*UR0Sxl=- z35j9#`+%Rdo3a_C%ohRR{`J_Hm7E99#D_&&>S~!JR@=Ge`ZB%YWV!h0bK`O`D!QYZ z$7f1I7twzURnjYgM4uql8CVYtS21vf=`3`sgx!Uc7Lf8B|HCJm0iA#3qBiSC2j)3Yo^i24tEnfg9EhPNHcHyiglw>WuO<5Kn{? zbS&MJogEp9DZ3x0Ky?|A4*Refl0~c0fPxt9Nv9Kin}{V3R%;c!zF|y*NfJU!!%$)o z9+7@*PE|QsHe!QJTXUpKy|g%>E;qyvC&fTDZe$;>R>NK!x|BzjjfLLe)L}sd4gs)- zw2Vc-vtX7+WEGpG^kJPaO}SAN4RClUhB#bpPj*xJpz-Onovh!*LI9A0YY%K?k=nYg zs2~CbrqDw5GX#Bt()3F?LSZcz!N3`Uvl>;5qQx&lww}5oFO!)R;#6X2sYJiW552}F7#%`bPO{FON)izW2GSg zm;=gKVK#-epxvoIJ##~; zDF+|`By;7|xWMb|$cysDn4s=fLaSYxSzQLVR zb?ZQelyx(Nvdbgg7d_KYmjKLUU9A&Y=5H4=5l(DfOdhNAS69eXmWpnZ1G2F=e4nMC zlUt&5!(wieT7z_@oXDB5{oj6Z#=220OzitOLKi(@q2Lf^A+YM*oe&g?@%T{osImd0 zB^bOiRGX?)j%qjDfDj0QS|*&C*Q~_J7FW^ORQW5+0VDLpqOcO5R@pdENs1l_H$PCi z4jUOim%$!jn8($Navs{x=%pPq*+GzC+z8 z%hq*sVs$DEVuuw2R(}-}DFx13QY8|0T}R)RUC6T6V=ul@h*jD!;KT}7VjKkIk+c}9 z=E4vpusWE=R@w2}g2oVPSS*+uPew__ic9dPW&unUu$*G+b;GsHSojTg z91zO{BSlq_yQXIugg1;x(t^cfJ}^v-A#DZqc{&OH7o|y24Mnz7jYE9zU~(+0J{2F)9ig)lhnjg9!fI%X!|G@YNdR^< zHoRC!8NngGSu)Bv>u6ZLi0lkIH9BDwNrxDr4F*`rNYVw71fyz(vhig8Y}E^Q z>#_+60icL&IU$Ak=zZar@-fVUf^~woxi6*CSbK%>Wih3|e;spn0H10rK0tGR zK{;;BM53gn!U&k#MMsxWsabu@l`k|f;hj)`yOfGXjcRQ{4Yr-dHPKBVSyrD?66rI& zZ(_EL&7!6>7(c8G%sIN#$$6%g{xMK1a>QNG{kS|tuFBNHd&XsjhCD+3;OnbFs-c`` zvYjWSOGL}>pz_)SY#R+cA|($lf`x{e0dYKb$nWe^{$br1RbNC}?tx{6E{$KVXnPYngO(Qasg2{&nQo*z9S4(ROz4rb>@ z*ca5?l;Kyg34}P@XqaPw*!$vfqjqYPo>n(eQgLzzwh!Zu4wz$>4fh#gAco!#r<&-_=j5rraNZd8s_K<7Bo1Tb>Mlica)Gw7(HZHuegJ(M#F5mpqlomC zNHFmMx+3Z)V6zH~PUPkp;{<+N7;NEXvW3WCB&>#CmZe}KWjU(E*U)G(-r+`ad?8#| zY;SWq1m<0CZOo!T(*=qNB^-#EjKyr3D~0kV{WQ4xBS)7H8S9Y2=%7b7lL~J+n9~<* zUl6&0d;tVhk2c3G7?+2tC>W-}&@Xjni5v)rK47IJw==5$f8DHj03P18zQ|S ztDwc0Um0q@8D4hjmoFKOQQi0z>6&dXmH92kz144@M z&lsLk-JTT)qG4=X149*d zP{RI6%{6q4#Cx31gqt)sHsj!msF`oz6l^bYa7!?W>1 zK?QnVy}(?^VDCL>VPO0_xPk=D${ny%c{j_#-Vc7pdI*@ZYuAzIW5k7iDx0=Z6+#|( zE@nI#L$WtPm*Xi86q(o4!ijaBa3x}Aklo`LP;Ny3ABY%2nvt>>pa#^q1F*U5NTU;f|-N}SMgNX`UVo?M#;3XH#cjy2|cZH`-2m^I^`2$3(YS7er?awFIEP70@t9x@ph121C++JaNc2cvD zO?B8$Z8nESZQ1?JR8ehpWDYF^Y-5MA7E!NIC7X;8cbL$_ z4C%>j^5apF{YLiKlC4N(bJDDAMv68;D*_5Wu3>XvAiIBrFR_qK?a|@kSAyjLFz-P_ z7rirN?VMavRSzl(U^e0L5Ukc1+v?`{<}8?q8^qo{U~2hsnDHn-WzQF?F&U4F?DPr} z%x|EBsqVzh>|H0KxqYG?}PaRCL)G}t5bb}Q4ExUzCq2# z)TF^8xGe;_I(myPfKijQr542|7V_A5i>5EWF@VbG8f|`Fw{pYzXRrk{WbCW`O;2hf z=6y_QLo`lgp-egtFMUGh2b2Lvsbo5a)TV+Q->a6Ggn3AfJ~Z(uClWInSe81Wh_++q z2Gfe=L#h_4?4dPU^kP+bBc&C!6tfzeRW&tn0+J6TNhH}oh+wKi%dehp8l$@#v!ihi zL1&@m8?XingT%xbPdSxk^f?^yiQZB4?BiG2u^x>_%9^Sp!w-+IwV#(+izJ=Un@a4eT-fK#gF}u>4hW9(b@#`|Ldu1fw^LhC!b43sgR49WszeHx<6n>Wj z$_08jtIOx5SUP+)VL{fn1?%#)c6foy)k{~S`_jY4@2@mVJSdI)@obCCZIU;8gshOm zJfFRJ>2N=b62IRlng-V1T*6I|R9YIvYpEvlJ`4R;ktKno%5G`gfr_dw90m56eJ z1*7=w@<&x72p!+OP3hK?I}) zAMjE`q4cW~!h9V!Ok*VUVC>ezknWkU&tqXZHBZ!39(PrjBM&t}1I9!DOe0U#UlKR+ z+@uv=E?D}GQd^!0Gb@y$PSnX*GADlXH@x>deTy;b0d!)B~N6~$G8YAmuF zWTd7g3Ph~?mNytFCRwq7u`qDZhj?~L1ug^mM~y^G9y%MzlxAC{MF1)xjk;ns=5F`c zZ2(#t216odbaMkNf2U~zb5EQ$hKZCZWTl1%nK(8g=TKau#B7S*Mnkp6(3l{xk|Aep z)ip)p^3WkA1_nU;K0}()jOG}-!P*4lGJTZb76lnix6u|HJSM!Mb2aAnp>t@x88pp~ zanTz%EyHrrNk&ZhlRbn?lPT^f6;&Fw3u6?DEyF-f-?5*k2(a!$C9dAW*j;AFxDazf zEL89k4`#ri*V3r3G0CjU29SVDbL=(1He4Jk?#FmB9;Y+36e4~6vzmX_i2ubHY|+s1 z$LP||GZO5EgEJ)_4u#c#?m4lF{9N_~!!D;VP2kj1jJNHOIp`qfLdsI24E>yh<3c_- zYm?Jc@smY2kUS_~stA5T0?B;71~|zmAq9G>h`|o$*ulVbBW!=TQM_Z=VQJD)osWiO zocJsTWjRFw1{3H*kljJHfC_Mxp9ou>6Tciirh$@3o6Rfik zC>ea#+YCMobcq<+;xh@g0+efTJ9-!32xOdsrqGYafa@VAo|Q%u4-EohTGvCBvKlKku7fj` zwx>p`b=k<0SRhVla?v4%9Q6UAsV4}_bI#7$@C2||&j|T4>&uV&k}Db#YvPML$}jed zk010F)hv19mW9=4T)dWCTsq_jXCRF{qoE`S5)MmU&aH;_N7 zn(-F)G~JO^(m>=eLLQ(u*}L3OfKTY?pq^3^f`q2~5#n^WN_9fhFx-xz&#QAh9J~Mo zVOtOqG6I7Z&+Vhd8J}Tlq`azkzO^duu^tm+qCDsf%aGsbVn>#e8O~N<{(OPq#5&> ztHW7&rnj()$??hbh|%YqM`sQYT44gahg2KDG7P;aBqh9BqgKbG)JsDji0UnGGGxj* z_GH%W^z>@)3s+%JK@~g<-7pFR6y~2G_F6?eJ-P`hT9{RN(x9mP;LF^wkDH>P2S8&} z{Ss&0VHjb0ixf`7I=awJVuZ?m@{|!lWMSx>M#(`hS3sDT8kg-tAcjmE3=Ud6x%N61 zP=u2v-g<#@>v)VFlzD&cgQrR{hI8t-(pC;=wac2RH~*fy&4Z z_R23a8Nr6$kUSEC-P^cGbPIZLuVUk>rt--htSfe_olj~CK+)5~6+4-n#3<9|WK-td zXlk^S0g4%f4~7dZ%tUfziJ&}?0Nsw|X{@}Kop|iwWobRJS*R@vG&k=#=sS68@g zedww<6OLP-)-kc5sv|dJb|wJ2iI@lbB3l-pMl=cqzeRAo$I0|q6y}(*h7>If!6d^2 zo(-=w2#43=S(o+l3Qa_5=iX7$(^9wU^D|iXK$95VZ8wU6 z^;N7N@tBG4?AY&}9ky$)red{{d1*}iJB&%@r7;uVN#@0OJTI$bq<>&uN41P7DpWk8 zD46Rez9prbJbIE3NE!TX$}^Ha%-bWvgdP#*>k)}uu|^X6Eo?50U&1c=VhlX7FUqJ}3X7u`V!nU}D{j&5R2;oTEuy2Ba>gFk_z_D4 z8xigQ1?lU$hazurRu5*aAG%Swch+`B2Hn zSWK{LS?hI??%U8nX>gJmXJ;!5}76< ztJB?M!O&?KU^8HGeF>8as>5kmr>*RPO=sy7J^AhW+G>5D0sRUG5*7s4P3&Z%N-_MgaQov%*)QRI4E-d_?09PZX@{l0j`e9%Z3~R$|%= z(*MWVdBEpgRdN45$&;k)g4h-Tt%6d@u(Sorl8$si)5fNY8Im?_L(?W?v*`W;s#Wv0^+J02MQ_zDu{~met+lO`yWZl`+nZ!bDsab=k9&(Ip^LR)%p6i zbe?&pvlJ3W(&qU78@dCCL#;Y}uJ_6`UV!sJEXlNcPW{`K#I?L4Nlp6l7_XUyl4n^% zn?k>~ebyOhUeV=p50_JDfs=qv#G+huK8M|nRn8QVTe&DV_SnHbScOCS(aka1Uv!CW zInW;4ShSn?t_A%W#df$>98}J%aBF+nMQI>Pc3>EJnWF7R)N`fF(m}%@`XOORKQV~p z{#-D@t=P6=GHGpG2Pq*=3#-25nd*5iIF~@iE7MHo$xSZQGjqDd#686bC8*GnnO{_<~wfGbq5W(uQ8&fNUK$1*_hE!8n z51f(2d#&uPle!ZE?JK1@2Om(!C-#JE5{hE+DohvAx|T5 z`bU^H9`m!Ky#2^^<1SeGYFPYuZEiH;kbMFi8&(d;NP7xCZZ_fpUEW1uE-hL#k*L8l zQFC@vNv0yMN`RndT%~O|L&xGkVAQ9V=ZptVzu+7J(o=~3IG3=1qZ|>{3Xo~!yaL_q zv}tu`7x}a&s-o3$L+n0wAb#~OR3beol38uyh>BN?Zr#!%j_*QT;N{KTlF5!9K9?&vzw1L4FFQeAk3o@zR9smr`u>r|2$Y z@OjT=z+`D!QJgCnLqj*&G-Zpvdb-^QVA&UIUOO>$IYaQwFS{(AS|C+j+^tTj_uZVA zVzZXIs$P+du0EATq<5||N*z~gEh2cUDO3twHXUPC$JD`_JRQG|)OYkY|MUx}D4sfu=e6tv zs>z&f^y^4oy2s7(?ML~Upg8V`d?+1L;EsGPnPMy>I#}Ir#gYxq(gqG4xZlV)P|Tg2 z_F}=bhkw%r+P>f<+h(r+bB=X}nVK-10?@tW^vldshRRxwgA%sZ6tcuS1B{eW@Ubqk zn!}G1j;3sd!VI*kRj&PdW2W^S>Y!UE3>lE=OkorhM?F-PmsQEDC|RtAz&f>StB&cR zGvY)}aUryi9@DKe&zXs70rEV%R3WK#xnh;~n|ztFcCmhE`n-96lMWk{y7x{=0SZey_6x8yJ>4UZUMIy0yM4YCr3v%=Zo1m5_dmv9-Pr5+*`XE&Dvs^*C_TzYq>Tt0XY|6jwWGomHxs9ywu6he!FO~<)LB>X{^$cd4_U%WNxU;H zGNZZ-Y@$x2Q;V-O(R*IJ7pE9pNjurxEz7M>yZa2DQ)y;l)mC+lyKU0CVY#eS} zdI`>xoHI&`{gbcYQEH)m0elnq4rUVfG@20Pian}z(45W~U{Z5ltaV>#^aBxw{ZcdZOhmRVUBf|P<`~4q8V8x+lm57)7RIV zWk_b@&1Bax36s~XZ1D|2JCY##T6PX=xxz?%5#Rml1PHxO(xU=GL{PzMn>H(00huy7 z0%cvw?-S#b6~>J?l-tJ_FBC)Ufl{$j5*TV(Z_IrS$yH)9vHYHtjKg<~{UAC^zI z=BLBmzDYOwP$x!4IV$xq)d)&G>9mB#k6R0Im@`{{yOI~51)hvK#Yr(nWBsV87%tka zX!oV6h{-OSC?cKSb;)0>s-)=b6=&BpTB)ORx@)zF%R6lJBzZqO-e)pk9rh_BGLzK^Uhx8yF@>IhR&imLqN8Vakz52~C|Vl9jQqZ7tg8 zQonM}_;9s%b^!U6ht5l}<;qyq%xI`6BN-%mX~&_EATfY+i*!DQ8IkMyGMuh%V6eMg zf=I+`c5X613ymY{c3KnCwSfm=D?Te6)+QHINbwYgwFEStXSqf%sy zs8-e*JJXZwMy|xJl5m7&rQ`m7Z?U-U4YYHVo#XGZX?nS!ojK6%lothn0uwwMwpR2t zr_K=UbF6ZUZtdZ^BrYJE%nf873^rMx-NLF~YeT``Dlpwc!i$Nji~V)V){d&?!e13k zHcm7V1wZhxM5t;;KusbUxxQNmE^)VuF#Rrun0Mp2ql71hugOO|CErCDp8kuP9zs+6 zpia}{Cg&)?e>c3@yfQlDsmIp#p)8|ujkWfOW`<+reCz5Up8+6En2Z+`DG(tYHR zGY7h3e&X{(cw<}Ght4O4Sm`7DQrONjH+EZ2QIl0ykDXi@*27%(Vwcw!tSRy6#46;#YL<*#oQDC^&(vj>!YcA*vc2@ z3?J>dkb?MGXk2B>TnDc$=aHi+&imcgIj0_qT8MP3#`N*)j}jI1TAX9yu2P`L5jxR}>QGu=^Rfyx1;mh!->@s|JKrEc|hfHFO!tT(~R* zO00`2;^qw*>@1ewIf+WO*r?eiSrd))<&xr}DhZ~c&9kl=*()7NDlRdPJ-1>xjPRN{ z4G%L}_Y7LjR9^C>&qkJR#2=1VBgnzN%=dP}$Tx1Nn35FSe$S8Xi+Qvs@#*cnpUn(j zOiHWel#b!=`q;|liaQiR$B11}>}Kr=nN0beYQNL8oY_*~t8a?UWy%Z!55i6Vj(W1FY_kCPMI<3I2}J$c3R$tA^dzjw_+)aw4?6F%4G6V z?jrZL2(t6$R&e#HY}X5aq1!a?V+jc!yFR@=iv$XdHCZ}mcJr>{V@&yrJ!~7Jv`;9j zk{rc~jpF)nd+M8-WwcNk^HV2V+T3IfXO2cHI2+zVNFu0XkXktN3X25 zXwyEp5btIhlF6)QLQPW$=p{Rc;B>a6S*$i_&(YbMn23E=Z?W?--m+T9nS`S(Qx4t> zGwwhE<--oyn4Xi->VMLqho}W*G@+^?5qhnabk(p$+TBL72tK`rnORsV)D7&kYP>5? zk7fFcE8ahSbchQfxwY=2ur%bE8_&g@_vh-Mv$wzhC5#)I9SRzNv} zD0*K{qjwWC`!Pi|fYhj!mg8DvPNvw03$vmDIVpQ4M6$ZIT_OS1AbMSSt;WZAnL1VB zy64HbnzVnxQ{=~bQ`k;%pjR=ao27Lr9%fa9)pazdomaez+U9D8wnTHH0ZkKTjh2ey zg9bWH*J>ACXtQqy7fZxbK&iHv4`>gO4}N339gPeeopTc3If99pkzNhAi0QZ6KgNWF zl9VJHl|C+Hw5wmxG=iofVmgJot9f&MNBwFRfXMV<;^48KXOE`%VGm~t%b!gNam|hk z9Ldo8v}M!;!^yWq1e*509h8MI7mvbe!t_KH!^FGty7dfv7l>;eM|a-I^kwSZZd}1u zrVTY-b`eI6_OE9gZjxM8y92*$S1b!n-wfi+SzA{l#Nrgn2-01p8aF2HH$Fz(Q~Io| ztL!%^)7;FV{%kWLv3gdGCbBwks>zI=MfDvH?)E^7Bnrlo!q^RY~-cw}Iy;(c<1(2o*s-;t@pRUgb0Orj|9*-m%5Do3j#lpuo~GI}`S z7%_=7%o%@(S&Ru_wIxk^BC+nM>nGW!8ez-P6Svs&woX`Q8WJ(d$)0Aisetsh6i`i; z+bkM)YPG2e{s5juocVQjF$py+6me{CHYR4L2AB>wti%EQ4U#J8+>%`fmlw&Q6fnjWiluHodFZojv`wf$`gP z905t-8DU>IKtGyH+}d$zL&wPX2QW;WXF;V58Rx_NB8oIGSsy{_kIc%hT-Ce{Qw;TN z_Gy0Vz?KL7FiU3<%5LM3MZ|Re;zFz=kflqc7zxJM7>*Rf-C{<*qWd7aVV4xz+A7A! z8$F*`dw6|8m5<10-2l=9)5g+VWc0kvO3?CYzOyuaVzW7pqsFT@bgvCV@oVQtT(YBm zO}jV}ekC!4V;P|(T<~-tSIf;PJ+jGQc8wh<1}47(B3|z+A2D+G!X)cj)~W=i zU8oS22jiHMM6p8(CM(@#cj z`Z8t9Xa|dAV9G$VQ>Lf`B_nE(7KK(y*_mN14ZGSw2s;8~2J(fLl9e=mTXkQTHn7&` z(-j5jX*9d%I*A)iOIMc$8N1zQ5r5Rh2U|4TZn$vr$&D^Obu*mm_&l=PS+Px^i|Un0 zn|#ycyQ?fmwncIrmtgx%3bZL&Sf;t_C*)MfI6kP1uyI}M0{t+f4s7CzGl)iP=_w=` z{Uj+SBbL<>(^blwH~|QwPy4~JnY-3_?t$N__B+jfd7(?!)(-aQtDrpHXzy}b{aVoq zrOuIs;+k=)R6Lx*gD*1(4bOG1+?kjRyv)FgXc!Ed6J2??jRW62@Y%IYB_ZfFRQbcXH9M( zDwNmDI#B|3Jv&Vv8A_H7hlCAN!-i?ZFLDcl4NPvHiXJHXaNzu_qd2<55kxd(m}vMMr_5=OiJANj6q#36@?@17^K0g$wM3ta`b(04usE<#4Y=gc{IQaV z9CZGlgs-WS!&YkJkcD_P?ElQ7oe3507FT_a>twt|;om8SD{eIk5}3{uJBQ}!&7Fh~4ZdsA{|r{;BM8#eTp?6MMP!+Sq-59HAD z{Bj=hi|PyF*Mv-|ignJe9m*fs15yoR=xS8(?qj@I&X|TX!me3tjvXCv1!2OzTN61ny;_AIE4v;Yw_3=h^H3~M(~>%5nXP9 zXfY9u`8K1IM*NEY6`RVar_3OZidjfVUse~pyg}dOX4JRWNQcB2ZWrgmI3+sX;ITsN zbXqKyhS^daj$zE^DPt+SuIYtxvD2CE+wEmP+AFe;gbKND#)^kQYqUPL5c zE^CsrHU#>zJGHB6WZptEu<==k*typ&5(nm{c9f%aLtMmAUoi;0!frRZ&O!>ZP6rb# zR<@Fv!ETvO2{6^02kpJw#96~G6kb>klpWzMg9U3L59CjWzs)OM#SOmWbu)A=*Tc|U z=Ea1rdGMZ2I38KTzFY8a*~;xWJm{ucu^f2kH&U%=w>>+2_)ZvjqMcHYEATEE$3~sN zO<|qtwcaqAvmXc-S5pk`3`Crg zJx(D7EBq!4%V`{6n39c`c5Ip)hOG$RKhBTLZ*!ZtVB4RB_%``@@$gHfhT zhy|vvb(_fcl3nk+rLQrEWMO7z@sde$E5o?jkBoM~j|{#b%9PintwKVXp;+Z?O6?v_ zIl7i`Zql?E6LhCSz=$x7+Cm5zL`fEJ<&q3e&ZaJ&M;EPawl=s$2NW`&?Aka9Z0nG@ z`eQwrbC#<739D}*w`PSki6%Ts05+!>Ds?8az(?ZU(-e4(Ur|H{K$2u>vj4UObByir zbDYI8Dh|njytxLPOtH3d1VUFHXcKqB3h6J1baN4de4C9;g%vHc6e{0v;w>R@@Lhp| zi8JH9LWV+hNUplkA`@>x8ee4u#|w(M?3A$clC11eBJo<{fi5s9>2a;E_ZB90Nvgr>x!D4Q7k72%r$wC-g6NC|R%Dyv-Aw@f^ zCZbg;_XSsp1`F0~9xwQI6<^PCL@VK8@d`C8Zp&Ude)9!C*g9GvGCK%h5+YBBr&UC$ zK<+AY*dR;F2zWQCu4qbe7D`Q;aO&Qi^j0hhW!GGYpeQ0;b-0Mp{lM!XgNwM-X$oB} z#TpYD#U)E`6t}3cOtr*%O3|g%%VB&ui#dvGTOL+hK&~NOW?;^8Lepj|<{Q@l-^6vS!78cN9dx4vcJdxC?j2uu#8K*?lKm( zk3aRC(5-gud#)f_#yhi2IMu-sGDNS^&9EJ=aQ2);W{{SVSn!4?fRUY zAc&KV_gy7eLKKGCFuaIt63qO6>r`=CFHrf8QRJGwa~qj2*x;xXY+BR`*2rLE z9Q(>hmsrnTd9d}ZPnorCE#pe5m@O;*Fkcxy^X_z#NlUE8jgNp80WpHDehMNqYh!VM zXVzhE*^HGWU5V64c2w@*`KdWP=TQ?iqBU<=5z1(#JPO(aiNi9ABab^+QrmFOy8t3u zjl^!dNYR*ViY@C|Qe`nwWeJ;aN@ADH5$a|1$Q&Wj6pu0Jksl{^b#|Q1M!XDC+HrYq zOg)Zw9EYP){kh^A8H7#JYFGEgeNJY#3)GZZ!-xe|u;}uOIN+jl#Hgz$e`zSnhs;Gc zQ)^2e&5~SU#&yR5lUNG{guMo+aON#rSaMt018QnKcu?Baht z3c;!70>)KPq$z78g`MfA?sVD4mbNZb0f!ki-O+)3cN_JePuC^u(X406UB^c9S6yRm zYFw~YG+5(QASo0a&!`7w3jS7+VuV6n`SUQ6f)%X(vK%`RZY|)VRc=byToO2dwj9*b1 z&xfhkQ!HSZW!53qlx~VGnHm|8Kkl!9QT6Fi*JiFMK$>8>R<=b^t>{uLNXH=wvb~+C z(ROY#McBbL8dh%zAnlS0R~tbxVpl5IXDU?DfY-CCZ-y>}LZ8<$8UrTLNUAdkGX`~^ zkVr?PhSzWi2hoL@P1)T{QB}jtac^r=qf5=~KnYtF-&?Ke>2!HmnqauXgf1WHU5x>g zO2Mi(Z#aZW_o=10GVgPPMY8VPey=&Hu`+ z#7FvC-CED>)jk|uk=(*uy_S<9>Z@=H*Kj<84>OWjiq@x1Ck;)kI9DJR_R+z?Q?iw~ zi+=V+PQ%9r33?hVR+ha;s`;RgXJ(T2WjV0zeGZwf2G!*0XG~?{zE2%DQoCo9Tslh& zP0ST?>+RIHcmxO^m|3KnUgnkbBKHy<4SLx zQDZH-U@W>&2d3x}W%*)sLefX!CuK3&ukix|dwENSZ`5#i)lAcFrG4#58LP?uK~4wI z`8-nJ_Hlih&T`r+XKR)F*OrS}Q~EmgrJbF=;$cD1R-MLZwhnFi@;D0iv<-4)vAA}) z7=zRBw669o(rnYbB6F(_lBUDeQHEltLz!#(xa+E$%ti$?=|pnxS8E%iQ?rlV)su}P z`iRu1B05tiqHl3EqlqI>20m5%^pvTjDN+IrJLn(H)82)+t^}QlG?AEqP0~RwJ+kFO z<4ATE4ZH0rjUeIjDlcM9OlZ@T9`lKU#&j`AW-sL5C`qQo0xjqbSH@|>5b2t-Lpr8n zkGrMALiwUTs;_&ob;Ein08W}m5&^!Cm@||HshBxXH68XuY3`y(M7?PRF+P_%v8~J)GIJUd zoC$$w?^$c|5nj{K8&Di5hhCBH6%&SiIybq7MBAXhSZWH}M5;rqJUk4?s{@ryonP<>7>Y~LYQu{3s0G%Cd&yKPPF$TKT_Y{#Oaz4dFv@SU5OFk(8)F6em7wT^b46~V-(#iF^|<;lG7a+F$Z)}>g znf9ePy4+Ie0YzqHE>XL46qiUim~T5Hlaenwh_S4d1$hmsULvG4W}qT7F-Yc6Xb}mL zUEFNta#@qzH|j=VBO#el5;-oVluO!^`gA(C(8G}+G=E}_64qo~!;zM%(LT_jenCg6 zvXcKOkcfl;%YZH*Ogt062|6aHcd|%cuPw46@Wb$vMnRhF)*iU9`4qoACYE%2z2Vsc zF^n`T*|?3}UgmU3c(yG{W1{5fTy?!GV3%$&PsFYnk2hy{WGcwG#p?6Cs1aLrC^g!1 zs)3uqgm#{kb-O$g#shpZ>V^~VHrKN4^4^YSGU7+}VRrR`@wU7$MGOp3f0el4%Se-= zC!gI4K3EUn7n=an(o!o+yr>7rcmczXc_l@N)R?;FrK6i`6D>q$i&5ovd)b&5I_cwa zcF5c!4=IXCQ+$kHdXI;2r^&Do#AZc%JMw>u$5ysJ`0$HY@@gvX&7Rzi`;6d3xcVPcl(Uz`tSuq1EL)qdP! z-^o-04bJHlUQsXFl^-=4`Rog)cem?g8a3sk0L~VBC|)7TxFVdS@|M%~L&tt$!MKt2 zx7SQoTq#Y%m(lg}Ui`_HZKemv8K@p>44Zc~#&ozS>P*9A?Bf&${Y2-BsS8X!=%RBS zk2ZKVEPeCnd%cYNPXY*5dA~9G(OpyVHby-)mmd1m$z!(DIumNElTJFYx9;Yio>=jA zuuCd1aVDV4b3Llh3h48-N2B&xc4pAX52L?qFIL3q>@8JfJ5TK?+2ya(bgOe9S{!uq zk^8r{aeYqbB#wetTWkXz@2*-?c4i&sSg+kw74KDYQmK^WD4qs~L`hEmzj?F0ko(fK zuM0f%LYf^p&N4JvbgS>0%+Wic)v2#WsQhJ@J~0}g)Vt_Bv6AR`IxD8==@wd({5)LZ z&Se-x4Z3S_bw4N6kei0?K7y*>rU}c=rrGhv9={I9_V^MaSub|wV_lDCCfH0;`nGYe zdvh?L<--_?^UsEj+)22GN1m8Zy0rYcNwWy-QpIX(Vs2$kgol@PRxcNX)oQ(rjVBQ#9vc(MUCsBQwvm2=VDMhh9m=5Sxe&Pjn{g`2?{3FTW?5gBF zTGrAsOZG7L!jNY)SQVRek{N&%wx9B8N6v&eC4pmOZXCrW z^EM^3W$e{Xb)A0N;l1{-UG3}CkEDwBHJ+ys>pLMk&DPdUo_p8X5kj6%WYolaEB$b~ zGr3j0Isg)RE|YV6T%&V@r~?ydL)7P3-=vz-NK2WE(wOye;3wY#Ac$qqO-jL83?-O|vwM z;_LQz>**daHWIa_-cqpIy=7o587(mE-^|Q`b8d8Yv!zzVX8kn!%2vb_s@EAh+{oq8 zh=0hVQo4k=g9l6DTqD(sU&a#GHfW$NJE3{*Q?)^tH6UrTU#KW*l6%a5V2C=O{~8*_uuNEZ{LNfyjcg=vd?zaizR2f$Vlt$s*c@ zuaV(LVwO7B0EgCSY+b7BS__B}6A!a=wL=qn1~J2SH`q$Oxl9SgIS6IHOlgWHB zWFgO9_k?-$dkfsm65p{#*3j$%qJ?5BhxyIRm-*%{v^PP6bZ=^=8?RuKQMAjOaI?8k z2IFiy?bkjF*7J(aGg}hv)ZWZUpThzIjovzYHgtcBpQ@TI6}IEvG+( zMg&`LhLaJR+WI*GS%@$wzOckjJCz)=o+S@+#20YqFn@t=hiqSXe6udfz`%u1oP3&P z<88i9F@IPAWzA{962?Q#(REUN zZf-VdZBWZPVv$a3a<+bT|5`^Zw&&a}nieiP?Sa^9)Y+uoWrz|XKHai{DIsRx5n=9N zPjB5G+`EM!eG9=@M`8*&$%Vx!dF`IH=2Zb|_^T2d( zS!8!9X2@AI2&1&cv`|t6^XytZ*{srJXfaC9OldIA)*=2m_6m%TbVJN{MnpDbtrId) zNc&M^4h}lpa}TTj+1Fy+h|IsageE#xSh!KMfeoD5Fx5k|b|~Jd`mrHKj)D0(Mj&!Ipli}TeJczrLmL8nz~a#UkbAa_ggX zhF0pbWyTV};8}7BKb5m2>U@;kAHHsJ#-e9>bA{(LDMj(A+(1<8{Wrmfk zepngx^7?FEUO!G#a?!ip3t0ASeQ3$rqAx3r)K-efW~o6I5oFz#lOm4V9f9*&WZfxx zq$iEyb3HWM23XVw56?115a}>m(_7%3^%wt~?R@kq3XJBc_MK6Ux*f+le-IIQZp*eQ_ zw$0%lB)LSwC{As;Hy_xu&?#mEJg%U7>s1PF}nTy68`pZo6 zix#4OgN_}fb)H6R6YP&BWR`uQQTGyeuC{r-#oi9=DBAC7Rq)FjQ!2wA&{|{+mx{-xfU@#@t{qun|`GDOihM&4b+5NOd&1M5@HL z72aV~jkK;?<~N)4WVvqk?Qj$^7y~%Q6k-geW;7CaG=~=B+>hq6OpjEJ>Hx!R7(VW8 z!m^Q0)~#(_92UkLmavb2Sv{(gpC}*AX;v>1$k7~ZIE?172tgU@E-&NcEo+%tWYWUX z{5G*i=-v=kr!9nHzsJOHB)=g>6G{Z$YTQkq^n}c@|8334!TG3{HHr&w-AK2FV<(H)T7Kx%T+0^-A?N zw=NUY-)faopzfAnu)U%BAKO(u`@jA*T88{R&ny#&Pcf3XT?bcANHTR6&KQzpNg@2Rwc~TY~=42H-43}lo2T`7~6Tm5xssz;G(~3w5BF5IGgl?TB zrY@Ta7XRGKEU81jycb(3b;HKXdn+d<;$Jm0kNYU&Hag2zIn9^zIWp;&^S$jH#9j6O zLk@=feEA#<_g&6`29GQJOl#a$jgRhUWU8b4E2rm-zHJn8nB&M4hIuGQJ;&yLTido- zlF_`3OlH)W%84z5#6|wKt%OE6k4$8QmvRCb_iGz78WrA9wgjj zm6f_1aW33cu+W`o+1ydm!Q6(|8M)23I8LK`rbME7CM_rOY6cCZK8V83HC7W=&)JsU z%8}VT_bTV|6`^Tq2M^3qYsl&5b|FwTX_xp$!px>2;V}Ezyx4%oZ5MNfZJoW=F6PVG zhmpXhTey&>6xMpS`snNx3yiLeys@IEjPj0tMDW;98O1OCg-c!9HWkAg(}f-quMids zW{xg+Rvg}=OTLZ1&-i4cIxUPRGD?mJ^SYppOE}vdqs>u58ZWG`bK|JUY_CJRZYW2V z?@UV}Z653xr64vfv9T!o)?FE$Ylk6W>uo7{Te5n1B^oB!uT#Y; zJG%PYyhw9~IhE2{zG6g))q^Z#$zzuIC~YF~xN-POAy#&DttlZihI|d|=q))cwmZQ_ z)UYzr(s9PfytI&q*(j?78Eh4agJzVxHS)N%t&+hTtYeL*HY@`i#!i^5vuazIVcE$c zw=QCAN+@B5tyE-xS+@&>Qrs5CQKL?g?zF61MK6WPB#`P>taeE>nWm9~lEw(P+_!fK z^I$>~*2vs3O8ZK#P4-H+`$-|}n=}_vCX-zYZ(&ExO3TwhEbR-WN0e=}GjxlTNMRbM z9eC!@tP5O6!H`^BB_?Z^G=O1WEI# zgh1_!;rXk}t?4j zuLYc|L=_5cKH~y2!uJa16lu#S1BFOTQYwX)5f1Zb&l-VrVr&FDZi0tLVH~Ovp0&_w zej6pt#DEzdQKC_8)H)|b#jyB|sYaaL$OnDm?B0}(=V5pYKUQw3|_XGS7ts z=;=d{jz}X*z-eal%9)`o>P9vbxovi*=J?*Wt`he6fh}!F=Uk&pG0Z}zb5>U;&jUnO zl8_4qI$BVI$`UlaEz6+uGJVaCTobHY7Eghne=_!g{voKn*W=6Kgss2V@qcZD!t`YWWbQznzji{d~0Fni5 zQ{9Wj15GS0khvOym%1QscNj$hlG+-CF0mNz+Wu+uxaT+?>hF`D^e^JxPX?Y_5;mKELj z?(R%(O#@n`&@_+EB5sqpscjwiamxYX2c_Rks$0Nmp!(X%T3W!9Gu!kv#=~(XOCDu2 z+a+Ev&}$(%Qgm;@fvDuR#NYUkkr|FI>EhF@zd16q+G>H4UJy@@;?m?fjZ1p$P9ALe3R<-gD(kngm%1+swQz1r!J8LP{A7!MVAE`#+eB2~ zJH&Zg_9^`xb5SowG@m2#v0gx?h1sGh;LT2Jm~x$xAeT$UxH1P!+&f`Yve{>?UOlkU zD8YH1kW+?RsAmaH-BrQOrinhY#5p^&TMy5j<7_PFw7ekj??ne#M2GoHc%Pw7(V^(w z`cPjYZAu|XD^AlRLnV5+6rf1(lpK_qQIl}dtZBwYs&7QNIi0cx1OjLg|3V~h&Bpv`B> z6u*b>=yyM(x~Yn{>CA{_*TF^r^|z53%UrV}l+w+doxzx-xWzJ9{xW}~RCU<{s=D57 zOX;wE7L&7F>lTnj3Pr$?8D~@E^I9pMW!>HxNBTD=YB_$NABWGMDLxOdkPb3fifw7z zkTGvY)PZtZ^66c6lniAP_8heCkr9_dNswvU*lRLxC3hR(($?OFyN_oSx1_jH?k;Qs zJNmOxUW&Dm2O7j=gnBW~a5*5$IRwZyg4&YEyg8yI63z`9UCUQ2-(>H^srJ~@$Jgs^ zH&Cq5f|F*qQdV=f!qT&}gImD+N5m7+BjRv;A$)3e4ROCQ)!S|1CZCbYIk3K3a7gOc zkUmtDx912l$QKyc1FjI{>(7dK4$(xbEO#2pVd>)ep=Gvv2;xskL9dnYJieXTVFIlg zvP_z(rAHi2g0VchuDvgwF3N5f|559oPvO~Ol#0zn3)&&`l+WJcV$ppA?5dgFy=wjg>#o2JC8l35DN z$(}jHvYUG12*;=|n()@qBXc*y=}<{a^8({pW!wGanj@B3Wr#14C2bgG?0DGu+?U6F zjVWAq%Ah%h(NdNAvAl!Js%~X>FYj5$E>Onib-JWI`Ixo2a}FbH zwUJKq<~8+ntjq1QbT5>-nB?0v1e|CoAWX49Tn_W;o(e|z4r`@0AYG=&6)+}v*0s#G z3`V7?A($=cDNyXZQl$e9*FY+8ex5efpDFfPiV35d&%Ajb^G+Id&cpJ}5j(%f6P(}U zqbS+jIoZ4$xNSv5Hn+N;R!M_&*d^Jsgh4@H#Uscatr?zkG#t-$Q9y<)Y)gC{RB$qA&#F{e1v_?%q znk87n=!>g6=9<=oHG07qHGn*V1w(7-wZ2rcl~}?>Y+RS4jkmR{^~)GL1=NXqwUQE< zCAASo`Ie39BitghQH4Q|%GoE(Q)(MdVy~X6%=VhVgs*b1sj68lpS(M1uyph;T|A4U zW3ELarSN{%9h*DcyZ;)UHPA_y?q=<Kr@wnI!X|qSeP1{TVB;R1rD;>3{_>4!O zlu_3cRW{=wvMgsgZC5eH&532v5gHy&M}^PXI2+2$R3ln(58hgFlz<@O(B;=?%aSyYkv>om)}K@Vr#2DfCrw{hvpIIB3Np&BiP zvg#tC5^^3avJyh=SVA=G+2s;uDMw`rIS8^03&i%Tw;V`(lX57HL)(nnh@7o!md!*5 zPZy`Kns10CQ&BU^B4`dIEMH ziF-4czu5D!6qn>Nqv4EwHkzO&=c|iU&5(&`^w&Q zT-Gajy+2`C3Xr>YGg@?4wjsG}t6& z{WICEtkww=MuUDN7F~e+`b10FhjJt0Ux|r^QVK@n>4L-6Q#jD*~@ysPRDK|^g+rq05{>69VZ6aUQ>xVGOo3snGr&-mj zAu-(5a$WEp_*=GU?&38PF1pX&tyEx1YcZMlol&P{Ku}|9l^4)JB_L-!0CuQvkcTh7E!YbVKPsuQ|N912|t|w=gQ_5AA z=3aa!gd4zJ8^%(B`(js_dul?MR8bvntxl+&6eiZZfcad2zbbBFV*P0td+N4UE+>a~ z)Tm`HCWkXab9H7V?D@=?8*twmZmFL^xC!K6Z8(-(>`48t4`*Y(C2Xyz=4L4Ma7)dd zgwWrlu&RcfR>oACE33j|VFKT+w9p`5+L81gp;ex!jICS?=1$yuDyLyuP`M3vwa|ph zm@tJhjHMJiQo@PEIg@Z6JMI{os}rlM_^Ln1uD>zVjcQOWIfXDP&lu`Ntr)@}opfg9 z2I^}fWtzh8M60b^Nar-l)I-Sx>OtocE03$2Sy;y>KeDMU9Peh?ayf7;TBRzfNbOg(@ME!6%uR7msti&u*HU+nkT?C_ zLRv2bdSc}f`p(vHE#E8Jddfl zqw-AUPWpt(e;+w~A>3AZth$xB?qsYz5iTF2UNEB)uxo_eX0hKunqz9G;1Z~NjqgY3 z;TpLMsOOnrajOaR6qSEHq16plQa7okRoV%vuP~34LK=EdZie|@HO7xz(( z{@kWMpm|HbioeRQdd@RcnEKXZR)>LnX@vQo@M`T=DX! zAGLQ2|5NDc^v{aYdI1;ZpPC`fNn@JF%)spi3&#&GJ^L>R*Va5!HW$dcqBr zNyI+}SZ}4cmUfs#j0>o@N%X9lm?jV=R0fG%b@2pvjhj1b$54mr6_e&&8z$7Qr({o% z#~UiEsuz>KN~L%wgy!03X2`7C(%%iW`dyEY)9Ta~`Trx}RU-@PC$V~l@I>uxbsFpX zn`pmk_lcBNeMW!kM+#<4TjVBu7>S^?SUNt&2l@1UGXQsJ7#`&#=KM54L`z<$?%FvVRiwh|LuV7fgOOI z!YfE${xu$UCm%A`5PKk|S6Yg%2;*?6nr&PdPq^{+KLI~`0I$OTo_zNL_Quz%@%tKJ zB5}QznpTe*4@|({>&$OW*ayG+0{^jNJogfob<7w7}}X@wnVfjP9m0Dd-u+d|kuT4M+}6F3XEvkChaOLHo9HptH_yq7t;8Vb-fzJT90iOjv2YjCV-41+#I`|?z@=KWSpjUpG`ddiP z+?ld`h2Hs9@LwZ;>c7h0*MV;U-^Be+>h~_-ZsPbB@NL@fJM?6&op;lNHMZ}@?=FPD z2e=pWeZc*gAFwzZ!h_hq3w#fFh#ubnj0YwV|HFje6VUv%7bD^Oj0Eq;`xgnW9a)oGylhipX2@ueEbsl6`=TkZ9Ohn86RU*?aHVc z4=4}6!T)c8-vPg;S3OQ1{y?06B>pF?3?V#;+n<0x1AhUYBEE(6sxg2@<^;;~S4QX4 z#P^J)sq$3Avy9fAf$_iuM(y9I!@m<=eQytoyC(bt`);K59Pm8wPv8aMUySfNzW*kk z{{SxnPXc?Aay|I}0{;VE0z#!qd~!R^!i)j89Z;!2ivYEi9 zdsmj@XIywSxYty6V2xW5UQ3#L1J4nc*TYKk-4I@v<$FGJ?|kB&AKPkq*rzfs>|0qC zUSC-m-hjU1iw>(X~1;gP~b4&aKPKSh84Re96=gK^4)_za#YOs(WG$l=b40`KwPt|em(D#G0z6(R8D4$os9pJEv`oV&$W0$ zn8$ZMVHa4qs6x#L_!kj{w6kkJFSUHt-T;t`Ka2(}6o_sDM&rO&Y14}CN*)^uV zQxo1yyh|x}OQn@QruFL7u&i^+RB_kdH1F_^;T9xxum)n7y2qQ zLO*RjK>ckd+?L83?R&!zaHf^B8qOllvw^qZXC?S^z`qq(51dO`&Z}_qsP)u#YOdYd zY%l8WeA2wY>RI*KK|VTg@4#K_+*<5wv9HD69xkk`!@dstx)^>Ut+YP8jd`JwmHQ&n zeLHY5P(z)+gYPBe=bhy1Qs7S+D z?v>7az(MMBjvaWcoNEEXJ9;_v3@h<{0Q(-!e2@J z#}h*1@neL!CCejgHTGL8{e)9KtKk#aKM8ya_%!etKWc@Hyb~!0o^nfG+}H z0`365415LnD)2Sn>*V1Z6{mu}iTzICF7i}`BAP)N?#BKt;M>4=fO~*@f%|~_Dc1wQ zgTQxz?}2-Wun)tpd4%ux$?v1U4}c#6KLSLT{uqBh!MqjtDdwL6KL>t+UDWX}G5-qq zHSid?-vGY_en%R=2ObCi2jGvu6Tp+W{i!k-{tWyDcnbI{@HFrY@GS5*;P3eT2l*O= z%6qOd6rQh~Y5S6Y68;51Y5xm9{|5ep{YCoufAPOFA^ul6i%=S41K}mb2Xz=~&JLBD zvqDYHTS9G(=!kPdwdSp%j?P?P(-0bfF*U4*!1kC|6X%YWj@Qc$HQ2%L#CK<47ho)~ zE4bZ&R{*;Mcafi0@*M|^2POb};O|v@_XPF=_6A-J?lr(f%zf1JYsts!fPH{{f!Bk7 z1K<6CNx=TVWZ(ecK;R(YVBn3w6yOkGDq*Gp(}6>Q!+^tq8Nd<1k%0Q*QKWk`=41H2 z2{;y*3CsdFo9`T;5%XNW^MLul0$?F<9Qfn;E&`f>#n_hs&A^+1r9cb#Wqg+dD=@F* zyNd4#z=^;~z{$WV;7v@B#Ak!7Po-tj<3K{s!Q~z>UC7HJ7vdOm*O8y4k|8 zr@{TBz{h}FfR6*W0-pdr3499pH1HYHz76;+puNfGz1)&4LkWso519W5JVD()30%Nj^C!N4#{DnAQ@~$=r-5gHXMw)~f3LYJ{Dbdv!1ILvC-4IB zFW}$6e}ET({{sI5Ucw)pnDve^^ zE})O>R0}tWFj^IM!8{h&75mY|yBq#qQF}GLs1kOstuO~)Lm#<@{&x-iPwV;B;g!TQ zSaU7-Yr(@YBc5@DalCfPdxY_|ss+|$`B(8lJ8;{|4to5yNVK3bFuGRc4 z`iFTGKYP;KUqfE@CH;xmUkkiWVQWQKT^IJPeINbcdO|dW*OS*bkazX@{c7J&UTeZ6 zv-?`SKkk!(1Aqf-uV?MJJ{-jNVC-)Mrr`Gw(%Ox6W+!6Q_@7GIrUBDyo5P{NVZ?hl zerEtj07n8x5$C6Wf z;ODdSnT33h1C9r`h;I|$#eA34egMuRb26|LXaSbtwwydv;Xa7h=X*T(LEu*6z6v;@ zb}*bsy`5Bh1GO2#$+aK0?_S|X+U`c$?nc^9MV2(pg=rIGE!xchufY$eW4dX5yG0*5Yp+`1OSC1k_gA51y`YWU6Xh zlEq;|t>{{BgD(2T#@ZD2qwpwXt_hoB_-?*E7Vq?M2H#%d>a+OZG4UP1U1>b2{8c_i zk5YKnCvcl_+Y;j$hb7VV3GtdHFc>tm3GKbAY!37g*j^wp%kd zwZXaM=RDvb% zEWHcJ>n=vu2(K}D8~ssXy!;n}n~J;kug){@GAVy5^V@2*?^W2(W_h}ZFmJa!eXf90 zJIUYYW7M1SyOjLB3nWg&}+_wD$>rXqw38_t#CKrZ`H1XkH`9rpYH(L*WUyFUgr7xfct?O_5iiO z1K=M7zKg%_0pguKg#BS)XSkZGmq)UA6psB5<$e&H;;h2;90!aCBumh|@Tj@_eEb8- z_e1kn6Mh8#$G}g3t-w!#pApZ`fnU^qJN%M-zn;4L75HBh?y=f?h##5&`=i96`ulC| zy@vC(2|9tW8*A=^ub=3tapCv1_lL)+n?C@51fH<@^MUYW?NInr?StXZgmGT9@(bUR zxE~|mPl5j{@HA;ZLz>S5f3x;!2!99v58yd)sT|K^{wMA)0RJM6e*^ykUIhLN{0|s} zrg({PW1%lX)oG^+-x{D6r~-9BJi5Dfz*t~c zV7KbM;T8DV9e8E+o-hs=Pdw_W6Zq~ym{$RN0()WKyZTUgHRjg<6RSIf*H#}kUTD6~ zBe^8c_mkh(;eQ|eRpC z%kvM6CJ-;v=Vs(cggpW{5;zJt8o$Q?gSN*0FubYyqi}5X$F?@lBu`MMVHW;o19N~z zU~cs%VIF?wSGO|fY#$a>w+{<}q@?>fD?ezD2L=iCsuzMP9p5d;7$QfrT$xi z(||Uh9as&l0Xl%Sz&c<(&_<8%|>ZlDJ^qxv)EkY9yf^4UjT`hg4L z8aq(^HDg$AkA=;otvqfaoM!6Wj`yyQ!1B?gK+>yIA(D%jn{~dAu4nMye=BFmSgETJz z-bp%_0$PXPMgHFnTn1bY?h4>a;61=qz;1N13NS%J*ZyErk6za4TUyQT=`RWL0$kdco?X$qUs()Y(4&ig8@p<5O;0vU)8xoi=R-Xu8s$LiFU`!0qUSFoX zU!k9V75A?JGpkR+@BLHwdiBrY8^Aa5cPII}3%DEjR&~GdZQwh=J;1%deZc*|1Hgm8 zcY*H#4*?GYk5s3J?^}Ook4OG~0Q?a65%6Q+C*)x(-=6|M13m%#9QXzBOWb}1{2F)+ z_zmz|@V^5NC;z|a`#88i0Dr{%1m7otKLLLRE}(AiVLki{b)Y$0^O^eOQ@ClY{1tc_ z^D}&(1^x#79ry?E9Pm8wPv8aMU-IO8v7cc1Ke6*UEN=pC)CfM3hV1MfBiCa68?1jY~b4kYy>s|-S{75jPF5t zB&+HHcLvZ4^a1^Z8Q{Aa*n;0QhrUSt3{uaU&xiP4!(jG@eU`A2Mb?B1ao>&Iw`6~B!@p#q7xC4Yc{^pf7OFU8-E zm485QJ{R7F`Q5~|H|Cv&`Rk+3b|StCc@sbRGQwUCTmf8Z`TGZagXdXetKmI$lGOf_ zJpR+lca^2X+)Md+fV+5%AzYQY{fpIiRk)fko+fe)@-rBAran=I=znY*MomQ@B!e1z=wbv>Rt>VuG60VMauaid3cdLJjdSk`EVodHvu;j z*GDYA8rGgM;iHuAW8g*C-a@>IkNtZ875pwlf?W@c2h>--8r{A| z8tBbc6xXrf;g43nURP7um+yE$aeafhzZw1CN!~66-b=Wd)$28sU>+`o@me62^p{{Z+Q@FU>I;9sm(Dht_V zNIU5#b(6zZ;HPy5grCs{KPSFl0KWu&g?c-+$Yd-y}$ zS>ca$)yflfb(JUU>MMV$YoLC7JpY+6cS6$)QX4NpKSE7cCT29I_{>hL{sn(e0e@vo zJPk}?4R{9ov%ud->+iswi|tk%-qm;rVi;kTUj z7~=g1`KTu?I3Z!X`kmA-$@|Wg?Qz=y*b&$X*tve^%Fd5q+A7#(HCz=@LK3Yr@dWAUhezAv*qjFoRJjF1o z^H)`NE47jMHL3pdKJEQjd4MLO-p*%zJDmK@0B)s^9zp*&vVPA|`c+C#XfEMCP5sQ{J0DnJ^-&WRTD?PWQjRK`Og?w1@8@w9 z=gs3S9CRshG}WsP_W6GdgSHoGb&~fb_4`&PTba@NBHcFwOL1!fmJ#Q2Unmr}zoD{wY@gfVfAx-9FX~&+Sj5p!*a2WO_APt| zfgwP;cW093S@rudKTI0YU-CNk`TSAxtT|J2%Gp-u)$kVLsiOTUKBDBL=a9x*fpdYY zv7d*(^Hr|;{h?)~;plTa`mxyeuhgLdIkkEK+CB$D>B@dk<-+=dNddVp;Uv%UFmE*6 zC#wfnE&}iR2vhJsg|&Bz(N1r#ueI^MTaf12A>a=IKee)iG%v1KJQel@ic_3~LkRoE z$~(Y6KpTm7eV=IP`sw6lDtVK;SvO#9l|H;XH`B`KfChj`pw}$s~72K&!G?R7d}%z zF5FgsOy#qDKS$Wl1Gf{O)o_zrLn`M4LjufDNzKlxvXW}swNS5eOokmiGc z_J>+ezFIf0@=7!Y(QTzZ5?{MHe7C+id=G!g|3jFogufTs@nOsgyD$C7jcWJ_ zf zB+Vl$$1{G9$N%y8UsQR4IHuAk|5e`vP0|Fu3B2U);;*T!HR0ccQ$760;y^A}vltij zsYvIywM&R^3E`FyPIR&Qs@A(^`g$|?=7@hYQWv>jXE2_x`}g|XjrjjtzqIl{^8XU$ z{15r*WyB#I2$cqC{|0oH0h*ST6uwl$5X<5nqXY955c30PF$0 z3fL3a3qN}Uug3fuAnCA7#Qa*|b>x2^zWV~N2i^ee2TTI?2POjt00#mGHE7H(s~p_m za_={Sd#rwWWuGkX-tW}^rce)u08@c8$>TKqP6tH8r92#p{V?EgUggb|P zY5jO>!w%uxhSL}`v;$-MJn-iO`=XV6K|>q0)y9}<%f^yq*wSH_Y+}0_Nm$#UZO;i8 zHmn9Cvve2buK3qb#v%@R1o^(m((Z`<6&C&&aB;)h5&j*oxYn_cDaYk*#W>ef4*8M% zw-|4ymBaBVe<@AHeL8eQ3OC%n82^TtKlpg$_mYNU8eJpu?tT>i#$kCEF2w==kGL*v z*c8KioDVVX|BJ87nQ}O3G$QWYy(gAg@?sC8wz<4|MyY<^MH+|H_l}6i@k*m_)I7R- z%42__y(R4^wuj=_JR*KCo7}b(^5gyI-3^1o;(+hjFf<|#?=x~clQ~>zLdRJjIxDkZ zZuYaYy10V!N`}6(^~1Mhc;O`HxRP;kLFJs-FOW+`|4Udyg3{w~PuyI8(1jPZMYTumOXBJFE{Yk~JQye-RjI-lV(;)`N`W&MYC zzm9O%14~$^-_Q30zy~e;w`b{n$m|zq@p-$T4{7*kn9CBqF;d!~k!#n7Y?_hp<2lLY#WM%)X}%d^S6QTG`x#+SeG&X z&Uh#9rcT8tSJ-N}7x()bF0I_(a2aiM8Tq-4{5VbV0P#FXdf#n$cjZ*lxu5U%8ZIZj z%kg(P{*aXs$3yseD|DIiGrn>KYs?k6UxB;m70#rQ|3`@b`-Fd#eB4DIx5NJri2qj1 z;{k>JVZ)V-CD*0>5pF*QenQ+^fuA~x)p2?pu{~7aN_#Rh(74_rmf%eu<5yxMF!J45k zIcpQIAL)A*>7S1mk9GP@j*DV2?hxEv{_}Rv1n#{*`{j8~s=DMY?W*ds(Le{u!vM=zHP8~GM6--jqg%$S7Rxgw zTU1rxho-zzspjG51?A_ZBcgjbWLndT{53VC2Rmd~*+s zx&I}^BHzZ0?J$o8v2hm%;u5!b5FcbeMgohuHzOg>A>?Z!)WnuaY7)z2HK}Ean#?j) zO>U8K`ZP6#WxATuGDA&enW?5GPHB*r7WWaXbZ6nziJW#$M_6H)r^j6CP6p)5T&H}? zW+cuszRpKlV{`gM)|N6^=Ad$J%re(_&SH^MD8vo_SuOK1Q`xVu0M(&nu`D$FXCsUT z>NnP17OL3^D~F_u6DgeRQ*s)5IhjJd_}2xx!i(rjjBthrF2#=VBJO5VZhxTWwk$K= zMR{jtQs)CWxq^bs6+U&UQTOuTHZSqY2l+`?Tu$gnoh*R4ooD}^rU-4N5to9P$5o~f zo}3{z^CLfg!?^uI@}Uji+l9zWX(vqC>|Mc65udE0xQ)wfo#am#`7UXCLB0B!u2tAk zA1texpIptmy_$D>jam%<{%=k|qasuy{_%-ZWy?Cg<<=3ub;Qpc z-^x5<6(bLST{Drh&US?pWYnc~^q1F_sut$pkW(FG|BHMh)gX^*S~eImWj?ePa{h$B zK=y0bMy&&N@e_u;dKSA<-y)}rM5cU8O8Y1CT4sA8ZaS)R^5|E4O=*A(vn?0<&9s4H zZ=P}V&*L{FE~5kFw36w!5n*1UuABRpne!v;j_Ow0Uemq_>1hhhpgDOY>kKkyT!;9y zKvqj=1v2)EML*oy@=sJcW$sem=~=W_Z7iztH(|*=TmjTyw9Gthd^g zNftTLCSmyJ{Ur~6&inVZ?DyrbS+8YnMCz=pfyjLC&ovNP|6n{w-cBJsIgNKf%I5%W zh{!+4_nxSS)Tx%S$~4OaWxC~>GDF_|fWzuc{LF&c_@9G1*K$OiXF2K%JGwF-vjwma z7QtdzVmYQR#r-l^&hrXbNnWgiQ1!UF+H!(-iu7W>mOiX$;7QB^ly$J)a*DT8;&Xzz zxzkZ~Aej015Xxc$GLn$aBd`&@qj=^zXIA%L@A*#G&uJMGg&iU6RP9pOZ$Xxnq)H86Fbe)6q#`}HI*EVuK(dYLf zZZ2Ve8Dx)SE&Y?`FT!$MV-_$anEp4QA zH<0)BJ8BSd`+=%hY4<<_UG&tW0MtN;W~CJ13Ngt2@>`#+IJTNa5wH`ucO>O z5QH5&CVYAFZ*6F}62lsq-LTC*(O1&xui!SS6nxFjg?-B*iQlev(59^nIuYDN*n7 zj{mzHskdex4AdS*$?I#8xUd%kQWJKX|1&-!hj~Zbr8Cka^G`R}BPH>ZJ-#=UFl5Ob zcK|1H&AKUlw0z66{!LticsHahB0=g^24rQlMn?4$nQ$ZanNh$H++2N4Y z`UGhbCi9f|&yHJ3pTFa2nZPo)QlnFQqto84rXaTka`wQ-?|r)&SnslGt_DUi#WAMJYuZN<%i> zmZ9#HHR2}eeC6wJ&HDQ5yI#(4Bk!}s?RC@`tOd^!ZY1%Oc!qIm+GFH-xKf@lDnLc3 z1eKu*ajFW{pgQp~#*vuUgg(Ue7Rl+$yWNj>zn1eUmW)bHY9ujZvF`tRt5rPEKQt5*_T(p<`ZLD z+*PuCp{

4Za%RFXowk?&U(xMdEjf)8yv6QCV$f{h~G}9WAU5BcElSx~282+KRZ; z(!cZF_v4qb68AummJG;ggZekb=3_25d777_CgwX~wqb2?(++!So7$sxu&SEBuaGg9 zyptJmBk$EunXGFYc`(A*b2pjxvJ>^AGY8k{E|duLT|oM^uBhFtI$v0Fla|~=HA3lb zO{w&-25{shMCoZAt^`MY`-HcJCwg@Duqrm2#eDmAhgba&lIg&U2{hBu)-(2KvFg?_xfacuTp= z!fZCoAz$WNr9Qcs{`l3cxRdwRq0Ph3d{|(W+XGzMLiCGZu{B7`!c78p;vnae%yW0< zS;{4(WhpF!<*)))5*|CTwKxz8=6xxQDKU>nIcFw@=C`k=tj7Hst5;i#T@mVF5O(X( zuLp^{d`~YUO&ic}gxSPr6Ku8yYg?=_w5`^d#4SXVJ(&xzm$bOJ*&qRMI~!p$k4S!P z!%o%*7vNXi6j5Ul=FfH7?dW%q-#cNKRptUEo^pOORFnOhyD{Gba&AD*59~$151Gq& z59%X#zcoZVV2w>&;!t-v_o@by&%wkYSkkW@w1#SjtRC$!95Ld+*wY%9GGzS8^KolD zBMqgDvWTmluvS*%M%8^edmP`FM^ew(4@#O&!D;-;TGSasChNbX;~e_)aKTz$xriGx z{ci1&HGy{78b`Z=-BrT7W=*JFx5~U(BI2ExGH3qDh&y8-R4X?=m}c@_>M!@CavY84 zWKniEh>uw(l4HlYa%&1hy=6^lq$!S(Ci*XHD$K)`JJ!^wolw)D=0i=3dL1<#Y8TXm zs8UX03ibC{NjY_|BSD zle+w#^7sIO%tL-e{RFZn;4|tM!jkXSuc+U6{!V;=aIgF;LwrtcP#;P{Psvvv9 zWE>oTKG0@rF*fB6E#z3Svw_`~lkzazZ3oXzTQ1|-h29M@ zjhi>5oz1NU;m@2a&qI0@C5A1xR*~;_|NObfCV7#U_;KEXaD#b{34LjNLJYUGOFW-c z^Jy}UiiP~x5C`NeUR>085Fft@AfYY4AuAF3#E=A%VxJ6>LkdV~D?tAG=gJCFN93I@ zgqcb|ttzQ(g*69esR?&BWsn9nEpjC9)8SwCL4~2F2We9$64wZB5s|fn3^u!x(N;bCFykH|!YpkoYnVlH3yQ`qC}nIFw6eB}^nvB5BLPY|WR!;r zP!TFYWvBvGp&C?&8c>rkYC))4i8zaYxwnI}BZTu8_O(&#KwTsLl?hkeQ~@)rdf3&+ zo#amgTUFBZ-!jC%q`eyT()9C~F&`)QqGU9*spO-oG{PNg^1PX*yN1Ya4069xBh)5_ zoSIQ`nqt<_Rx3(QU+Qu*%$h?B+n-VH^zI6PJ8S{L^b+oN5VYH<`Y)gO0I12f)7mg7oVff9(tUb?iZh*OJ{Ef49 zKqvJqL>Z5tkuZVyOhhF|8P9bz(m09d$+k|ElggeARhdFP@et3`YG>jiW^yXnw3}+{ zVwg>{bwyPet7s(pVBAdh5_i{&{ikavg z%2Xp<*&{pc7c+;E$9MGUM%)$~{$}{(&Gf0Wu=C59{fmAM_F_KQ2=}wDDoY6CE9z3) zJj2~o!I8S@C*1{o)BAst)c zAKr&;sM}!&`kkn|U^n_buow1`p8aqD4kAO=a1WtBjNK793db-%j(P%4+T=S#Q%+%a z8qQ#L7Wd~+&%*`u7eVGHF7bRBuGrRVS1}7f_BEcb!wt9zx8OG1!Tv7lJ=+Gxmg1j1 zh{W{)EM;8s5cLs6!ee-X+o$jhp2G{`5}z<%qJIUi;SIcnckmuQz(@E5pWzF9g>Ud3 zet=?Uya5{M5CDM?4Wiqxv)5~*W0EM)M8Ma=MwhaT1opMrIdY-R@yG>F|yxO z_KGrxMSRO5w;YtW?B`$>9bE~YVkn(R*qRrg_TQ!3hRN+r9hRE8?x;U+GfvaV{+ zr&P1=qpu0)K4|}%tL!Z~pjAhfyrcX1E~!BnHK7)1*vA@1Ioyw89^g-Vxbhd&wwvGl zazAMudv>KRaec#ix!zW}$5`%hW*yWnclL6RCU*wZN8bRFu`1FKwGpyq&qZUqxyIXs zXSpk*DQT2--DaqA*K>2!79eL`TB6E&aw}B1`?)phB-A#ja!y>%i_7}c4CMOv?fy-g z+Cm@FW!{6MDeXv896H7Jn0J7V& z^u+8OW29b~^@ae}uX>T@KBTcP^s{f!`rEf?1IYJ*_ABZj%m&*JYD4UYw4ulxW*?>u z$KMDT38N^h(WqnW@-4epvsfyqW9|F3arV0Ec>7Mu?J(o|!_>*c)JgOFrKDNr;>@#0 z=2*{McjInM;wNRAgS^QZ?TArl;botc#PESPPVTi;mYLw}g{j=A`q2lHWp;r=w^^V6jFw2@x9uhhSWCG(jQpM`cg zVSWZTXMAon*0Rm?$vwWwXmz~YG`EPjF18=jmY^;VIH4^iOlez0#t5lDJWD*5M}=>$ ziL4+VGIy|&yp%j!Wk09M{W!8lyBfDMVGXQ>b+8^bz(&{vn_&xVMYhai{ezq%)H4sa z+l`BQ2RkU+kh>#5+9zqJ%(lhfZ_52h+wmuR&vu|rCLTLccj0a~viG3h3;T#`Zpvpr zdO16O0QDdog2QkGj>0jJyC>vM3K`oU=lKNq`>>PfPr+$8gZ#5_4$i{`xCocvGW@(d zgZGnsyn@+PxCYnZ2HYf`a<9fPxP|^Ua_Wum zdjw^z>M8oUsLxQJ!wYzc>{rPBN;t34zridH<@6Ty9lVDR@DVB|^fUS|`1y+e z)vQ~5OKpfP#sKLZ39_kq4^N@EfK5`O3LgXf*lTYlp zrDUhq3WZqItt5`KT2jX;ZnC_fCBr_s@s?^C` znEe5{dCueT_sJnjUdKr-pZJ9Wj!RlWhpg3K)(R13VJISL3%I2ebzGrMxx#yXh4Oftn2lb%=G&It5i*OEU$!WtI zQ70NBLuC5HX@Z-kAnQ%d@Y5VxKuc%^t)UJ44Q-(vw1*DR5jsIkaf69A+<2LgZc4Z*?L8N;y41u9A42Hu97zv|bH1U-0s4;umHP-Bb9z>1@B00Bh9QWAa4)x+l#+_ zupbV|3}i|AJgB+VNLqwQ+(r7@PILSimonO6-1+&~7#n)= z$1s69{e*ABZtQD#N}U$8pegb|@d3v3QP+xx7PhP~(!0ct&`S8N)uq z?^7*4GG#oK05u^bg2cFuWIZK`vy+k(%FzEL!*6oTFOxk1+|(=eGX=6j)lN!E=P)Ie z^9ApS)B!+EjU4~I3QqN*qPRPZxd0)1~lW!Kxazh@-OTM(!B9wg2a3#O< zHF+rMf8$f%lE?CF_7{=dIQ;WjWWE2d=MVq&{E--mfB%}H#P1X9sESemvw~0vWd2va zTV&m(FmaMQ1<&wpSH$_5{!{Y948JIL#cL8b9u23ciM%b}J>tpF9#S3<3f>?%+dszG(kYG79rwHEvde?e`i z19hRE^P5)R`JHy3bME|;_N*alBPhYQugr)x#$6L=3eBK7w1Ae*ABI0ke=gdIR+zPh zHt;vJMMgW2Z|wFwcYu!2$;mY-q*d+<=uEwdAdX$2D|BE{JVHga@%?QF6iGCD}hB1(gIFH4A z9QyGvfwG!NSxj<1(2Gemj12;2a7R-h@Fc;>*d{}@RNy|c51QD

z(@E5pWzF9 zg>Sg|4nNQ{F{7w1R@zW?2!KF{2GPL+R_9vDZjQB5VkhNwi#rH%M2(GQ&PnR~RK9}CdayB=y00e7_w$T-JXJfq95XTmNsWPxzV3fWvalx$j_%g0x`Om-#I3q3hF-&nhle`pp?CJ^v7n~QtJgxN^l>4UU`F@B*aaJQ zf4V&SU)bGYj3IeQsq3;P^-J7zSud+iSkwf)jw_a4*A-i@?uw%a^X1I%^&uy&Ue6Uz zuaBDs(2#UDg2wQkZ>$f{1btJ&Y37TEoOPEw)SDCU7NkGE9-^1vzYd`w^*Se4y5qkG+~Vf?*boYm$7Viy^q%Br zFUq*LE2Vy%G~U5)A7u1}e$XGk1E9PimpMoDVSGu}b0yUWkq?87y1?(H=BTrHj zSNZ_t4JU2peGxg75iYl$n3?%dh^5GHr=`?K;$~D-IDFS2TkZiHgV|UZ=L^%nPoo^q z6=6I~aHSy*A<9IU1e0M3Oa+O{G*?=EI`wRZE1f*9?VDX0$7MX!nn0RJ?_%uPRcd|;f3kVnP*&ty~nuCKSWvVO0O?*Wg@RL;WiU) zWzU=3>dzTK(!UIr)3&T|$u0lPx$(RTR>K-sICYzOHtg4d|NN-zX<3i`uxMF{D>7)` ze(pE;bw7gCE2$sZX#a^b`%^Z!B>bQI_%@QBO|Y3bZ-LWlcHPM@41|Kr8{~zpg!K<> zb7j`IOWLj3^gr!c^c}=+rz@+z%O(5sau{QW-MEvwJe#?jJ?Qrm?|rVEtPIN8qg;AH z;64>(+m-#~`5(mV=iLu-f3tc1=K%f=!auMLIfp>@4jx85f|=}jIf@#Gw(=P9KaTkc zIO)o+pK{5Zk~yY5?UJ@`n0khCTuu9Z7C+})x%BgJ0WM;G2~P4W3YUq`73}4=mR7-4 z^w%)Ej@%n?6XbrsTQ2iAA$IdV$h|XJjeSk>4as|8FU)->@+~WK|E#AW8mmO2H)Waez{y*QQd_(j>-3%oBkRCAP}Nq zH;OqR*;5kTUBu`!EpDlcMU6Ub#f=R&^1Wn7e-4=rRHwU`;kFdzTiRA!Ckcwn%{|_@ z4Z=PK$i0jnR4)WWOb9`?)b(z7ko&|>t0j!SITSl3T1noMlH_MeqfX0S5OFK@E*5fQ zyL0Jr+{4tk?ozy`CH1d?S@n4Mi|;Ot40(=F61dC!qA%-n$6O@t9$Cv#F5<3ylzAc} ztrd)LWuN-5dy8@~-ywV565}_CgwL;N=nx9A6bY-6FRTzHsk<_H-$O~}?x7@y6p#{9 zL27pfb`{u^H0~;dQw9H3qS7bp*Z+HGVpZyutT#zHRMXSCtLf<=%q_ppQAJNrd@>Lp zd4FY2M)p_*@CzO#*b!wh?B!dPc~RVD0)_F4*}jOIn$#PSVfxSP7PDG9zs6_C&4T-I zXiS|D`64GPZq0Dyz4C|kCvi08jKiILUu837{Y4vQn(s2+1@aVmIglaiYNjl|jN0_G z;#R(C8H@Ye=fu6-Dq= z@8ZNKC3Cwy$iouu*h)#BOSv29S@^{jMvTlk7i3KM|NA{u#)j^TN*UrHeW{G!$|AcQ zl*gVA2pmOF>?C-VOyoZ9Y| zdc5Dt7Fo2D%=NIX-NrF79in|tS3)0hywnF+k(@#_Enu$O5GB$U&)@3hm3!YoT2HdnFyw+k*J#9l7a)v

~Oqx!drzwAQ=3n=3tV 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 tofCO3a6=GgF)%C5nG;X&Q_ABhGN1ZnN*(6@B, + + #[asset(key = "models", collection(typed, mapped))] + pub models: HashMap>, +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/assets/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/assets/mod.rs new file mode 100644 index 0000000..a2c8b22 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/assets/mod.rs @@ -0,0 +1,35 @@ +pub mod assets_core; +pub use assets_core::*; + +pub mod assets_game; +pub use assets_game::*; + +use bevy::prelude::*; +use bevy_asset_loader::prelude::*; + +use crate::state::AppState; + +pub struct AssetsPlugin; +impl Plugin for AssetsPlugin { + fn build(&self, app: &mut App) { + app + // load core assets (ie assets needed in the main menu, and everywhere else before loading more assets in game) + .add_loading_state( + LoadingState::new(AppState::CoreLoading).continue_to_state(AppState::MenuRunning), + ) + .add_dynamic_collection_to_loading_state::<_, StandardDynamicAssetCollection>( + AppState::CoreLoading, + "assets_core.assets.ron", + ) + .add_collection_to_loading_state::<_, CoreAssets>(AppState::CoreLoading) + // load game assets + .add_loading_state( + LoadingState::new(AppState::AppLoading).continue_to_state(AppState::AppRunning), + ) + .add_dynamic_collection_to_loading_state::<_, StandardDynamicAssetCollection>( + AppState::AppLoading, + "assets_game.assets.ron", + ) + .add_collection_to_loading_state::<_, GameAssets>(AppState::AppLoading); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_replace_proxies.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_replace_proxies.rs new file mode 100644 index 0000000..9055c95 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_replace_proxies.rs @@ -0,0 +1,24 @@ +use bevy::core_pipeline::bloom::{BloomCompositeMode, BloomSettings}; +use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; +use bevy::prelude::*; + +use super::CameraTrackingOffset; + +pub fn camera_replace_proxies( + mut commands: Commands, + mut added_cameras: Query<(Entity, &mut Camera), (Added, With)>, +) { + for (entity, mut camera) in added_cameras.iter_mut() { + info!("detected added camera, updating proxy"); + camera.hdr = true; + commands + .entity(entity) + .insert(DebandDither::Enabled) + .insert(Tonemapping::BlenderFilmic) + .insert(BloomSettings { + intensity: 0.01, + composite_mode: BloomCompositeMode::Additive, + ..default() + }); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_tracking.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_tracking.rs new file mode 100644 index 0000000..62da84d --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/camera_tracking.rs @@ -0,0 +1,58 @@ +use bevy::prelude::*; + +#[derive(Component, Reflect, Debug)] +#[reflect(Component)] +/// Component for cameras, with an offset from the Trackable target +/// +pub struct CameraTracking { + pub offset: Vec3, +} +impl Default for CameraTracking { + fn default() -> Self { + CameraTracking { + offset: Vec3::new(0.0, 6.0, 8.0), + } + } +} + +#[derive(Component, Reflect, Debug, Deref, DerefMut)] +#[reflect(Component)] +/// Component for cameras, with an offset from the Trackable target +pub struct CameraTrackingOffset(Vec3); +impl Default for CameraTrackingOffset { + fn default() -> Self { + CameraTrackingOffset(Vec3::new(0.0, 6.0, 8.0)) + } +} + +impl CameraTrackingOffset { + fn new(input: Vec3) -> Self { + CameraTrackingOffset(input) + } +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Add this component to an entity if you want it to be tracked by a Camera +pub struct CameraTrackable; + +pub fn camera_track( + mut tracking_cameras: Query< + (&mut Transform, &CameraTrackingOffset), + ( + With, + With, + Without, + ), + >, + camera_tracked: Query<&Transform, With>, +) { + for (mut camera_transform, tracking_offset) in tracking_cameras.iter_mut() { + for tracked_transform in camera_tracked.iter() { + let target_position = tracked_transform.translation + tracking_offset.0; + let eased_position = camera_transform.translation.lerp(target_position, 0.1); + camera_transform.translation = eased_position; // + tracking.offset;// tracked_transform.translation + tracking.offset; + *camera_transform = camera_transform.looking_at(tracked_transform.translation, Vec3::Y); + } + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/mod.rs new file mode 100644 index 0000000..a6bbb65 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/camera/mod.rs @@ -0,0 +1,24 @@ +pub mod camera_tracking; +pub use camera_tracking::*; + +pub mod camera_replace_proxies; +pub use camera_replace_proxies::*; + +use bevy::prelude::*; +use bevy_gltf_blueprints::GltfBlueprintsSet; + +pub struct CameraPlugin; +impl Plugin for CameraPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .add_systems( + Update, + ( + camera_replace_proxies.after(GltfBlueprintsSet::AfterSpawn), + camera_track, + ), + ); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/lighting_replace_proxies.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/lighting_replace_proxies.rs new file mode 100644 index 0000000..48c0908 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/lighting_replace_proxies.rs @@ -0,0 +1,25 @@ +use bevy::prelude::*; + +use bevy::pbr::{CascadeShadowConfig, CascadeShadowConfigBuilder}; + +// fixme might be too specific to might needs, should it be moved out ? also these are all for lights, not models +pub fn lighting_replace_proxies( + mut added_dirights: Query<(Entity, &mut DirectionalLight), Added>, + mut added_spotlights: Query<&mut SpotLight, Added>, + mut commands: Commands, +) { + for (entity, mut light) in added_dirights.iter_mut() { + light.illuminance *= 5.0; + light.shadows_enabled = true; + let shadow_config: CascadeShadowConfig = CascadeShadowConfigBuilder { + first_cascade_far_bound: 15.0, + maximum_distance: 135.0, + ..default() + } + .into(); + commands.entity(entity).insert(shadow_config); + } + for mut light in added_spotlights.iter_mut() { + light.shadows_enabled = true; + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/mod.rs new file mode 100644 index 0000000..c9688cd --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/lighting/mod.rs @@ -0,0 +1,18 @@ +mod lighting_replace_proxies; +use lighting_replace_proxies::*; + +use bevy::pbr::{DirectionalLightShadowMap, NotShadowCaster}; +use bevy::prelude::*; + +pub struct LightingPlugin; +impl Plugin for LightingPlugin { + fn build(&self, app: &mut App) { + app + .insert_resource(DirectionalLightShadowMap { size: 4096 }) + // FIXME: adding these since they are missing + .register_type::() + + .add_systems(PreUpdate, lighting_replace_proxies) // FIXME: you should actually run this in a specific state most likely + ; + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/mod.rs new file mode 100644 index 0000000..f914563 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/mod.rs @@ -0,0 +1,35 @@ +pub mod camera; +pub use camera::*; + +pub mod lighting; +pub use lighting::*; + +pub mod relationships; +pub use relationships::*; + +pub mod physics; +pub use physics::*; + +// pub mod save_load; +// pub use save_load::*; + +use bevy::prelude::*; +use bevy_gltf_blueprints::*; + +pub struct CorePlugin; +impl Plugin for CorePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(( + LightingPlugin, + CameraPlugin, + PhysicsPlugin, + // SaveLoadPlugin, + BlueprintsPlugin { + library_folder: "models/library".into(), + format: GltfFormat::GLB, + aabbs: true, + ..Default::default() + }, + )); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/controls.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/controls.rs new file mode 100644 index 0000000..9ff42c9 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/controls.rs @@ -0,0 +1,12 @@ +use bevy::prelude::{info, ResMut}; +use bevy_rapier3d::prelude::RapierConfiguration; + +pub fn pause_physics(mut physics_config: ResMut) { + info!("pausing physics"); + physics_config.physics_pipeline_active = false; +} + +pub fn resume_physics(mut physics_config: ResMut) { + info!("unpausing physics"); + physics_config.physics_pipeline_active = true; +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/mod.rs new file mode 100644 index 0000000..cd7d523 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/mod.rs @@ -0,0 +1,37 @@ +pub mod physics_replace_proxies; +use bevy_rapier3d::{ + prelude::{NoUserData, RapierPhysicsPlugin}, + render::RapierDebugRenderPlugin, +}; +pub use physics_replace_proxies::*; + +pub mod utils; + +pub mod controls; +pub use controls::*; + +use crate::state::GameState; +use bevy::prelude::*; +// use super::blueprints::GltfBlueprintsSet; +use bevy_gltf_blueprints::GltfBlueprintsSet; +// use crate::Collider; +pub struct PhysicsPlugin; +impl Plugin for PhysicsPlugin { + fn build(&self, app: &mut App) { + app.add_plugins(( + RapierPhysicsPlugin::::default(), + RapierDebugRenderPlugin::default(), + )) + .register_type::() + .register_type::() + // find a way to make serde's stuff serializable + // .register_type::() + //bevy_rapier3d::dynamics::CoefficientCombineRule + .add_systems( + Update, + physics_replace_proxies.after(GltfBlueprintsSet::AfterSpawn), + ) + .add_systems(OnEnter(GameState::InGame), resume_physics) + .add_systems(OnExit(GameState::InGame), pause_physics); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/physics_replace_proxies.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/physics_replace_proxies.rs new file mode 100644 index 0000000..b91462c --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/physics_replace_proxies.rs @@ -0,0 +1,101 @@ +use bevy::prelude::*; +// use bevy::render::primitives::Aabb; +use bevy_rapier3d::geometry::Collider as RapierCollider; +use bevy_rapier3d::prelude::{ActiveCollisionTypes, ActiveEvents, ComputedColliderShape}; + +use super::utils::*; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum Collider { + Ball(f32), + Cuboid(Vec3), + Capsule(Vec3, Vec3, f32), + #[default] + Mesh, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum AutoAABBCollider { + #[default] + Cuboid, + Ball, + Capsule, +} + +// replaces all physics stand-ins with the actual rapier types +pub fn physics_replace_proxies( + meshes: Res>, + mesh_handles: Query<&Handle>, + mut proxy_colliders: Query< + (Entity, &Collider, &Name, &mut Visibility), + (Without, Added), + >, + // needed for tri meshes + children: Query<&Children>, + + mut commands: Commands, +) { + for proxy_colider in proxy_colliders.iter_mut() { + let (entity, collider_proxy, name, mut visibility) = proxy_colider; + // we hide the collider meshes: perhaps they should be removed altogether once processed ? + if name.ends_with("_collider") || name.ends_with("_sensor") { + *visibility = Visibility::Hidden; + } + + let mut rapier_collider: RapierCollider; + match collider_proxy { + Collider::Ball(radius) => { + info!("generating collider from proxy: ball"); + rapier_collider = RapierCollider::ball(*radius); + commands.entity(entity) + .insert(rapier_collider) + .insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!! + ; + } + Collider::Cuboid(size) => { + info!("generating collider from proxy: cuboid"); + rapier_collider = RapierCollider::cuboid(size.x, size.y, size.z); + commands.entity(entity) + .insert(rapier_collider) + .insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!! + ; + } + Collider::Capsule(a, b, radius) => { + info!("generating collider from proxy: capsule"); + rapier_collider = RapierCollider::capsule(*a, *b, *radius); + commands.entity(entity) + .insert(rapier_collider) + .insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!! + ; + } + Collider::Mesh => { + info!("generating collider from proxy: mesh"); + for (_, collider_mesh) in + Mesh::search_in_children(entity, &children, &meshes, &mesh_handles) + { + rapier_collider = RapierCollider::from_bevy_mesh( + collider_mesh, + &ComputedColliderShape::TriMesh, + ) + .unwrap(); + commands + .entity(entity) + .insert(rapier_collider) + // FIXME: this is just for demo purposes !!! + .insert( + ActiveCollisionTypes::default() + | ActiveCollisionTypes::KINEMATIC_STATIC + | ActiveCollisionTypes::STATIC_STATIC + | ActiveCollisionTypes::DYNAMIC_STATIC, + ) + .insert(ActiveEvents::COLLISION_EVENTS); + // .insert(ActiveEvents::COLLISION_EVENTS) + // break; + // RapierCollider::convex_hull(points) + } + } + } + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils.rs new file mode 100644 index 0000000..7886710 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils.rs @@ -0,0 +1,175 @@ +use bevy::prelude::*; +use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues}; +// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs + +pub(crate) trait Vec3Ext: Copy { + fn is_approx_zero(self) -> bool; + fn split(self, up: Vec3) -> SplitVec3; +} +impl Vec3Ext for Vec3 { + #[inline] + fn is_approx_zero(self) -> bool { + self.length_squared() < 1e-5 + } + + #[inline] + fn split(self, up: Vec3) -> SplitVec3 { + let vertical = up * self.dot(up); + let horizontal = self - vertical; + SplitVec3 { + vertical, + horizontal, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub(crate) struct SplitVec3 { + pub(crate) vertical: Vec3, + pub(crate) horizontal: Vec3, +} + +pub(crate) trait Vec2Ext: Copy { + fn is_approx_zero(self) -> bool; + fn x0y(self) -> Vec3; +} +impl Vec2Ext for Vec2 { + #[inline] + fn is_approx_zero(self) -> bool { + self.length_squared() < 1e-5 + } + + #[inline] + fn x0y(self) -> Vec3 { + Vec3::new(self.x, 0., self.y) + } +} + +pub(crate) trait MeshExt { + fn transform(&mut self, transform: Transform); + fn transformed(&self, transform: Transform) -> Mesh; + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]>; + fn search_in_children<'a>( + parent: Entity, + children: &'a Query<&Children>, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> Vec<(Entity, &'a Mesh)>; +} + +impl MeshExt for Mesh { + fn transform(&mut self, transform: Transform) { + for coords in self.read_coords_mut(Mesh::ATTRIBUTE_POSITION.clone()) { + let vec3 = (*coords).into(); + let transformed = transform.transform_point(vec3); + *coords = transformed.into(); + } + for normal in self.read_coords_mut(Mesh::ATTRIBUTE_NORMAL.clone()) { + let vec3 = (*normal).into(); + let transformed = transform.rotation.mul_vec3(vec3); + *normal = transformed.into(); + } + } + + fn transformed(&self, transform: Transform) -> Mesh { + let mut mesh = self.clone(); + mesh.transform(transform); + mesh + } + + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]> { + // Guaranteed by Bevy for the current usage + match self + .attribute_mut(id) + .expect("Failed to read unknown mesh attribute") + { + VertexAttributeValues::Float32x3(values) => values, + // Guaranteed by Bevy for the current usage + _ => unreachable!(), + } + } + + fn search_in_children<'a>( + parent: Entity, + children_query: &'a Query<&Children>, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> Vec<(Entity, &'a Mesh)> { + if let Ok(children) = children_query.get(parent) { + let mut result: Vec<_> = children + .iter() + .filter_map(|entity| mesh_handles.get(*entity).ok().map(|mesh| (*entity, mesh))) + .map(|(entity, mesh_handle)| { + ( + entity, + meshes + .get(mesh_handle) + .expect("Failed to get mesh from handle"), + ) + }) + .map(|(entity, mesh)| { + assert_eq!(mesh.primitive_topology(), PrimitiveTopology::TriangleList); + (entity, mesh) + }) + .collect(); + let mut inner_result = children + .iter() + .flat_map(|entity| { + Self::search_in_children(*entity, children_query, meshes, mesh_handles) + }) + .collect(); + result.append(&mut inner_result); + result + } else { + Vec::new() + } + } +} + +pub(crate) trait F32Ext: Copy { + fn is_approx_zero(self) -> bool; + fn squared(self) -> f32; + fn lerp(self, other: f32, ratio: f32) -> f32; +} + +impl F32Ext for f32 { + #[inline] + fn is_approx_zero(self) -> bool { + self.abs() < 1e-5 + } + + #[inline] + fn squared(self) -> f32 { + self * self + } + + #[inline] + fn lerp(self, other: f32, ratio: f32) -> f32 { + self.mul_add(1. - ratio, other * ratio) + } +} + +pub(crate) trait TransformExt: Copy { + fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform; + fn lerp(self, other: Transform, ratio: f32) -> Transform; +} + +impl TransformExt for Transform { + fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform { + let direction = target - self.translation; + let horizontal_direction = direction - up * direction.dot(up); + let look_target = self.translation + horizontal_direction; + self.looking_at(look_target, up) + } + + fn lerp(self, other: Transform, ratio: f32) -> Transform { + let translation = self.translation.lerp(other.translation, ratio); + let rotation = self.rotation.slerp(other.rotation, ratio); + let scale = self.scale.lerp(other.scale, ratio); + Transform { + translation, + rotation, + scale, + } + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils_old.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils_old.rs new file mode 100644 index 0000000..c210dd3 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/physics/utils_old.rs @@ -0,0 +1,75 @@ +use bevy::prelude::*; +use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues}; +// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/6e31fc02652fc9d085a4adde0a73ab007dbbb0dc/src/util/trait_extension.rs + +pub trait Vec3Ext { + #[allow(clippy::wrong_self_convention)] // Because [`Vec3`] is [`Copy`] + fn is_approx_zero(self) -> bool; + fn x0z(self) -> Vec3; +} +impl Vec3Ext for Vec3 { + fn is_approx_zero(self) -> bool { + [self.x, self.y, self.z].iter().all(|&x| x.abs() < 1e-5) + } + fn x0z(self) -> Vec3 { + Vec3::new(self.x, 0., self.z) + } +} + +pub trait MeshExt { + fn transform(&mut self, transform: Transform); + fn transformed(&self, transform: Transform) -> Mesh; + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]>; + fn search_in_children<'a>( + children: &'a Children, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> (Entity, &'a Mesh); +} + +impl MeshExt for Mesh { + fn transform(&mut self, transform: Transform) { + for attribute in [Mesh::ATTRIBUTE_POSITION, Mesh::ATTRIBUTE_NORMAL] { + for coords in self.read_coords_mut(attribute.clone()) { + let vec3 = (*coords).into(); + let transformed = transform.transform_point(vec3); + *coords = transformed.into(); + } + } + } + + fn transformed(&self, transform: Transform) -> Mesh { + let mut mesh = self.clone(); + mesh.transform(transform); + mesh + } + + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]> { + match self.attribute_mut(id).unwrap() { + VertexAttributeValues::Float32x3(values) => values, + // Guaranteed by Bevy + _ => unreachable!(), + } + } + + fn search_in_children<'a>( + children: &'a Children, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> (Entity, &'a Mesh) { + let entity_handles: Vec<_> = children + .iter() + .filter_map(|entity| mesh_handles.get(*entity).ok().map(|mesh| (*entity, mesh))) + .collect(); + assert_eq!( + entity_handles.len(), + 1, + "Collider must contain exactly one mesh, but found {}", + entity_handles.len() + ); + let (entity, mesh_handle) = entity_handles.first().unwrap(); + let mesh = meshes.get(mesh_handle).unwrap(); + assert_eq!(mesh.primitive_topology(), PrimitiveTopology::TriangleList); + (*entity, mesh) + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/mod.rs new file mode 100644 index 0000000..4128453 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/mod.rs @@ -0,0 +1,11 @@ +pub mod relationships_insert_dependant_components; +pub use relationships_insert_dependant_components::*; + +use bevy::prelude::*; + +pub struct EcsRelationshipsPlugin; +impl Plugin for EcsRelationshipsPlugin { + fn build(&self, app: &mut App) { + app; + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/relationships_insert_dependant_components.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/relationships_insert_dependant_components.rs new file mode 100644 index 0000000..4e9ad17 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/relationships/relationships_insert_dependant_components.rs @@ -0,0 +1,15 @@ +use bevy::prelude::*; + +pub fn insert_dependant_component< + Dependant: Component, + Dependency: Component + std::default::Default, +>( + mut commands: Commands, + entities_without_depency: Query<(Entity, &Name), (With, Without)>, +) { + for (entity, name) in entities_without_depency.iter() { + let name = name.clone().to_string(); + commands.entity(entity).insert(Dependency::default()); + warn!("found an entity called {} with a {} component but without an {}, please check your assets", name.clone(), std::any::type_name::(), std::any::type_name::()); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/loading.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/loading.rs new file mode 100644 index 0000000..73ef523 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/loading.rs @@ -0,0 +1,218 @@ +use bevy::prelude::*; +use bevy_gltf_blueprints::{clone_entity::CloneEntity, GameWorldTag, SpawnHere}; + +use crate::{ + assets::GameAssets, + state::{AppState, GameState, InAppRunning}, +}; + +use super::Saveable; + +const SCENE_FILE_PATH: &str = "scenes/save.scn.ron"; + +#[derive(Component, Debug)] +pub struct TempLoadedSceneMarker; + +#[derive(Component, Debug)] +pub struct SaveablesToRemove(Vec<(Entity, Name)>); + +#[derive(Component, Event)] +pub struct LoadRequest { + pub path: String, +} + +pub fn should_load(save_requested_events: EventReader) -> bool { + return save_requested_events.len() > 0; +} + +pub fn load_prepare( + mut next_app_state: ResMut>, + mut next_game_state: ResMut>, +) { + next_app_state.set(AppState::LoadingGame); + next_game_state.set(GameState::None); + info!("--loading: prepare") +} + +/// unload the level recursively +pub fn _unload_world_old(world: &mut World) { + let entities: Vec = world + // .query_filtered::, With)>>() + .query_filtered::>() // our level/world contains this component + .iter(world) + .collect(); + for entity in entities { + // Check the entity again in case it was despawned recursively + if world.get_entity(entity).is_some() { + world.entity_mut(entity).despawn_recursive(); + } + } +} + +pub fn unload_world(mut commands: Commands, gameworlds: Query>) { + for e in gameworlds.iter() { + info!("--loading: despawn old world/level"); + commands.entity(e).despawn_recursive(); + } +} + +// almost identical to setup_game, !!?? +pub fn load_world( + mut commands: Commands, + game_assets: Res, + // scenes: ResMut, +) { + info!("--loading: loading world/level"); + + commands.spawn(( + SceneBundle { + scene: game_assets.world.clone(), + ..default() + }, + bevy::prelude::Name::from("world"), + GameWorldTag, + InAppRunning, + )); +} + +pub fn load_saved_scene(mut commands: Commands, asset_server: Res) { + commands.spawn(( + DynamicSceneBundle { + // Scenes are loaded just like any other asset. + scene: asset_server.load(SCENE_FILE_PATH), + ..default() + }, + TempLoadedSceneMarker, + )); + // commands.entity(world).add_child(child_scene); + info!("--loading: loaded saved scene"); +} + +pub fn process_loaded_scene( + loaded_scene: Query<(Entity, &Children), With>, + named_entities: Query<(Entity, &Name, &Parent)>, // FIXME: very inneficient + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, + saveables: Query<(Entity, &Name), With>, + asset_server: Res, +) { + for (loaded_scene, children) in loaded_scene.iter() { + info!("--loading: post processing loaded scene"); + + let mut entities_to_load: Vec<(Entity, Name)> = vec![]; + + for loaded_entity in children.iter() { + if let Ok((source, name, _)) = named_entities.get(*loaded_entity) { + entities_to_load.push((source, name.clone())); + + let mut found = false; + for (e, n, p) in named_entities.iter() { + // if we have an entity with the same name as in same file, overwrite + if e != source && name.as_str() == n.as_str() { + // println!("found entity with same name {} {} {:?} {:?}", name, n, source, e); + // source is entity within the newly loaded scene (source), e is within the existing world (destination) + info!("copying data from {:?} to {:?}", source, e); + commands.add(CloneEntity { + source: source, + destination: e, + }); + // FIXME: issue with hierarchy & parenting, would be nice to be able to filter out components from CloneEntity + commands.entity(p.get()).add_child(e); + commands.entity(source).despawn_recursive(); + found = true; + break; + } + } + // entity not found in the list of existing entities (ie entities that came as part of the level) + // so we spawn a new one + if !found { + info!("generating new entity"); + let world = game_world.single_mut(); + let world = world.1[0]; + + let new_entity = commands + .spawn((bevy::prelude::Name::from(name.clone()), SpawnHere)) + .id(); + + commands.add(CloneEntity { + source: source, + destination: new_entity, + }); + + commands.entity(world).add_child(new_entity); + info!("copying data from {:?} to {:?}", source, new_entity); + } + } + } + commands.spawn(SaveablesToRemove(entities_to_load.clone())); + + // if an entity is present in the world but NOT in the saved entities , it should be removed from the world + // ideally this should be run between spawning of the world/level AND spawn_placeholders + + // remove the dynamic scene + info!("--loading: DESPAWNING LOADED SCENE"); + commands.entity(loaded_scene).despawn_recursive(); + + asset_server.mark_unused_assets(); + asset_server.free_unused_assets(); + } + //for saveable in saveables.iter(){ + // println!("SAVEABLE BEFORE {:?}", saveable) + //} +} + +pub fn final_cleanup( + saveables_to_remove: Query<(Entity, &SaveablesToRemove)>, + mut commands: Commands, + saveables: Query<(Entity, &Name), With>, + mut next_app_state: ResMut>, + mut next_game_state: ResMut>, +) { + if let Ok((e, entities_to_load)) = saveables_to_remove.get_single() { + info!("saveables to remove {:?}", entities_to_load); + for (e, n) in saveables.iter() { + let mut found = false; + println!("SAVEABLE {}", n); + + //let entities_to_load = saveables_to_remove.single(); + for (en, na) in entities_to_load.0.iter() { + found = na.as_str() == n.as_str(); + if found { + break; + } + } + if !found { + println!("REMOVING THIS ONE {}", n); + commands.entity(e).despawn_recursive(); + } + } + // if there is a saveable that is NOT in the list of entities to load, despawn it + + // despawn list + commands.entity(e).despawn_recursive(); + + info!("--loading: done, move to InGame state"); + // next_app_state.set(AppState::AppRunning); + next_game_state.set(GameState::InGame); + } +} + +fn process_loaded_scene_load_alt( + entities: Query<(Entity, &Children), With>, + named_entities: Query<(Entity, &Name, &Parent)>, // FIXME: very inneficient + mut commands: Commands, +) { + for (entity, children) in entities.iter() { + let mut entities_to_load: Vec<(Entity, Name)> = vec![]; + for saved_source in children.iter() { + if let Ok((source, name, _)) = named_entities.get(*saved_source) { + println!("AAAAAAA {}", name); + entities_to_load.push((source, name.clone())); + } + } + println!("entities to load {:?}", entities_to_load); + + commands.entity(entity).despawn_recursive(); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/mod.rs new file mode 100644 index 0000000..3d0e91e --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/mod.rs @@ -0,0 +1,70 @@ +pub mod saveable; +use bevy::asset::free_unused_assets_system; +use bevy_gltf_components::GltfComponentsSet; +pub use saveable::*; + +pub mod saving; +pub use saving::*; + +pub mod loading; +pub use loading::*; + +use bevy::prelude::*; +use bevy::prelude::{App, IntoSystemConfigs, Plugin}; +use bevy::utils::Uuid; + +use bevy_gltf_blueprints::GltfBlueprintsSet; + +#[derive(SystemSet, Debug, Hash, PartialEq, Eq, Clone)] +pub enum LoadingSet { + Load, + PostLoad, +} + +pub struct SaveLoadPlugin; +impl Plugin for SaveLoadPlugin { + fn build(&self, app: &mut App) { + app + .register_type::() + .register_type::() + .add_event::() + .add_event::() + + .configure_sets( + Update, + (LoadingSet::Load, LoadingSet::PostLoad) + .chain() + .before(GltfBlueprintsSet::Spawn) + .before(GltfComponentsSet::Injection) + ) + + .add_systems(PreUpdate, save_game.run_if(should_save)) + + .add_systems(Update, + ( + load_prepare, + unload_world, + load_world, + load_saved_scene, + // process_loaded_scene + ) + .chain() + .run_if(should_load) // .run_if(in_state(AppState::AppRunning)) + .in_set(LoadingSet::Load) + ) + .add_systems(Update, + ( + process_loaded_scene, + apply_deferred, + final_cleanup, + apply_deferred, + free_unused_assets_system + ) + .chain() + .in_set(LoadingSet::PostLoad) + ) + + // .add_systems(Update, bla) + ; + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/old.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/old.rs new file mode 100644 index 0000000..7d8a389 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/old.rs @@ -0,0 +1,137 @@ +const NEW_SCENE_FILE_PATH:&str="save.scn.ron"; + + + + +use bevy::ecs::component::Components; +use bevy::ecs::entity::EntityMap; +use serde::{Deserialize, Serialize}; + + +use std::io::Read; +use bevy::scene::serde::SceneDeserializer; +use ron::Deserializer; +use serde::de::DeserializeSeed; + + + + +#[derive(Debug, Deserialize)] +struct Components2; + +#[derive(Debug, Deserialize)] +struct Fake { + resources: HashMap, + entities: HashMap +} + +fn ron_test(){ + let full_path = "/home/ckaos/projects/grappling-boom-bot/assets/save.ron"; + match File::open(full_path) { + Ok(mut file) => { + let mut serialized_scene = Vec::new(); + if let Err(why) = file.read_to_end(&mut serialized_scene) { + error!("file read failed: {why:?}"); + } + match Deserializer::from_bytes(&serialized_scene) { + Ok(mut deserializer) => { + // deserializer. + let bla:Fake = ron::from_str("( + resources: {}, + entities: {} + )").unwrap(); + info!("testing {:?}", bla); + info!("YOYO DONE YO !") + } + Err(why) => { + error!("deserializer creation failed: {why:?}"); + } + } + } + Err(why) => { + error!("load failed: {why:?}"); + } + } +} + +fn inject_component_data(world: &mut World, scene: DynamicScene){ + let mut entity_map = EntityMap::default(); + if let Err(why) = scene.write_to_world(world, &mut entity_map) { + panic!("world write failed: {why:?}"); + } + println!("entity map {:?}", entity_map); + // TODO: EntityMap doesn't implement `iter()` + for old_entity in entity_map.keys() { + let entity = entity_map.get(old_entity).unwrap(); + info!("entity update required: {old_entity:?} -> {entity:?}"); + let e_mut = world + .entity_mut(entity); + } + + info!("done loading scene"); +} + +fn post_load(world: &mut World){ + let full_path = "/home/ckaos/projects/grappling-boom-bot/assets/save.ron"; + match File::open(full_path) { + Ok(mut file) => { + let mut serialized_scene = Vec::new(); + if let Err(why) = file.read_to_end(&mut serialized_scene) { + error!("file read failed: {why:?}"); + } + match Deserializer::from_bytes(&serialized_scene) { + Ok(mut deserializer) => { + let result = SceneDeserializer { + type_registry: &world.resource::().read(), + } + .deserialize(&mut deserializer); + info!("deserialize done"); + match result { + Ok(scene) => { + info!("scene loaded"); + // scene.write_to_world(world, entity_map) + // println!("{:?}", scene.entities); + inject_component_data(world, scene); + /*for dyn_ent in scene.entities.iter(){ + // let mut query = scene.world.query::<(Entity, &Name, &GltfExtras, &Parent)>(); + }*/ + } + Err(why) => { + error!("deserialization failed: {why:?}"); + } + } + } + Err(why) => { + error!("deserializer creation failed: {why:?}"); + } + } + } + Err(why) => { + error!("load failed: {why:?}"); + } + } + +} + + + +#[derive(Component, Reflect, Debug, Default )] +#[reflect(Component)] +pub struct Hackish; + + + +/// unload saveables +fn unload_saveables(world: &mut World) { + let entities: Vec = world + .query_filtered::>()// our level/world contains this component + .iter(world) + .collect(); + for entity in entities { + // Check the entity again in case it was despawned recursively + if world.get_entity(entity).is_some() { + info!("despawning"); + world.entity_mut(entity).despawn_recursive(); + } + } +} \ No newline at end of file diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saveable.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saveable.rs new file mode 100644 index 0000000..67a4c65 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saveable.rs @@ -0,0 +1,14 @@ +use bevy::prelude::*; +use bevy::utils::Uuid; + +#[derive(Component, Reflect, Debug)] +#[reflect(Component)] +pub struct Saveable { + id: Uuid, +} + +impl Default for Saveable { + fn default() -> Self { + Saveable { id: Uuid::new_v4() } + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saving.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saving.rs new file mode 100644 index 0000000..46d0b1a --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/core/save_load/saving.rs @@ -0,0 +1,87 @@ +use bevy::pbr::{Clusters, VisiblePointLights}; +use bevy::render::camera::CameraRenderGraph; +use bevy::render::view::VisibleEntities; +use bevy::tasks::IoTaskPool; +use bevy::{gltf::GltfExtras, prelude::*}; +use bevy_rapier3d::prelude::RigidBody; +use std::fs::File; +use std::io::Write; + +use crate::core::physics::Collider; +use crate::game::{Pickable, Player}; + +use super::Saveable; + +const NEW_SCENE_FILE_PATH: &str = "save.scn.ron"; + +#[derive(Component, Event)] +pub struct SaveRequest { + pub path: String, +} + +pub fn should_save( + // keycode: Res>, + save_requested_events: EventReader, +) -> bool { + return save_requested_events.len() > 0; + + // return keycode.just_pressed(KeyCode::S) +} + +pub fn save_game( + world: &mut World, + // save_requested_events: EventReader, +) { + info!("saving"); + // world. + /*for bli in save_requested_events.iter(){ + println!("SAAAAVE TO THISSSSS {:?}", bli.path) + }*/ + + let saveable_entities: Vec = world + .query_filtered::>() + .iter(world) + .collect(); + + /*let static_entities: Vec = world + .query_filtered::>() + .iter(world) + .collect();*/ + println!("saveable entities {}", saveable_entities.len()); + + let mut scene_builder = DynamicSceneBuilder::from_world(world); + scene_builder + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + // camera stuff + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + .deny::() + //.deny::() + .extract_entities(saveable_entities.into_iter()); + + let dyn_scene = scene_builder.build(); + let serialized_scene = dyn_scene + .serialize_ron(world.resource::()) + .unwrap(); + + #[cfg(not(target_arch = "wasm32"))] + IoTaskPool::get() + .spawn(async move { + // Write the scene RON data to file + File::create(format!("assets/scenes/{NEW_SCENE_FILE_PATH}")) + .and_then(|mut file| file.write(serialized_scene.as_bytes())) + .expect("Error while writing scene to file"); + }) + .detach(); +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_game.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_game.rs new file mode 100644 index 0000000..2500bbb --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_game.rs @@ -0,0 +1,85 @@ +use bevy::prelude::*; + +use crate::{ + assets::GameAssets, + state::{GameState, InAppRunning}, +}; +use bevy_gltf_blueprints::{BluePrintBundle, BlueprintName, GameWorldTag}; + +use bevy_rapier3d::prelude::Velocity; +use rand::Rng; + +pub fn setup_game( + mut commands: Commands, + game_assets: Res, + models: Res>, + mut next_game_state: ResMut>, +) { + println!("setting up all stuff"); + commands.insert_resource(AmbientLight { + color: Color::WHITE, + brightness: 0.2, + }); + // here we actually spawn our game world/level + + commands.spawn(( + SceneBundle { + // note: because of this issue https://github.com/bevyengine/bevy/issues/10436, "world" is now a gltf file instead of a scene + scene: models + .get(game_assets.world.id()) + .expect("main level should have been loaded") + .scenes[0] + .clone(), + ..default() + }, + bevy::prelude::Name::from("world"), + GameWorldTag, + InAppRunning, + )); + + next_game_state.set(GameState::InGame) +} + +pub fn spawn_test( + keycode: Res>, + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, +) { + if keycode.just_pressed(KeyCode::T) { + let world = game_world.single_mut(); + let world = world.1[0]; + + let mut rng = rand::thread_rng(); + let range = 5.5; + let x: f32 = rng.gen_range(-range..range); + let y: f32 = rng.gen_range(-range..range); + + let mut rng = rand::thread_rng(); + let range = 0.8; + let vel_x: f32 = rng.gen_range(-range..range); + let vel_y: f32 = rng.gen_range(2.0..2.5); + let vel_z: f32 = rng.gen_range(-range..range); + + let name_index: u64 = rng.gen(); + + let new_entity = commands + .spawn(( + BluePrintBundle { + blueprint: BlueprintName("Health_Pickup".to_string()), + transform: TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + ..Default::default() + }, + bevy::prelude::Name::from(format!("test{}", name_index)), + // BlueprintName("Health_Pickup".to_string()), + // SpawnHere, + // TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + Velocity { + linvel: Vec3::new(vel_x, vel_y, vel_z), + angvel: Vec3::new(0.0, 0.0, 0.0), + }, + )) + .id(); + commands.entity(world).add_child(new_entity); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_main_menu.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_main_menu.rs new file mode 100644 index 0000000..cecd13a --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/in_main_menu.rs @@ -0,0 +1,113 @@ +use bevy::prelude::*; + +use crate::state::{AppState, GameState, InMainMenu}; + +pub fn setup_main_menu(mut commands: Commands) { + commands.spawn((Camera2dBundle::default(), InMainMenu)); + + commands.spawn(( + TextBundle::from_section( + "SOME GAME TITLE !!", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(100.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + commands.spawn(( + TextBundle::from_section( + "New Game (press Enter to start, press T once the game is started for demo spawning)", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(200.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + /* + commands.spawn(( + TextBundle::from_section( + "Load Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(250.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + )); + + commands.spawn(( + TextBundle::from_section( + "Exit Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(300.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + ));*/ +} + +pub fn teardown_main_menu(bla: Query>, mut commands: Commands) { + for bli in bla.iter() { + commands.entity(bli).despawn_recursive(); + } +} + +pub fn main_menu( + keycode: Res>, + + mut next_app_state: ResMut>, + // mut next_game_state: ResMut>, + // mut save_requested_events: EventWriter, + // mut load_requested_events: EventWriter, +) { + if keycode.just_pressed(KeyCode::Return) { + next_app_state.set(AppState::AppLoading); + // next_game_state.set(GameState::None); + } + + if keycode.just_pressed(KeyCode::L) { + next_app_state.set(AppState::AppLoading); + // load_requested_events.send(LoadRequest { path: "toto".into() }) + } + + if keycode.just_pressed(KeyCode::S) { + // save_requested_events.send(SaveRequest { path: "toto".into() }) + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/game/mod.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/mod.rs new file mode 100644 index 0000000..3443c45 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/mod.rs @@ -0,0 +1,115 @@ +pub mod in_game; +pub use in_game::*; + +pub mod in_main_menu; +pub use in_main_menu::*; + +pub mod picking; +pub use picking::*; + +use crate::{ + insert_dependant_component, + state::{AppState, GameState}, +}; +use bevy::prelude::*; +use bevy_rapier3d::prelude::*; + +// this file is just for demo purposes, contains various types of components, systems etc + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum SoundMaterial { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo marker component +pub struct Player; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo component showing auto injection of components +pub struct ShouldBeWithPlayer; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo marker component +pub struct Interactible; + +fn player_move_demo( + keycode: Res>, + mut players: Query<&mut Transform, With>, +) { + let speed = 0.2; + if let Ok(mut player) = players.get_single_mut() { + if keycode.pressed(KeyCode::Left) { + player.translation.x += speed; + } + if keycode.pressed(KeyCode::Right) { + player.translation.x -= speed; + } + + if keycode.pressed(KeyCode::Up) { + player.translation.z += speed; + } + if keycode.pressed(KeyCode::Down) { + player.translation.z -= speed; + } + } +} + +// collision tests/debug +pub fn test_collision_events( + mut collision_events: EventReader, + mut contact_force_events: EventReader, +) { + for collision_event in collision_events.read() { + println!("collision"); + match collision_event { + CollisionEvent::Started(_entity1, _entity2, _) => { + println!("collision started") + } + CollisionEvent::Stopped(_entity1, _entity2, _) => { + println!("collision ended") + } + } + } + + for contact_force_event in contact_force_events.read() { + println!("Received contact force event: {:?}", contact_force_event); + } +} + +pub struct GamePlugin; +impl Plugin for GamePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(PickingPlugin) + .register_type::() + .register_type::() + .register_type::() + // little helper utility, to automatically inject components that are dependant on an other component + // ie, here an Entity with a Player component should also always have a ShouldBeWithPlayer component + // you get a warning if you use this, as I consider this to be stop-gap solution (usually you should have either a bundle, or directly define all needed components) + .add_systems( + Update, + ( + // insert_dependant_component::, + player_move_demo, //.run_if(in_state(AppState::Running)), + // test_collision_events + spawn_test, + ) + .run_if(in_state(GameState::InGame)), + ) + .add_systems(OnEnter(AppState::MenuRunning), setup_main_menu) + .add_systems(OnExit(AppState::MenuRunning), teardown_main_menu) + .add_systems(Update, (main_menu)) + .add_systems(OnEnter(AppState::AppRunning), setup_game); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/game/picking.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/picking.rs new file mode 100644 index 0000000..6731bbb --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/game/picking.rs @@ -0,0 +1,34 @@ +use super::Player; +use bevy::prelude::*; +use bevy_gltf_blueprints::GltfBlueprintsSet; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct Pickable; + +// very simple, crude picking (as in picking up objects) implementation + +pub fn picking( + players: Query<&GlobalTransform, With>, + pickables: Query<(Entity, &GlobalTransform), With>, + mut commands: Commands, +) { + for player_transforms in players.iter() { + for (pickable, pickable_transforms) in pickables.iter() { + let distance = player_transforms + .translation() + .distance(pickable_transforms.translation()); + if distance < 2.5 { + commands.entity(pickable).despawn_recursive(); + } + } + } +} + +pub struct PickingPlugin; +impl Plugin for PickingPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .add_systems(Update, (picking.after(GltfBlueprintsSet::AfterSpawn),)); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/main.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/main.rs new file mode 100644 index 0000000..6edba33 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/main.rs @@ -0,0 +1,33 @@ +use bevy::prelude::*; +use bevy_editor_pls::prelude::*; + +mod core; +use crate::core::*; + +pub mod assets; +use assets::*; + +pub mod state; +use state::*; + +mod game; +use game::*; + +mod test_components; +use test_components::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins.set(AssetPlugin::default()), + // editor + EditorPlugin::default(), + // our custom plugins + StatePlugin, + AssetsPlugin, + CorePlugin, // reusable plugins + GamePlugin, // specific to our game + ComponentsTestPlugin, // Showcases different type of components /structs + )) + .run(); +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/state.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/state.rs new file mode 100644 index 0000000..8e983d9 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/state.rs @@ -0,0 +1,54 @@ +use bevy::app::AppExit; +use bevy::prelude::*; + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Default, States)] +pub enum AppState { + #[default] + CoreLoading, + MenuRunning, + AppLoading, + AppRunning, + AppEnding, + + // FIXME: not sure + LoadingGame, +} + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Default, States)] +pub enum GameState { + #[default] + None, + + InMenu, + InGame, + + InGameOver, + + InSaving, + InLoading, +} + +// tag components for all entities within a certain state (for despawning them if needed) , FIXME: seems kinda hack-ish +#[derive(Component)] +pub struct InCoreLoading; +#[derive(Component, Default)] +pub struct InMenuRunning; +#[derive(Component)] +pub struct InAppLoading; +#[derive(Component)] +pub struct InAppRunning; + +// components for tagging in game vs in game menu stuff +#[derive(Component, Default)] +pub struct InMainMenu; +#[derive(Component, Default)] +pub struct InMenu; +#[derive(Component, Default)] +pub struct InGame; + +pub struct StatePlugin; +impl Plugin for StatePlugin { + fn build(&self, app: &mut App) { + app.add_state::().add_state::(); + } +} diff --git a/examples/bevy_gltf_blueprints/nested_blueprints/src/test_components.rs b/examples/bevy_gltf_blueprints/nested_blueprints/src/test_components.rs new file mode 100644 index 0000000..4da1595 --- /dev/null +++ b/examples/bevy_gltf_blueprints/nested_blueprints/src/test_components.rs @@ -0,0 +1,93 @@ +use bevy::prelude::*; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct Marker; + + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct Enemy; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct NestingTest; + + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TuppleTestF32(f32); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TuppleTestU64(u64); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +pub struct TuppleTestStr(String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTest2(f32, u64, String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestBool(bool); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec2(Vec2); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec3(Vec3); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestColor(Color); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct BasicTest { + a: f32, + b: u64, + c: String, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum EnumTest { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +pub struct ComponentsTestPlugin; +impl Plugin for ComponentsTestPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .register_type::() + + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::>(); + } +} diff --git a/tools/gltf_auto_export/README.md b/tools/gltf_auto_export/README.md index fcfdab1..c5f3521 100644 --- a/tools/gltf_auto_export/README.md +++ b/tools/gltf_auto_export/README.md @@ -62,6 +62,9 @@ This [Blender addon](./) - export blueprints: check this if you want to automatically export blueprints (default: True) - blueprints path: the path to export blueprints to , relative to the main **export folder** (default: library) + - export nested blueprints: check this if you want to automatically export nested blueprints (collection instances inside blueprint collections) + as seperate blueprints (default: True) + please read dedicate section below for more information - export materials library: check this if you want to automatically export material libraries (default: False) please read the dedicated section below for more information @@ -109,6 +112,40 @@ You can enable this option to automatically replace all the **collection instanc ![exported collections](./docs/exported_collections.png) + +#### Nested blueprints + +To maximise reuse of meshes/components etc, you can also nest ***collections instances*** inside collections (as normally in Blender), but also export each nested Blueprint as a seperate blueprints. + +> Don't forget to toggle the option in the exporter settings + +- To make things clearer: + + ![nested-blueprints](./docs/nested_blueprints.png) + + - **Player2** & **Enemy** both use the **Humanoid_cactus** nested collection/blueprint, so **Humanoid_cactus** gets exported as a Blueprint for re-use ...but + - **Humanoid_cactus** is also made up of a main mesh & two instances of **Hand** , so **Hand** gets exported as a Blueprint for re-use ...but + - **Hand** is also made up of a main mesh & three instances of **Finger**, so **Finger** gets exported as a Blueprint for re-use + +- The exported models in this case end up being: + + ![nested_blueprints2](./docs/nested_blueprints2.png) + + - Note how **Player2.glb** is tiny, because most of its data is actually sotred in **Humanoid_cactus.glb** + - **Enemy.glb** is slightly bigger because that blueprints contains additional meshes + - All the intermediary blueprints got exported automatically, and all instances have been replaced with "empties" (see explanation in the **Process section** ) to minimize file size + +- Compare this to the output **WITHOUT** the nested export option: + + ![nested_blueprints3](./docs/nested_blueprints3.png) + + - less blueprints as the sub collections that are not in use somewhere directly are not exported + - **Player2.glb** & **Enemy.glb** are significantly larger + + +TLDR: smaller, more reuseable blueprints which can share sub-parts with other entities ! + + ### Materials You can enable this option to automatically generate a **material library** file that combines all the materials in use in your blueprints. diff --git a/tools/gltf_auto_export/__init__.py b/tools/gltf_auto_export/__init__.py index 378a275..3738e28 100644 --- a/tools/gltf_auto_export/__init__.py +++ b/tools/gltf_auto_export/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "gltf_auto_export", "author": "kaosigh", - "version": (0, 7, 1), + "version": (0, 8, 0), "blender": (3, 4, 0), "location": "File > Import-Export", "description": "glTF/glb auto-export", @@ -43,6 +43,7 @@ bpy.context.window_manager['changed_objects_per_scene'] = {} bpy.context.window_manager['previous_params'] = {} bpy.context.window_manager['__gltf_auto_export_initialized'] = False bpy.context.window_manager['__gltf_auto_export_gltf_params_changed'] = False +bpy.context.window_manager['__gltf_auto_export_saving'] = False ###################################################### """ there are two places where we load settings for auto_export from: @@ -60,6 +61,9 @@ def deps_update_handler(scene, depsgraph): print("-------------") changed = scene.name or "" + # only deal with changes if we are no in the mids of saving/exporting + #if not bpy.context.window_manager['__gltf_auto_export_saving']: + # depsgraph = bpy.context.evaluated_depsgraph_get() if not 'changed_objects_per_scene' in bpy.context.window_manager: bpy.context.window_manager['changed_objects_per_scene'] = {} @@ -71,6 +75,7 @@ def deps_update_handler(scene, depsgraph): if isinstance(obj.id, bpy.types.Object): # get the actual object object = bpy.data.objects[obj.id.name] + print("changed object", obj.id.name) bpy.context.window_manager['changed_objects_per_scene'][scene.name][obj.id.name] = object bpy.context.window_manager.changedScene = changed @@ -79,10 +84,16 @@ def deps_update_handler(scene, depsgraph): def save_handler(dummy): print("-------------") print("saved", bpy.data.filepath) + # mark saving as in progress, this is needed to ignore any changes from the depsgraph done during saving + # bpy.context.window_manager['__gltf_auto_export_saving'] = True + if not 'changed_objects_per_scene' in bpy.context.window_manager: bpy.context.window_manager['changed_objects_per_scene'] = {} changes_per_scene = bpy.context.window_manager['changed_objects_per_scene'] + if not 'previous_params' in bpy.context.window_manager: + bpy.context.window_manager['previous_params'] = {} + #determine changed parameters addon_prefs = bpy.context.preferences.addons["gltf_auto_export"].preferences @@ -113,6 +124,11 @@ def save_handler(dummy): # reset whether there have been changed objects since the last save bpy.context.window_manager['changed_objects_per_scene'] = {} + # all our logic is done, mark this as done + #bpy.context.window_manager['__gltf_auto_export_saving'] = False + print("EXPORT DONE") + + def get_changedScene(self): return self["changedScene"] @@ -153,6 +169,7 @@ def register(): bpy.app.handlers.depsgraph_update_post.append(deps_update_handler) bpy.app.handlers.save_post.append(save_handler) + bpy.types.WindowManager.changedScene = bpy.props.StringProperty(get=get_changedScene, set=set_changedScene) bpy.types.WindowManager.exportedCollections = bpy.props.CollectionProperty(type=CollectionsToExport) diff --git a/tools/gltf_auto_export/auto_export.py b/tools/gltf_auto_export/auto_export.py index 894f23b..17f369e 100644 --- a/tools/gltf_auto_export/auto_export.py +++ b/tools/gltf_auto_export/auto_export.py @@ -48,8 +48,6 @@ def auto_export(changes_per_scene, changed_export_parameters): print("error setting preferences from saved settings", error) bpy.context.window_manager['__gltf_auto_export_initialized'] = True - - # have the export parameters (not auto export, just gltf export) have changed: if yes (for example switch from glb to gltf, compression or not, animations or not etc), we need to re-export everything print ("changed_export_parameters", changed_export_parameters) try: @@ -63,6 +61,7 @@ def auto_export(changes_per_scene, changed_export_parameters): export_materials_library = getattr(addon_prefs,"export_materials_library") export_scene_settings = getattr(addon_prefs,"export_scene_settings") + export_nested_blueprints = getattr(addon_prefs,"export_nested_blueprints") [main_scene_names, level_scenes, library_scene_names, library_scenes] = get_scenes(addon_prefs) @@ -74,11 +73,12 @@ def auto_export(changes_per_scene, changed_export_parameters): # inject/ update scene components upsert_scene_components(bpy.context.scene, world = bpy.context.scene.world) - # export everything everytime + # export if export_blueprints: print("EXPORTING") # get a list of all collections actually in use - collections = get_exportable_collections(level_scenes, library_scenes) + scan_nested_collections = export_nested_blueprints + (collections, blueprint_hierarchy) = get_exportable_collections(level_scenes, library_scenes, scan_nested_collections) # first check if all collections have already been exported before (if this is the first time the exporter is run # in your current Blender session for example) export_blueprints_path = os.path.join(folder_path, export_output_folder, getattr(addon_prefs,"export_blueprints_path")) if getattr(addon_prefs,"export_blueprints_path") != '' else folder_path @@ -96,10 +96,10 @@ def auto_export(changes_per_scene, changed_export_parameters): object_collections = list(obj.users_collection) object_collection_names = list(map(lambda collection: collection.name, object_collections)) if len(object_collection_names) > 1: - print("ERRROR, objects in multiple collections not supported") + print("ERRROR for",obj_name,"objects in multiple collections not supported") else: object_collection_name = object_collection_names[0] if len(object_collection_names) > 0 else None - print(" object ", obj, object_collection_name) + #print(" object ", obj, object_collection_name) if object_collection_name in collections: changed_collections.append(object_collection_name) @@ -111,6 +111,7 @@ def auto_export(changes_per_scene, changed_export_parameters): # collections that do not come from a library should not be exported as seperate blueprints + # FIMXE: logic is erroneous, needs to be changed library_collections = [name for sublist in collections_per_scene.values() for name in sublist] collections_to_export = list(set(collections_to_export).intersection(set(library_collections))) @@ -151,7 +152,7 @@ def auto_export(changes_per_scene, changed_export_parameters): print(" exporting collections from scene:", scene_name) print(" collections to export", collections_to_export) library_scene = bpy.data.scenes[scene_name] - export_blueprints_from_collections(collections_to_export, library_scene, folder_path, addon_prefs) + export_blueprints_from_collections(collections_to_export, library_scene, folder_path, addon_prefs, blueprint_hierarchy, collections) # reset current scene from backup bpy.context.window.scene = old_current_scene diff --git a/tools/gltf_auto_export/blueprints.py b/tools/gltf_auto_export/blueprints.py new file mode 100644 index 0000000..e0af40f --- /dev/null +++ b/tools/gltf_auto_export/blueprints.py @@ -0,0 +1,113 @@ +import bpy +from .helpers_collections import (find_layer_collection_recursive) +from .helpers import (make_empty3, traverse_tree) + + +def generate_blueprint_hollow_scene(blueprint_collection, library_collections): + temp_scene = bpy.data.scenes.new(name="temp_scene_"+blueprint_collection.name) + temp_scene_root_collection = temp_scene.collection + + # we set our active scene to be this one : this is needed otherwise the stand-in empties get generated in the wrong scene + bpy.context.window.scene = temp_scene + found = find_layer_collection_recursive(temp_scene_root_collection, bpy.context.view_layer.layer_collection) + if found: + # once it's found, set the active layer collection to the one we found + bpy.context.view_layer.active_layer_collection = found + + original_names = [] + + # TODO also add the handling for "template" flags, so that instead of creating empties we link the data from the sub collection INTO the parent collection + # copies the contents of a collection into another one while replacing blueprint instances with empties + def copy_hollowed_collection_into(source_collection, destination_collection): + for object in source_collection.objects: + #FIXME: enum would be better + """ combine mode can be + - 'Split' (default): replace with an empty, creating links to sub blueprints + - 'Embed' : treat it as an embeded object and do not replace it with an empty + - 'Inject': inject components from sub collection instances into the curent object + """ + combineMode = 'Split' if not 'Combine' in object else object['Combine'] + # TODO: implement + # print("COMBINE MODE", combineMode) + # embed = 'Embed' in object and object['Embed'] == True # if the object has the "embed" flag set to true, treat it as an embeded object and do not replace it with an empty + # merge = 'Merge' in object and object['Merge'] == True + if object.instance_type == 'COLLECTION' and (object.instance_collection.name in library_collections): + # if we have combine_mode set to "merge", we take all the custom attributed of the nested (1 level only ! unless we use 'deepMerge') custom attributes and copy them to this level + """TODO: implement later + if merge: + foo = get_nested_components(object) + print("nested components", foo) + pass + else: + """ + collection_name = object.instance_collection.name + + original_name = object.name + original_names.append(original_name) + + object.name = original_name + "____bak" + empty_obj = make_empty3(original_name, object.location, object.rotation_euler, object.scale, destination_collection) + """we inject the collection/blueprint name, as a component called 'BlueprintName', but we only do this in the empty, not the original object""" + empty_obj['BlueprintName'] = '"'+collection_name+'"' + empty_obj['SpawnHere'] = '' + + for k, v in object.items(): + empty_obj[k] = v + else: + destination_collection.objects.link(object) + + # for every sub-collection of the source, copy its content into a new sub-collection of the destination + for collection in source_collection.children: + copy_collection = bpy.data.collections.new(collection.name + "____collection_export") + copy_hollowed_collection_into(collection, copy_collection) + destination_collection.children.link(copy_collection) + + copy_hollowed_collection_into(blueprint_collection, temp_scene_root_collection) + + + return (temp_scene, original_names) + + + + +# clear & remove "hollow scene" +def clear_blueprint_hollow_scene(temp_scene, original_collection, original_names): + + def restore_original_names(collection): + for object in collection.objects: + if object.instance_type == 'COLLECTION': + if object.name.endswith("____bak"): + object.name = object.name.replace("____bak", "") + for child_collection in collection.children: + restore_original_names(child_collection) + + restore_original_names(original_collection) + + # remove empties (only needed when we go via ops ????) + root_collection = temp_scene.collection + scene_objects = [o for o in root_collection.objects] + for object in scene_objects: + if object.type == 'EMPTY': + if hasattr(object, "SpawnHere"): + bpy.data.objects.remove(object, do_unlink=True) + else: + bpy.context.scene.collection.objects.unlink(object) + #bpy.data.objects.remove(object, do_unlink=True) + + bpy.data.scenes.remove(temp_scene) + +# TODO : add a flag to also search of deeply nested components +def get_nested_components(object): + if object.instance_type == 'COLLECTION': + collection_name = object.instance_collection.name + collection = bpy.data.collections[collection_name] + all_objects = collection.all_objects + result = [] + for object in all_objects: + components = dict(object) + if len(components.keys()) > 0: + result += [(object, components)] + return result + return [] + #for collection in traverse_tree(collection): + # for object in collection.all_objects diff --git a/tools/gltf_auto_export/docs/blender_addon_use3.png b/tools/gltf_auto_export/docs/blender_addon_use3.png index e704e1f192692b652dd0f2bd3551ee96c1f53ebe..5a209a243fc0da0021f734241a29363ab378424b 100644 GIT binary patch literal 18475 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 literal 0 HcmV?d00001 diff --git a/tools/gltf_auto_export/docs/nested_blueprints2.png b/tools/gltf_auto_export/docs/nested_blueprints2.png new file mode 100644 index 0000000000000000000000000000000000000000..224f0aa802b6d4c84f086f62e7ac9cd2994cc61d GIT binary patch literal 29244 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 <5EbT>n`ZNjW5*PsxkL7WVFgjkojA*~atXAh} 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 literal 0 HcmV?d00001 diff --git a/tools/gltf_auto_export/helpers.py b/tools/gltf_auto_export/helpers.py index 484cb0d..2cfa659 100644 --- a/tools/gltf_auto_export/helpers.py +++ b/tools/gltf_auto_export/helpers.py @@ -37,7 +37,7 @@ def make_empty3(name, location, rotation, scale, collection): bpy.context.view_layer.objects.active = original_active_object return empty_obj - +# traverse all collections def traverse_tree(t): yield t for child in t.children: @@ -48,7 +48,7 @@ def check_if_blueprints_exist(collections, folder_path, extension): not_found_blueprints = [] for collection_name in collections: gltf_output_path = os.path.join(folder_path, collection_name + extension) - print("gltf_output_path", gltf_output_path) + # print("gltf_output_path", gltf_output_path) found = os.path.exists(gltf_output_path) and os.path.isfile(gltf_output_path) if not found: not_found_blueprints.append(collection_name) diff --git a/tools/gltf_auto_export/helpers_collections.py b/tools/gltf_auto_export/helpers_collections.py index 9ae9f08..f64ca5d 100644 --- a/tools/gltf_auto_export/helpers_collections.py +++ b/tools/gltf_auto_export/helpers_collections.py @@ -2,6 +2,7 @@ import bpy from .helpers import traverse_tree # returns the list of the collections in use for a given scene +# FIXME: this should also look into sub collections def get_used_collections(scene): root_collection = scene.collection @@ -11,13 +12,7 @@ def get_used_collections(scene): for object in scene_objects: #print("object ", object) if object.instance_type == 'COLLECTION': - #print("THIS OBJECT IS A COLLECTION") - # print("instance_type" ,object.instance_type) collection_name = object.instance_collection.name - #print("instance collection", object.instance_collection.name) - #object.instance_collection.users_scene - # del object['blueprint'] - # object['BlueprintName'] = '"'+collection_name+'"' if not collection_name in collection_names: collection_names.add(collection_name) used_collections.append(object.instance_collection) @@ -37,16 +32,87 @@ def get_marked_collections(scene): collection_names.append(collection.name) return (collection_names, marked_collections) +# gets all collections within collections that might also be relevant +def get_sub_collections(collections, parent, children_per_collection): + collection_names = set() + used_collections = [] + + + for root_collection in collections: + node = Node(name=root_collection.name, parent=parent) + parent.children.append(node) + + + #print("root collection", root_collection.name) + for collection in traverse_tree(root_collection): # TODO: filter out COLLECTIONS that have the flatten flag (unlike the flatten flag on colleciton instances themselves) + node_name = collection.name + children_per_collection[node_name] = [] + #print(" scanning", collection.name) + for object in collection.objects: + #print("FLATTEN", object.name, 'Flatten' in object) + if object.instance_type == 'COLLECTION' : # and not 'Flatten' in object: + collection_name = object.instance_collection.name + (sub_names, sub_collections) = get_sub_collections([object.instance_collection], node, children_per_collection) + if len(list(sub_names)) > 0: + children_per_collection[node_name] += (list(sub_names)) + #print(" found sub collection in use", object.name, object.instance_collection) + + + if not collection_name in collection_names: + collection_names.add(collection_name) + used_collections.append(object.instance_collection) + collection_names.update(sub_names) + + #for sub in traverse_tree(root_collection): + return (collection_names, used_collections) + +# FIXME: get rid of this, ugh +def flatten_collection_tree(node, children_per_collection): + children_per_collection[node.name] = [] + for child in node.children: + if not node.name in children_per_collection[node.name]: + children_per_collection[node.name].append(child.name) + flatten_collection_tree(child, children_per_collection) + children_per_collection[node.name] = list(set( children_per_collection[node.name])) + + +class Node : + def __init__(self, name="", parent=None): + self.name = name + self.children = [] + self.changed = False + self.parent = parent + return + def __str__(self): + children = list(map(lambda child: str(child), self.children)) + return "name: " +self.name + ", children:" + str(children) + # get exportable collections from lists of mains scenes and lists of library scenes -def get_exportable_collections(main_scenes, library_scenes): +def get_exportable_collections(main_scenes, library_scenes, scan_nested_collections): all_collections = [] + all_collection_names = [] + root_node = Node() + root_node.name = "root" + children_per_collection = {} + + for main_scene in main_scenes: - (collection_names, _) = get_used_collections(main_scene) - all_collections = all_collections + list(collection_names) + (collection_names, collections) = get_used_collections(main_scene) + all_collection_names = all_collection_names + list(collection_names) + all_collections = all_collections + collections for library_scene in library_scenes: marked_collections = get_marked_collections(library_scene) - all_collections = all_collections + marked_collections[0] - return all_collections + all_collection_names = all_collection_names + marked_collections[0] + all_collections = all_collections + marked_collections[1] + + if scan_nested_collections: + (collection_names, collections) = get_sub_collections(all_collections, root_node, children_per_collection) + all_collection_names = all_collection_names + list(collection_names) + children_per_collection = {} + flatten_collection_tree(root_node, children_per_collection) + #print("ROOT NODE", children_per_collection) # + + return (all_collection_names, children_per_collection) def get_collections_per_scene(collection_names, library_scenes): collections_per_scene = {} @@ -84,7 +150,6 @@ def find_layer_collection_recursive(find, col): return c return None - #Recursivly transverse layer_collection for a particular name def recurLayerCollection(layerColl, collName): found = None diff --git a/tools/gltf_auto_export/helpers_export.py b/tools/gltf_auto_export/helpers_export.py index 9888e5d..a3b7408 100644 --- a/tools/gltf_auto_export/helpers_export.py +++ b/tools/gltf_auto_export/helpers_export.py @@ -1,9 +1,12 @@ import os import bpy + from .preferences import (AutoExportGltfPreferenceNames) from .helpers_scenes import (generate_hollow_scene, clear_hollow_scene) from .helpers_collections import (recurLayerCollection) +from .blueprints import clear_blueprint_hollow_scene, generate_blueprint_hollow_scene from .helpers import (traverse_tree) + ###################################################### #### Export logic ##### @@ -66,11 +69,13 @@ def get_source_scene(collection_name, library_scenes): return match # export collections: all the collections that have an instance in the main scene AND any marked collections, even if they do not have instances -def export_collections(collections, folder_path, library_scene, addon_prefs, gltf_export_preferences): +def export_collections(collections, folder_path, library_scene, addon_prefs, gltf_export_preferences, blueprint_hierarchy, library_collections): # set active scene to be the library scene (hack for now) bpy.context.window.scene = library_scene # save current active collection active_collection = bpy.context.view_layer.active_layer_collection + export_nested_blueprints = getattr(addon_prefs,"export_nested_blueprints") + export_materials_library = getattr(addon_prefs,"export_materials_library") for collection_name in collections: print("exporting collection", collection_name) @@ -83,17 +88,32 @@ def export_collections(collections, folder_path, library_scene, addon_prefs, glt export_settings = { **gltf_export_preferences, 'use_active_scene': True, 'use_active_collection': True, 'use_active_collection_with_nested':True} # if we are using the material library option, do not export materials, use placeholder instead - export_materials_library = getattr(addon_prefs,"export_materials_library") if export_materials_library: export_settings['export_materials'] = 'PLACEHOLDER' - export_gltf(gltf_output_path, export_settings) + + #if relevant we replace sub collections instances with placeholders too + # this is not needed if a collection/blueprint does not have sub blueprints + if collection_name in blueprint_hierarchy and len(blueprint_hierarchy[collection_name]) > 0 and export_nested_blueprints : + print("generate hollow scene for nested blueprints", library_collections) + backup = bpy.context.window.scene + collection = bpy.data.collections[collection_name] + (hollow_scene, object_names) = generate_blueprint_hollow_scene(collection, library_collections) + + export_gltf(gltf_output_path, export_settings) + + clear_blueprint_hollow_scene(hollow_scene, collection, object_names) + bpy.context.window.scene = backup + else: + print("NORMAL") + export_gltf(gltf_output_path, export_settings) + # reset active collection to the one we save before bpy.context.view_layer.active_layer_collection = active_collection -def export_blueprints_from_collections(collections, library_scene, folder_path, addon_prefs): +def export_blueprints_from_collections(collections, library_scene, folder_path, addon_prefs, blueprint_hierarchy, library_collections): export_output_folder = getattr(addon_prefs,"export_output_folder") gltf_export_preferences = generate_gltf_export_preferences(addon_prefs) export_blueprints_path = os.path.join(folder_path, export_output_folder, getattr(addon_prefs,"export_blueprints_path")) if getattr(addon_prefs,"export_blueprints_path") != '' else folder_path @@ -102,7 +122,7 @@ def export_blueprints_from_collections(collections, library_scene, folder_path, #print("LIBRARY EXPORT", export_blueprints_path ) try: - export_collections(collections, export_blueprints_path, library_scene, addon_prefs, gltf_export_preferences) + export_collections(collections, export_blueprints_path, library_scene, addon_prefs, gltf_export_preferences, blueprint_hierarchy, library_collections) except Exception as error: print("failed to export collections to gltf: ", error) # TODO : rethrow diff --git a/tools/gltf_auto_export/preferences.py b/tools/gltf_auto_export/preferences.py index f76a89a..c1b259e 100644 --- a/tools/gltf_auto_export/preferences.py +++ b/tools/gltf_auto_export/preferences.py @@ -15,14 +15,15 @@ AutoExportGltfPreferenceNames = [ 'export_main_scene_name', 'export_output_folder', 'export_library_scene_name', + 'export_blueprints', 'export_blueprints_path', - - 'export_scene_settings', + 'export_nested_blueprints', 'export_materials_library', 'export_materials_path', + 'export_scene_settings', 'main_scenes', 'library_scenes', @@ -75,6 +76,12 @@ class AutoExportGltfAddonPreferences(AddonPreferences): default='library' ) + export_nested_blueprints: BoolProperty( + name='Export nested Blueprints', + description='Collection instances within Collections are turned into blueprint instances', + default=True + ) + export_materials_library: BoolProperty( name='Export materials library', description='remove materials from blueprints and use the material library instead', diff --git a/tools/gltf_auto_export/ui/main.py b/tools/gltf_auto_export/ui/main.py index 09a9140..3a4aab5 100644 --- a/tools/gltf_auto_export/ui/main.py +++ b/tools/gltf_auto_export/ui/main.py @@ -130,7 +130,8 @@ class AutoExportGLTF(Operator, AutoExportGltfAddonPreferences, ExportHelper): [main_scene_names, level_scenes, library_scene_names, library_scenes]=get_scenes(addon_prefs) - collections = get_exportable_collections(level_scenes, library_scenes) + scan_nested_collections = bpy.context.preferences.addons["gltf_auto_export"].preferences.export_nested_blueprints + (collections, _) = get_exportable_collections(level_scenes, library_scenes, scan_nested_collections) try: # we save this list of collections in the context @@ -275,6 +276,15 @@ class GLTF_PT_auto_export_blueprints(bpy.types.Panel): return operator.bl_idname == "EXPORT_SCENES_OT_auto_gltf" #"EXPORT_SCENE_OT_gltf" + + def draw_header(self, context): + layout = self.layout + sfile = context.space_data + operator = sfile.active_operator + layout.prop(operator, "export_blueprints", text="") + + #self.layout.prop(operator, "auto_export", text="") + def draw(self, context): layout = self.layout layout.use_property_split = True @@ -283,8 +293,10 @@ class GLTF_PT_auto_export_blueprints(bpy.types.Panel): sfile = context.space_data operator = sfile.active_operator - layout.prop(operator, "export_blueprints") + layout.active = operator.export_blueprints + layout.prop(operator, "export_blueprints_path") + layout.prop(operator, "export_nested_blueprints") # materials layout.prop(operator, "export_materials_library")