From 8b2edd344efdc1f1b6fb1be89d5b87f6769b9dbd Mon Sep 17 00:00:00 2001 From: Jeff Charles Date: Thu, 14 Aug 2025 15:49:06 -0400 Subject: [PATCH 1/2] Update Wasm API test to use provider imports --- .gitignore | 1 + Cargo.lock | 809 +++++++++++++++++++-- Cargo.toml | 4 +- providers/shopify_function_v2.wasm | Bin 0 -> 75560 bytes src/engine.rs | 14 +- test-utils/Cargo.toml | 9 + test-utils/src/lib.rs | 78 ++ tests/fixtures/README.md | 4 +- tests/fixtures/build/echo.trampolined.wasm | Bin 67697 -> 0 bytes tests/fixtures/build/echo.wasm | Bin 49850 -> 0 bytes tests/fixtures/build/wasm_api_v1.wasm | Bin 0 -> 94231 bytes tests/fixtures/echo/Cargo.toml | 6 - tests/fixtures/echo/src/main.rs | 7 - tests/fixtures/wasm_api_v1/Cargo.toml | 8 + tests/fixtures/wasm_api_v1/src/main.rs | 20 + tests/integration_tests.rs | 23 +- 16 files changed, 909 insertions(+), 74 deletions(-) create mode 100755 providers/shopify_function_v2.wasm create mode 100644 test-utils/Cargo.toml create mode 100644 test-utils/src/lib.rs delete mode 100644 tests/fixtures/build/echo.trampolined.wasm delete mode 100644 tests/fixtures/build/echo.wasm create mode 100644 tests/fixtures/build/wasm_api_v1.wasm delete mode 100644 tests/fixtures/echo/Cargo.toml delete mode 100644 tests/fixtures/echo/src/main.rs create mode 100644 tests/fixtures/wasm_api_v1/Cargo.toml create mode 100644 tests/fixtures/wasm_api_v1/src/main.rs diff --git a/.gitignore b/.gitignore index c8b5e0fe..70cc5175 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ function-runner-*.gz* target/ +tmp/ .DS_Store \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 035b4bb6..4c65b7d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -160,6 +160,12 @@ dependencies = [ "syn", ] +[[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.4.0" @@ -187,6 +193,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "beef" version = "0.5.2" @@ -267,9 +279,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" dependencies = [ "allocator-api2", ] @@ -365,9 +377,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.4" +version = "1.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" +checksum = "2352e5597e9c544d5e6d9c95190d5d27738ade584fa8db0a16e130e5c2b5296e" dependencies = [ "jobserver", "libc", @@ -441,6 +453,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -655,7 +677,7 @@ dependencies = [ "cap-primitives", "rand_core", "rand_pcg", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasmtime", "wasmtime-wasi", ] @@ -734,10 +756,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" -[[package]] -name = "echo" -version = "0.1.0" - [[package]] name = "either" version = "1.15.0" @@ -827,6 +845,16 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "flate2" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "float-cmp" version = "0.10.0" @@ -848,6 +876,21 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -887,6 +930,7 @@ dependencies = [ "rust-embed", "serde", "serde_json", + "test-utils", "wasmprof", "wasmtime", "wasmtime-wasi", @@ -947,10 +991,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", + "futures-io", "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", + "slab", ] [[package]] @@ -993,7 +1040,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -1031,6 +1090,25 @@ dependencies = [ "walkdir", ] +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -1053,6 +1131,124 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" +[[package]] +name = "http" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.0", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + [[package]] name = "iana-time-zone" version = "0.1.61" @@ -1270,6 +1466,16 @@ version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "is-terminal" version = "0.4.16" @@ -1342,9 +1548,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -1370,9 +1576,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.168" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "libm" @@ -1500,11 +1706,17 @@ dependencies = [ "rmpv", ] +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + [[package]] name = "miniz_oxide" -version = "0.8.1" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef2593ffb6958c941575cee70c8e257438749971869c4ae5acf6f91a168a61" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] @@ -1516,7 +1728,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1535,6 +1747,23 @@ version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e943b2c21337b7e3ec6678500687cdc741b7639ad457f234693352075c082204" +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "nix" version = "0.26.4" @@ -1586,6 +1815,50 @@ version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +[[package]] +name = "openssl" +version = "0.10.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "paste" version = "1.0.15" @@ -1705,6 +1978,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.8.5" @@ -1732,7 +2011,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -1770,9 +2049,9 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1818,6 +2097,62 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "reqwest" +version = "0.12.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + [[package]] name = "rmp" version = "0.8.14" @@ -1933,6 +2268,39 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "rustls" +version = "0.23.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.18" @@ -1954,6 +2322,38 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "semver" version = "1.0.24" @@ -2010,6 +2410,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha2" version = "0.10.8" @@ -2036,6 +2448,45 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "shopify_function_provider" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1eb4e60eb2f8c6e02b1f1e7634ef91738b1104b5bc2fa30458d10cd00917dbbf" +dependencies = [ + "bumpalo", + "rmp", + "shopify_function_wasm_api_core", +] + +[[package]] +name = "shopify_function_wasm_api" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a57a2e64ef7d28cbe26bf591fd084093327d9d359e38355010720d818cd92ba9" +dependencies = [ + "rmp-serde", + "serde_json", + "shopify_function_provider", + "shopify_function_wasm_api_core", + "thiserror 2.0.14", +] + +[[package]] +name = "shopify_function_wasm_api_core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4842376f01b3abe6c78596085f29ea0d1b605873d2855f812738072c38e32c34" +dependencies = [ + "strum", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + [[package]] name = "smallvec" version = "1.13.2" @@ -2055,6 +2506,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "spin_sleep" version = "1.3.0" @@ -2104,6 +2565,12 @@ dependencies = [ "syn", ] +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.90" @@ -2115,6 +2582,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + [[package]] name = "synstructure" version = "0.13.1" @@ -2126,6 +2602,27 @@ dependencies = [ "syn", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "system-interface" version = "0.27.3" @@ -2150,14 +2647,14 @@ checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" [[package]] name = "tempfile" -version = "3.14.0" +version = "3.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ - "cfg-if", "fastrand", + "getrandom 0.3.3", "once_cell", - "rustix 0.38.44", + "rustix 1.0.5", "windows-sys 0.59.0", ] @@ -2176,13 +2673,31 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "test-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "flate2", + "reqwest", +] + [[package]] name = "thiserror" version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b0949c3a6c842cbde3f1686d6eea5a010516deb7085f79db747562d4102f41e" +dependencies = [ + "thiserror-impl 2.0.14", ] [[package]] @@ -2196,6 +2711,17 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5b44b4ab9c2fdd0e0512e6bece8388e214c0749f5862b114cc5b7a25daf227" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tinystr" version = "0.7.6" @@ -2217,10 +2743,43 @@ dependencies = [ "libc", "mio", "pin-project-lite", - "socket2", + "socket2 0.5.8", "windows-sys 0.52.0", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.8.19" @@ -2255,6 +2814,51 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags 2.6.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + [[package]] name = "tracing" version = "0.1.41" @@ -2297,6 +2901,12 @@ dependencies = [ "syn", ] +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + [[package]] name = "typenum" version = "1.17.0" @@ -2327,6 +2937,12 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" version = "2.5.4" @@ -2362,6 +2978,12 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -2387,28 +3009,47 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", @@ -2418,11 +3059,24 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2430,9 +3084,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -2443,9 +3097,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-encoder" @@ -2467,6 +3124,14 @@ dependencies = [ "wasmparser 0.230.0", ] +[[package]] +name = "wasm_api_v1" +version = "0.1.0" +dependencies = [ + "anyhow", + "shopify_function_wasm_api", +] + [[package]] name = "wasmparser" version = "0.226.0" @@ -2590,7 +3255,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e209505770c7f38725513dba37246265fa6f724c30969de1e9d2a9e6c8f55099" dependencies = [ "anyhow", - "base64", + "base64 0.21.7", "directories-next", "log", "postcard", @@ -2644,7 +3309,7 @@ dependencies = [ "pulley-interpreter", "smallvec", "target-lexicon", - "thiserror", + "thiserror 1.0.69", "wasmparser 0.226.0", "wasmtime-environ", "wasmtime-versioned-export-macros", @@ -2763,7 +3428,7 @@ dependencies = [ "io-lifetimes", "rustix 0.38.44", "system-interface", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "url", @@ -2846,6 +3511,16 @@ dependencies = [ "wast 230.0.0", ] +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "wiggle" version = "31.0.0" @@ -2855,7 +3530,7 @@ dependencies = [ "anyhow", "async-trait", "bitflags 2.6.0", - "thiserror", + "thiserror 1.0.69", "tracing", "wasmtime", "wiggle-macro", @@ -2931,7 +3606,7 @@ dependencies = [ "regalloc2", "smallvec", "target-lexicon", - "thiserror", + "thiserror 1.0.69", "wasmparser 0.226.0", "wasmtime-cranelift", "wasmtime-environ", @@ -2946,6 +3621,41 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -3047,6 +3757,15 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "wit-parser" version = "0.226.0" @@ -3073,7 +3792,7 @@ checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" dependencies = [ "anyhow", "log", - "thiserror", + "thiserror 1.0.69", "wast 35.0.2", ] @@ -3161,6 +3880,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zerovec" version = "0.10.4" diff --git a/Cargo.toml b/Cargo.toml index 883e29c5..1cd7213b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,12 +1,13 @@ [workspace] members = [ + "test-utils", "tests/fixtures/exit_code", "tests/fixtures/log_truncation_function", "tests/fixtures/exports", "tests/fixtures/noop", "tests/fixtures/messagepack-valid", "tests/fixtures/messagepack-invalid", - "tests/fixtures/echo", + "tests/fixtures/wasm_api_v1", ] [package] @@ -63,3 +64,4 @@ bluejay-validator = { version = "=0.3.0" } assert_cmd = "2.0" predicates = "3.1" assert_fs = "1.1.3" +test-utils = { path = "test-utils" } diff --git a/providers/shopify_function_v2.wasm b/providers/shopify_function_v2.wasm new file mode 100755 index 0000000000000000000000000000000000000000..3d5610e95db5861e0acbfb43799c95b916647615 GIT binary patch literal 75560 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≶yqX-1EdSHhk8;(yhnRdM7$?^Qb2L`OixNFD`mG9 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 Result<()> { - let engine = new_engine()?; - let module = Module::from_file( - &engine, - Path::new("tests/fixtures/build/echo.trampolined.wasm"), + fn test_wasm_api_v1_function() -> Result<()> { + let trampolined_path = assert_fs::NamedTempFile::new("wasm_api_v1.trampolined.wasm")?; + test_utils::process_with_v1_trampoline( + "tests/fixtures/build/wasm_api_v1.wasm", + &trampolined_path, )?; + let engine = new_engine()?; + let module = Module::from_file(&engine, &trampolined_path)?; let expected_input_value = json!({"foo": "echo", "bar": "test"}); let input = serde_json::to_vec(&expected_input_value).unwrap(); let input_bytes = BytesContainer::new(BytesContainerType::Input, Codec::Json, input); let function_run_result = run(FunctionRunParams { - function_path: Path::new("tests/fixtures/build/echo.trampolined.wasm").to_path_buf(), + function_path: trampolined_path.to_path_buf(), input: input_bytes.unwrap(), export: DEFAULT_EXPORT, module, diff --git a/test-utils/Cargo.toml b/test-utils/Cargo.toml new file mode 100644 index 00000000..c463bde9 --- /dev/null +++ b/test-utils/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "test-utils" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0" +reqwest = { version = "0.12.23", features = ["blocking"] } +flate2 = "1.1.2" diff --git a/test-utils/src/lib.rs b/test-utils/src/lib.rs new file mode 100644 index 00000000..f9dd2915 --- /dev/null +++ b/test-utils/src/lib.rs @@ -0,0 +1,78 @@ +use anyhow::{anyhow, bail, Result}; +use std::{ + path::{Path, PathBuf}, + process::Command, + sync::LazyLock, +}; + +pub fn process_with_v1_trampoline, Q: AsRef>( + wasm_path: P, + trampolined_path: Q, +) -> Result<()> { + let trampoline_path = TRAMPOLINE_1_0_PATH + .as_ref() + .map_err(|e| anyhow!("Failed to download trampoline: {e}"))?; + let status = Command::new(trampoline_path) + .arg("-i") + .arg(wasm_path.as_ref()) + .arg("-o") + .arg(trampolined_path.as_ref()) + .status()?; + if !status.success() { + bail!("Trampolining failed"); + } + Ok(()) +} + +static TRAMPOLINE_1_0_PATH: LazyLock> = LazyLock::new(|| { + let binaries_path = Path::new(env!("CARGO_MANIFEST_DIR")).join("../tmp"); + let path = binaries_path.join("trampoline-1.0.2"); + if !path.exists() { + std::fs::create_dir_all(binaries_path)?; + download_trampoline(&path, "1.0.2")?; + } + Ok(path) +}); + +fn download_trampoline(destination: &Path, version: &str) -> Result<()> { + let target_os = if cfg!(target_os = "macos") { + "macos" + } else if cfg!(target_os = "linux") { + "linux" + } else if cfg!(target_os = "windows") { + "windows" + } else { + bail!("Unsupported target OS"); + }; + + let target_arch = if cfg!(target_arch = "x86_64") { + "x86_64" + } else if cfg!(target_arch = "aarch64") { + "arm" + } else { + bail!("Unsupported target architecture"); + }; + + let url = format!( + "https://github.com/Shopify/shopify-function-wasm-api/releases/download/shopify_function_trampoline/v{version}/shopify-function-trampoline-{target_arch}-{target_os}-v{version}.gz", + ); + + let response = reqwest::blocking::get(&url)?; + if !response.status().is_success() { + bail!("Failed to download artifact: {}", response.status()); + } + let bytes = response.bytes()?; + let mut gz_decoder = flate2::read::GzDecoder::new(bytes.as_ref()); + let mut file = std::fs::File::create(destination)?; + std::io::copy(&mut gz_decoder, &mut file)?; + + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + let mut perms = file.metadata()?.permissions(); + perms.set_mode(0o755); + file.set_permissions(perms)?; + } + + Ok(()) +} diff --git a/tests/fixtures/README.md b/tests/fixtures/README.md index bcd51909..6b177745 100644 --- a/tests/fixtures/README.md +++ b/tests/fixtures/README.md @@ -11,8 +11,8 @@ Example Functions used as test fixtures. **Rust examples:** ``` -cargo build --target wasm32-wasip1 --profile=wasm -p exit_code -p exports -p log_truncation_function -p noop && - find target/wasm32-wasip1/wasm/{exit_code.wasm,exports.wasm,log_truncation_function.wasm,noop.wasm} | xargs -I {} sh -c 'name=$(basename {}); wasm-opt {} -Oz --enable-bulk-memory --strip-debug -o "tests/fixtures/build/$name"' +cargo build --target wasm32-wasip1 --profile=wasm -p exit_code -p exports -p log_truncation_function -p noop -p wasm_api_v1 && + find target/wasm32-wasip1/wasm/{exit_code.wasm,exports.wasm,log_truncation_function.wasm,noop.wasm,wasm_api_v1.wasm} | xargs -I {} sh -c 'name=$(basename {}); wasm-opt {} -Oz --enable-bulk-memory --strip-debug -o "tests/fixtures/build/$name"' ``` **JS examples:** diff --git a/tests/fixtures/build/echo.trampolined.wasm b/tests/fixtures/build/echo.trampolined.wasm deleted file mode 100644 index 8924d4382803966f7719dc357b8851fab62322c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67697 zcmd?S3%p%bb??7k`@PS}4g?5EfVH;~0|avNejs>OkVgP{DB|1XB-w#;PI69i&Pf2P zc{a>rOt-Ynb_`9R)|zY1F~=Npj4{U;^Rd0Y(QUrxdHy^7BQ|*62G8HU!Qbuiu^a#D4Z&_6 z`QlmMS8oV+D@ETVMO=8Y3y(QH^6ai86f7YveYF5xO=`INY6Ee#;6*&>8ti_%zdQJO zdCuXZmk)36-*VOZEjx!cjr9)?t>3lynDtW4npkd&$&tt(w;F>f5@0Yjen}O;>W^p-K*K z99TctylQ>l*!upV&CM&l!=?jq@}WTVL!*(Q=H~T+wS8oG`}8p89}32yt3No+=$Q3G zJGX9~o@R$Gw{duQtCydyx$#s~(>_vt{Y#hpHpRBASmw=|uC{4q8YRwMgHM*6OrzSfr>v|w7RD?4qaryR7bQ8weGonu>8tsfm5 z@$yGr(Kp(^esrjBJHj~zdo_3UH?LS++_HK76(jv)O|Np09F^wKuKp1OTatJ%Ff+4E zqsZOpA+wg?>`m*NSN4y2!F0WN!qk?vu{(b(}{Tuvi{K4dmKl4Y|e9nK(@(29hwSVew+4iXa z7yheHI`3otpZM4NJ3s3GxqqGi##fyGCBOV<-wi(J|MUdEvil`oQX6de^Sz+=VE+hhk6?#WUoEly|1?scG1qYyH~FDAJ|9g+VSzd<7z(%pH@QbC&hte`;O$vd%k^7 zZnP1uSnE?Rp%i!fT6Z_>>#abzhrQ(Sefzz2U4G)#gLcAT@?8=sRF5dCER?>Y?pja>t@fJ@EoI!>x*Olu8}`Oga>M8Mdjnj@b+z1pqP(}JZ*Q`M6z2~lt5ibN zg8C2b>*eW3)+n_)xzZ>xn9SJGhz1$~FXuM zB|q}dYxU>j^lm<>k$U(*avqrtiu#61LVjIiwiXDx7 z8&5AT8lGV4@Qj3@!%gi~^9O|GU_%)IE`-UQk{Z+spcWUBD|a|D)gA87KGa(ejhy+! z=XJPitWnzGh!vMq0hEe!^^&NS6PEQ-B`z6nRb$6v#gv<>TuVX|x*8d2xzMH#?t~YV zf^0^#Cm>q+%q~AJU!DYG$@mxHZoqquBHs~c(w2G{7wdF(XnaC?tr5`((R@||QU_Gj z&fO4K^I6yM=29|>Y5v@LF^=k9)vHuu0iInCAcgL#4KkbsG(Er|jsY@;sCGH#)XP~7 zPoyg*vj!X)lvqgycA4+)DY9-lS&(T9) z-VOU3!&7|wj^CP{v$xyvV!jvPLwxOCkV6jtwTK57Y~QHmYU% zlm47QTIzS&%i5t^ad2`p`TSjjd>?n#+_8F*7o`@-)2?XbD^LVV^QJUn5K9P6p(QkN z8Le_=7o9ngN$L^R!8{^-CkKG!x_VLYToJL;uJhyrZT~d}*9s&9$#Afd-_a<=Im8X| z=mE_BeZB2wUXRV;6un`_z|GK58fX;aP)#qy5rcujo=`gRPVV)wF_4O`oDRQ(=|NOZ#+r9cqmE%R)Ad_2G!kXb>&e!`IK51J22F44OB&qlBnt8 zAW$%Vp#0#DfqGtIK>r}3$**28g_0G{8r9LH`~ba4lL~ZWbY541!c>d=p55hFQS#{5 z!5B)lVC5`><6b9u(ZE^KlE^D$rt0KTZ$PpIn#dAqz#Po_mm$okzXOgj>_p8787iuD zSR1xNG$>C?(iarS57vg~RC5qW%0AhBc2~X{Rm8IJX3iVJ8Qu4oZ2@-MYR}f_@lGS>_LrC`rt|ko|>0* zy-Z2q4Z`V}iZW_+7^X&SbPE(v?NC{)>g?F4iqU{bhzS|Jq$)+-YEs1LL7`oV^s6$o z0bIZv=_opu!Cku5RjJ{ML}1GkP_E9})h1WFsIJ<>xRTZGi`Whs zPr}}m9~i8R6RFBn0Ih)E(I-Nj0kV=Rkihsxh8M`FJ&Z)U%-yMnUO3zlL6I)RR#ypsiO+B z=vqvw=oPGIjbX>xutROBO;=2g2kdk<9fl6W0OjY!;aU&+)M#U7)YZKXWg>&I1bWdJ zqnCBNsuhm#s&FKOdXT%>!V^Mc`5{GEevz~M7_VV4v;N{zL-%I=VJ6FIJ7$+GTiI?J z*Gs8!*T}0#qa=c3VyVikmI}>Pv!QpLL^zIW1r_E?se`^tspMJ-QuQdA?TV@CrGb{! zQp773c(fZZkT6+6rd@e7RVteU9+1t^)(#!oKy7#O*s?i7XLCfU%4`kxX3shvNiCvO z;3W@nuJ#gI6G)aT=x^g4_zFDcp*FJaF$&7_q_Kv194V#{m+?Z2_;+Q{p;M%hDoHJw z6;}XI!^)hSw$$0UG)R&&o61_2q*|%g;3ymD+0M#LO;7i3R_mSN7bY{r+H^*o8-YHl z(MOj~Hu}^}v{CkBm}xwovl67@YEn7vCWDh0H0SgZlY=GkPm!3=Nen(?TViC=DmfvNLmy7#4Iw$M{Jgk0RdRCRUUt&rNm_DNrKjGB zy-Zq)79^PsoD3hsPdJCuNss(vPeK{?V%zJ<eA?ksABs;csL;WuG-*0MrNuU|WqitW#;2&9HlH3m z`r#COEB1jwYl=Npn$t%=99!lbm8Ecu>WnQ$^#p`Ou~E zof%=3sXzbiL_VL!x(G-OlE(@D`6rx#O6{&4@6`L$?>J!SzX&tAAnl^=xI|GLyL)}Z zjs7`#0Lc2x0L`or4{`SfF}M~U4(~RD?0FRfexJ2{~IGtOF&$Z zs{?U&?9&|VpxP^~#Z?GFz<2!0vxpRk7_%CFvitn5oITVSY<%>tU(cDw7MV^u!+(8a z#w$HB$Fs6BIrIUfY=FGkfKU2YYKd%POcPaZVyOO(oR<9n+Cy-uAOag7P$B>g$d1C zDJiVDn%-iB$rzzeu(XZcbUTX}1v+asY@x?_194YJr5F)zB4Z&+Fed&bLy>CfKyU)1 z`IHm4zEk)cbWd^~Bnw-(%fI(r1C;^v2_Dlcsa62}v#Ri^*WxQruK(lj+V9n_!eaDc znNMRnQqI_odO`3KNvqwx-sTAyvmLuRrD@TAOGs;xZZ@sfV&C^6yctJ2-{a>(Ar=u&1Y5z+cK#Di*{y)c_7u4w%>>H+bkWkXn|5Yiw|q)^gcBI> z;vCX#fTM-IXh#B6=S$Vl16Bgq#bkpEumM`pXG_}dl0uh6{)juXkBRy-aezSLI^xi~ zZo`Oj<8;w#A*Ob&)v{sT9N+;_)|4)Bpa2RNEL+@y#kS~tr z*2U3u=-j#?$Ks+MPC7=C&8xdRZ)clf4H!Gx!<{e&HnQ+Od~n#=VG zhIk7S?*$9>=4h#G;A10L0T1u(J38tmfEmhKBEDfDe5QfURai4jWFw`iL7FNDG1$dO zPuP=8w1ZjwSY`ky?WaY25ri>XRF!wE-bI5o69UTWqcHAD4ipFh6Kes(&_zv*=?cm2 z(WJ18p(4L)B-wM#-Xe2KyeT#g_9i;$8*kb-#R2}PRg+;bamr=6xH3qSz)T#d@JI5( zo?jGpaBJ6rWY2iCHL2}VR4i}WQ7&R7`GvoO7D7yr^c3+n^rJTV^h8y}4a^Za2(}pG zo!GP`*-gmf3C)6~1$2Eqjbe&f(NVbJF;{|38@eA`oXXZ6` z%lMxvlj*b!-H66T`KW{x4<%GUJsN_p3~lrxm)ttQq-ad8!fGc+<<>60fclRGh9T!l z8B!iYDZsr(K$wKsvUAoL1;`R40fPZ*&Ab};c@XbKjUqnG8Wc1Z`8`KDz`A$%mg;=@ zK~Qlw?;j7ZrT#F2w zs@Zbelsk25UNfgIQVC|{H9spGkv^gma>#N-JC(^sUy4~PmB9_iHiw0}F{4xhWy3mU z!X2{BS!MxIT(nlK0vwv=afCeuk6;Y1X3XwG8!D195a|&|Spc9d~w2bqgEjle@x}AT2>-+ zdY2NR5FF_ol$lT%~MO$+eOjw9Mx@}Xa%`Hrd zDKj~sWqJn_&9D*5VDr?5%|i-Xq)%b%wi7n#u1`!VSg|2Swa%QtlVHz67-(Qz2@;3k z%E|qS)u56YqncyoKsoBR8C4FL=+vfl*kV*A8l!^8Z_lW(RY-@V(+ChEZG8t#VCG5u z=hh7Uj`$B!8Ur{5MTAI@yNa%0$qZg|LMw8Z=uL@HLAx>r_SFkx&JE z6ow25yQ(MtRXqk+{GGDhSRjLP@86fS_k|@NuTyELLKxU%cdapex=RxYaK~ zw)%zcamCT`X}lNJng%%C8Ygjx;fZV;p21inmm!%;qrOa9c+5b+Do)GM1m;PohIx{} z&67BGb_Qk6!fh7kWr|L&H*sFnk>b2iTlSYNg2^0AjYe4wk%l!)V?G5bRA+VNTr`JV zl*d`BhwxMZlyE-Kv=9dQ$8*TMZ&Nq8Tw+L@1xqFD05Z&gNGOch5~X;qRQ7cR5kW^n zj*o|fjof^-PJ_hVP=pm=ns(zBeX4q5uIh++seZMPkBG=Tp?8itmtp*|hk8wa`gla# zr|=%-&Yd7UKg~H+@?g;MKBj2nWsGS$* zsISLj;LB=THF6MvNkKjKKnqkrH~~;e{@%6mbzJ8S+`AX=c@?*nG-<`d`SVjmu7&dr?foZRj zaU2gr>YRo@82k9}S;F})VMj8KbAr~f%UN3U$bbVU)_t3C$+w{UG3_<@qsa^gH8W#L z9Khw|MYjfj$5O9r_$^DJb|%xi@~0i%X22N<6nG7KQ9C~FOJ0PEJ&Pt`J?pk11bDrB zpgRh}(1S1i1vE4Hr~mh}Kg?r@S-jH78{k3YF-Jig_E6b5;O{BA<%=>&4?2WnMOD$gJZMsf!NNi#78Eb}>Q|MfFpy5|Q!zvIz)ug0o%<==PrPab{$ zKmF7Hc-B)|QDKQZdJj;H1!gf*+9sH-wNU6|tXGw_CT+ug+K5+j)j9z^>rD^+0dIlO z^Pe?|o1|HIfvh{t!Tkc=rVI;1pW*L^qNR&yt{(2Eno_%cNS9xGsdG^vT=Mum`yos1 zrDlJKa&Q8&(jDQ^gd($%*VGEjiY_-Dc8)Rn`I$-){aprsN(PBD?SA+{*KUa&_v&Ib zPulbKTr-7w;7?l$CPEATdL?Q+geE{!z`sD#4efU1P47_aG)s}1sWm>`R%tJ;Mzm<{ zYlLFkI)AN#XtrEmW5V_KWleDUAL7*B;ZgRXIbijbj0+AZjqekdFsWA1V zl!zatT)tyv<WYZ>$e=SeS9 z``>HXq)JSkCvTEX>I~P+lm)soS}nm=Kod%9J5MsEM1stDl8xJPp2Qb2+ns?0p3;k% z^F#!R*C<_wwsW3PUM=Uzwd-KUtJ(@~FV=bTWW1(j%z0ul7ZBt;wP*pjmh+^nI8PnK zbMNFlxp!IL0>KfXEsp;BgLFX-XGMtON|Be_gI5@+#nm7%^baO^_*h{@7)Mw@`5l1%+%r(MZY&-tWiZ^*Q7pLK5!QuZnLmg)WJAV1{ZvN~hBw@-UkFLOdcGOlK_19dfwHe9tc4W)l17;KkWT*jr5SL5P?CZR_gb4B&T;{$IWfn48DNj@@x&Jl@ zC}%(oCg>s49zsW7E=JEIwif!(rZ)F(MR%$WmjC51iKo62>NpwkVqO$O#a>7TQ1_dv||9F zu=h&iKkf7AR?eklku$wb}JqQrNcX-ieu+p(i7(2Q@C zG?D`!!gpFPdlTv>;~!3+ykx5MJ?wx4nDQVLYu*f9%3@;Q5`armdTT4l{p8jg_j}30 zORQ{Q3=~MYOiVxyair zt{S##C>TNoga>)0?7y-ZMJ>rvkmr|Zg?u(c4G>Dnrf!!;c_lx*VL$OhLDoCP@)RYM z-Hlgpo&p-`8LbV*bs+4c7gAch)v^JsQR-^XinE1Iuw;6~v2Wp7id#-8DLfMh_70@n zz%e?k>%yFHiv(<~z@W`bldFw5tLRM`%Buzm^eiRFEO01{FrA{*T8APDP|7+ARl{;- zm%E@kCuV#{nz19#+b8FF`-D6||2-14lAYxfrU%@rSrJ3(fD3Y5g_<2CIloJ4M{j7T z`)98mItsvQ`9z3H_mfxbs7t9Fw}bJ+Pu5FX^GSY;5IM%4>wZNKAnts+-I6@LSLuM# zBXy^MY(i$>N%gGIz6GWRu7T zv%rc*S~PY8x21`(PX#i{69cpgVC2%I*cBvpLLyNCDpW{UD*$U(OTUYC*kMXKXj;rw zxPAKlE!@I`;YQ7!xOLW=#$^v$s|S(j2XOd(3u+{?E>-UhZJH=BGA&IYLT9}qfVI}> zR(0(K8Ou}rHO*(%J9(J4*6t71C2QxAn%X6%@3=R?A} zn?#X9_TO*c!Ikaz1mQG;olaqBt|ObuXN1+Ve)RGMO|b7H&rhhIK$HU%OVy24|HI!Mw=4k_igGSYd)g`+=rr~EyCLZ5t#!jsyJe4 zPl|d;+nQ8q$l81QWYf=i%? z>}2L-L|N((l~_T=m}YHs95i90j%aTSp0n=oCq=c`t^=@iNkHdjoq~c4t_umtQjOo* ztkXhYLa6rE=w)Rks@2h6_fA8$dk4+RZmUkp0i_NOV8Po&4zNz1UT9dqn+Xle`)oj_ znHlSVQ@JHMC;Grqpcy4 zWm0!bU;rn2kV({WnG_MQOpAJPwD|DW`h;daOlyj8M!eAZQ)Do{ zQb&09LJZN(teForLN!`GFG>BO}9Wsvm2ZLO2mp{u(F_!%8C~7pCn4xB)3kc?KPaApfm(csAQpXuOm@slot(>1VwGQgPu99e=vtIs3V z>5MMGwc0Dty}rMKkE)@{+)6&WhiqMttxNahpFs;}P%CU8?72waYYVbDjiN$LRG@`Q zZWE-CHH0-*X+w%?$ZTtf^u^&0Bo{ntYsieOAzk7(j^JRfN&RdltI>sa(t&V>hFLBt zKReDKO@yFT$^=U&6PGlT;|$VToDqm6l!=Qq%dK@LC8Ly7#$Od#C5N69-!>T&7$6;~AFMlOal7iXA>JA?F|be2Bpbjb5pJk;66(rkuJDNzO>=3BJNorYo#!Js7DvM2Z?jrwv&50cJGT5@7z$vz?K%NjGvPZ&k9 z-slu2VQn0@QB)<_3G0L;wl$(zWK&J7%JxwiL(6jM^(>pwh7%YdTZ>9+N)(^NY6Y#* zD`-_Y%0iiJ&VXXH1#OfiP(-6>sdE%XMY4J{?FnnyJRGzvYTVGG2pdIxYXsmXjiQCl zQIw-|SXgJPG-=$Fg-zPvC?8dAGV}pw?Zq}V@Qk7z?RD>FwcioI)M_;GyIY|nW|Xo| zXC&~i2h7Em?Zs$h<|OrL@>T=bLDx4iWbv|NeG`u=Ouxo~&9xgri#9YGm#L@B-VrZZ z&rxIAbHCXFCs!U9e(C}zKj<~~Qpld;eBxlNK@?0Qnn`Mkl9+*;4i)b6SliUF zySU-ZvLY*kQ%<(yuLix=YV64YTT}0)k0^_7DKs>}9)g@& z9rH0l1U?+raG^d0{{6TLvtZ*$E-LtOKq)gU32NM}um}Zfp^F3m7Ps zfB~p*L&(6xwk0G`!SRo~rDiK4U`1&vX1W1~R2&eH+s?uK@l8S>S^*g(kG0Y*D8(rv0$329(N2}x&Qgfrl}rD#f%iz+1J zU>zc+;;U#m?qVZEqiU@cVL0>vp1J!5TzQ2Q64=-b5R%JuzW5Z#ID?&Z#BiLoII3aW!-=VMcUGCP$wuL z)i8oPqtJFb=PJ+VgK&4KMTZAigb^aD8toZ@Y=0{ce)2pESKKo%k!`dP?AAjt8C7?N zf0GQMafMcH5P_6~`|F9)E=R90{OTH^hUgq#+^X!K{xb{w+`|1@MSkv3Nro$hlN!an zjRJ7@D=qJq1@3KVkKIE`VIt+;y^SJ|_vh+fTxKbaD29i5I zNgKlCmS~{101HSVyGL0sC8o;$F(i@&wtNgDlJ3Kll00J#=xicmSWhL4PszqI7W?kp zm&jWsx{YyeXQDQ^(SJbGB$D7isx>V;P%dm;;Ej@QlGU<@{VJfAJc$^XzT{rBH}+5^ z*Swi!hv8F(y0zlTh?O&jCIMYQwIJQvKw;38qX745yPldsqDwMFZQpJx7{-5& z6wY$U2;#tXw3|U81=nhK&;ke7Qb#qJZ^i1aAq>8>D`fz6p)tTd^_qJ9Io+tUpVp1K z`AOXvRp@51fU(g7x}iI1kg-7Q&n!CP+}bA2Efa~OZV)9*NM$J-Swx2yLmUlk2O?%0 zaKuqN9I*rw*FG+5J+z@vs3#f=pVH0#&lrmf`?U%(sy*u3XrJv(0@ zW5a`8Svk#8EdBlJ1@GF9dzSvm{91d;^>;B**O2$d{9(e3HgUCNh6cL8(3;Qnr=Kva z;y75Vjp7US%3`=dGQ$NiSGCqv0yW?yEgG~SnWMe!1OenuYS?E(s!cPzlIJ-*!%oS5 zR@^=O&i!DM#E4l}l^aeIvN=TecEWz=0AE?FQJF_U8nuu!sah>v30CP zNEAx&s?3r5Yhzk!bGeuvcj07*-8I(pMY()e_E(Tx*~VCT=3)^|MXIC06(L9-xX$R1 zE!5DIQo${|F*(3$V?lu7rPrC`*ETt(;pMl0+(Ch#3 z6TRjsiWV%M?De1eL@!RTh@+<`+>`4A^a5jfa=2j(femB#+)2Hp;Eqnn%YAJ%EVhP; zQ`iG7aY=mm$GX#qQ+ty}&g5`QYIU_&xhdxt@jK}y;)Vn*2u5S;VA;}8E!DR%G9A1v zB4+zz-C(W_O4=2dU`tbm#6%;eUoVFmh|B3L727y@kU3W-p6WKz=|CNosU#=aT#OFF z)ZQy0!myd%%_Huwl$Z#umKF!KD^RDld5u9jW=Q9y+Zro`4Qb_%DCc%Z@Gvb9oE9_+ z;UA0As7#Fzj|=*9h7kQoyf*RcX06isER!)%SR!0wP6A5tVep`?L2I2^!ezD44stCe zJySN_(J;&sFrT!yF81PztH#(8@dUkzZLFI+qRO(#hQxQ6(pn;$>>Dh%_YIcm3fq)M zr|yFAT(W(GX;-*L7hHqrA#0%AYdWvp2zlUk%2LP9L8FU~eadJ+Bz;167}LN6w3fLV z*`7Ey+AElG!6cwopUY9L?92IOspy`}GLm**2z;rL1qhBfeLf04M)>E^OzC*No0VS8 zMM=3qZRD-$kXqlF!3~JV>ThN@xyoVT51+-Nur@l?J!=31y&JOZ#2k&!3yf6q zAN915k66&wG;uG{#*)rPI=NM#j`-JQ)}WV};DjRR8E4+ia`6d2$>|JOoF7Bw6&;vx zMp|kJA!*v!30YfM*}CUWtQdbfu|h|%DpE7Ynh_9wP>QqDsA--ps&T~Rad!4L=Amj2 zwi-vAWQvb!)d0ch4t*~`-RGfTor#6IiF_H?QYN*$^3yt zptcSThMl$xk6-4o45o+Pv!6kn0TL)M)*eD$gSD4|y;Y|Ozfd@Ibt{RFCR1vgab8Dl zhpr5TZ6j9N(esi6?=q}J)|gLgi*cGO%{Lvjh*#B?k}buYvq63fLcM6z4Id-Xuc_$2 zNFq1yG46|l!pggI>_{``5Dng8yC=ZTD}3##yWb3jU1U^yF%AL)O)dDGyL5Q?2wKFtnDq~ zIYvTYIaIxrsM}LGpX(mXW81C3{8zSHVK%pNqtGhatPu2K4dHPSi(`7j!X(nP0Ueo) z-w!t&pFGAz=ZU1afr@Sw-J+BLKV-%uvoN@lXb{5$G|(mF(F8pf)(!GFJ-kiNqU!{| zoJ~NZShgh(P$z^7d-0t+QmGDwV}(IT^0F!YiC&vTzr$;jvn4d-Vj57nnII*Yh@!6S zRYd+&tN}twK>qB<3m9NyJLAI)-l{EjJp-%T5Dm;p1sOTPm{;bjnh9;rpr)XJ zO5iACM8nh0@DR;R2`~oeoQ?^DC~FT=Tf*kIAbC31mL3U`*FgYzDUO0pUI}C7=Fnns zaj;--bTWoTZE8M#YL#;6wlu4I_kcq5_Do~amg*&wMEgcgU6b*hJ&6~ojn zvv2l6j9RYMW#nOsIRxP$*$nc^bU4 zG~=wCRQQ!>!k;&>7q&7^FgC4Kj^On8Q_{9G&6vR&wiqQi%ku+Vl>CccKS=}h#*7;@ zscZI#ySUJ3;!DL&dO@2?cUkp{L1+S^^4XBR1V$E*MO1uP`Yv~U_kijP>b4vOUZL|s z9VRSkBpv@+Q}#)(qN$pGViZb`otI|>#sW8CO;!W{raHj74V%8e*N|jNYg*>rm{9E+ zdB^IlG@_<8KvZf55-1PuFo{mMB{^W)^}M+{Q8U0D8MKbjk_+{*EgywVopH|cP062l zQvG7e7^vx=YR6i$RU9+Ye)UC7WB~?rsB!eV zFk*ymgHoN$w9p7C+Y>OR@$P5y{bUwzv%p(@bgB9O|OGm@AfDuYfz@El#^ha(wc9 z3Vcj0P+K(N49lqV3`LED%D)c!(+~Ehq^WJ{gs!tN4La0q|3iU`M5R;;O9zGSm;+wHB7jE% zmPpZWa;r`;cERM(G$X+Y7+)JkDz}HsRryz|ACtP~EMYSig;jj52~(;wm9vm7x}HJC}P`46W(i%Q|)SJOVSM?#I#wM+3B^G zUa^TRUG${er0_Q=o^u=nqs+X@2SY!|)*I3qWw);H9A&4?&V;*z&M5aHpkt=1 z|G0#3n>zzT?ih#0CJJe5jwBRdAJHS-u$`Lt8yN08Yp;zK!Lofm4f{t)NudZ5W!R>uOTROnF7I1-=B#2OjFv*h`AHSKVkmn3 zCSQIc0x>rGLyPm9Jn*5BpbxiA*)qfjDqy4y1lYTMLHfuB18;%L}{Cm4l-N5>=R~v|pRG zt^E#_6`0aqMkJ@NBu6OVLH*Fj_ zVs82|oK`=&Me8tgh#WUkMJR$u9~mK~0K>`+VYWrk2?kvx`82zWoa5R<2IaWZs&98^ zn@SmKwA70nBgi3BSBS8~7}3EA_Q-__1QT$2>`Shk8V;4%_8m%E+X%J=j^0AY_h zcYi|tvMa2@{jL}ms;w^}73{RI&KQ?~r^sj_BU-8$MC~*hrBzkzzjw!)W`x!O(gcG{ z${aId+?%YWVLuz?>;zwpS=Q}tskj|6&pOW3^H-vI{x0C>eiwk*DTTTuPG+)G`Pr2p z1UfCoC(S1)#mrwa{wrj-xQjFDJ*{5pqt|!n(B~cay2BP#zKod0a>DmorsaFGJt~EP zJUBj|3Zn}?x8r%O1kH7|QjKGA4g!|>FTL0jDG$8Gy`JN89YUtVeq(5dgS*b9N)n94 zb-;1d_HmQ{!}&6Y2+c=ZSxvEY%fuCVl@UUEtluMvx$jY5s-QMqYSOgrMJYyU7J$pr`OPwhpu1EoaIjiSu4<**pFY>Yz&?)nn(w`88Wp~soeZ~dTq1b%xDxUFPNZoShiuJ*YsVV1-U zy+vr53Qh!%dFbTUcUx}Tel6yL7jO%B`DU(o6M3_-Smq^ql_Hgt=sHgNMKvA%sW`?N_mgad#CtJVgH$GRT2M0!3@x3>~4V5+%81BUo<5n1I!P&GJUPS#J7@kA1g025jJ+}GxH$xg76a1DshK_5=Gpm$&{EZcj zq61d41*oNv4yA3f0kd6ySEkw8D#sLZr;Z5+-Bx-}oI^O@^oA{bf>)qvs$*E=Ass`W zDLMv|Mr`GD%oBHIIwqW`V*q5Kh7KLWXjyC-kwLEm!zgZZ0HY0zTKGeu&wRw6A7}&; zQg(ux;prBChR$8AooYPBfZ>kiwjo2a0wSjsG^ z-0)=8Hbr1`V+KH`X)L9N6EGFukUzs$g=T4*&N6fUxF8h|imwByqZ62-V}ed|3?Oe% zY)Tk#v)#l4j5Uj&AkhjD3`FLt+z^?zlh&D;Qu&*pW3JoN98%p^1I)!_db$x!bYSH_ z<+9oCoE%tYb5O?2ZYyLS=Q?J)^YRF2ketj2snu+EddqQ!3^-x!?X7Ng-hpUX_hYB* z7=F^}Bn*2*oS%m7JUvl|&}VUZ#E)P|9-$D6(cuBg=`_yHGW)tm-;# z^6ag3py+S2w~5a{8bAlMHXg1E1v>Yd$^~`_T$3(3akIM*1OyubEh@*>j^=w*Czv%c zN1|Ujt*wQ7TI``IT&Rf*@roF-Q}EgAL~M#n$H=Z>&6ZFBP?HsKqQ*9;&U~snhy(vo ztEdT$B~RXqgxxN4tUW)=8#B#BDdQeyw(v9yEGT8cA-dEKim+Mn{MsVX35_>qziQrq z(lQLGgWo@gaU?jj#EzUOtYu;D3p1`|k-FWK*BMBZ8B5O{vNpCa(MN zr@#|W|Gu`p#^{wb-(B6LA#|eUnm@!~5i!qHj3OOPAuS6H6;?98hATv48CUJi>AG_* z6Ob1|ai%~4WCc)FRzMS~%<*;>V9$>ZG7>e-a?&sQAQm~Du|dqURtKPj4$UzMiwvj^ zAi@lEKtWA?<~&0U{dQUsZ8DhH7urpMVL=T#hgrJFxL(|!4f$@bk_KEx{O<%74~ETT zdNJ>-HmP+^(MZqgku&_zck^UGNk-u@;MoFdEe@W?y9Ih@*m>|k$3SbZ7?M?CYxJcZ z>AlwY0{5qP?*}4KY76+mC$b8fo6-|U^UlU=&dx*jUDPMDT`>O001X8ZE#VeyW+WH*RaeNs zheOGV8X~n?pm^`w8zqpJ+9!|sKCyPWDl0vjhX27M6Y_?em5wf^Z`}}QY9x)J;ONS2 zCDf1Ohr$;xn6k@fZfnPcHC0TWuy(6e(rN3sB(f#g@JKq*XjV-m*Gp7yr^D`Su^t)@ zX@yoq5{yz|FA75ZibNS4DU;T986 zrfh!Y`+nO#q-VsuEx+?c#$0}D>rmPbzW+_FLp7tb*mTyR%px-3>B!A9vY3nM*Lp<_ z*M9&1#`Y(j?f;qY)}T5mkwCP6IWvo1N?I8(q)BX8(jA(HaoS8}sLT%?Y64KZF)>|` zGj}Aqj+$!gL0t9PTN*^9$STc4{J8dqKI|(0NMnc=$Vl1gIUSkJAk`zl?e{tz77}HL zg>;PP0=5i<5{t}0rih7yV|9k{`#+9ua6f40mhXJqC;k$9&WyxDvV{^rwh){27c+?I zEEl%CTSj3qCyQPxf;&wr!P;q3HIbz0G5F9|6kY7gX<0tHND^MhRj?T*?%hhm=_9Ze z%Wu&x1q#u-a59hRE$1VEapfm|woSuyj58^XLY{MOP#-!#4PV3rSqfztA+nQmY} zjB`3t6Xt#46)c2t)etyhWSYxtM2p!)hYM+ZtansvqnFdDsf}D>wlU-hmtGy z={bxr$W^pEj~~x-*#nqB>)X+5GEB9Xq1|<6-a1Qw{Q)uwB^Gqu1x~lPu9KRn)t&ld z#V$;VrnvdKtn2g|iDWsV00)+w6Ma_x?wiY#$p~p#J=E%_8U*pHfotn;% zA+Rpc2lHcib#On1RUUHFQa^@u^5(}(>%`!4%iEAJ;1i5Nng+F; zas1nsGY%5YmF_GH2F_UKO5eD$v|6}NaG^DdV0L2)p>g=2L%b<|vul;JRVojry+LcV zSUOa@HQYCVL_;{-ml;qXp}cs|yn1Bw>IAEalGr#mVH#Zad2Yg7dbf@8?sxVe526ty zU2>z{Tso%OSn?}CO;}JM+r_7|T~;Qb++@0J5V`wtSoundxRVmnr3}UR&$*ux!M(I# z*esIV(UkJaEvy|&k&_#jotLpB#T^ZonJ7rzRX-+qX)KAOLIuPp}i+_j)tUe zlS~VoCsPwsx57JzDf@YJlZ0ymcxB>0NBr(|IbPn5CI{@iS08J0$3o{&R6WzgrfPT!Hx>gv_3OS!)N^lR*Hkl<` zQ9M}rjGxW+IaL5Bpk}0k+*G^IIH7rV8zUOTBW#r5HM62_te7y*K8eAMn~cFSgE{rf zZJwPt%4EOXF_?2iTJ!9w^G)SvR~}AHAF#!CHAHb|z{h^r!ttSF{O-W>u^jcAA<`q5 z@-m&ZDn;2{A+5@=r&Iws(;ZPl;l$?IBf{77<3d(Z!yhi``vv@#UwctfO4du=vR6+MjE zVvP@MHc>jv%@q2ktu%bO(`IGvr>D(Ib?GskU6e-CkPjFM3_ZhUGu0tI6Z@49h-fu% z>xGL?t1WBLMKoQjlj+?+$?7%iD_hc~H<08p7RH$&Y zosx$q7+3{F4z+{~5woQ(x^aL8DE!MnR2qt&<&CK1ccQLID3srC<3$-V=ui&G^`F&+_Z=eT2M!L12c$N===T@$^CGU zREwW{C({7W-D}J(kLefJ*{u$L(_00P@(h>(?#N1%j-tjIx3Z~C@cC0&2YLfAwb~Nlmug{Yx+E1==QIv!WzlI>MT$_LV zK)ZYV!8p(n+dYJ2z(Ak#<^tnnoBa|q+bhR8Fo|_tWwWh0aO@)1af;Eqm(5^TH^RFV zh~Wr2I!-@Nz^^@Gz}fL7-q~{z2|5-e-JUZ}b~QOn13|#zUC$hhxytrzVFPxLt!psu zmB>3C5~g-gm^}R9l=7j`RL2lFH9}@IqUjdg6RC^TD$;U<)Ecs(ED$YUe1$i-RS_7t zQ!DJOEvr1H^8ZqW&;Flo;Vt}T3fwkr3$s?e2$EjcmT9C#31NjzZiEspD-Ov1R4;C@k4t_yvMJ@Ikp;En?gL}5VnB`ws|rK#e-cQ z|5ZEy0Uloz9-nICq3t6M4>pYapT?tu9={ChWFUQNj^AXvA|K4sp96`A-EVQG%w=G!(Mv z1D$3{RJ^K1TWBSQUhH*7^t3vz;#V0KPpI=11jiM##atmgsq>u6i3r;iriNdyPKOA%o2irGidkZoP;0}z63uMWZd-&*-<3CJ zJ#DLL8UD?i{hfer69sln*^{x25!EI(e_P(XsKqVLq{!6Z9oMJa;-~&S20>~Vw75j0 zdODI>aLTNLb45B9^1XuLd@Nl>ucf&%Bhw$0<)*f)*M~g2%{*@H?%i#ZGb&d5Yb?t1 z=rDvqu7?ayv;QO%9)^Tj!3|ax2?=NJwQWV6OKyfRa|3SOi1Cz}+mC9)iiw+68wRyK z;9)28PTXP~)XoH6?8A0w_lL!I>>8J)8mrXZzF5nvoCEnl&x}R;E^3}fW)0coAY?0J zu{NFYsKsWar%ToXb0(4(0q9%@UPjO%0i890%Tt`3-R^c;Gm9fplVhpikWC+FO%RJa zPQCefaL^%%xdSrMh#b1D^Rx;g(KDtI)!R=^TJBIe*D)JbwqrI?Rd%14 zj)E4jl?{6m&oWp)?U<0^nFsT`q>YTtPW8Y!z|7N6xro>fxte*GSp3F$2u0dsGQfnq zjP=UPt*O%UyueQh`-pYQ< zoz_Maajc3Mc?2PyjbH6mPM(xszqY5$YABhlkaPZPyS)kMh%d|`a(28C2F8Mr^dI`T z_GP+Y1zbR%;f_feaO5_c zDhtF`Cd~pZX-ICnVZWE;YIDs?xm^!YZEj_b?_W*1pmtQl{EIleE0$b8Fy@s~fiF=m|M7Tw3ug8)1&LOdu9$&{t`bzB)IKBz!|c zz8%B2T0bw%kvy=6CNN-;W$Mc>PxJDq7G7B_z`|dZ7R0}R_6c#4X(3*N3@616wl27X8q(J7ua5>7gS;Vxq1F(uJsLUXpG#e;cJ6SnczFD*}i^kZfRC|3zg&l8T z&D0+BD@On&gS)@|-RpLznLf(|+e7z#=JP|6K$qw7CqMSp2d;VO_BhS*`RBj< z&KG|2qxU@R;2hR!wl%&8dm8Bf{Hqtf^dI{lyXzfku}{44t*3wZwGaO7K2_yaTE!gg z#MMfIbm(672%@q8t_1P+Pn)Np+P{Ntpo}t8)V(3m{#Em|XzQ2Htz-r8>Y&{_fy*rqwa>U)rGA3jZc8OXqeaB7^5kLIotz5{FX*I)rG|++^jNQiWnwd>ttUI4 zN>44AuJ7k~Lfpo^J@6UU#@oy)95@ZCCo%1<}>0G^4$}#H-l#aIaES z?)_Af_srPh@|X5R^3f!6nMbDDH+=qALeHy2P}6Q$lhgUX^23!upr!Hq`6Y{$i(Wh0 z92s4-t$F$8{?Wdz&29aQP8r!bI<|BBqOsxOt(z|I>mM3jG&KkirJ~iGs+KgY>Ke~Nu z-&N~|cJ*!T-+akc+nX2c+`9Fm;r^kq=E%C?Ge<^-N6x%*dvg;d&TC$E;l=@O&utayR>iX&StW8q}jLms@IM5kBv2lE*Kt5hFnH_%kx?NL;a(dH#a9EBYjtOl(wvv zXu#IQ%h||O0Pjy7UGsdd`qNdPEMiUK1cD<{cJwjpYk4^J#f|YoHXs>wCr4-JIkKc*T1#7IUXC1FKdp)gUze@ zw)Zb;UfH*e9v)rP+;sV{>#CVS&G1-3`PF>33=ePY8|mA)X>)T+_U>%bg-`Z;9`~v* zdwv!7!dWz{D4mbmrF+pspE94n;qF^}p5pT_N(J`{pSgTa;?tT4w0`isd6cR0iTE7D z=U6_+@!8b3y>C;8}g}zMSieQ%>nwykzOJ zB~>IX%e$=1b7|S<(=u6E!S%_fzxlbEM>lvqSN8PuEbdv-v$SVf&+?uXJu7=w^{igp zvv~31C5x9XUbcAo;uVWmE?%{G^^%??iGEaEmoHzj zeC6_0%U7@HS+RJ&za>^-h+1R|Se<*(WX>oICbG$$| zC&X7=4l|6xy2wMkVS{%$b%?)rag{8;jjQ_dJzPcqjaQ9j3?m*I8Xkk|7@G2Deu3B@>x#wT>n%7?X`ZvD$ts6Eqw+xP6 z`HtQ1x#OPu?%)6TXYLys{`-IUgSR$*FBe89hg(8_(JABC91|{{F)x~5IyQGw?v+vZ ziR1U==STCS1;u5R3&Lg9Ju6E`mW#7bJ#%%qsaWbclH;`I=KS7O(RsN=QMphm^u{lX zs-+d-n%ta1R4rVzZspRhrG-<9<^1vCF~wl~@mJTvl?#g}9y#aud9#ixT|iZ@>^izo z&Yx3!S!riw?dd1xPtBF{7w7$4EzDKkPz;XQcFDuy?KwMq=h_)Z?7ir?e181fC*@AB``b?r=S0Dt z-s5Jj$@zO8KXLp!Cq@3Ar^o-}g!7|v6kI#=mFJ%}{+BP$`_XH2bC(5sx)(;9tCyC? zKeOtXu7y#l5On9qKXmPr(af+bydqkkuSWiiYP5>>E+{UHg46e0QavUt=T;TwaLh0TsuX^wMZtr>B>)(6BP4oV~d&YU^ z|NIxHEPBP8-?IJ(d*Ao|5B&ZoKl_C*e)W;R{+oYz_8(vHA`^g>Yfe3F-MMes`+iuYVsIy>V>k2ai8x(OvgF_~oyC z^Y6a@A+Pt3Zt1!4xNm&(zdiAd7cRK)jc+OxXVhM{=*K@98eVzYE7qQQ(+6I2+0IA* z`tff)`Q3l!S2W`FjcdLiUGvJ~+$cYD&!@Y`Kb1SKxMyB?G{2d-C|VX3LcfqN%q(9t z`TndX}fm6srPO8g=mAv15MDBvZ+`{V$LH?-fMbR1I$!N5h`5DzU(J?Pw zA8(5WUON70?wb3a7K7~ZdLK5+%+%EoLyWr^W?BTqdsH&hUl6P9a%Zz`kQl$a;L&*vrFS& zYK&FKzcXh~EjRv5>0dt*t}N|&^Q`fQisOHO#HnF9zp8jvv6>&N92>qddP8aa+S&8U zN0!cy#^00w)E(8MqQxJJ_I&U7LN%8gzq7XI-wS?xVxG6}i^jhc&JAaD9aQ0`ihup) zzOg>1^Uv(6c?(eOvW0ccp5MT|?D~v{?-TsnHf>pP~_fh86L4Av#Bu&V+z+M zz6qG}A#Ud?d(`FBKLi9H`ZY52|!3xm6#UU=-!pFY|9RlMROFKk%x zOaGY_e!0GKe%CWAKh@p0deQ7>R`<+%=G=cf_L&QMmwoKj$M!w*ngauUms~jf%q6$& z>wB&D&Av;U-}>04-uLRS^Pc|L>p$~@`Wt`r>@#nA{JFk2$KH?Me8AuR7H>Q50|84v z;Gcg^rRRv6--NkvX``3;$Ig9IWlgE%&yM^OLuc-!@YK?YvpN5P0#OkrDwKm`d}6|^ zQY(_B9L({9U^QcG#D2BVKQ;(i!OU}x4F0U(NJe0C1Dl_G49mf>{;8C$QgQ*{fg0vu z=K>2A1Qi^7fY|fAU^P!!Eywuh_-s25eZS~m><5KvaibrUDus2yT;Tcs%5I+;a}|Gn z$=?$Bc|Zk62T@pySbP!W{TaR&deOY_nBdr;H}DHZR-%=BM9JS7H2hs*6qNjY_}@VQ zYzu-I6!Yc4?>TO9)KiYa<4aX$M}zz-UQh^`34&Wf)&vz)Sr|Oh>-m3G_rmx28)7ft zA9#^pj)RK=bS`)w9pwB!3g#Tvy5jo_!yZ}&idY?IK>2{vwTu2De<{rmf*kEW zF(~>!7TJ6Zw^~gmv;PDC4|85fE29NrYx5Zoxk- zoX>BaoX*;&WhH191^#+Y5rHiJZGKoh!f5OIp}P>~&hR0T*ddH)TzBx=q8fRWDDBeW zmH!FGd9HKymdpc2qo%$iKj)SF;NSf+M+4kM{gEG+7v!z)`0=k(=mM_*nfzBD32MN2 zTORQA0{o|ne2@NLmdk}l(c1hB4)zE=^p5AhBDxrEqV1;yM|rt0Un~ZNW22ixZ)LQk z=y&@^=KL8zo@r2XoBfYc=CsI*enoxT3f_kC1D?Eb1y#^6PJjH#OlKpXhOH?dR{@Zi zz=|RuNbe?GE$*6|(-=uSMv!FPq6_0@XKVzs8BgCuJu)R?87u@6XFlK+tq@7vHxv(B zG{xnR>Aj^hOfmrqff5zyQ~admRVe5}6AaOzzO4?SHK1(h#yf||fGtm$DVD9gCca?j zwvDvO+(~rONYf1d3;HfNdE@Yv&CREH-uA<4-nr0V16S#{TlmOt&)RNHGH9o~c4%;D z_==%;tnacl@jsJav6xJ4XF;m%ec0)P6Pnc z?pwUExp>Q_Rm)fOG?y;jvT5n2Rg0Hz+S1&#u@wYs#~4iWT1PHC+~J=2>AwTmt+>MV zz&;OrGoSyz4tt~(8+jJk=L0*7jjZ8bzM1}dXE{GDyPiN=m5=CmA|LrQ3;A@$Yfk2w zuJji1>CE55^I|?rCZ#Xsc^RMOd?xqbh=L`g?*k9TnXcnAT|bXqE@o``xa|PgP;-P} zBfQwZV`r1_gtEo!Ub!aT*grN(EU6hcue`jESZ8yye?-k&3H)cNOEITU(n!^{jdh4==(X(i@Ek~-qkl`4tW2tGb~2qjm@iuF&+rd z^pB*1jd4=*6r;+@KSO!7w_SeS@N3MjNJ~SptZXl3Uqar=c#U2)x`=l553e`5Sae0- zXuo=JYg(7uqB>l(M=?riq$Y8LVYI}?om;jvNA4i6=%!eY{uGV6?N$ZQT zoVN9ijVabJHqxg!fnuE7P(XbaVH# zHLs+NN4eP7bTqQyx#e3lG`!xiz3xALqP5b!yEwu`GA2M?bNY-~$_Z{!P5o0@CN&;Z5$n&E9t zLi=OH@SI*B-lkCe=7sUd&Y}2EsSzR{jh!eVq&=)hnWm$!9AtCt+{P@ z1d=M2>pBzTICin0G*tLia8tj0kE>!#*`IXR3ORwMm3gu$!Kr)aVQj9Zuz*om1dxInOX4h{8fYi>TB`(H2~iHGNcjC5f+ z)jThIS=`A+<(nz1e!h*X+OV0v6u)Ql4}y{D+taw$pW<86zp6)n+4C#7@8y&5Sq+o)AbN3k1Rv_CN?b;jo0TA9l==u>Vbbx4Pdl^EC4$dHI2y))uWr|Jm+yY} zR+~QiD8AsfR?gt-F?>BTc<~*6Z~NrK+k5XaAcm6-dGe5hZi1xb_#C^Z^DPJGHCfMe zF_+ijb5HK<4qO-l5nSk`S>^IKP*!`f&q6ImXz$@lkLD6bvX{2Lk*%C#l;GB{NPePesH+_E@A zEvlVE{6ctVhMw2p~J#1NzP z`oyzGKcQIEmf6NLR}0GvD2S+-zUv7*q9hQ^3ji*7!!953 zLeLM};kMbqhL2#jh+J^Jb@XjQ#E@1smK7B*>%hv|7^UxCYg-^(L~9uPmB+U|bRoa{ z`r_(8K7>ad(x7iSwR{jo`8K?`F?z$zese29w0m~3P*t_7Pn=&(9R_(~6;{WBt(sx_ zYeBIl(J0R;Da-Rm11iHQCWqC>&aZNg=8?${upLIaqQ;kJC~`^u=KDC(-Jn<#?NZ#>~QBM|O=Z^yU-saG>)2Lz*bmp1*oCAiwI4+a+@ zL^UYGMj0(Ui08i1-*yLqK!DZOt&g`azKM)K&7q{KrP>Ok^?@G>k#>U8k+gRDU0PFx zei*Y8P&}~X3)n-lq^gA38`N{Fx|GUCeNs+@VwStSNvTwuz(z~hx80>-wkS#6Vh}92 zx>owlH(?(MFMs<9pl7$U_Z@dYt#-iww&};KUpfZ4LY8T6=|_3q5idEyKS1~>&*=bX z)5hNBv)`TB9c`=OW{FixI7o&KifrL_Y8bjMCpnLYr3lZFCwb{mo;rzPdNCL#+z zwySiQdA?HFU@KT=LS5R|coYDTm}aNF3RAMp5`;z@zJy&dcf zVZT)2$n$gb7oGCs{>7;}^wxjWNuX~5tqcJj5rA{b>$kp>HUikb2|PL70wBjICLH)XcwVVb(KbwmKTGriuhWXi45%MygncCsA!WmiVNS)W zY08@Gw|xR58yqv%0Qq?iIs+O!$#(Pnk;%7DP%PW?NtH^1)gV{UMaoX;Sf_O4`!Nlur;n8bye%9HtkzXI8Ke4|Vl!ZDy&07*}idyIJ2DL2F#}&}ZRW|S$u&{zAx}geVczhkpPKG`)9FK}l`a-F^>>xra}%W1?;;hF=}1-2 z&2!#^?hEMV!xXWHqHs_^-W0V8m45f<$X3y^HuG3hNCUq`{aHPxSvT8$lVWOzlDd$6 z*6eK#jGv!%r!h%Lo}Z=S$>c-WrFvv8h8Bncb3wW$Y9$IUgF#+E4{5b*N>7CAHm|t1hHXv)_17<x;TWq zvnpc4L{z4!5mTOi4P0tq4jHRKI0Nt~8>`O~$wL}G4=An>zn0?1k~7$3Ea5abnxzZ< zfit8Fea1pr_?6+&!R*kQzyr7!UaAJ5N9t!DCplf}yn5~og4ZE}7ET1{2Zm88XC3%5 zOzGJZFc|PO&)wH176-(T132mH5n)2%eDEf??rpcV^Zdv0=%&j65~_GbVtfj-6UCot zx~%|zOjE%Msjb}T@0~`j3Z4+TFfY1G0zJ}$GZcyeq85x7NNC`(^$V{9L$dMWG>7@n z3Buw7_kBbWrYIy6ry&y|E~<{;NPTPA2wXEDB0kBl;egX}RbO+V$4ORJ0stSZzZKl+ z_MwT`IrXX2FrXE>r~tC2$J458>PnT~J9P1@N`H7t;Ov`H*>f)N`O7C1j0hZ@p91Yy zL9?}a|71e@go;jRCvdO})OhF`P05rpbs=pDeC4^eq<>@~DdTA<<4HAIt|-?@;Bx}0 zIGZU`Ivvo}44J-az$P|KyXzKJDmV*+{{UT4b5Yt~x2O<-sRAGh(OL!N(F|*S_y3E6iknYXR?6k(QSy_i*Dv64N&>y+IZ4>dCtn=a*2{ueYBIor2 zO5DFchXMQPr}|cy{B&xGNthC@6KxM^&sWFNt|H8iB`7p_pvf0jSAvsq;9gx3tgwi; zn-rC%Q>*#H%(`gac_=VZ$x}^0>?$GD(;cHjSqZW=H0boSWB*`06p%C2MdclC+aRZk zdW)!+S4fX|*(E^$*c1AxMsJzm748j*im;^KZYGO_MsIEk&~`|`z*-RpxCd88x4IH@ zh4NvvQn-qXh-^XX!Hq+^dvPZbzgs&Wr3m9L``r&g;L9NkdYsv1U$}wf8qlSsvP4!} zJtUm<>WN1pFGp0bnw~otp@WHh(%d}9wodbw1Gzn^6&Xy0#7bJgI2SA^2|fM{se3c$ zCYHt3r>U*TJw4i;Bb6kInw3Q-K)irR`=TmdtT*zYz06g$t>fk<%dyQ6mIR57Q@HQu1w%z%IyifcbG zExOE(0Wm$@R-C!eU`^8qVNkZU4el}PA7qQC*9qu}L%^wuapa$S5s($r(AMW!W1$7QbON;F;X$2@Xl z1dJ+{=>3sK|43Hgi3dzrbWBB;h{6Pwv5I4!1+q{N8e9KpMvPE%4b0(k?{`Q_p+IM; zpcoh-1s+)H&t>a)c3;ytLfyNv@U;~6kW8ZE0V!~ez9oTvhabC2%R1e)KV8eSg7qlM zSLg(ZxYUd8k{{2$Kn2$6*`xM+Sh)IsSat2R6NpscVzNPJkb`no`t#X2(#|4*@j1%n zns(Ya-!SijM}f*pu74tX0Ya;Jp#+#vpWAoweID7*J^Em-4_e&`D?N**FpVhmPi9v~ z&|HnuEYJZ0%mnL6;DR{EeRSA{{^=}r zq$KP=^v`8)m}6gX)z1C;f6cR&fO#~e}+R_I^Irf@{2rOIS5 zsV8RgLKQ3=A)Vn}1i-US`NDYpi&r-;qQfy#TT6q~6Od5yzH5WHLKn!w$^xn$9L=f~k3L2d^{-_b(=57^zXIWEw)gTJ z9qg3h&1ov!6BuoSOIyM*ydFdUdiKfJEY<6aAt+u|sEQ)v!K*{0jQTgOZ!IYI!s$wm zCXL$TjUxItvuXFjK5p>{4wZ}-#~y{LVD+dff%*BZY+51TC+1Mz6GDt*^l}oe6i7+r zQu?>E_mCRVq3;uN2+s)-4T7vfo38>Vj>bB!e?(q(rWCZ9Mx*t>9{#pe(m|vk$tInf{Z^PE3G?Olyq?`#)hKXjM#o zh`rw4y*~$>D?ew26otL0%ASivp?KOd0uK#T55MLm8@CN!= zlnkBh`p=gR!F!Av>G7T^i@OU9jjDfLF}Duae4SY_o^DfC}1ojKm* zqyV~u7iif>1y}!dMrF~?b#1cAvkL9d9+d(EmAwA&MdN2y}mMrjC1Dg4x7ft|5n| z68kslti<|+2smJriIsBT@uL2h>;b3)iBSC&Hkk(Dvq(A}XADLUvKF1H`d_mXUC;Z! zWj9hg`PZ|%)6BM7Dsr|S^#1T0*{!pN@_)}h3gNF*9YJjjyBh-gI$4|2V3|e`H)@2^ z|B)R}3;56dlcUdYK)10r|cn%%^ zE4TN@9sHWzyWzN_&$PVBc`nzeR=76w7f;^5J{s)|AA0b?3%D6DwrGgodT?{|QuoIi zB+!)@+;jvt0c}NvO*9e(8o6!wxQwdLczA;4qR5MtXYK@753tk5U~r{543D3>&5k!Ou5}x5>eek3<~P!N r6;9oW`dWIm=Y>tY&vA2j>P{2^@csytiPtEd8=ks(h`!=ATt4_e>ci%e diff --git a/tests/fixtures/build/echo.wasm b/tests/fixtures/build/echo.wasm deleted file mode 100644 index d2f92ba7ba5b79df00d921e5d448522c6f822cbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49850 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

Qqsm!;EUrNXq*Ga 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

kyGX(poCr6dbpZ9=qRzKS8|m@!{oW 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 PN>wii{1@J8dG-GR2uC8= literal 0 HcmV?d00001 diff --git a/tests/fixtures/echo/Cargo.toml b/tests/fixtures/echo/Cargo.toml deleted file mode 100644 index 51d5eb6c..00000000 --- a/tests/fixtures/echo/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "echo" -version = "0.1.0" -edition = "2021" - -[dependencies] diff --git a/tests/fixtures/echo/src/main.rs b/tests/fixtures/echo/src/main.rs deleted file mode 100644 index ee274407..00000000 --- a/tests/fixtures/echo/src/main.rs +++ /dev/null @@ -1,7 +0,0 @@ -use std::io::{Read, Write}; - -fn main() { - let mut buf: Vec = vec![]; - std::io::stdin().read_to_end(&mut buf).unwrap(); - std::io::stdout().write_all(&buf).unwrap(); -} diff --git a/tests/fixtures/wasm_api_v1/Cargo.toml b/tests/fixtures/wasm_api_v1/Cargo.toml new file mode 100644 index 00000000..05470971 --- /dev/null +++ b/tests/fixtures/wasm_api_v1/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "wasm_api_v1" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0" +shopify_function_wasm_api = "0.1.0" diff --git a/tests/fixtures/wasm_api_v1/src/main.rs b/tests/fixtures/wasm_api_v1/src/main.rs new file mode 100644 index 00000000..f4568195 --- /dev/null +++ b/tests/fixtures/wasm_api_v1/src/main.rs @@ -0,0 +1,20 @@ +use anyhow::{anyhow, Result}; + +fn main() -> Result<()> { + let mut ctx = shopify_function_wasm_api::Context::new(); + let input = ctx.input_get()?; + let str = input + .get_obj_prop("hello") + .as_string() + .ok_or_else(|| anyhow!("Should be string"))?; + ctx.write_object( + |ctx| { + ctx.write_utf8_str("bye")?; + ctx.write_utf8_str(&str)?; + Ok(()) + }, + 1, + )?; + ctx.finalize_output()?; + Ok(()) +} diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index b429fc12..a12e95bc 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -379,24 +379,27 @@ mod tests { } #[test] - fn run_wasm_api_function() -> Result<()> { + fn run_wasm_api_v1_function() -> Result<()> { + let trampolined_module = assert_fs::NamedTempFile::new("wasm_api_v1.trampolined.wasm")?; + test_utils::process_with_v1_trampoline( + "tests/fixtures/build/wasm_api_v1.wasm", + &trampolined_module, + )?; + let mut cmd = Command::cargo_bin("function-runner")?; - let input_file = temp_input(json!({ - "test": "echo" - }))?; + let input_file = temp_input(json!({"hello": "world"}))?; - cmd.args(["--function", "tests/fixtures/build/echo.trampolined.wasm"]) + cmd.arg("--function") + .arg(trampolined_module.as_os_str()) .arg("--json") .arg("--input") .arg(input_file.as_os_str()) .stdout(Stdio::piped()) - .spawn() - .expect("Failed to spawn child process") - .wait_with_output() - .expect("Failed waiting for output"); + .spawn()? + .wait_with_output()?; cmd.assert().success(); - cmd.assert().stdout(contains("\"test\": \"echo\"")); + cmd.assert().stdout(contains("world")); Ok(()) } From a0a60c0499938b07e632bc2ece51a4d5450de804 Mon Sep 17 00:00:00 2001 From: Jeff Charles Date: Thu, 14 Aug 2025 16:09:13 -0400 Subject: [PATCH 2/2] Delete accidentally added v2 provider --- providers/shopify_function_v2.wasm | Bin 75560 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 providers/shopify_function_v2.wasm diff --git a/providers/shopify_function_v2.wasm b/providers/shopify_function_v2.wasm deleted file mode 100755 index 3d5610e95db5861e0acbfb43799c95b916647615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75560 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≶yqX-1EdSHhk8;(yhnRdM7$?^Qb2L`OixNFD`mG9 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