From caf49f845f1112a242f93f6860438e8ada324d6c Mon Sep 17 00:00:00 2001 From: Pavel Logan Dikov <66369686+paveldikov@users.noreply.github.com> Date: Sun, 9 Nov 2025 14:12:40 +0000 Subject: [PATCH] Use `.rcdata` to store trampoline type + path to python binary (#15068) `.rsrc` is the idiomatic way of storing metadata and non-code resources in PE binaries. This should make the resulting binaries more robust as they are no longer dependent on the exact location of a certain magic number. Addresses: #15022 ## Test Plan Existing integration test for `uv-trampoline-builder` + addition to ensure robustness to code signing. --------- Co-authored-by: samypr100 <3933065+samypr100@users.noreply.github.com> Co-authored-by: Zanie Blue --- Cargo.lock | 75 +++ Cargo.toml | 3 +- crates/uv-python/src/managed.rs | 11 +- crates/uv-trampoline-builder/Cargo.toml | 6 +- crates/uv-trampoline-builder/src/lib.rs | 560 ++++++++++++------ crates/uv-trampoline/Cargo.toml | 1 + crates/uv-trampoline/README.md | 26 +- crates/uv-trampoline/src/bounce.rs | 235 +++----- .../uv-trampoline-aarch64-console.exe | Bin 39424 -> 38912 bytes .../trampolines/uv-trampoline-aarch64-gui.exe | Bin 40448 -> 39936 bytes .../uv-trampoline-i686-console.exe | Bin 34304 -> 32768 bytes .../trampolines/uv-trampoline-i686-gui.exe | Bin 35328 -> 32768 bytes .../uv-trampoline-x86_64-console.exe | Bin 40960 -> 38912 bytes .../trampolines/uv-trampoline-x86_64-gui.exe | Bin 41984 -> 39936 bytes crates/uv/src/commands/project/run.rs | 2 +- crates/uv/src/commands/python/install.rs | 16 +- 16 files changed, 565 insertions(+), 370 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 78dfb8597..0345601d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1086,6 +1086,15 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +[[package]] +name = "deranged" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", +] + [[package]] name = "derive_arbitrary" version = "1.4.1" @@ -2641,6 +2650,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -2838,6 +2853,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -2996,6 +3021,12 @@ dependencies = [ "zerovec", ] +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -3304,6 +3335,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "rcgen" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fae430c6b28f1ad601274e78b7dffa0546de0b73b4cd32f46723c0c2a16f7a5" +dependencies = [ + "pem", + "ring", + "rustls-pki-types", + "time", + "yasna", +] + [[package]] name = "rctree" version = "0.5.0" @@ -4595,6 +4639,25 @@ dependencies = [ "tikv-jemalloc-sys", ] +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -6663,9 +6726,12 @@ dependencies = [ "assert_cmd", "assert_fs", "fs-err", + "rcgen", + "tempfile", "thiserror 2.0.17", "uv-fs", "which", + "windows 0.59.0", "zip", ] @@ -7460,6 +7526,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + [[package]] name = "yoke" version = "0.8.0" diff --git a/Cargo.toml b/Cargo.toml index d93880be4..a9aad6bea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -196,7 +196,7 @@ uuid = { version = "1.16.0" } version-ranges = { git = "https://github.com/astral-sh/pubgrub", rev = "d8efd77673c9a90792da9da31b6c0da7ea8a324b" } walkdir = { version = "2.5.0" } which = { version = "8.0.0", features = ["regex"] } -windows = { version = "0.59.0", features = ["Win32_Globalization", "Win32_Security", "Win32_System_Console", "Win32_System_Kernel", "Win32_System_Diagnostics_Debug", "Win32_Storage_FileSystem", "Win32_System_Registry", "Win32_System_IO", "Win32_System_Ioctl"] } +windows = { version = "0.59.0", features = ["std", "Win32_Globalization", "Win32_System_LibraryLoader", "Win32_System_Console", "Win32_System_Kernel", "Win32_System_Diagnostics_Debug", "Win32_Storage_FileSystem", "Win32_Security", "Win32_System_Registry", "Win32_System_IO", "Win32_System_Ioctl"] } windows-registry = { version = "0.5.0" } wiremock = { version = "0.6.4" } wmi = { version = "0.16.0", default-features = false } @@ -216,6 +216,7 @@ hyper-util = { version = "0.1.8", features = ["tokio"] } ignore = { version = "0.4.23" } insta = { version = "1.40.0", features = ["json", "filters", "redactions"] } predicates = { version = "3.1.2" } +rcgen = { version = "0.14.5", features = ["crypto", "pem", "ring"], default-features = false } similar = { version = "2.6.0" } temp-env = { version = "0.3.6" } test-case = { version = "3.3.1" } diff --git a/crates/uv-python/src/managed.rs b/crates/uv-python/src/managed.rs index d9ae5a336..558a5a1e2 100644 --- a/crates/uv-python/src/managed.rs +++ b/crates/uv-python/src/managed.rs @@ -10,7 +10,6 @@ use std::str::FromStr; use fs_err as fs; use itertools::Itertools; -use same_file::is_same_file; use thiserror::Error; use tracing::{debug, warn}; use uv_preview::{Preview, PreviewFeatures}; @@ -22,7 +21,7 @@ use uv_platform::{Error as PlatformError, Os}; use uv_platform::{LibcDetectionError, Platform}; use uv_state::{StateBucket, StateStore}; use uv_static::EnvVars; -use uv_trampoline_builder::{Launcher, windows_python_launcher}; +use uv_trampoline_builder::{Launcher, LauncherKind}; use crate::downloads::{Error as DownloadError, ManagedPythonDownload}; use crate::implementation::{ @@ -649,12 +648,12 @@ impl ManagedPythonInstallation { /// [`create_bin_link`]. pub fn is_bin_link(&self, path: &Path) -> bool { if cfg!(unix) { - is_same_file(path, self.executable(false)).unwrap_or_default() + same_file::is_same_file(path, self.executable(false)).unwrap_or_default() } else if cfg!(windows) { let Some(launcher) = Launcher::try_from_path(path).unwrap_or_default() else { return false; }; - if !matches!(launcher.kind, uv_trampoline_builder::LauncherKind::Python) { + if !matches!(launcher.kind, LauncherKind::Python) { return false; } // We canonicalize the target path of the launcher in case it includes a minor version @@ -922,6 +921,8 @@ pub fn create_link_to_executable(link: &Path, executable: &Path) -> Result<(), E }), } } else if cfg!(windows) { + use uv_trampoline_builder::windows_python_launcher; + // TODO(zanieb): Install GUI launchers as well let launcher = windows_python_launcher(executable, false)?; @@ -938,7 +939,7 @@ pub fn create_link_to_executable(link: &Path, executable: &Path) -> Result<(), E }) } } else { - unimplemented!("Only Windows and Unix systems are supported.") + unimplemented!("Only Windows and Unix are supported.") } } diff --git a/crates/uv-trampoline-builder/Cargo.toml b/crates/uv-trampoline-builder/Cargo.toml index be38ddd82..8736a0bd1 100644 --- a/crates/uv-trampoline-builder/Cargo.toml +++ b/crates/uv-trampoline-builder/Cargo.toml @@ -23,14 +23,18 @@ workspace = true [dependencies] uv-fs = { workspace = true } - fs-err = {workspace = true } +tempfile = { workspace = true } thiserror = { workspace = true } zip = { workspace = true } +[target.'cfg(target_os = "windows")'.dependencies] +windows = { workspace = true } + [dev-dependencies] assert_cmd = { workspace = true } assert_fs = { workspace = true } anyhow = { workspace = true } fs-err = { workspace = true } +rcgen = { workspace = true } which = { workspace = true } diff --git a/crates/uv-trampoline-builder/src/lib.rs b/crates/uv-trampoline-builder/src/lib.rs index 1a25b9454..3942c9058 100644 --- a/crates/uv-trampoline-builder/src/lib.rs +++ b/crates/uv-trampoline-builder/src/lib.rs @@ -1,12 +1,9 @@ -use std::io::{self, Cursor, Read, Seek, Write}; +use std::io; use std::path::{Path, PathBuf}; use std::str::Utf8Error; use fs_err::File; use thiserror::Error; -use uv_fs::Simplified; -use zip::ZipWriter; -use zip::write::SimpleFileOptions; #[cfg(all(windows, target_arch = "x86"))] const LAUNCHER_I686_GUI: &[u8] = @@ -32,136 +29,150 @@ const LAUNCHER_AARCH64_GUI: &[u8] = const LAUNCHER_AARCH64_CONSOLE: &[u8] = include_bytes!("../../uv-trampoline/trampolines/uv-trampoline-aarch64-console.exe"); -// See `uv-trampoline::bounce`. These numbers must match. -const PATH_LENGTH_SIZE: usize = size_of::(); -const MAX_PATH_LENGTH: u32 = 32 * 1024; -const MAGIC_NUMBER_SIZE: usize = 4; +// https://learn.microsoft.com/en-us/windows/win32/menurc/resource-types +#[cfg(windows)] +const RT_RCDATA: u16 = 10; + +// Resource IDs matching uv-trampoline +#[cfg(windows)] +const RESOURCE_TRAMPOLINE_KIND: windows::core::PCWSTR = windows::core::w!("UV_TRAMPOLINE_KIND"); +#[cfg(windows)] +const RESOURCE_PYTHON_PATH: windows::core::PCWSTR = windows::core::w!("UV_PYTHON_PATH"); +// Note: This does not need to be looked up as a resource, as we rely on `zipimport` +// to do the loading work. Still, keeping the content under a resource means that it +// sits nicely under the PE format. +#[cfg(windows)] +const RESOURCE_SCRIPT_DATA: windows::core::PCWSTR = windows::core::w!("UV_SCRIPT_DATA"); #[derive(Debug)] pub struct Launcher { pub kind: LauncherKind, pub python_path: PathBuf, - payload: Vec, + pub script_data: Option>, } impl Launcher { + /// Attempt to read [`Launcher`] metadata from a trampoline executable file. + /// + /// On Unix, this always returns [`None`]. Trampolines are a Windows-specific feature and cannot + /// be read on other platforms. + #[cfg(not(windows))] + pub fn try_from_path(_path: &Path) -> Result, Error> { + Ok(None) + } + /// Read [`Launcher`] metadata from a trampoline executable file. /// /// Returns `Ok(None)` if the file is not a trampoline executable. /// Returns `Err` if the file looks like a trampoline executable but is formatted incorrectly. - /// - /// Expects the following metadata to be at the end of the file: - /// - /// ```text - /// - file path (no greater than 32KB) - /// - file path length (u32) - /// - magic number(4 bytes) - /// ``` - /// - /// This should only be used on Windows, but should just return `Ok(None)` on other platforms. - /// - /// This is an implementation of [`uv-trampoline::bounce::read_trampoline_metadata`] that - /// returns errors instead of panicking. Unlike the utility there, we don't assume that the - /// file we are reading is a trampoline. - #[allow(clippy::cast_possible_wrap)] + #[cfg(windows)] pub fn try_from_path(path: &Path) -> Result, Error> { - let mut file = File::open(path)?; + use std::os::windows::ffi::OsStrExt; + use windows::Win32::System::LibraryLoader::LOAD_LIBRARY_AS_DATAFILE; + use windows::Win32::System::LibraryLoader::LoadLibraryExW; - // Read the magic number - let Some(kind) = LauncherKind::try_from_file(&mut file)? else { + let path_str = path + .as_os_str() + .encode_wide() + .chain(std::iter::once(0)) + .collect::>(); + + // SAFETY: winapi call; null-terminated strings + #[allow(unsafe_code)] + let Some(module) = (unsafe { + LoadLibraryExW( + windows::core::PCWSTR(path_str.as_ptr()), + None, + LOAD_LIBRARY_AS_DATAFILE, + ) + .ok() + }) else { return Ok(None); }; - // Seek to the start of the path length. - let path_length_offset = (MAGIC_NUMBER_SIZE + PATH_LENGTH_SIZE) as i64; - file.seek(io::SeekFrom::End(-path_length_offset)) - .map_err(|err| { - Error::InvalidLauncherSeek("path length".to_string(), path_length_offset, err) - })?; + let result = (|| { + let Some(kind_data) = read_resource(module, RESOURCE_TRAMPOLINE_KIND) else { + return Ok(None); + }; + let Some(kind) = LauncherKind::from_resource_value(kind_data[0]) else { + return Err(Error::UnprocessableMetadata); + }; - // Read the path length - let mut buffer = [0; PATH_LENGTH_SIZE]; - file.read_exact(&mut buffer) - .map_err(|err| Error::InvalidLauncherRead("path length".to_string(), err))?; + let Some(path_data) = read_resource(module, RESOURCE_PYTHON_PATH) else { + return Ok(None); + }; + let python_path = PathBuf::from( + String::from_utf8(path_data).map_err(|err| Error::InvalidPath(err.utf8_error()))?, + ); - let path_length = { - let raw_length = u32::from_le_bytes(buffer); + let script_data = read_resource(module, RESOURCE_SCRIPT_DATA); - if raw_length > MAX_PATH_LENGTH { - return Err(Error::InvalidPathLength(raw_length)); - } + Ok(Some(Self { + kind, + python_path, + script_data, + })) + })(); - // SAFETY: Above we guarantee the length is less than 32KB - raw_length as usize + // SAFETY: winapi call; handle is known to be valid. + #[allow(unsafe_code)] + unsafe { + windows::Win32::Foundation::FreeLibrary(module) + .map_err(|err| Error::Io(io::Error::from_raw_os_error(err.code().0)))?; }; - // Seek to the start of the path - let path_offset = (MAGIC_NUMBER_SIZE + PATH_LENGTH_SIZE + path_length) as i64; - file.seek(io::SeekFrom::End(-path_offset)).map_err(|err| { - Error::InvalidLauncherSeek("executable path".to_string(), path_offset, err) - })?; - - // Read the path - let mut buffer = vec![0u8; path_length]; - file.read_exact(&mut buffer) - .map_err(|err| Error::InvalidLauncherRead("executable path".to_string(), err))?; - - let path = PathBuf::from( - String::from_utf8(buffer).map_err(|err| Error::InvalidPath(err.utf8_error()))?, - ); - - #[allow(clippy::cast_possible_truncation)] - let file_size = { - let raw_length = file - .seek(io::SeekFrom::End(0)) - .map_err(|e| Error::InvalidLauncherSeek("size probe".into(), 0, e))?; - - if raw_length > usize::MAX as u64 { - return Err(Error::InvalidDataLength(raw_length)); - } - - // SAFETY: Above we guarantee the length is less than uszie - raw_length as usize - }; - - // Read the payload - file.seek(io::SeekFrom::Start(0)) - .map_err(|e| Error::InvalidLauncherSeek("rewind".into(), 0, e))?; - let payload_len = - file_size.saturating_sub(MAGIC_NUMBER_SIZE + PATH_LENGTH_SIZE + path_length); - let mut buffer = vec![0u8; payload_len]; - file.read_exact(&mut buffer) - .map_err(|err| Error::InvalidLauncherRead("payload".into(), err))?; - - Ok(Some(Self { - kind, - payload: buffer, - python_path: path, - })) + result } - pub fn write_to_file(self, file: &mut File) -> Result<(), Error> { + /// Write this trampoline launcher to a file. + /// + /// On Unix, this always returns [`Error::NotWindows`]. Trampolines are a Windows-specific + /// feature and cannot be written on other platforms. + #[cfg(not(windows))] + pub fn write_to_file(self, _file: &mut File, _is_gui: bool) -> Result<(), Error> { + Err(Error::NotWindows) + } + + /// Write this trampoline launcher to a file. + #[cfg(windows)] + pub fn write_to_file(self, file: &mut File, is_gui: bool) -> Result<(), Error> { + use std::io::Write; + use uv_fs::Simplified; + let python_path = self.python_path.simplified_display().to_string(); - if python_path.len() > MAX_PATH_LENGTH as usize { - return Err(Error::InvalidPathLength( - u32::try_from(python_path.len()).expect("path length already checked"), - )); + // Create temporary file for the base launcher + let temp_dir = tempfile::TempDir::new()?; + let temp_file = temp_dir + .path() + .join(format!("uv-trampoline-{}.exe", std::process::id())); + + // Write the launcher binary + fs_err::write(&temp_file, get_launcher_bin(is_gui)?)?; + + // Write resources + let resources = &[ + ( + RESOURCE_TRAMPOLINE_KIND, + &[self.kind.to_resource_value()][..], + ), + (RESOURCE_PYTHON_PATH, python_path.as_bytes()), + ]; + if let Some(script_data) = self.script_data { + let mut all_resources = resources.to_vec(); + all_resources.push((RESOURCE_SCRIPT_DATA, &script_data)); + write_resources(&temp_file, &all_resources)?; + } else { + write_resources(&temp_file, resources)?; } - let mut launcher: Vec = Vec::with_capacity( - self.payload.len() + python_path.len() + PATH_LENGTH_SIZE + MAGIC_NUMBER_SIZE, - ); - launcher.extend_from_slice(&self.payload); - launcher.extend_from_slice(python_path.as_bytes()); - launcher.extend_from_slice( - &u32::try_from(python_path.len()) - .expect("file path should be smaller than 4GB") - .to_le_bytes(), - ); - launcher.extend_from_slice(self.kind.magic_number()); + // Read back the complete file + let launcher = fs_err::read(&temp_file)?; + fs_err::remove_file(&temp_file)?; + // Then write it to the handle file.write_all(&launcher)?; + Ok(()) } @@ -169,8 +180,8 @@ impl Launcher { pub fn with_python_path(self, path: PathBuf) -> Self { Self { kind: self.kind, - payload: self.payload, python_path: path, + script_data: self.script_data, } } } @@ -187,45 +198,21 @@ pub enum LauncherKind { } impl LauncherKind { - /// Return the magic number for this [`LauncherKind`]. - const fn magic_number(self) -> &'static [u8; 4] { + #[cfg(windows)] + fn to_resource_value(self) -> u8 { match self { - Self::Script => b"UVSC", - Self::Python => b"UVPY", + Self::Script => 1, + Self::Python => 2, } } - /// Read a [`LauncherKind`] from 4 byte buffer. - /// - /// If the buffer does not contain a matching magic number, `None` is returned. - fn try_from_bytes(bytes: [u8; MAGIC_NUMBER_SIZE]) -> Option { - if &bytes == Self::Script.magic_number() { - return Some(Self::Script); + #[cfg(windows)] + fn from_resource_value(value: u8) -> Option { + match value { + 1 => Some(Self::Script), + 2 => Some(Self::Python), + _ => None, } - if &bytes == Self::Python.magic_number() { - return Some(Self::Python); - } - None - } - - /// Read a [`LauncherKind`] from a file handle, based on the magic number. - /// - /// This will mutate the file handle, seeking to the end of the file. - /// - /// If the file cannot be read, an [`io::Error`] is returned. If the path is not a launcher, - /// `None` is returned. - #[allow(clippy::cast_possible_wrap)] - pub fn try_from_file(file: &mut File) -> Result, Error> { - // If the file is less than four bytes, it's not a launcher. - let Ok(_) = file.seek(io::SeekFrom::End(-(MAGIC_NUMBER_SIZE as i64))) else { - return Ok(None); - }; - - let mut buffer = [0; MAGIC_NUMBER_SIZE]; - file.read_exact(&mut buffer) - .map_err(|err| Error::InvalidLauncherRead("magic number".to_string(), err))?; - - Ok(Self::try_from_bytes(buffer)) } } @@ -234,25 +221,22 @@ impl LauncherKind { pub enum Error { #[error(transparent)] Io(#[from] io::Error), - #[error("Only paths with a length up to 32KB are supported but found a length of {0} bytes")] - InvalidPathLength(u32), - #[error("Only data with a length up to usize is supported but found a length of {0} bytes")] - InvalidDataLength(u64), #[error("Failed to parse executable path")] InvalidPath(#[source] Utf8Error), - #[error("Failed to seek to {0} at offset {1}")] - InvalidLauncherSeek(String, i64, #[source] io::Error), - #[error("Failed to read launcher {0}")] - InvalidLauncherRead(String, #[source] io::Error), #[error( "Unable to create Windows launcher for: {0} (only x86_64, x86, and arm64 are supported)" )] UnsupportedWindowsArch(&'static str), #[error("Unable to create Windows launcher on non-Windows platform")] NotWindows, + #[error("Cannot process launcher metadata from resource")] + UnprocessableMetadata, + #[error("Resources over 2^32 bytes are not supported")] + ResourceTooLarge, } #[allow(clippy::unnecessary_wraps, unused_variables)] +#[cfg(windows)] fn get_launcher_bin(gui: bool) -> Result<&'static [u8], Error> { Ok(match std::env::consts::ARCH { #[cfg(all(windows, target_arch = "x86"))] @@ -283,26 +267,116 @@ fn get_launcher_bin(gui: bool) -> Result<&'static [u8], Error> { arch => { return Err(Error::UnsupportedWindowsArch(arch)); } - #[cfg(not(windows))] - _ => &[], }) } +/// Helper to write Windows PE resources +#[cfg(windows)] +fn write_resources(path: &Path, resources: &[(windows::core::PCWSTR, &[u8])]) -> Result<(), Error> { + // SAFETY: winapi calls; null-terminated strings + #[allow(unsafe_code)] + unsafe { + use std::os::windows::ffi::OsStrExt; + use windows::Win32::System::LibraryLoader::{ + BeginUpdateResourceW, EndUpdateResourceW, UpdateResourceW, + }; + + let path_str = path + .as_os_str() + .encode_wide() + .chain(std::iter::once(0)) + .collect::>(); + let handle = BeginUpdateResourceW(windows::core::PCWSTR(path_str.as_ptr()), false) + .map_err(|err| Error::Io(io::Error::from_raw_os_error(err.code().0)))?; + + for (name, data) in resources { + UpdateResourceW( + handle, + windows::core::PCWSTR(RT_RCDATA as *const _), + *name, + 0, + Some(data.as_ptr().cast()), + u32::try_from(data.len()).map_err(|_| Error::ResourceTooLarge)?, + ) + .map_err(|err| Error::Io(io::Error::from_raw_os_error(err.code().0)))?; + } + + EndUpdateResourceW(handle, false) + .map_err(|err| Error::Io(io::Error::from_raw_os_error(err.code().0)))?; + } + + Ok(()) +} + +/// Safely reads a resource from a PE file +#[cfg(windows)] +fn read_resource( + handle: windows::Win32::Foundation::HMODULE, + name: windows::core::PCWSTR, +) -> Option> { + // SAFETY: winapi calls; null-terminated strings; all pointers are checked. + #[allow(unsafe_code)] + unsafe { + use windows::Win32::System::LibraryLoader::{ + FindResourceW, LoadResource, LockResource, SizeofResource, + }; + // Find the resource + let resource = FindResourceW( + Some(handle), + name, + windows::core::PCWSTR(RT_RCDATA as *const _), + ); + if resource.is_invalid() { + return None; + } + + // Get resource size and data + let size = SizeofResource(Some(handle), resource); + if size == 0 { + return None; + } + let data = LoadResource(Some(handle), resource).ok()?; + let ptr = LockResource(data) as *const u8; + if ptr.is_null() { + return None; + } + + // Copy the resource data into a Vec + Some(std::slice::from_raw_parts(ptr, size as usize).to_vec()) + } +} + +/// Construct a Windows script launcher. +/// +/// On Unix, this always returns [`Error::NotWindows`]. Trampolines are a Windows-specific feature +/// and cannot be created on other platforms. +#[cfg(not(windows))] +pub fn windows_script_launcher( + _launcher_python_script: &str, + _is_gui: bool, + _python_executable: impl AsRef, +) -> Result, Error> { + Err(Error::NotWindows) +} + +/// Construct a Windows script launcher. +/// /// A Windows script is a minimal .exe launcher binary with the python entrypoint script appended as /// stored zip file. /// /// -#[allow(unused_variables)] +#[cfg(windows)] pub fn windows_script_launcher( launcher_python_script: &str, is_gui: bool, python_executable: impl AsRef, ) -> Result, Error> { - // This method should only be called on Windows, but we avoid `#[cfg(windows)]` to retain - // compilation on all platforms. - if cfg!(not(windows)) { - return Err(Error::NotWindows); - } + use std::io::{Cursor, Write}; + + use zip::ZipWriter; + use zip::write::SimpleFileOptions; + + use uv_fs::Simplified; let launcher_bin: &[u8] = get_launcher_bin(is_gui)?; @@ -325,48 +399,84 @@ pub fn windows_script_launcher( let python = python_executable.as_ref(); let python_path = python.simplified_display().to_string(); - let mut launcher: Vec = Vec::with_capacity(launcher_bin.len() + payload.len()); - launcher.extend_from_slice(launcher_bin); - launcher.extend_from_slice(&payload); - launcher.extend_from_slice(python_path.as_bytes()); - launcher.extend_from_slice( - &u32::try_from(python_path.len()) - .expect("file path should be smaller than 4GB") - .to_le_bytes(), - ); - launcher.extend_from_slice(LauncherKind::Script.magic_number()); + // Start with base launcher binary + // Create temporary file for the launcher + let temp_dir = tempfile::TempDir::new()?; + let temp_file = temp_dir + .path() + .join(format!("uv-trampoline-{}.exe", std::process::id())); + fs_err::write(&temp_file, launcher_bin)?; + + // Write resources + let resources = &[ + ( + RESOURCE_TRAMPOLINE_KIND, + &[LauncherKind::Script.to_resource_value()][..], + ), + (RESOURCE_PYTHON_PATH, python_path.as_bytes()), + (RESOURCE_SCRIPT_DATA, &payload), + ]; + write_resources(&temp_file, resources)?; + + // Read back the complete file + // TODO(zanieb): It's weird that we write/read from a temporary file here because in the main + // usage at `write_script_entrypoints` we do the same thing again. We should refactor these + // to avoid repeated work. + let launcher = fs_err::read(&temp_file)?; + fs_err::remove_file(temp_file)?; Ok(launcher) } +/// Construct a Windows Python launcher. +/// +/// On Unix, this always returns [`Error::NotWindows`]. Trampolines are a Windows-specific feature +/// and cannot be created on other platforms. +#[cfg(not(windows))] +pub fn windows_python_launcher( + _python_executable: impl AsRef, + _is_gui: bool, +) -> Result, Error> { + Err(Error::NotWindows) +} + +/// Construct a Windows Python launcher. +/// /// A minimal .exe launcher binary for Python. /// /// Sort of equivalent to a `python` symlink on Unix. -#[allow(unused_variables)] +#[cfg(windows)] pub fn windows_python_launcher( python_executable: impl AsRef, is_gui: bool, ) -> Result, Error> { - // This method should only be called on Windows, but we avoid `#[cfg(windows)]` to retain - // compilation on all platforms. - if cfg!(not(windows)) { - return Err(Error::NotWindows); - } + use uv_fs::Simplified; let launcher_bin: &[u8] = get_launcher_bin(is_gui)?; let python = python_executable.as_ref(); let python_path = python.simplified_display().to_string(); - let mut launcher: Vec = Vec::with_capacity(launcher_bin.len()); - launcher.extend_from_slice(launcher_bin); - launcher.extend_from_slice(python_path.as_bytes()); - launcher.extend_from_slice( - &u32::try_from(python_path.len()) - .expect("file path should be smaller than 4GB") - .to_le_bytes(), - ); - launcher.extend_from_slice(LauncherKind::Python.magic_number()); + // Create temporary file for the launcher + let temp_dir = tempfile::TempDir::new()?; + let temp_file = temp_dir + .path() + .join(format!("uv-trampoline-{}.exe", std::process::id())); + fs_err::write(&temp_file, launcher_bin)?; + + // Write resources + let resources = &[ + ( + RESOURCE_TRAMPOLINE_KIND, + &[LauncherKind::Python.to_resource_value()][..], + ), + (RESOURCE_PYTHON_PATH, python_path.as_bytes()), + ]; + write_resources(&temp_file, resources)?; + + // Read back the complete file + let launcher = fs_err::read(&temp_file)?; + fs_err::remove_file(temp_file)?; Ok(launcher) } @@ -376,6 +486,7 @@ pub fn windows_python_launcher( mod test { use std::io::Write; use std::path::Path; + use std::path::PathBuf; use std::process::Command; use anyhow::Result; @@ -486,6 +597,69 @@ if __name__ == "__main__": format!("#!{executable}") } + /// Creates a self-signed certificate and returns its path. + fn create_temp_certificate(temp_dir: &tempfile::TempDir) -> Result<(PathBuf, PathBuf)> { + use rcgen::{ + CertificateParams, DnType, ExtendedKeyUsagePurpose, KeyPair, KeyUsagePurpose, SanType, + }; + + let mut params = CertificateParams::default(); + params.key_usages.push(KeyUsagePurpose::DigitalSignature); + params + .extended_key_usages + .push(ExtendedKeyUsagePurpose::CodeSigning); + params + .distinguished_name + .push(DnType::OrganizationName, "Astral Software Inc."); + params + .distinguished_name + .push(DnType::CommonName, "uv-test-signer"); + params + .subject_alt_names + .push(SanType::DnsName("uv-test-signer".try_into()?)); + + let private_key = KeyPair::generate()?; + let public_cert = params.self_signed(&private_key)?; + + let public_cert_path = temp_dir.path().join("uv-trampoline-test.crt"); + let private_key_path = temp_dir.path().join("uv-trampoline-test.key"); + fs_err::write(public_cert_path.as_path(), public_cert.pem())?; + fs_err::write(private_key_path.as_path(), private_key.serialize_pem())?; + + Ok((public_cert_path, private_key_path)) + } + + /// Signs the given binary using `PowerShell`'s `Set-AuthenticodeSignature` with a temporary certificate. + fn sign_authenticode(bin_path: impl AsRef) { + let temp_dir = tempfile::TempDir::new().expect("Failed to create temporary directory"); + let (public_cert, private_key) = + create_temp_certificate(&temp_dir).expect("Failed to create self-signed certificate"); + + // Instead of powershell, we rely on pwsh which supports CreateFromPemFile. + Command::new("pwsh") + .args([ + "-NoProfile", + "-NonInteractive", + "-Command", + &format!( + r" + $ErrorActionPreference = 'Stop' + Import-Module Microsoft.PowerShell.Security + $cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::CreateFromPemFile('{}', '{}') + Set-AuthenticodeSignature -FilePath '{}' -Certificate $cert; + ", + public_cert.display().to_string().replace('\'', "''"), + private_key.display().to_string().replace('\'', "''"), + bin_path.as_ref().display().to_string().replace('\'', "''"), + ), + ]) + .env_remove("PSModulePath") + .assert() + .success(); + + println!("Signed binary: {}", bin_path.as_ref().display()); + } + #[test] fn console_script_launcher() -> Result<()> { // Create Temp Dirs @@ -540,6 +714,17 @@ if __name__ == "__main__": assert!(launcher.kind == LauncherKind::Script); assert!(launcher.python_path == python_executable_path); + // Now code-sign the launcher and verify that it still works. + sign_authenticode(console_bin_path.path()); + + let stdout_predicate = "Hello from uv-trampoline-console.exe\r\n"; + let stderr_predicate = "Hello from uv-trampoline-console.exe\r\n"; + Command::new(console_bin_path.path()) + .assert() + .success() + .stdout(stdout_predicate) + .stderr(stderr_predicate); + Ok(()) } @@ -556,7 +741,9 @@ if __name__ == "__main__": let console_launcher = windows_python_launcher(&python_executable_path, false)?; // Create Launcher - File::create(console_bin_path.path())?.write_all(console_launcher.as_ref())?; + { + File::create(console_bin_path.path())?.write_all(console_launcher.as_ref())?; + } println!( "Wrote Python Launcher in {}", @@ -578,6 +765,15 @@ if __name__ == "__main__": assert!(launcher.kind == LauncherKind::Python); assert!(launcher.python_path == python_executable_path); + // Now code-sign the launcher and verify that it still works. + sign_authenticode(console_bin_path.path()); + Command::new(console_bin_path.path()) + .arg("-c") + .arg("print('Hello from Python Launcher')") + .assert() + .success() + .stdout("Hello from Python Launcher\r\n"); + Ok(()) } @@ -600,7 +796,9 @@ if __name__ == "__main__": windows_script_launcher(&launcher_gui_script, true, &pythonw_executable_path)?; // Create Launcher - File::create(gui_bin_path.path())?.write_all(gui_launcher.as_ref())?; + { + File::create(gui_bin_path.path())?.write_all(gui_launcher.as_ref())?; + } println!("Wrote GUI Launcher in {}", gui_bin_path.path().display()); diff --git a/crates/uv-trampoline/Cargo.toml b/crates/uv-trampoline/Cargo.toml index 718c7e3f9..b5b5e2ca8 100644 --- a/crates/uv-trampoline/Cargo.toml +++ b/crates/uv-trampoline/Cargo.toml @@ -42,6 +42,7 @@ windows = { version = "0.61.0", features = [ "Win32_System_Console", "Win32_System_Environment", "Win32_System_JobObjects", + "Win32_System_LibraryLoader", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging", ] } diff --git a/crates/uv-trampoline/README.md b/crates/uv-trampoline/README.md index e6b424045..c352fabd8 100644 --- a/crates/uv-trampoline/README.md +++ b/crates/uv-trampoline/README.md @@ -46,7 +46,7 @@ rustup target add --toolchain nightly-2025-06-23 aarch64-pc-windows-msvc Then, build the trampolines for all supported architectures: ```shell -cargo +nightly-2025-06-23 xwin build --release --target i686-pc-windows-msvc +cargo +nightly-2025-06-23 xwin build --xwin-arch x86 --release --target i686-pc-windows-msvc cargo +nightly-2025-06-23 xwin build --release --target x86_64-pc-windows-msvc cargo +nightly-2025-06-23 xwin build --release --target aarch64-pc-windows-msvc ``` @@ -92,24 +92,16 @@ arbitrary Python scripts, and when invoked it bounces to invoking `python `. -The intended use is: +It uses PE resources to store/load the information required to do this: -- take your Python script, name it `__main__.py`, and pack it into a `.zip` file. Then concatenate - that `.zip` file onto the end of one of our prebuilt `.exe`s. -- After the zip file content, write the path to the Python executable that the script uses to run - the Python script as UTF-8 encoded string, followed by the path's length as a 32-bit little-endian - integer. -- At the very end, write the magic number `UVUV` in bytes. +| Resource name | Contains | +| :------------------------: | :-------------------------------------------------------: | +| `RESOURCE_TRAMPOLINE_KIND` | `1` (script) or `2` (Python launcher) | +| `RESOURCE_PYTHON_PATH` | Path to `python.exe` | +| `RESOURCE_SCRIPT_DATA` | Zip file, containing a Python script called `__main__.py` | -| `launcher.exe` | -| :-------------------------: | -| `` | -| `` | -| `` | -| `` | - -Then when you run `python` on the `.exe`, it will see the `.zip` trailer at the end of the `.exe`, -and automagically look inside to find and execute `__main__.py`. Easy-peasy. +This works because when you run `python` on the `.exe`, the `zipimport` mechanism will see the +embedded `.zip` file, and automagically look inside to find and execute `__main__.py`. Easy-peasy. ### Why does this exist? diff --git a/crates/uv-trampoline/src/bounce.rs b/crates/uv-trampoline/src/bounce.rs index f60f28e97..0046e174b 100644 --- a/crates/uv-trampoline/src/bounce.rs +++ b/crates/uv-trampoline/src/bounce.rs @@ -1,8 +1,5 @@ #![allow(clippy::disallowed_types)] use std::ffi::{CString, c_void}; -use std::fs::File; -use std::io::{Read, Seek, SeekFrom}; -use std::mem::size_of; use std::path::{Path, PathBuf}; use std::vec::Vec; @@ -20,6 +17,7 @@ use windows::Win32::{ JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK, JOBOBJECT_EXTENDED_LIMIT_INFORMATION, JobObjectExtendedLimitInformation, QueryInformationJobObject, SetInformationJobObject, }, + System::LibraryLoader::{FindResourceW, LoadResource, LockResource, SizeofResource}, System::Threading::{ CreateProcessA, GetExitCodeProcess, GetStartupInfoA, INFINITE, PROCESS_CREATION_FLAGS, PROCESS_INFORMATION, STARTF_USESTDHANDLES, STARTUPINFOA, WaitForInputIdle, @@ -34,8 +32,12 @@ use windows::core::{BOOL, PSTR, s}; use crate::{error, format, warn}; -const PATH_LEN_SIZE: usize = size_of::(); -const MAX_PATH_LEN: u32 = 32 * 1024; +// https://learn.microsoft.com/en-us/windows/win32/menurc/resource-types +const RT_RCDATA: u16 = 10; + +/// Resource IDs for the trampoline metadata +const RESOURCE_TRAMPOLINE_KIND: windows::core::PCWSTR = windows::core::w!("UV_TRAMPOLINE_KIND"); +const RESOURCE_PYTHON_PATH: windows::core::PCWSTR = windows::core::w!("UV_PYTHON_PATH"); /// The kind of trampoline. enum TrampolineKind { @@ -46,21 +48,42 @@ enum TrampolineKind { } impl TrampolineKind { - const fn magic_number(&self) -> &'static [u8; 4] { - match self { - Self::Script => b"UVSC", - Self::Python => b"UVPY", + fn from_resource(data: &[u8]) -> Option { + match data.first() { + Some(1) => Some(Self::Script), + Some(2) => Some(Self::Python), + _ => None, } } +} - fn from_buffer(buffer: &[u8]) -> Option { - if buffer.ends_with(Self::Script.magic_number()) { - Some(Self::Script) - } else if buffer.ends_with(Self::Python.magic_number()) { - Some(Self::Python) - } else { - None +/// Safely loads a resource from the current module +fn load_resource(resource_id: windows::core::PCWSTR) -> Option> { + // SAFETY: winapi calls; null-terminated strings; all pointers are checked. + unsafe { + // Find the resource + let resource = FindResourceW( + None, + resource_id, + windows::core::PCWSTR(RT_RCDATA as *const _), + ); + if resource.is_invalid() { + return None; } + + // Get resource size and data + let size = SizeofResource(None, resource); + if size == 0 { + return None; + } + let data = LoadResource(None, resource).ok(); + let ptr = LockResource(data?) as *const u8; + if ptr.is_null() { + return None; + } + + // Copy the resource data into a Vec + Some(std::slice::from_raw_parts(ptr, size as usize).to_vec()) } } @@ -70,14 +93,50 @@ fn make_child_cmdline() -> CString { let executable_name = std::env::current_exe().unwrap_or_else(|_| { error_and_exit("Failed to get executable name"); }); - let (kind, python_exe) = read_trampoline_metadata(executable_name.as_ref()); - let mut child_cmdline = Vec::::new(); + // Load trampoline kind + let trampoline_kind = load_resource(RESOURCE_TRAMPOLINE_KIND) + .and_then(|data| TrampolineKind::from_resource(&data)) + .unwrap_or_else(|| error_and_exit("Failed to load trampoline kind from resources")); + + // Load Python path + let python_path = load_resource(RESOURCE_PYTHON_PATH) + .and_then(|data| String::from_utf8(data).ok()) + .map(PathBuf::from) + .unwrap_or_else(|| error_and_exit("Failed to load Python path from resources")); + + let python_exe = if python_path.is_absolute() { + python_path + } else { + let parent_dir = match executable_name.parent() { + Some(parent) => parent, + None => { + error_and_exit("Executable path has no parent directory"); + } + }; + parent_dir.join(python_path) + }; + + let python_exe = + if !python_exe.is_absolute() || matches!(trampoline_kind, TrampolineKind::Script) { + // NOTICE: dunce adds 5kb~ + // TODO(john): In order to avoid resolving junctions and symlinks for relative paths and + // scripts, we can consider reverting https://github.com/astral-sh/uv/pull/5750/files#diff-969979506be03e89476feade2edebb4689a9c261f325988d3c7efc5e51de26d1L273-L277. + dunce::canonicalize(python_exe.as_path()).unwrap_or_else(|_| { + error_and_exit("Failed to canonicalize script path"); + }) + } else { + // For Python trampolines with absolute paths, we skip `dunce::canonicalize` to + // avoid resolving junctions. + python_exe + }; + + let mut child_cmdline = Vec::::new(); push_quoted_path(python_exe.as_ref(), &mut child_cmdline); child_cmdline.push(b' '); // Only execute the trampoline again if it's a script, otherwise, just invoke Python. - match kind { + match trampoline_kind { TrampolineKind::Python => { // SAFETY: `std::env::set_var` is safe to call on Windows, and // this code only ever runs on Windows. @@ -159,144 +218,6 @@ fn is_virtualenv(executable: &Path) -> bool { .unwrap_or(false) } -/// Reads the executable binary from the back to find: -/// -/// * The path to the Python executable -/// * The kind of trampoline we are executing -/// -/// The executable is expected to have the following format: -/// -/// * The file must end with the magic number 'UVPY' or 'UVSC' (identifying the trampoline kind) -/// * The last 4 bytes (little endian) are the length of the path to the Python executable. -/// * The path encoded as UTF-8 comes right before the length -/// -/// # Panics -/// -/// If there's any IO error, or the file does not conform to the specified format. -fn read_trampoline_metadata(executable_name: &Path) -> (TrampolineKind, PathBuf) { - let mut file_handle = File::open(executable_name).unwrap_or_else(|_| { - print_last_error_and_exit(&format!( - "Failed to open executable '{}'", - &*executable_name.to_string_lossy(), - )); - }); - - let metadata = executable_name.metadata().unwrap_or_else(|_| { - print_last_error_and_exit(&format!( - "Failed to get the size of the executable '{}'", - &*executable_name.to_string_lossy(), - )); - }); - let file_size = metadata.len(); - - // Start with a size of 1024 bytes which should be enough for most paths but avoids reading the - // entire file. - let mut buffer: Vec = Vec::new(); - let mut bytes_to_read = 1024.min(u32::try_from(file_size).unwrap_or(u32::MAX)); - - let mut kind; - let path: String = loop { - // SAFETY: Casting to usize is safe because we only support 64bit systems where usize is guaranteed to be larger than u32. - buffer.resize(bytes_to_read as usize, 0); - - file_handle - .seek(SeekFrom::Start(file_size - u64::from(bytes_to_read))) - .unwrap_or_else(|_| { - print_last_error_and_exit("Failed to set the file pointer to the end of the file"); - }); - - // Pulls in core::fmt::{write, Write, getcount} - let read_bytes = file_handle.read(&mut buffer).unwrap_or_else(|_| { - print_last_error_and_exit("Failed to read the executable file"); - }); - - // Truncate the buffer to the actual number of bytes read. - buffer.truncate(read_bytes); - - let Some(inner_kind) = TrampolineKind::from_buffer(&buffer) else { - error_and_exit( - "Magic number 'UVSC' or 'UVPY' not found at the end of the file. Did you append the magic number, the length and the path to the python executable at the end of the file?", - ); - }; - kind = inner_kind; - - // Remove the magic number - buffer.truncate(buffer.len() - kind.magic_number().len()); - - let path_len = match buffer.get(buffer.len() - PATH_LEN_SIZE..) { - Some(path_len) => { - let path_len = u32::from_le_bytes(path_len.try_into().unwrap_or_else(|_| { - error_and_exit("Slice length is not equal to 4 bytes"); - })); - - if path_len > MAX_PATH_LEN { - error_and_exit(&format!( - "Only paths with a length up to 32KBs are supported but the python path has a length of {}", - path_len - )); - } - - // SAFETY: path len is guaranteed to be less than 32KBs - path_len as usize - } - None => { - error_and_exit( - "Python executable length missing. Did you write the length of the path to the Python executable before the Magic number?", - ); - } - }; - - // Remove the path length - buffer.truncate(buffer.len() - PATH_LEN_SIZE); - - if let Some(path_offset) = buffer.len().checked_sub(path_len) { - buffer.drain(..path_offset); - - break String::from_utf8(buffer).unwrap_or_else(|_| { - error_and_exit("Python executable path is not a valid UTF-8 encoded path"); - }); - } else { - // SAFETY: Casting to u32 is safe because `path_len` is guaranteed to be less than 32KBs, - // MAGIC_NUMBER is 4 bytes and PATH_LEN_SIZE is 4 bytes. - bytes_to_read = (path_len + kind.magic_number().len() + PATH_LEN_SIZE) as u32; - - if u64::from(bytes_to_read) > file_size { - error_and_exit( - "The length of the python executable path exceeds the file size. Verify that the path length is appended to the end of the launcher script as a u32 in little endian", - ); - } - } - }; - - let path = PathBuf::from(path); - let path = if path.is_absolute() { - path - } else { - let parent_dir = match executable_name.parent() { - Some(parent) => parent, - None => { - error_and_exit("Executable path has no parent directory"); - } - }; - parent_dir.join(path) - }; - - let path = if !path.is_absolute() || matches!(kind, TrampolineKind::Script) { - // NOTICE: dunce adds 5kb~ - // TODO(john): In order to avoid resolving junctions and symlinks for relative paths and - // scripts, we can consider reverting https://github.com/astral-sh/uv/pull/5750/files#diff-969979506be03e89476feade2edebb4689a9c261f325988d3c7efc5e51de26d1L273-L277. - dunce::canonicalize(path.as_path()).unwrap_or_else(|_| { - error_and_exit("Failed to canonicalize script path"); - }) - } else { - // For Python trampolines with absolute paths, we skip `dunce::canonicalize` to - // avoid resolving junctions. - path - }; - - (kind, path) -} - fn push_arguments(output: &mut Vec) { // SAFETY: We rely on `GetCommandLineA` to return a valid pointer to a null terminated string. let arguments_as_str = unsafe { GetCommandLineA() }; diff --git a/crates/uv-trampoline/trampolines/uv-trampoline-aarch64-console.exe b/crates/uv-trampoline/trampolines/uv-trampoline-aarch64-console.exe index aec8a5eeb3fb2678eef7c1cbbec3902033c7641e..310c94b12ad0223c28ff86db45a7692e0db974af 100755 GIT binary patch delta 19804 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 delta 20673 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 w^p7;M1& diff --git a/crates/uv-trampoline/trampolines/uv-trampoline-aarch64-gui.exe b/crates/uv-trampoline/trampolines/uv-trampoline-aarch64-gui.exe index c79c8e5ce3f4e02a229dd38f61a3091999f38391..a88c52ac268e2624b0f7218a408b45de6afb3001 100755 GIT binary patch delta 20160 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 diff --git a/crates/uv-trampoline/trampolines/uv-trampoline-i686-console.exe b/crates/uv-trampoline/trampolines/uv-trampoline-i686-console.exe index 3aca836cde821ec07d82084064780659ecb6602c..7b4916823174ef0b40cc231e88dddff4a68473cf 100755 GIT binary patch delta 14348 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 hJ diff --git a/crates/uv-trampoline/trampolines/uv-trampoline-i686-gui.exe b/crates/uv-trampoline/trampolines/uv-trampoline-i686-gui.exe index 9b978d9a72b10a156f0c97209e311e9763f73c0d..31bc5f34dd1c6f33f0fdb8c1f1cea4d878932921 100755 GIT binary patch delta 14722 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 delta 16861 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 G^Zzdp9Px($ diff --git a/crates/uv-trampoline/trampolines/uv-trampoline-x86_64-console.exe b/crates/uv-trampoline/trampolines/uv-trampoline-x86_64-console.exe index a439763511b104da6ac4e2875ab2a4170a1757c6..f2d715aa10b4af2ca23588be6809f5e09d996871 100755 GIT binary patch delta 16573 zcmb_j33L-j(w-5PEgPGW0f9M;jV-|DFgB;nX@QJKAb~l;v9MqW5FqA=kwOlBB#;aY zin1h45_SVw=Ug_i1A)Xbgu~`AkQ2xzoFOKgV}wWoBnt)t^M5rn9GmR^|J(Og@3pI^ zySlo%y1J_Ru&>78+hSPjYwe0L&*k*rMJ|nNY-qx9Gf|NJ)Snh~t6r;paP=JLGoo}0 z$6bih(Ft7SxDNsHf!Fq__RW%$kjX$n{gWJ*%M*t7JMuKzveDi)%*UJh489+wW+dw9 zUUK+M<+$Rk(wWoU(^1_91wN#zYu)^q$E#pM#lAP8X*o{Q#kSJYNd*8=uqbC)< zc2iOI*~X8bFjn+m$Z$$^qI6u8J`giM2cA6nmZCU=i_KzigvrTY5~b_lT`v9|$2s{c zqJ#?n{tW7vt&UDH*l)4a^dy!N^Jl~C-?5sQ6^1WvGP`M1;};<%-vEIV0)JpHn3BxR zMd_L-oswmgZ{poX_JL_KU&cDcy81=mP!v(xCqhJJr#&r%#_!S8?w~&osYW(|-JBXx znr0HE7%^A~ppFJSFms&E(5PhF*tqw3!>apOO8k%P&q9*-WBZ!YTrp@6CA&4%8GOuS zUo#`mzGhy({5A8;`9jqfPHCw%!{)oyNC@0QH#Xld$o-65LGHK0st9EQSKPgALRFo= zf%g>E73LajR}Sz(nH6l=sto=cM)w~7jc8A2j7$C$g@GFPo8ex_h|-8_@)l&!h__Yo zVp)y*neax?%=g`FRJta74OwT&%lB^rnaRJ0T1>J1o^)~_VfX)6*fEhKtD}Vs zyER+La9Z<)jB(Z?>P+i&e0w54E%JoWcs$fI-zC*L%+e82dS47dWTe(f*Vq#YZJO|6 z<`G9;jj$?yEXVEJR+X5^^YyI0=>(P~xYGSUDasBLjZM0wFO~2@l=-i9uI`LtVMs0e zF5z$N)r6s}NkVJO`d>&1qcL2Q=$~!o)b+x4G)XtCyT!h2l9c44X;H~#ostd(nW z3J5VlNMVB#+QfDQg|)OeSf6HTt*U_T3_fli5sDuyHW~q?Ro7A9k?f&nY2KdTWc*kM zf21Jia88XgZ?6zI1X|9}7=BG_o2vhT(~q|B-KbyOO7!nFxbpTog@R+Y_Y8!^pKwaY zB8Po9zW208jZIj$4=o7^IlJk!?Y%}obN6>idn3p6=3x0)LC!IBWfPv6z1P8m7-9Kt zTrAz3bBx+Pqm`1yjBF69O8ME#Z~d8D5(^5A9O!U0mP1p!@NS*WU!P*Dt&jG9HQ3JY zUA~t)L1MO~d#A#j+;hKzk@u_s!z;wQ1!TBP#J*ufSl z$>(NL%}%R{7GG%GT>{tSn+DdXWqR{=ASm*CiMr^NEeAcgJ@_B?c=;sz zxMe$j2m8KdJ7*p+9DJQKw3Pb3=9Df|_hsP773|~+E;KoU6U?q)VbZXb50nGS?CJ3HI7DN2*WgY zY?a2}VvbhH&0Akl6rrj?ypK(6(}DjT zTh=DW+XS+(R)ZuLChM{MI)~-7I7K>AD@VuIthQUNzOM%R-uD5mLp9A!ceKq{KNw{`D(i5ET*t^@TdhlOikge}V59Xt z*#Ck;$2$}{IYUuV4u6f6^ua2>dY+}UO>6gu%l~4H?;|IuSbp~)o7T3o;muhr*f!S? zn8gmX?O&#>Sp)+yOxSTc{5COcbgM??dYo}gIXMQ&jDCdYXm63oU+?09nD zmQT$?StCfzlZ;8)0V|*=mT~h~hjy;CjT1P|E>!hOwB^#Vdi)9{L z*RC_4$@aACVz_ypU1-;i-^CiI6!6cn(J6y@FMBGbx1rX?4y8P1_~HR(PyO03;Q`jU z{S(nIf|%Ts?QGwA;C^It4wHj=j~rApGF1J(hYvlBrMD@(U9DDK(evR~@Ik(2BKex6 ztBS&s(mM8YTDyyq(>lu8#ciD^tauejnz!+kzGVp8z^z<$0bZssuMw$c;3ixSITQCX zR-V?W^C$Skl68-CC?8WhIEe6jdRf0aWijEu++vf{GWn(KVp>us)mGc8bJ15A3CeRJ z!yz3NgNaUZ;x<(g<-sf^J+o2J_-8gby-lxu;)BMbhp0(|;%*^^ME;^Eyp=Ez zMV^Q#Arv~aPiPE+xj|z++mW7X-m{1nc*3Ufkkm2x=pc4Jy|Z_s803AqTpfHv;0H_~ zR#6rgG`t3>wD*Ma--9Gy@+hwjutrC8Udy0L3wvXQ6lSL!AMmuprX$B1YtX+ zt6~`j{0_0k-wH24XRt7s|2#36JcC%s`$<^w0#*AvjHV`H=1=anVlZJKRq`Jro^wbi zyz;63_>_{fsT9EjT;?@dIZs|UA)d;DmIMHKS3OLbnZgG%g%61d$^ytM(I^9mit!|X zlJEikdRmGHjaA6dPYflzhpfC7dGgW|DTJM(Mk-F}yRb{Kf@Q6S!u_# zs39{DC;X7!nr-d4!EpLKE9%tR@Z)(_(#dV;GnReTDUBb%j2VLrO>VG)jDg)NFt3Vb zlCg@tmC@XgH;o<4NKG7pz`_w6c{|)#kjok} z{@8ki@9`wW(pTK+mll>`i;@H_H!@$%ccL z&dWV6Vcs{e*shs|`d?VDt~u#n716Apqs@XxRUJsQ+GdT3KRFTt-Gd>@ zM}K6GWr>E+NVY%g*#Rd{LYYHR%T%9tSzh=J;;c}V2Z)@Dm(|kq@+2yi&dJhsTB9c^ zZWCqp4STkGhGFhEtfqUGcfx(N{SmPe){JStrZ7$1O+E}3nhP9rM+a&=(UDfr{k}eL zI_DPDkj&@p0NXGI3)8-4LI_Rmc$1Xkp{@lKiTMZf9%FDqR3zW$WtTd)^|lAO#ye1x4{n4=Q!Oln zy`{1p&H1LBox+CTC{wVod4W)MtZ|{)R{NEuaba6~>=9Va45aKNMCBqpEzh3N^F~ zmTg*1SL`2aze7)-U~6$nu^faHRc1x$RwPl)$;aU^(DCiftGa~~X~VFO!u(X*b~5CO z8Qk?w5HvSmHm8G>in3q95wzCFoudv-TmKF#L#e28ygr+c?5Kq9?dS`(q8#<1eBumDfGgI1twp|wB#Iy8Hgjc{nyMw z;7c?d;vc|!c~2tHEJO0f@lisc6^bJ!3c3a4M1QR*azvO=LxEb6kU1n3$t+|V{4=u2 z04bKHuqzZ~yp8@b#G;%UVaK_+#eGQ|MNJz|?ubR@Z50ZS(i-@w0dNM_)>~>DQqt{K zC$%TnF^&wvOgn1bb`qPT_FSqfww4M??5KLg9^7E{QTwIVr7V~?xTjf8_?iYh%p@L+ zhQNq7?0QL{_wIUeyi*IiMZ6WU+5N2E{rFN>-T$cOyAq$ES%i+pq2r0v`xJCoY!8+Y zL)g67QNPG0-LlnwYq8bdO0lQAiOZSRlCtkTc7$bi=^D2C`F80tmUu3e46sX|$?su8 zY|?q6H~@*pl6%Fwmj}&!cY-KQz0G-Ku;}l|(H_@78(yLIYYhDtX;`W>5~N3FNaMTO zr3Kk`X?!oIG&|QnJD-!5IqlNJMKsTu$7z%M+kqpBzGm>i?Hmn914TVvg37VY{gW*3 z!>@?gpUJA&5IhlghoT~bzQ}X1q?CSx~rRBMHRK0$eTR!Lr{hZw(+*RYu^NmEo8oJy=Y|h z`59hku-g^~%rv4kCFgs`@&?|3-CZ+h2pBvT(@qZGIGBv&J2GW5J8LlyPAvRK{zl^2 zseX&Wx2@}GR`b5xMTA6Q$d95_VJ$})!VQOX!6E%f9{(G31@nNtuhd{uJ}avk<~G`- zng}*g>8L8J@$@Ljsd42sc#;)MB1-%Xk9m?^yyD3F(kTqR;gTA{lhA>%YApV`^6DQ> z7aGffFWASn&fbjA(6ct3T~y{OtY!>Blw|ShiH8yqstq3qhnWnf`JCWC ziBK_~RDvPPbBN@lJaSY&bQgX>A*e}W-*U{GKmcc`8oCED0-Oxz>G#xh8ZC#2EU3!Na%a`OnYKMKC zc|W)ZiPBEZYrq^4pUyjc?o?+<9kurqq$7u+3=~1MCFQ|6>v(jGE;mq@nbhTUbcq#A z=L9VvFoZT~qV%@aN5hsjSXUEybhj3;E?`{`z(uQb_6}I(iVH<+&i}Kl)#N?%|sd5pda|O-eKF*;nMmP|=h8@k2#}3CC)cs`{#eLwl zY$GCa2)PT8ZqKT%I*wXmZvRHHL@*i$?IvfQEJ{om7DFKVTJn~lBD`s{|u8ld!#<%K?D9$ zof*J@EtQ<6Mn|8MSIoyc6{V}rp3)EDtXRr}EoUfTJptr<=i>uRgJPM5r~`2oyo)?4 zg;f=%^pA5&$6aN|JPDD7uDpHjc~0p|hq6zog4tKnmSl*+%hwmTuwAL;-J@_;l>=jV zT2yKs(&W)lQU_nVb@}xFp+2O{IMf=`#^?w;Dt2PQJNV z?v8%2+n&aGEL5ZF1~ie>RBnbkQ3{hPoAxogqgMwPq7K`Y!hz_xH%S;RiV5>?*drmF z9PbRhV!g;VI$FCz{UF7V@ihY2Abho#_Dch-F3d7c;>KCc7#x4z2 zHnI1Icb(oBz6YAIra8oLOehOM^Jyfcg>r}ru|$@~Q(-_iD0aGcz)C$Ym!Te~)5jD` z*haFbqa%NR1HVL&cVQJ$)20b*!iaSKB71zq15>+beZ7FSNPT^tNP^bL+I(VSHl|yT z)5w)579D?qj{h$3fkLxCN3opER~a9zS7ybtd}pS2CNUBm_yvJbw+Xq_L$^@?4!?q{ zjDIvn#2I{hC(*}2tnxRoN#pv!|0Fn-4&shv~`?wymAXx>Xy zxdfF?DdG%PsIAElsg?m6PF_XV!P#vo8+J&zuevOMv)ijE;Zb1pUY`DMmed|6QIFB+ zQR8L}j)Sx*1~(R}JHMOMQFHwNhLtmIFjnjciIJ&54}YZ|k0hM$1?$@rf{^JpRWs!< zSaY24Zi^@s@S%6zZYV47ySmZ&Z147v;%&8iG)YJLHF_a?yKrtlc;=gv~U2q9Qzi~j$eqoX$x)4Gbkt&4i1ya3YdCiM>=pHc~R6m8X z1F+L~#qbtNRWWS;`Jcs5A0DYnK~$x1LRhsP2xMW+U|cM|}TG2?7sCDoaH4w{RQ(?`(w@?+Zb_cAjHw*7RVeN)&Y%PMJOk~8` za~Wdo-%Vod2VoJk4pHXJ~i6P0VMj=$8UdKRNcJuAI-sn3D z)`7gBTm!9ysH#aU{)RXq&={sLBwiQ&H8*_MqC{cn0W#h0Pw+QND4X6$6G08(L-dDu zZU84PS2%o^wp2%RUH)bd#xPJpH^QnMYM@Q!3sj6n6G)~q*vdfjMy&PdHr}hy>4MPc zvo`Wk^MCGvCB2@AIhEyT29|it~EFth7)!buB zwbRM1G-cR&knNzDc0OXqHCiBqoA1DRn4kf%LYZocg7F(vD}W~iLf|N?8J+44((FiB zw>M$C)m4RFKxl(zYcY=`Rs_4MLAqzU!wK}}vH94q$)2TT|?oPImoXHen zzUeZr4-6t*tKe?a6N?3aV=wG5y)NlTtUu?SX#;DbQ1F3Rc33}Mrf<8Oy0|PSfrcv9 z8;DpDT|4+1aeFFgW+92v6S|iP=)7xwg0!8OCx?(kgLC3OJm3O%j!;oss5`<@6x)Q| zqEdGF(Z^AGODlYOtfduI;n=X~rp*G%qKuF&YHA$d>4lksv%M?LUbN5TbUAu?+mq;#vU zBc$9;Q5nwL#Zd1<9XRf%SAOHl5LDt$M)YT1Z-F~;G!a9?d0YhHh$ae;07mt<$D2Io zMg*J3qia{*A@@)gGp@Jy0O}%tg7FH^L!at0zH0(*uWnlPv~;nSX^kV;?|{Q?>>+Zy z!HcD#M*bTD4iucCf($D777WQxeF!wjnoQJPval?=$-CqwBR8DFQbbpTCI1;qGUv2Q zLQm>bj>~cvR6`|TtUYbjeZ{X#PO-Yvh?M5zor!1Y-FTS{s7tDsf1xncKZtX8a)b&E zj=VY{lnF}$KbbFhs}6{<`yg0{bjGm*>@dVmX9M?WPF*!>3VH!H#Vc?lcD(#GnjHRHu$q4A6l?J` zTKXgBSx(Xg1R`-4l>WRzU+lFc{@Uaw-Wzk}w7UQYE2 zYY1gdY%jxpw3RPn1VCFuLsE|g;!!XghZ%IM!MPL38%#u&uJp>tK>RkI^4n>A&=ESF*pi^0CoE7}j0f@u-TrT%;()?eTX?j6+dkDZ*@ zu2W+KVYKx<01l*2Ni9{a)K&;-C%NkFyI8wP*0^%u(Ejt|UCcSDldit!&(ZO(7kZunhHuDtOeDV)mZBIp@zGE?x@V>ethrn}pK&e}w3{B$tlQ_MRn z_z%L@K%K67qr{L6XIc%7N@Hbu;evgVQB>+8r+#Cf!JEFpL`HRiw5f>(MOgx~wrc1T zXyeH+3$B5!& z6YQX3>C;0ML7eQs@dP%Jkw%EsX=Q5Yr(^;1q{l;j!4D)aZ-%Vt)kD#3#ivtt@!&9% z+LijGEM%#NPl33u0-(7(32nvTAd&T*+{8OEfeIm{Q}U_JC=Vs<0!j6Sh+<(m(5YJa z76yQ$ogriu5H?)GSn;#$LM;iL=GUJ_q!mkTw%X!DwS{&wh5- zzv6VuD=tUGYefCO@t&n^G|K~JxEfGl3GqVJ!(mmr!ErhdnBr6>25sX`2{g7)Kgnb zs?7JwO^#BJ>KW-6m-bsYPSg&Q=ro~N4!sF3!N6hykzi?pgx88uaha*Wcpq%Q=i0 zR4g4Jewe2d(m}o8Z6biTDYz)%mo%2?Y867NrkAa_*MFhA7u9I637tq-Fu11I!pz$b z>Qs9$6N+K;58~Y!v_HwFnaYLop+~ySUvHvSG6-jDP~&B0^(Cp$SiJ|p4d6e&_H|0N zThrtzkO5*5XQ+2yTu?(b2lgb8_nkX^$eQNq5V!AonkNCfXF6kktrAZGj53rLLH+*7 z2`pkxZDqWkPSR0tE$+Ol2rmJ;)@`cvDP1TAA2o~p^XQi7lKcWHMZ9oZ-8NTL5Lqu{ z3C7rFbkCz|yf${lvNMZqotl+af_RJq5=w>`KV59d>jdiy11GS~g-26+PW z-QS9Tlm52*3iRn>C_{b4Mvt~qaRrAH5|?yH?!xxn|6qJS$V|Ib4tHn$X1WYkg-J7A z{EOR;&+N+M?RwPgr`bm(Cid*?jm?QOdcA_nLu`H#>dF0IRv&mzd!TdE^q0VjbSlzV zw^F-aX3sw`)bb=266tGKXRyOp5Cd+OPFvYe4?JlY+kyG#4D5bM4g3a)L0mxw$775q zZCiMm0)3s(*z4FCU|ZATo3jw_~=ED2`BX>V$f!)i^_%Eu$~?@%LgDK z^=jZanIJqnt)cTT%b7H``N1Sd6gX1vK~Kt^)$ZMRD0focj3tEsFHnrvvGG(AF5s{F zj_Nov^n*5^K~|niu@Uf({KU*9NyFcvvLx(Kumx^LRUs9I4|)U(%hh2r z^bBe;u06*MFu2WI3@eRpRFen>u+oyu=-08na2;`RPVl#!qRzN^3L<)aZwv)!%*Gcy1aujvK?- zI2TvMjpCe~0|W|CIzr9afu~^=ag%^40%s&@i_n6;ux^46cVg>3{l*WQKDT7n%vATn z)RKkM0ZXUPU$n4f?t)pV56)dMGj(?9!uhGCvlcJ(l-@sU@vo4J9(B)IxFB`WboZQJ zA+pdTY3!KCwr%qx?RmEFF^P|34UavyZSCXb25;t*h^~?5AW^;t(gLK}e^QirNR#zc z2KYKs2x&diEA@)-CCFI^43BJ?3l2m$N_m+E{P@ z^As!}hk%ruvKHwPjvF)9KGs#xuRgB2^*DCIm*Mrz*T~<7<@$HcuVCs^x48nL^&Ch4 zHnke*_HQoAa@TR(`g_XUC=*e(<({%-C@V&p{(Gu(qSvQ?ZqVWDI;_^=hdMl~!wWiW z&|&;D8nL!I%+g`L4#(?okq%et@D&Yux&3-Uy$*lYVbrr4;nq6L(qX<1$LMgT4&6Eo z=y0tLH|X$n9q!QK`zl26R<9TQqQmCTX&raf;V>P})ZtPcKC8pmbXcXsLpnUGLtWV1 z55M~Ug}%{07l&E7_m`%B_t4?6U)BFNr;PgN{=+%@Z%&!oKlh)_*?)7&CTfEJkLC36xR9D3Hn()Kdl-y;!6Orh0jeLP8};=4b;5-6gT$TzLP3cfU<6vhwjp z!;E9u;j%Vt{i<;ZW9L3LYvF7igMGKEFTas>TfKh-o(ROgWXz6Q)Tr1{kEbUwQCv)q zM%ji%d@+w*W>iy@5zdf%aH5S|bhfeRP8*|vGnVqjtVrsR7$3vM&oE`j6h$vG7Dv?^ zF0xYTIR6qGzGg7nxF#vfWaLaMqOuzmQ4gTqERJi&59Z>t8yCebiY+$PL?5A6TKOdQ z-I~HN(|}R?TMXi~ROhsDG}pK^Ci`}uykO#lt&Ow)iDGON7t1%}s9&}^_z2uU5g)gW zed!5;CZAP}xCKcZ z_h@U5i$|W|8%R|C5nw;u3tN#VxK_^(z{U29NYvN9WZVNFZCZ~-Oqtm@lE_8_f0*7EY6>5h(K`SE4naC4-4qLWG$P+w532h0E!XAb41nClDHE^y1 zKJ3Lw1bsXK_%_l8&1^5KtKq4H1wMc~X z3E)4F2!~)X4r8m4_o^8js(*-&YQP_n&LB^4J>ui9k$(>`f<%Od;Yb0osft4o@u^x) z@LCS^JVL`)MbaA*=DxCn`868sD7S3U3v zJ~ETzOy1|U%+L5BJs{X=mc}W;;Yh>;!5Mm<;A46|1b7vRMs^c${cKGc3C^FZ%{ReA zNV(|iBfy`Lh$caAqj}l~!DKy8u&27rdDQDW>@A`=2wc9MU@jP zi!0|;E~1@3!Hd!zrI_vF`>-K~_MNH+lxqDdD`1HWM|q63GxXut zu%Y;Uip{|9Gwf0PzPR}2TkILba#X(U6fZsC@ki#SayGS=e~Wwwj)q(5(BqI zIQWaAbOl_={V|n;ZxkhT`1T~JB-xp;eujS+Fq3hYA+~_k8+&&(tu*#~j23fIjvWRj zT8Yv=QMyE2uz!d5;7_qn!n?3`;Zu#5t}03`I~)Fz;f0xOdFy3{uGd-Hh>2;hVtVgL zffM{|P!pA!kSqpgwibQgHHpc8xWiIUggT4TWl=gVPXybq^R71A067+nxQG9dHAFZK z`>wFG$av3^Yl@OuElM-7#@1qB9DvFQcyAVkI#QH)QL;sdfrS>aveDI76;0swI59BO zB&HvCwHE^uBSijy$R8s~1gC*5{##L6M3Nxk){4F>Vdbq-t7~lmZbWv>RbfqaZ7M5^ z9Br6=|K`n+2YAEGyP2o$c~2h6UzF;x0Xqy}+O~~;vGwve6^4saUWDkIXX1!75k8k> z2YTRklUSE+wWwpZ)2~e0wVJk~Rt)fBa=kshT3Ej4E{?0ENiv;M4GokIh(VV%iS}d4 z6(vsbjpAL{*=%cy7?^BL!}!b@wL)9wjTyuKZ92?;jY$~PT2T~;b)@vABj7PPMvQj% z5T#=fp8T)tibCToqO#jAWFNsk$OF;F#SDo*VaCZzb_X-gG z)vm1#9Z<>iUTanMM#DLd8_C&(t$Qo0-LZsJLe#eMVr8{ZNmGQ{Kn>jOY+GBUHfFC_ zl-A&eK*XTKIv;02u4cK>gFRyMr@}HLkVza#q#P1KsT0&90&Li&-$%9){82PAfYq+x zg(L`FNOD*+g`~;WTp`BB3o-T>A?Eg;v>!8}f+?Z?RJH8o+Jq9Fm5SisfJNDr&!{y? zRG`bP9g+u{>QS-6#ie^*2gW_qaloh9rmKe><6NbGH%1-OI`lC_27SLQk0;v6b!B55 zMBN^Yf*uM)9&!qIfs=`A9oyLX`qXM?`fkBrOPmGo;B70r*xrYXIsb_VW4(WzD(`If?KU{lp?f)pZ12-C zaMGDP6x!$g<7anI^w@+owHQiBsAWf-u)W_3Xs!_sX?N(5KHMRAvJa&mqPd>j?chO* zaJ+w9D0@36^^i(MZznepS_@?<Pj-7#_&dNr?zaLCGg2u%v)=ukc zJc_}|H?c3v(}8Udw1$Se1~~#dtP*_P^!k{Z~DneV`lfsO9 zA57yHbriPF7)~~JMiY9sHi`U6xL=UIDCb^gwQ&y{o@ip3ohS0un^$)>@%&=;a+h9w z9;@q;>S^r=W?OrOrY*g~!ElzhqsQJ-eT^I*RUI0MR*u(O`%r6C)TvNs!bzg1_E8sX zD>ARD9oErNUOZe=$LbH)y=O*y51=_025hp`D*q-cism(RSHuo??a+O|MUuncIUmJ5 zWdRH8*4Oa9`BZJFkWH@yV(t{BGxJ1(Ru6r90v`HR?J&a z%V@a9aqfkJ$@n5$96zknqeWHPCkppb?;$lQ^eA{_vMS( zobI<6vO?_f?%nzO*rx6|{MW3p`)Jc)j7Q+O4{R=Nmr90~z+IWY}H5YqokS z+t#yp{ABAuGU*fTWau{n&jG{!wt(Qbb&q*vU zq0e3G@rVQJO0+AV(&)Y6;SG=JZNiPV)(sD#O=x=~hOh@XaRg5xgy#J}7XvX4cu9** zH7au98TM&-91A6wI;gJJwk-|pHEe=B1IDrJdP3Lip<=*zr4(!PH7T&EcvR&FMN=IysdwEwB9p>MlB7RS`J8`ekff1bAa|`ukQxB{w z)ted=CA0=+ibAGi=-6xQPS~RKEdmR{|2FD&{`ZDrOqSY6{(1;x^PghktVvk*9HIJp zeTQdt!MP6U!8k+*7BOi25RD$xO|toW2o=f&zj{$#jv2*3^m_DSF&hBn)~BIVCJH%B z6mrBwKZ#Z$#<+xV6k`d15?z2_cPFvV=s<=3#9;L8sLHERCo@q&asD(lu5d_a8*T^3 z!mPFd<6S_az4pgJcSTsE0kk!_6iEk-Vdw;p5!8-DWHXVuO0i35h_;{)3UzT3$GyYL zvuse@FJV#hrjV|~oTe(!vv*iT?}V@ukF6`2h78tBqNq7N?kIDce@J}$!-cd&{+3H%cFe4kNG!y*I;ltn{M1o76in3fDZ$-6Z~g)b=4-IKlfAfNf=7Put3|38ESdO+mZ= zkSp9@?G6vcLLG0ld6y(|uC_LhcS$dt);x8{gkEU2qWJ^zv;O@+9`4`oO8$W8h6bu* zgv!2zOL#(M53SmZbM00G=^SC}*u<=0zZ`gW&W0<6JKPq?3k!_|zJ+sj&K9=rw)ys5 zx7D2L?yug_k#El?4hZ*j18;42U`QqyY!iz1!(`Utkr23?z}Pq^*vq*NPfMW#j78=3t`P2W1OQK}YARYP;Sd)ub49m#zRm#?tzl2a3( zoq%H?ohAdZw2>@_I~KuE;my|j8#fQ@JD4{tIms5>(m%BjcTV6-KRG2Cx}}&m-J|;2 zFllcnN-_USeR9uDZ4}dgaracr&$5qixg%<|1IOz_TG)x7S#m$o;Bc_=eou|8`3jCH z7`8->buP&VzC)xQ408h!@wBYA{v>aqR_V079(IrdQrvSy`IqllPX8psp6^&m{{cO5 zW-YeuxNP7h5+lr_D$@z)|!}w~}Cnesp z@Fzv_jtUnlAE&9CV_EM`>poCuCHUB!lyQbp-?D$Fj7KEUlro5)&2CBU+~ynbM#K)B zViQsq#Jq*eGufX~-9tXb4yJZD96rv@r9NYr`!#!X&_F}eG4|e|h21X0EQ-Ok)>2H6 z+DL~s1&gDI@3j*w`_^rSy%X8>TgzHs&W6;^{mK>%?qe9{VCx1a$3{V#un56b)_QO& zs(T^(*vY{K+24H)suWowVgoH0fKar4wGW!xfK>A+`S(kTvWXAHHaEZ`og0IxPF`aE zAp<(xR}VtCFP4gdHCDRX$>Z2ZL+0`KvVKEt9$X+MiA&GLfp-UarmsZlV+x+Dfe6z> zM&}Z$&cG-qtcBgD7~E6QE`J8uFTLVz4Xd%H#=p;1PJyxofwFeXux+OVmrUoy85m8& zTX#US|tj(sRw#Kfu~K&xWAh{3;ZbV#^ol_P;sYofG+ z)+|aVf87}B@%Q*Zu4{z|ox@d@)^*e05P=j&U|y5hJb_1@0nz;#xfm?a%KkV4O_t7v zmjCIBwe;Lkkj$1oaY%LIHW25qbhsVAbrag{Qf9|_HebFKwIg<4emCspr+^Why$+U{ z2JVXnFxaF_lPG;ovEfPzkUi32m<=2BMfSq`rtZg)&By}lzRM=T-ws2wd?R_@9Rnx;H55VDpW zM6vL+j27H31-R;Ybz)f-q~r*#z`#hM>2j>wZ@T{wwFWZQ?Oc;L`y zV9&z!JtIN?Dg7YNKLb%oV{hQVbS&NT-)QiwJtxwZ%(3QcRtRTCJ_#v110$`@fXf;| zHuU$S3wt{xI6i$o=~(>V5Nr743o>BY)_m42&FVQ0D@v|G@IOslldt~}O@YPMe5`d2 zq%t4!D58azX5$HxnQX1d4y?6$fp3$p+G@Tx+iI@%$WGj-ORUJcxbkQBJjr2&{^M34 zW=m(_l(Mt&Gcp^^nb}B|Nz<%TWx<0O(h)$_CjCU@Gijocs8E_E8%GJViLS0K#Hig^ zW!q6jX;?+^l&?2ODL~&m#1=I_V3)p;##*EaRw*wjTN>LhTbhuPE#(b%NX2Qsd6}HF z#E~t{LzqYxUpf8?tUKxGbB94ML#21wKzZKJ8>zs)FgXI55l9n}=}(}>p!qQkPXeIUC>0f%-au{ykWD)B zZy%}1vo+-DI`T0P6FpspE!wh#)yqGD3X4e4C2wF|XCIpHi{aTDFj`|2sB$z7Z#ntZJ?i8KG@OqBT1oZQI&#(ElCu%i3l1zxP@6 z(j_1b*>c)%3Hjd7u#jaMtwR8^8#tsSSL9W6%L|%!YMoovi7x9>n+UA`vd~EgxP;^_ zR#P~WGLk&Fn!ODl@&Sk_IjKL}mp1VRWJ5ZTd#i`W*>-Yx#v723&6$iB0;^Ozg`}R` z^fBgz!CDQr#lRLVx0Qb0rjl|9S?3+no7Q#cM40ZB&N-#?6hD29$zZ^dD3Y3#!<7S} zn>MLBgxp0UdXO0<anLCU?AIjzNpB=^-}~6^cFmyh9jsjm;PpYgm4qJus@T$9D(} zXyKpdbBz}hIM#yog)zAFJe`gpHy$j=3wzU6`L!ka@-2ALvc*b%Pjg5jjF1ISHlKxq zm#_&j(D%B`IC5XMy_puuebIs3iZBySM)koSbuyR?v2HA7=V1Hj^#P7I$qkHQk+{;z z8C^&|GjS}S@fw+T@d_rCZkBX8XeLP^lIxQ-g-Hbl?M=sHIQP~)DR1P)xn9n z^AmZzY;y#&czb$NdF0-(7%;Ir^oz*XQ(eupYXcw-G5NUY+o(ztSf}v{NR7aA$7-J1 zLn#oV?~4&qjWjXopua5=(OjV|=`V>-06!GfsUg^k3xpz z`ttik-|h%|`VqTyPVoJL>;je+Hw;H`1DKG1O8_UjRUuFN=VJpOvg-=zi>{}2Dt7d6 zFt($DhHpiKT!OGuK9UGRzKtH0EiJ+a$H;deS#vw~w9q84t0hv1k13o7uh>InO$Lpw zpQ(wc3_4uT5I-1_D@uOrI{g9T{npp9Wq;FT5$5i`uflCg;0B4VCgJK~Q1l#C*KcwFA{A*~;=pvLl87#?t& zEq&+x6uAxZBrNJD3LCDJcd<3rAb@`r-FWekieTjgUQ64h6QOrmY}RNG%}SOK zcM6Mc$eWFJ%WDPNOdw%svG5>nqjWd8Yy^A3=(9tx3D7T2mV2OqUXBTPizf1)k{hIj zsrLVpJa#9AOc#+Vi`=PrkeBLi4=jnmr4IsDgTUnwJQ02oLczOQNBSk9@(HTn(7W!U zv;;9WjkqW$SJRf&+NCdvxqRCBTsa8Il0736O)c}~htWcI7QRJYuaLYb*Cwz|V=TSq zWMch|<1#Sk5EXxwH6KuJi_{tdzdT0}7L-jJ)5W<3nueqP2?1CO$NLoX54PH&-w}39 zLrZ`yl%p*Aa<9mTv0UP0K2h8VJ^VAp1scWWI>jGgGyj(2D-fzGz$N4Y03?UnI!?>7)%!j$*MniF`d9 zo^$VvLE2njw%6wR1lo2Z*6@lkDcI>9+Rc$1I#Mh0U!iyA zv}H<8vghFpVm0F&fFs!dk->Nh_J0uohB_RtyRp2iz?PjvA8+ZDFQ8P-Ot+Pvk0qwv zN%URHF*$)KSG#*)#=70))|IaysQ`R(igoZc@7GKCy3$+1Y?YW-uh{tW6riGGT=Xu~MHAkt)}Pth|aQ>x`ByP-*= zF>O08Q+Ig4<)0Y(3qO=wQdL0RLc1i(6~u=cwfzIR9}2z^Bo9*g+zKF1Rr$~r2mG|; z1K7kzJCzU6@En)FLfYWRSw2+@Hz&S($VxXOxW!?q?^yeirUrJ`E@;5S2(#4VT9$1Q;)bCr^ zuzo+Q^j$GzTzhB_Lgi4ntW>4pu?QOXl}L7(t!DDs2?+XoFCB80VB(Z%gpt{sncn3CS~3@RMi3&jb^G!W}_~8JlkZknhRC zEpcIprs*&lKh#1->Vz@E>(FEn3yN1nU-ci}%VEeRqC*%{Lzc>Q0KZ{E`JxGcX_e)$YPAKimEX|m3q-9|_e`ujA@~on*BlnlN?JLr z6rF#lF&3boW(g}t8v-sF02ANX7WpzV;G_;-bchnNa4NhkpH|!Juy9wBZJRnux{Q1! z<#>0&7GW#M^wI9A5=R)Fj?=qJCxn~&AK*+Bay}L-_Y3|QVws+^x9C$`l3xHBRj~hI zk2pKsu30VZ0zsS*$HW=2Og68Hm~h}DGk+Os_8`6}0M-T6ZNe^5!7P#w80bLigF4u0 zr@1rr<8@K)HJkTJ^&|MoDEF$~D@=&@bh7!*2sV5`WAmLJofG+a^O9^er^C^b9l3w$ zWsZyC1pg6`#@g+^%Mq^5&fx7~S?Q~yh-Ihrxw`>zX+t_0l;mnVDctfOuPVy+e01NC zb#Ta93#F)ODJiW$4Lg-#O+yV{2`{(t`aRZluNWN9BN>9+Xc#`7n=ry3MdsLjW_)0c zIvZGUrtiaz3wDitF=0s88lZ((Gv5uFm={(>eNoB+89h9Htgx=w8Vx}$U4`Y*lf=(QXhrN-k4c6e@*J^BDAXJ@8xsQ2_DJ6^EkrSa3&g@U|U!|j)a?jR9NmM z1aNL5*{TLsPW%u}fzb%&$Uby~jlOBI66yZp{~jVB7fXZaZW^b;jcTf6ZoK8a0IYNy5tl=FD!oG_1*&|LX{Cf0&-axrIIW8Tt?Kn-oNXu&6JXd7yVh~*W z$l5hv^o^iPfY!q?U8J^P^r0l!YZMPBZ$~^LccuIxl%6=exe97gdDoWMOAm|*Nv_5& zr7HGaphtgR@{FZ4y+R@84bzRB1-=jY9rwFh-ksCzf3=NrN~b(@u20ek-zd)2`{p=U zRRfI;RzZ)P(sf~Ltr%J7lzy~JSDlsL+k_|gAXp(s^l=pegEGtjBhU@V@F^AmIrN35*H`dTQcf;L7$zvd^sL!8IMzeI(V8AKu35`U`Pt9)cmIu8{heEpyQS^3-_({Kh<51iP1k|^% zKO^Bs;Xo_`Eqr3}9-@M5^{uN?U+K|PemE3UQ|XKdmHn`xI26wGQ*Jp+a3mk$0?}emNf&3dtbg?%*1s($B8cc$vi?AJ+sJY+rSaU^8YK(Fg{ z>_Pv=^AX(JsL@02p1Lt!F8PF}x(9g)ymFg9P+eIY*;hlVzL(zTH_}1Tu#d~n z;fU+O$bmOhfy&{K27TI<+pMd9%_IfQy-A*UMMzdl3cDzO_fKZZ>*#s49X+f0kp&=! z6VegXb`X<_dB*_t+I1&(2+4^oF`%YKFG7FtXZ{|&VsMS>H+%`8f-fPO5YHp>PEe}J3>n0N+*DYjh)C@;hIHW)*ShgKX5mKwgf zO!BU$58oDrxi^Kvy%k~Ai(j|*n#+o8>e!@A5% zETmsw^svZ(qfSNQ`boZ@2;Cq%9Z#V*)pw4wr6r~oLX^Tosbc!IMHv{beqc3?mT(Lt zC?f8SabjSMi4?#>pK=MNRzeJq*E-slEzKXD(1DBH~#fs zC%n9o{dU)__B~JloYj2*IGgh9S3rOE$6|1@wZCl}E*_k`;al3ZFr?0LbP;$EM$r7U zHtq?1+%2!Lg?Fb#JqAxMYz>EEEwFBW_wHB&pTG`Ii^uOz)86Rj!CA!6eNaGrgo&4$ zVa+c!Loc(pr^iJt-k_~cF&Fk`UrtY)q~%+s&v6NMO8ewu@S}aiOEM6Hh>%2lT?Z@h z%m3K(=%0GzaCX~_`=bIl588Js4PLf;hSPBRI*Xa<)&fg7m(hBhYI%4xA&< zzqTjy&3epmYXa*qJ7f0mM=*}QY{Lfycqas{vu)yK`Y>E4bk7x-cRX_PK3KPdcni7o z+%tG2ab(h6SCl7irn%L`ZYOwB8#X>jiE_NA-!11hGS9pT9iMLm4vdLc9eNQRGcL2! z^DOpGc=N0#J@O*t0F06P?|cGNO!8N-1nMhp>|jbq*b2G<%W;rabL&KE#iBUbfL7+2 zZHYfZLQ*qyhVn&z+zQXrN_^MxAwnb1cFykF=J^+Je(`Cqzn-0*-OcmrbHqDDc1ga9 z9?I7qA{JFs5?E|aYoKpR0#P1wCJa&W38$f3&iknv$;z%MP<|=M3{a{XCJO zWcBUOsx|p7tXAE$uTuA8^$59ORTcARbS}txA(yZxUpwsTziDacqh|2%iNG;AMV;5x zhUyN?iDaT;d<7xA68$uO)vsBXp+bMyz2!+Bh>#MvG~ibxZ|LB(Bu-yE2cz>bMDCAc zi;HyoW?9~bM#1lgGC)M5@Ic>9B|)9@z$w&u3QW^TgUhtZ@Tjo|y6LS|9L{Wzyb7 zq-c;?isQ`B4ALIn(c$?IKfq0NLGc)V1$(>r_PEj0?wl}Y+JI@(xM|#IlsmZz+!#RC zr6dpLXJJWP>%2*0?##=*i~U+MoV`+N^W;A0nqN|EnOiY;w%b)Ot7xvJXm0VnuKAV) zh2`ai#rF=dWEak{JXqqkEGjE>&9%7Z-@quDr#_Vy0NYif*8fUv*4%j|W!f-j!M%mE zEyeByv*wnK&e0}hhf6G;$$zE!7p~M<=2py}J9kdGI@P>F@LFE@(A)u*yt!qC^BzQN zf$Jtm`Z5a3Ed`~ebBpK9ozu)D9xOWVMFsBS*`E1x%Pi%y%L+?fmI9z#+_w(06c$^G z3SBPD0rbLx;+D)?`rHXI_OXC_DlI82c449VPPJfg2KC<@RW`Rk zo4tij5XN8kR%H(Yrqvf%9w;b+rrbGsZ2vUKY<3AroG_TLG-31E(w@BM<{Ty1k(N5w zr%#)ko%iZ&)8;mBR104EOe`*XP^DaMSyTw!D`-|(cPXvz)vL4uxpLT9--e@v^5k_bGqb;Mw_@qMSnc1BL1zq457ul)Ii$ zl<6oF^il!%0*V(Ufb!;din0OaJ(PG{dm>@8-b8sG-79~ zi~20o|E)eJXvl<6*#d!{gD9MrTf$B~P#VQC%_f-u*}_H3S-rvBK0@?UT@ z0~P&m)pOdv>^`-oxrO7NMVt32j=RvJZ6n%Nqs{c>O}w|zwh3+e-{XB_JoWnHIUQcn zVFYhOCVhEb$LnJJ4_;Rfq4TZeb+uvmv) z9X_GMjXK<-!#z5z*WuSX{7Hx0v+9IgHysXEA>5}!Z&O4=Ko|Mn?h*R`x<#yPaT+V;P^%QkI%o^inI!S^5QkhILss z`j)8HT-5rAl-9Z7rN;cQQ-%u|-JuQFfe&&~DQ$Dxlt$)9REO775A!bT+{F~ZnfOF5 zG9{w4b$)m?wQKnIu$PvNGZtXvM=Z3g`!G`^XIlT?B#7lOE|TxSsml=}IN_bPDSw(I z%~!#@HuL`022VY<-DEU;)Gt^}GgG zqE2)O)}Rp1AwV-;T6Y6Z55ON#2p`bHEy6vEh!PZ$Po~KTR_S$u*YtWyEXTEp<2Wk@ z6C8*_6A+wwlY!t#N2YdyEaNh62aRa(y(a+=XQH7z<#4iDEMa-Z3 zJjd+=9D-}WeAEdB^!l(K9QP;+N$6=nj|E@M0f*q)o*cIrb%OMn)f&_ZPUyvP>rf}S z9EIj0816ypkRHMTslE+JZvpm4?vCnX0PjaRh&sWSP`*H&U>{saXk`SapwNm57VGT< zH=~>aKEZHY0SSj-HxwG{>5ED(3Lz1EA1M|Yb%Gs`c)W@_!SN_jYc=>Al9U}$k3e2E z4TT782E=_v#UY40joMCd_8?^CflqJ+3P}{#91d3;kBWo}H}F=Dn+ha?{Re9bLU0BO z4R8VO*6aHLI}O4ABL?^cdksZD>I5UxFbV1ee;$FYK%HRMk=p790@h~XfAWI%+AQpU zmoeHF5KPO4sL?_2*>R8x>aPRF*g38V^>V=FC?rOLPoU813D)TC1PjMw0WWB<8g&cm z1n;{|TMWVXQ7(8em?~#ch$z8f4vis#J`@r=!8#O@1i_Q@@jtu)QG&7eVe3#&1bhjF z^oHPW6k?9xalKCPl3q97kNq#f&jld40Zm1k#uEGiDJaqjf|(@{DJIAPEJ7io1SP#r zaD!ea_<>$0cu=orl;Q-TtN|T@$F;ggtq2P>5fNOe*9k_KX{%oc_zTK93`T&+wMTg! zbp(mrP?Sxm6P$@c%n__cp@k8A*2QuCAVq=~P_ltfu-2Ukk>a7&&2h(2XfVO^dY$0Q z6;LkV5PT1Xa0u3@_01Po)`x9wx4O~DuVTihMtHWpTJhScx8%1jyw&s;R~1oZs*0qT>bLCm*=l9U0<=@yMD#`)$5;GzivIZA!37R QL)-=nzhQIrQeQ)I5A_^1c=j4Lc{(~G;}&rG?=shwYh`H7aV0?X-~9aIKJzzo+&n5h$8jDb z;BJn)7)}WNcbVfFkiEQ#UO@C}sjcmHDC|Nb4G{+=Lk)poyWeR^ca%4}%%BRhR)vX2@+@THT(Cq@ z6ft18%*Rm6KeDB91KqZakA$@sP$>GRSW-p)JyB|JmzJA`M+@bz5?TVLVh=HHUV9&CCZd2D7XW&^R0< z>S6ziIx^I-K0-*(vt$bCc1y01KE+Zq6}3gfuh6er`Eif(O}D|5!Mw<#r)Y*6`#TLjGb#Uo%IzQX{~Q6O0|jlCSB3ZBiPiW zDBc@A_x1!@7+uSLjQxzg96N@!j_qjPdJ9^YBG6rv=q-ukR10O*tM3Ij)IpxFp1yL(W=fj-|0u&d2XIt)0uC%jc} z^`1+y)}D*-elseMuUk{cogg(^O(oKOan^mXe9kUK&4hPzCv@Y#WG^SIK|VfU$ou+t{uH ze?NPrT`Iqt9ch=6{M9@v*>5q?%ixB5+rYxwrzLa-Ly@l|?xJ0~0;S7~*wFUL z!&A|~4qov6517}(s*UTXSh@twV1%Z|seIqCoI{})*kZvV#98-|dcZ?2WvsoWeSq53 zIp@B~qrmzaFP~%|weQSVv!B{`w&#Gt#@E{etElZ8cIhfLUk-^J{vHnh5|hn8Jc;;UTiq$k-5ScU>;+FQNbX}z6NmY?<$1|^s8p+@a{sQ(3r?squ!um{4!ZQdFS8H7bX5@ab!T{}OCY4^KHevnpO#XP8# z%}MHMm|Md9N!f-WCG2ogH$&@R*~O$B!{T39k7S!+(n7X0+1_ExLmUU69;=w2LT*Ix zHpjUh7UGN-*_X*f+HYG3To|}bkk zhQ0GyUg~#-{_|PSE*m4ZgPlBp?eEfY#35v}j?o(RHmy-@$yW{i3Cs2|%)TALeQL3~ z8vQx=5;s)scq__mH4dIuL7{ChK-*)@Y-#V&VE zOjq5tb#FG>3L?RLE~eY0Pegyboz`)yYKrpQ^N4WL!~DkQ+03*~1G|fXO{$ys8^=FP zb*?MUc49!}FN?x!vDrYmLZXE5>*ztD6*y-5ji*_4T54Q%8BOxozfFUxj>9n7g|wdT z8KR%}WOMacAAFZEhL}lxIluA0LF>I9CX{~#oM#nqLODqzr$P~kX+*zq0!YN1T31`h zp;9Y??`e=IHKES0^I0{Qh27@CC=klsz=~3AGCtHENyd&;7ekQgmOr9G?}#{HKw7GP z#TxLXct&*6kUx`Z0?7it?166XNszzM?jO{+gqHe7;qkR7uQy)8ColTVUjmB!)qVd1 zNgdK6%!M4!=pF@y)@-XbfHk29P8AlOG@va()rkzCgv^Zg#37X8htz z68*8+RLFmX7}6%4aLZjr;!{fQMOXw7ST=9S$^}|^Vt0&KvayM0VuKc`0Hvf9x=X#4E@AFY!$NdCgf?Qo%9CdgbyA^csy-7 z*{&#kl%>G7YT456UBexJK&)^nts{HA`!>Vr3#_n5N5jt-SZNQZA!{=GrbkzPI5Vb? zG_=0S^3zB3`#Z)}F=rH!9%`IsF<^cH7}%O(PSTLBNJwL*Zb`=1*lXzthJ+$^Bt12L z{4W?^|Ady1Q*qMx8NyVoW zB`@lBUexz%4wKi$A}w8z`(MGhZ(~utGYsc$v4Op_(!MUFQ9n-`6qjl`u69^4EAL|G zT;H?4_dwoo?FaTwpFUanv|o|VOBWoHjP*}3`(~+5G+e3=#VF?0>X)lHt5M9khx$G<{N@Q5b0B;*IAT4Omwb;{D-iAiA?M&_ z6?;LxpRm$-SwhrDu?Au{QD)z>XZocZ7JScY`t@~BpGsRU5i?=Kq%Io@x{B}6G6pBj z`Hnjyd^N6!PzTul5RW^Ja|&u$=5cp}Z!GIb#mcVwdkb?urbJ0C4s? zfMPC`rB_J9Ozr{<5ewz*)m%5u`ED>dhS&&I1!tK;%qii1SPOZ`#iCT7b=rG7+~rdHwnQHvRFtb0p@eqCvQ;bTjXi7ak7(&*Y%i`T<`-vhoGPp+HHYHWoctwL3^d%b zX;Zh2B5fKDQmCJ5-A9gGF}ooNY(6}zF%%v94pao(S2LK9Ihxd((+ zUuSiQ{_0ze*_ty?^uoR>Kb`S@wW_hO4L9f&mZn z*V*X-9SrFwS>u4chJzE>?tx1qU&)6?2L8%22K9&-JRX9dW4#7-Yu8H6ih+%m1_&pr zvp{~IZ5}i??|Do(T0x(#2@OXKhY1;qwW`q+ruf&!JrI z@e3O~xNpLSkHN?f$wmJb%MLUn|M6qCVsJ4Q*E55y?y1%()5zS{Ts#UJ&yx<@DE#0e zNuGeuQURo0%1tQo7FpmWz7V}dNf7iSKoch(fhXWNDY%A$aDybqiCC7UI{6Dkm7?@1 z48w{UCO2VRvW~$I7)fsLjX1$~78OT(hx2aU6%R7==$t8hxZvvmbjU=Jw}71Jtu=)j zgy}UDtQ86wqf?RMgbaiC!A$Z%iuorv778=oK>O%pVOEV$eLi~G5Hd$mGslzFQ7CM& zp+kBFFI51|sM>Sp+UqH4c@{g>r?q1Wd4zd+D0SwM-fXq!Qyo#Ygec8J(TY6(Hj9Vq zud=LS{+v+*;^f%xsKaAT;*kg_jAX;smlS&M))(g*+a}VwkY_1mB||Olzv4@sc7Ia+ z_j-JSXCWGzf`(^M>$A{cQJ%k)1i}s`59MW6so7flgV|c!oRXL3Bq`@vO3Qz8&_>^2#}~}S}-~G>aaxfd#9l}Y|>;^Z3rN)%4>gQUk$6~JvxClT_ zIRa_%BE>P7zt9BYIGy-wLI=!UG~!M=@ez#} zr+NR2csI};LH)f|72zxZSkqy`oY}!GN7whGmEr}f4oyM zb#^crMb_!oY1X@QKM^il$aurTv9q}uZo9vae;nL2qBSM!C)=9qJS=%xTYCTm$XWN( zUmVDVa%~whxt$6OgB|mJ#b?yz{pz>qe?xUQV$RtE#7GoI|13&7ExSRBaKk2Dv`IhH zieH1K;2p64m9ATr&&zAZI*nGTCWL)dvyFzz)jvP0#*uT~m8_UA0^_~@m@C=AE4G}o zc45p-hjcx7KN=9$O~zkG&bdd@gjTZeYc_FO61!k+?N0w3t!pFNOBHaZC6y;d%Hp*X z562^1%O8P7GZ})(Te?HK1IW?OV@Ds-i4=XxBp5J1HJpH^2pZ*!9jUmrJtycKP9D|- z)#O$gMDKn}9I~9VlY4_`LfdF{3$>a-tv=Tce58|fWY88mLxj^+gcO@pWo@%;CH82p01!7A!Pk?Fhkr} zJ=C_hVvxG})Xrn~zeMoWfj6-#BAe1Uy#6c4& zSW3>LI{Mjf82Z^3d2Dy={*9W%t0)MB#N}HMo)vRpi9vp!0tMZwVmF=)|!i|SX)#303<6B2ywS`)<<)dsx} zrgA0T2Q64iM<=RluJ=KcI)-FN;t>OMOl5HZ2JElo4r-|M1+9>|n6u(w>6%@-6dZyz zP8G`@@Tso!-cd1iph#)RSR%n4LaiL=!VVXt42!l)UpmTwN zwAy5ssKyof0WwzUpiTN*#Mo^`JN;;#ULlKhi0@WemT)dJm8j+cdn99(d!tO0f@IKL z>eyu4!0sss#H@`4Bhc_5P*9CBqKt=(h%Kkt1219Puu5Bp2?vIvF9G8h1h8GWSxdX8 z;T8vm8E11-EOF=^CbJyZl@zP?=~2)S%N4}(AMJm~@)3>YCY|M$f5-B_yWC;fMrY|E zmScX$GCxyeIZkKU=ijj$eV64wYv3%&*^`NRUxJ@vC&%@k8#M+#r&d1F4q_h{%D2Jz zsV`)R@_U5DEZG)ANT2Rm@(@(gl)WI=p&TdH#})J2qe=97x(2`v$#Ow%>Zny69Lq|^ zrx~DJ|M-&Gw?T%+PGg@+jV-{uB-2%w7mpa9i6PhHwoMpn#jMl+Q>PyXdXSI>lqu%j zR+ZTkdf}uPHqoBp9!!$>N4!cP&}UsXwa~{6VDl=t-{^p@jP}2=zXJSmI;(tUyDN2! zyd84}D^Er~&QM@|J&1LUD+Ns+flcA}C8WQRph^EMSlE;!p;t(o)CEjgpIg-&Morf- zWdhrD&7Fj+`Dlo0UzY&n%6G86)*NDMHFhSg!uXC;;U*N?rI6jfQ>{&llIk5`<+Q}; zX1KL8WrH>emsnTj<^yg;2~LEd_saC2MN(UosKpets7bR1=R?{ULz;Xl3qu+CVe03< z5v4Um5woQ$B*=0s{=sjWQ3vbWKzQH*P=x#p7F*4u!&^AqtU zO2ix#aI6Aj7>^opoTEdBPcie=kRx6(zcq?R+AWlSjiFQHj&pSGupMZ`9YXm>P>6&7 z&XIG`A&mLnA)O1(fs%!F6oJ@sWMN$;Y3xo+bXC3%x$Z_3!I#07t{;EXX&_<#6%bPN zrg9?tIk%1bUGx+pG-^t?8;G@`OAS)P+bz1t{Y@MekCmRrM&*ZqfVO>(oJ*QAh0&Mp z#$g!Tkgk^d(M44)P5II}#k|ywQ>%Lv!_-eG06zMzUj78Es+WKK`dhtBQ1v3JdO0Di zlR!Y;m4X=cB&JFJ1Y+9!NfuZz9UL|wF1@QMdm1g4ezZnCQ9~c}L<@0VQlqil4LjM+ zsh!;0EOeJ5)}BunYri##QSS%uLoNAJqKnHnTk9Dt)u&j zITpbn8MsEJDUS?`91)4)0TlgYwtfmpBsb=2ldK#;_i`=?z7^r5Mv6}Wv6fW;+Wli` z5fc%^tUyoc*t$q=PX>E$q;OT90PpP?Wf01fRVI3y`s@(mGy@UhHmX6i5Vyrr1LkZ= zVYGX{sv)b8F((s$rl;c1#5nwkB$caPBCu0E@qih3Lv;C$_3?)Mi26gc&MSvx_}4$JAvZw#j8KCs3Os4EIH z0|#T+f(~&=KVxFr?+hD66NUWu#qwkN`7?dzIjM=OayRf$)q0avPHOKazd)w1E)$Zr zOwc!pO6x&7iEPImxzB+yvjqxa`3OjXwF>WuO8K!zR|47Gg2efu*lhLOsQFV4(6{eF z7v8pdnri-(4)m?NXm{0&TUPJ4k=EL8BdoX#&W}13ine;sr-TH23OI)Z`aIB|SZmKm zAeR?)Y|Rahi{}I%?Y*ECoA-vv*})OGFMM>)#u&}ded5CE))34mkCIViBU@b8gz$4; z5juf`dND9)S2vFP<)zWTTk{Z};5J9}HnqcrI^F08#__m9!qHARUJy(imKS4kogeQ{ zh(XhioTJV$ENRLh_hFQUo`wd96B58`mh)Q0E$(nWAA)zHY z)5F-eMKO#8{@s6$7mXiYTngfqrQfbqLyOW{4-J~-8FoCx3b@GR2sEOs+EEdH5#&!OL zqkr{a#!Xu^!FLs0Y|`PD(1Mms(rL@ItC35wr*rs+IQ(vt&D#v0`#80W>0151qO581 zM56z=WA`0(KHPHfp>@={m*Y}7xsO_ZFx7ST!06a9d$5)i0^roG4D*S0?{XwWZmh$0 zBc5D32xv}%kzDzsqU^!LfM94K45OhJ3Xbc<~|>G_uYM>ttrv%xB9?F)4vOF_%3JS)CNX!m8V=}4~U8twtL zvm4cg>>&kW3u`sqvNj&Vlcvef(>5KIv1VPBTSH#e#f-uhl&)U`v4?SLP))-{&%Yvr zT6uX2%7b%IRc=OCK=usvO+8@f*pBU*-qFz3pvHLC15gD8IPYS1!Khopyf!TcdMDN! zX3N0S7HqNVRBT+&dn+Z_y-KgdY0#!At>5Pj_M0>WJTR3U@k)l01V-nUm@K=rY zZeKvJ?={k^az19L=pTYHrkznfdzx$YWa?-byUr>UuGorII~~d2_L0l{`8Kq z>0DJlP4dPAZ1DY-=-r^9-RSlMY~KAnR7X#r74ZMTVzo>Sr9RlL9!cEwDgSa}1~*}- zF<`}U z*Y&WaQS!$)lE5~}C@S@#Q@?Y<5by3@NS%nZ#Sy?!UI}@vd$FBT;{+UzR3Ixi`~b-U z;dJmpvws?hC>t=Zhc%Jka_12WR-j4;tN0iDqKR>&F$6kS<-M;$OLH-FbXca(Lplh1 z4p%*3EWcb$mVGuDODhDHNm4d#<(^Gh#-KoyBPD!B7U|Ay;r1;VQj~DAWv}?aohd2h8)(N$6)K0O;lM zAQt^2ML*8!{nHRmo`k*1f1u+gQqL**gIyp9#C{59>gy53JQA|N(Ix;xn`}lBwCqp; zNdp{iSA=+<8p{w&0**HF?ZKS3MrNZM7}?s=wrhnTXkpPpy@eIvqAL0ET&Hvg)}Rf~qcuDHqRV$E&|F#tViDR_V=aj2Pwrh8D+ zb%@!4i0B4HS3-QIo^0S@jP*gt~iP0IJ4N`~w9>4EHm^lw&=m1#M{sR-f}Zv^!Pzvq0oH!Fo(k8d*;#s{A|a89=?!tY_OlF>9Y^ug*?!S8G*I08rI>l>ENxnO1kI z7Esj(;Hl`kLwiS^i~AAnV3(}>8^mMuq**SD@GTn+}y!O&VXgtXnK&7DHfkq_wGCZ)*!vB`%kgB)N zg$k_Rk-RgVwv?H67-cs60$QYZ7|+4N?b1jbgvP+dtd3J30t>C!_@bn?v!G+deD=Vg zi(N>oBjhgZv7(NJYyW|V8Acfs6dR~Rp%d_#Z>j{wR{@|qxWgT~48&cY$W;j1HGCtuh>)?{v{ z)r;5beYS(eKbRd;{4VWUBVcW(y6u_zpxI#PWMQTAk_>OAu?_S7nRE;GhsycXUw;Cw z>%v>E>$bei?ki4=NqQOF)vLqK>C9D}GD^Kjl&3=w^|`M4{*PYyq>6ac1IMxJ-|%{dT#}8kA@+Ty}&%BN$&gpO0r?$xhi+quEj6MsRh_>rU)y}4yxOg zt?Fub5W!b#nhH4w=^?YRra_u4plUM`iLugrc12 zx0>q1v!OTa?H`SkcS1wz4a=A08}6(>Te`5bixO=DBvP-IPs%@Ir-aKjJU%=rJ7MGa zw+f1}x;J_gyAyxaw`tEJLqFK}He}_#?-28o^66h#?&8F8F2a5NF7a`-X;EJhkb>`_ zW|~BUCgX!17sID?>(xcIl3y_;h8vu5yA6*U2cno%Fr2-(I3r>SIN??&bzwrv1GEp& z?uoiVPQ0cS!3D;711rP2U)bb@6B3U9LMqT!BDe??Jl)9NT$nmc_!I^H)(B8ca-F)C zO+>UZJx*?gkV>6j=+8bJ-m4dJav}yvn|0DBZ1?+)%{I3gK!-zZ8N(h#J-AjKg1copddq|HbY((qG?(&sBh z=?6$@3i6azAk}Not$xhXkyLPRB794QReG5R@De@t04zjGLdrz4BMsN{^qqH4{(nH9 zd(StOC#v6Vw914?MdCc%Y8JP)EGBoeHr|DR_y=HSr0J}|kl9Am3ufrBXfqq??aWuO z`@Nkk4*j2{!RK-CO#7=_5G*q`#ZmQ9^2|och@Y@*tfuQ`Zrgm;agw> z7_|Hvp40w8S~hFJaNO6xB|gn@EAGL`z|8<|(>=JWz?A`~|2FrGcW=@^cj~ZOhevhz zl@2fI@Rklu&uC1Nbl6*mBXwA)!x9~Oboh)8-_W3&`%Fh%)?xUw8sh{V_SE4>9Tw{F zK^;1E=+ogA9aiXYrw*%i_?`|=sSt-kmvux8MWFbpktpDB{d<}YojTm8!&h`zrNeq1 zp3vbX9jZ+6r&<4w!ywQvl_1*Z`s#?`I<)I>mJW%Ser5Xi>fhj>(Z65OVfAmy|I-jt z``rKW82_gsR@>+PZ^!sQ4YAff_kTLZ(D1(<;+)@%)&Kt(vv1aA^PjR#>#hCP@nf+t zj455Rte6X^`LPR@E_05>GLpYyI*l-uPtuo+>1^fth5StRx&RsmOw0JtVh*_nyM2-W6W63;MX)$pn5|uAoCC%XD*ymD@eh-C- z#dFIh69tJ6QRg(F0y}ErlE{4;*AE**dGwP-S9RjBihmT z&_)=!h)iSQow`K76!fhkxK{lmGb753Md9ZRm-)8QTwC7E#bmZBj4q2RGSx&hsQ8F5 zj$Pgu#cDSuup1jc<6mSS1xB$hPbBs=89CG1@XWA6k^?QP97g?~gNnbOEqtQDScEnX zvbUb-+>e@HdQbC$i4$ILmHEG#jtb|Z__iFeXE9Iyibbc07xwU*A`R|@=Q%DK(djTG z$`g#o(LoaO1P3BzBcBhr9w`_3rvSe|5|Jku3w2Rlf}bK$U4q33rig}M77oyQBTsOv zo_{L=E^Bi;EG;M?ScOE42>yUHANh**csq$iLNov_gZ-2tPjGcd9QPwna5oas9|s)O z35_66@M%47P2#v$kVuH5xZ=N#l>I!WEM*pA+wu|$2yQ|mAqbvDqQ))*ev*QiA9;e8 zQt_{?ktdje0QLm(1o4J~`wn@6pCeIY1gGFsfbs-CM7o9iEx?s-oHWqKX25+&aevm} zPsk@CPw*3*p^!iXd2E|W69f~H2v6_9|V6zDny>(Ul4E1K)wd>G7>Qw-;d)E0;@Cx5eBPxg3Vd55zrG%>#q#~B4Z9w zu}VYmJ)~`*A$W8E#-EG@8SVzsR^)|&=miqx=K;Qsv;!3g9vFlnK%U_C9M}c&1apT$ z?Z^{cj6}U(3)pTnIs!bwMMyLR1pDM8hT4WzIUnQy@>r+^ACUzd*9nO#6YP#eJtjC+ z#}m9wdC(J_BElCTPp}z@geEx7rfGuiR9* zwX&jeN9FFyy_GeUM=KjDPgI_(lq)Y+Ua#bKnRdnPO5ByYD}7hyuIyd8yTo0EyJqYv z+BJVy*{&74@l#3Dq0`tGsGl6*d|K~Z+^YPeQ zJ=N9K)z#J2)t6Yh$5eXIw6?T;PBxn@82>H{U4-VQ7J@Jji2l#LT-aM>f-sXx&j>LeqR1Vrrff{-RQQVD`(JqX!zPjz6WV#EVi<`4-I zH57V}igFe~$n8@+GtZR=84`df)sbjppV)&9Ftu!3(Wgi+=b}I)Asp#>*22_7e33nX z-%z+P(Jp-uS;L6DWo)T4Igvg|!znJR1DcCBECnuukg(^%+TYg$Qak)5v9kZ62#0t@R&GKh zbt2kvi1o690`Gw&&aa9^h2CfSY6cq^y3aIX2D={GeM0Q&uwKtnSFWgS210}oSve>x zS9zDJWbef!*&ip@WLYgV47NS|_Z|9G&)m^8nP>4;DyJWGhfzyaQghZn?2)jmw=}Ja z#e~0N`XrCN8NS@q;STH9?BV9G6ZK$8kbLXdnr89lcCvCqR!*xAgXvb$6~&uiyP7>F zUSP2i&d`H5HI3y(bP$)azeIG%%b7GDQdu~atcbE=i;(>bEpl1CtEcRL3R)N&FZ-v( z%IT+FEoJ}15wdt#7Eh5%-kyqnieJmhqDK9pgEvD{5p|Y(dMm?Zff0mg_+Fi*j}HV=8H^EN(d45qpd^#C0(>(^$ur z@$vsd`UR0i*7n<_tmDv=+7~$HXqmulu};r(zi8Ut2rkGK8ZV4--Cuz7-srifC(u%6 zWtDA`Eyp&|HX&!y#PRa7i(5JM30ZMiEm^CJ(`3I%R zu^H0tuN=x9Tj`w;$=4PmV=KLdTnuvAY3HStp~!epD!K<&k4!V!>OT~vvYTLT+imjx z8s@6;{u=I%BZ*%FrLV%ZyRH>78Kt*FivL-6kqD*T)nyg#Hbk=kMYi3dTvj2KQ4_%^ z45zz=ZFfj&eb%Z)X?1Q5st7o&vtit71t?^{!^)<_^!CWfN2KLp95cb1L}RTGRN7*c zBOr`jxjr~b@$04EkBqa>hH;E2WiRLXOda)=_q`HnqZ;zF+cHkz|2!qHT41+q=-Q;QR8aHl@Fw zDQRc-?l(EoVV2oPZST@taMBbz8a!C~>yPe4l-Q(oRj5it$Yn)*X?r&WWUfIDWqze5BoqAC6La`9W)sYf{%15e&PxDhr}EY4bX=M`a5Bv^zv(BevI zw@LcfaqqVYmEVSY&kPf5!-SJ?eTqF|mST%-^b?QqS@v10ZlZ@>Z}p7$3@d4^#J_+= z2*%k#4oo4VIc4bPb=KOvDd|NlS&o3qI@|UR_0Rzi>4$ty{{zmlddYW)aDlKTGuhYX zcH-l#!E6zivvzF~I(6q2-?K)LSq3KDV{k(iL)gSNU0ZhnLs{HU+-301PCcY9WNX@V zO0c4Vt)k?+2Ii|KSQD#ZEMawKFhW!7X0U^8I*LW?`!?3L&k=KjMaJ7AxY*tj)vuVP zZD(;G8`ie7V+bhhVznc%gc`ZwP_9xt3YvEMdpP|IBJBQ2u}=TU_@-jaL9rc6jkD}W z>4i#~kuU7`edcEWXgeUr4*vy%m6I!_<=a`X?ZS?o9LiY-repz{g70oY;+jbAx~Up- z#di^JvJLT_T2F0&VeW2_#c!~}fyEVd%nf!h{u$Hr4J^Ce!={QWJJ+|9L~#jwy?r+^ zhke{W)zi!o$g*||PFZ$SfQu_>L7&}~+DbJ%x*|9jSV1(fJqQ~eeJ0qBXp-owW%Om+ zs*GE_z&b3t6d$*FUE||U>9@m54+A|0Ze@bis$NqyP50b}t7j)Wv@-R%!hY<~-ZZk1 zMRx3IDw)j&bWAhZXR`$zyP00Q%GP&GH-%kgpLMjGX3l3&M!VM$iIi2iVl?v>vc`Dr&lk^tR9&zz9j~00R`PXUt!AiOk;&zk~@BnWl2p2XS5bVM&qjm zhWoGatW%dBwoUlNtZ{Xs4DfR^2ZvdR65h)@7{wY5uSh(0Us}czlyq)m4U>^{o~} zGPe}F0=31A1BD|HGbjfdJ*tL|V9UGq^ejdcP?{!GVXfh@R2Ku8;!!`MLhq2Rz<`t{sqBq;8DCoIkexb`mSQTQt&VIKhLK|WSBpMz3id06+Z zs4LN;?2p-mQgmiBfZFUVEH0Kpf>;U(;$mI^R*DN-N;F#70st*055MlVa!r^68TyAI zAB(KI7J2d;iz&XI!q(i-%#8-SnZM8AE|A13&s&^yE+&Fh21~8 zG0fO93}dJ~8Ecbb*~X-`oko{F6Awhat2u zmKAwBEAsngACj-f>a6^rF1Z4e*+@Yx4`{s?Cp(pDI|b&4W$??OLEcYx?jMRx7KCV! zub;Gi0E{4&t_QHK&PlYb9??bSQOhLYeMep4z6y7Eunp|;ep~6%u7az%t)O&iH%!|c zUS)JQpshf^PjQIv5Qrc29daeVPke)Yc^#>&C(#m}RFgM9_RGR4^Bme6=~-3 zDSQzQRjPy0n)zk^<<3v7m(zc8Cu(Me)!sKQdaVO9>I3T7mp`&Ty=0Ta!4~&gKe+M) z7OFt#QXbe`RS$oM;5iWL1|dRRm1BQUcM(=Ot8Rkpqo@&^G+F)WJ2t9!lIg&A%+(S|5zrM<%10H$2Lw_stYt?6tnxQG>rHHdoYEXW1`(2Z|M} zS4t;wAsdy_F(gFtvVxS6rlDW69Vw#_3fxZVC(d9gsqLb^f)G^e@EJBfb$;BN*ol&F zDbn}o>U#EBYG>22)9gy>i>Ca4Gk?FnriN4Oy?zVD8?4X$?M#3FlG*RyV_G_fh4e3O zb|VX_xcD<$(!WReW#~pb!=+6wUArpN>;t>T>reR@BWSUDLzCvh8PfY zI2dEwVNi)JGN4cEIkjMfV53O(ud~uNN*!6t zJ{piOKEYBSuz9d`rJZX$6xYPz?6OvX67GW>$5mvV{-I9Hc)M3KxhDg!ehRHFyII-{ zGk;yB@1U!M0%3S5xHLK-vArV*7D1(%;PelpYOa-USU1=!(XJBdo_ zWlY^*mK@lnYXZC$zayja&s!V{HZ>&?vbQRhe2|Wom2ZCD5={7WdJxxya7`^cK>fP6 zco2gWhksUs+}MDJw}9yVTeT1(P|ton4jWa@2Uq@XbAJ*nvy@L9N{ze+k_qTK))1d{ zJMeZTqxCGCH`j{Xal1FSBL?#bV1!_=fp?{f2V($CHYFogRz9OBa5bDQT*EOq1RKm; zEyYrrdI*zoNG3+tdm~ozwLsNO?_g1M$AQY6nLa@bm3&#i1|w)6^B{7vw=yDFD^04P zP&-#j&a@!KO35bgbn;m6A!TD}f=Iq^AOOZ7H?>0Adp4?MAbBCrm_|1giPFX?HN~j$ zCe_HYj;TCju53u?nq{3p^=UnyNwdCCvG6AX-(e-lz)je7k!-xt;~i#=26FsvhW4XOt3D_@^7@3g5IXw zvQ?fl+bVA*WOdzQXl$N!N!gF?SvV?!{UiRDvy^YK++=0pXK)tK8Cl8~4rPjUvMPBH z5IX$G+LRxNeFil&7#TX#$ih@YYclrP_tdEGNLAZOO{-f&!I8JS;GGqVg!rKHdyLXo z$_R@x+N$IvWho7J1av_mO8SOS%~>)W2<($3BOG?`tmXG8^ZbB zFu4%`d{(#e7)wv@VvaryioknTmFtHB8+G3ItSEi2_&0XngM(TwCV!S*^CVmZ0@Bm! ztN&(;AKcKT|9MTroFiNKm|`!@{4e;#kBx2O5zU;$QU}G0ec7l%y-ji*dumY6td0mX zo&JG#|Fj5a`gtDsf}>`>hMHIi!mua?Bh=1cQ{Y@C7R%Hx*o8q$T090f ziTO60yyd`Zws3GOPnT-yhIyo3k_kYIKr~_fBXJ@%Cc@#*h{YKWp|5?&i971VZ4BaX z2YnS3jtHj5yLNNq$JIRUgucPwT{=b7Fp~Ikhf@NcCf1$H*p)_t9y`0;n-m zy=mjO4)Cr==rkdm-`&Q)IlyiW&YJZSXefG5tJ33Y1!t_EqE{6NTA}t>V(bPD8N^L> z4QW})Yz?X>QQuJKGfuXl>OHu9XyRaYUCC2M_!+Tm+Y5Fx{m0oOq(5lPON&R z2MO_>wH(4Y6a)gYqI*{vYM_NiMqlNc3@*A|`B3)e#&WI1W90XcVc63>)pjYfdan>F z2m$n#vE=m6WNG+eDb8h0!?KXVZxm!`zyhwRM`3t8E}sFm`tg?;c;oo1egqaN zo!5{!?AZ|oP&1rP@>$xDB#YaU6e_6|7DvVQ^qP_(o$9wuL)9KgnnqEbv9Z8Cty5?yb4yfXQ%v-b??22EtOk2-lD#xqtCgr@`a`h2i>dk;Y}xr$i5r<*n6DAIxhx}+L+WuU2th|hs|VYXU_ z8uj6#tFIoLf(}=PHB#BD%}|5F6uMiP?IGJiRv&Kqm`z&)U~r7Cw)~VI9u1*cwiQaG zD!DWs+l`Oe^g-uf)jn$lfEZkeKCYua{sS$lce+v~2c{-uE+x!InEm{~@}V~5P(8I& z3^uqbqJHpJs2}@fL^p6Cr_@9`Ln0@5THX2qX#r86F7ya^8wi}Gd{_E24$JO}J>>|* zJ}LPUxs*PGDFQKBsng7dGj)~mxP+Bu#5wQQq)W^F@hDcV?69a~umEKH&PhHuRu*!t zyvA>O^8$!*_DmdUovc*PTi9V+!iX4$a>7}5)ZM!72s-UduabN?RDn@{W7n#r-NR(B z)@4yIS=xNFq`j@a5`p{cD8_|CDq@l^Wv$Y#d>MS3Su=-us9_5_g1v;r@a2tuyXkfU zxLB|-HBrM-oV3xNKntS|$D9~|QRxC2H4?u#?UYsuxT=!HBeW(`-}n-6RUP;qMMhU} z-gWa`Z7vR%I@|qABe2$eENT?~1bqQL%EJFFXbEfcIHFPx#;8~x>dyQv;P->BKe#PWTZ zAQtYXEH~;bcN;8^!)yL2%j(3tEFU*mmJ-XHKd{Ws(ODK5EEoL0SWdggvK~F5Q05F+ zl3%zivJF|i@&+OVf{mTVfnnKEsjO>rQr#NvsMW6sSs|58i6*4sh%q~`D4ufQAnyy5 zryfc@s+sGCf&$ixTUBp^xJXiC+Ur&OMKf!5R}++L&z?24mEPD-t@XwRw-6K#f(VyOd(19Lp}j;1bV;G zA76pqp8&vFhf6*)`j_e7^F28b(&+4HS4*wY{My4@1Bx4Dfuia0WFf#;FFaHZsDHM5C zZHDt!y}Vd2p9i4UqMSl38ZipIh&B1V%k)i$CKc-L&OqrrobO=MG|mGleYJ@>`beRPI zFggYPAq`qk_fQNLh$-z2L@QDY-2P$*EUlDEpU1TmdGNC5pb0cT4`huq-?j%!H;ub` z8v9Jy-+~_s?*WefmCB0FgPc#Yj_BY9}bj;||$t;X$4W4e$uhwud5n#Q&9pV4eHO7Meu=dhBX@A2c3}Om*-<$9+C) z162-SDgn|Spf{>H{BP*rSavT1?@Yhul!pIAn*kzsC_ho`7Bd(%c{pN2I0sDAt-u&a z0ISS}+U@C==`eICFxU!6WjR+h4}5REBfZ`(4X?+_Q#TosN-M|V*O{(LD+ka3L#A@x z*iH3IL^Htw>QsGjEWI!|usrOcV>N1{xdrM)K~SfcE)gKhU(&VJ4~Uz8E(6 zA*%9HWg%72(XoW4GqFbr2lwh58_ha6I(YiyJ3BD;Yn%7xgNve^(&iJ=atm;F zt-|KLvBdppT}!H=9dena-J-X_BKbrhybXOMUjupQdvh47p#!La7|2Frqp0R(L|KS_ z$@b`qm!{+3NU7{AKwPnI?e<#IAYUJn5e|X+ zL9*$6&|M~dQzythMo=dmc-iGE2F9Kiz#9T|f%r@&dN1@8pu;jmi%USZSd{ zYwAfx2)JSBhFE3f5Gmm98dvXaTu;b>QKDV>45y``xLF%L$QMo8aDO|>zmB&C5uE7< zv6I1y%YGU?phG3df~-;Qx(u`nC&TYS+1eoq9@{?B8oVmPtlu1fv~(Dfy-Nzj(e)qB zKU`Q79R4lVaxkE!j9iL6{i1#x;*>HkHXesKmFo^A=+KWtWP~@EO4yd!a310@7hpCw z9*V?i=GFXDD(jAJac|f_-p~as_l9dO!bn6M2VTOQzKuyz=Y-hO%8{hp^pn!cxkLcT z$r5#UtG4(6DE}}-etcPm!?@@8y3$t1ch2YmRid425{Fy(ImqgbY{)1&en=;dm1mQ1 z3>_gyep~jvk{gu|{l6@~Z#j747>_k^Yqu$5Ld- z&t9O=^RCmzGZe}9$#rb|szi5oj5bGn8qc!vtE?)R#}qnfB{V4DXP;Z*KO zyQ}2L8mDr>uH15#owG?V96$&|&yIF(L%6U2EkK4|AVz?b0-#2++x z))>QdRb7q>wuoD{`U7~bIEU^iu>;7}H-F(q|ao+7PVqUm$=|4=gwResp#%p0lUl!nxoDj8h#& z0Mbeae(e+o#L@m2CRPqHVEQ!fyJ)fU52P>@>&O4Wj-ttMk`;V~=T%1Rz;=!A*yD>` z`i?CC8I)sp!(4-_F}m}2vFqclQ3pXo+o`QPS+@y2Jml=?(+aKB(UrSF-TwdJ`xtif z>gx!&4N(rm*-Oo{{CyqbrG4Dn1$sY=5o>fhc=B=tlgW|(ljJ>z^#JB@JyZ_ZOjy7} ziX+u~;%$RYAP-wy$a(Zc;G0`$pfKt20Eu(UmxOXP**z&dL= zvTA487_O5|oOZwZ9*8I#Fw2kvx>o-OnE!9w?x|4M;+)I~+JX~XNvfFX?#%^4){Qx9chd-69#XZShqoF{&OAX&U#2gLI2=Syc z{)7|WV==59|I8CnK+|d(b4*J0{JRTpj6mukF48H)7qrcVmYb`GBDlIANUg`S4GTO* zW7vTwntBfob8@`q_y;oBb+iuE)p3l5)6Wl=uNW;qL8P!S64cv;I*0Y{8SH{k?Q0l4 zY4J@|!)OwTT0`~|h&cq=_G0fPsFz|mVtfJ+uw6l2Nr+`jth4E1H6qn}PBH`zR31XF zzZZ3Gf`0E!pwY7&60HbZIr_c35Xk8`>%tSLAc!EuR@A1w=ynpujA5wT!d*(thlvmX zQVHr*U83Va)VUhSB5UbQ;G$6XE5Y#6#i12THrTxtx3E-Tw%$F^r-ks7!_>&*4>WBZ z4rmsJh(d6(9y*S=OtA5E(KrI~Zv~BllgPRuL>-7(VSzkQilBZ-9dqe*V^+PxG*5F>Ju$Lc6@I>oXdm2>-{AtysdsRR9JE}V1 zo_=$~gtt$0(@z%zI5E@TQqh|F1biz!F_OyY$dez#)2O7#0bI+{j>B`DR^9YF(#mf^ z0C#jhRnIV7=GNE9MGg5ChcNJt*9q{&mb}v%UN(=ON?((`AL9Kr?jcSiJhCfw>gAn? zGnOEzaXa+(;8d5Fk_hQ{7Cj@2U-6dULOeMB8BUz;@*RM$;2ZpMnEtlqp5Z9r!Bjc@ z_M#!Ej@QF-UQ&sBsY^i|3{$fJ?An3gNjUOHd9APs03fE@!Ml$;>K-O}y%%GXxTn+iH=21$PgeF= zpDrB{E?~l*fa#I3{fzn^?w_`|T4gByiXx z0I)fA&}OtY<0E=>(c88MJ3m2v=HE27p|~W0@7=GqBZ`1INw3${s28%Cy*DK-dKSEk zv^yMDf4j?$$IT|oP)x?VcPQH<>J)I?-llFj0EkXn*nnyO>?qNNSin4)&UE~(V;%m` z2;(Zc>J@ftT72|`SGf*wjh@<#S#lGYH@B5o$Z~Vri9gYA>7+mJgq z+7GShZ;R?mS&KZU>Fgc$c%D-{wDX^Ny+k~_KRNwbrW8c8Su-}8=TPJP50~&TgeJK~ zZMl)PotfFv`!X6=P6uHReDPVgk$3{do8SL=3m7`Ha>sI zjGE6;?KgAVwp~=s+=XyH<8NXG#;2ej457CHlki^YMbZmBlAxmrSxtD0n&xNn7m&4K zi~~zZyc-w@xt@J6dvt4t=WgWAN_o{QD9E|N5(_N$3r9%+Y;L{qWOPQ^_J9_VJgfC*C`FJ5n#Q zTlpQL=Kc*+8Sk!rwJdQ~N6(WllI-Z|RrO<(&{6wQ5|Miq{}O9j9X$h5pW97jRR}t_ zVHJ_ntLXXi8_4o!DTN@R=gYWLpy$gxaF)s*rKXimOF^{-@w(&l4{Z8@gvm+`x0{QuLM&+KJRd=zZhb{C6^POl}3I zKL>L4`OW|4r!IjX#^MpjDOKR@x}qrG5pCjJSPOF_EYf10z%PGIJPsN9M@vh04^%js zM_H%TAkNxo5;SE_uh9cBDX5~}Mp%oZkCu(P>;RHKmB8e0WW>p8q4a>G`u36zkQTc~2C~uoSxIPtPwNmaR9)jxDr!Cj61-AEe@~nULKT=yh0x=~PK$tx<#FPxb_vr$NVSPa?c<+%%I zcxLApTS{gW7ZkZHc_6pA@9$?RD74HgaJkS1$P4lcn+k8~F%fF)VOda2xiOFQuoNzE zS!OM8gRvn(lQu}uds@_m;bP7=^x+|e^x`N(=sYkYMK@J#(H~Uu=S>Y8k%tC(XG`*R zeQ;G3Ehs2-p`*q~H4$(smEWsXoS&z+-oz$|;*Vp?#e;&W_j#5l^X9=)CQca9I}JLU zv4AvA6wF)PW#{?gX`<&|8w)TZO>M46kEnZvPZ(m;;5H6a6IpsZTsZG3&bh?0r~tN? z*J!ftBI@1!{T|B1D8lGU+(ktTid~Rnx*M9XkVbVaa>-}&!8TM5gNS0;E@kJZt~hb$ zH||$Wp3rACEeUBj66Ir%>`1S|mA!_v-bfXI-y6_BenZV)1to7v}iy|so!WG`q3sLZ8jj~)0^b!yD<^Ik^T__|2W`B zUu#-7z}`qVkdFaOMrwydc}j^*@<&0_iGTOJM{v!k*jV8`%!F0lA#k~|i-&bkq17~i?SgJae;N`yaR-zf0EZ7+Y}9`_Wx%MH^#&~l9BjY|9AYJ% zXCPJ>aEk%=7_ioWKN#?)0i*tAFgBq6B?u|TccuZy88Fv?g$7(o5bX=k8i+;)n~d-6 z2Hf|%^5e$$c>~`3UHN}9q}0CfzdWY@$&m8)h5y|#{ZEEeZ(sOd9n=40NZT2M{>L$8 z%ROo0Y4)zimhe|`L_y)q;qw-h)~V5X^Yb&GlCk#A%bz5;*_G0+@y`*3bHPkE7D#X*l1cdgS(sR_ zWs}8rtZZ2isU$?s&np_2Z<{x7!3?1#`*PVcA>+cvvzJOcw44|=o*KZ~sV~0Si&^pV z9Cmv7da1Q(v}+tzS}GNUO>Cj}4NsU!22ip|4?=KY$bgcpV7hMqB97Mq0%&H9C; zn2Jyq874$#hNXlSh2)yf;JB2&H#PajIZ`P0Ct`S*5S|h?<}MxaE=K+6WO6_qq5jd$w#?E27-=TT1qES-XCmdYBNM(tJ!*QDkmJMR+Zj zGB!ep6}t+NDG^1@a>FY)j?+HITCErvHXUu$uxTqg4~&fzVmJN1I&~#fh!k51yqi*l zAnjuS0fQ0f|W=_a}>~w3y5;$69B(QB6>iNun5P{#FU_H)*B?_l}OYU!Eg`uL-Y|2Ncq7adK0iWwvv<|4mcNS4DtkDL7I#_!5+BBnSi@FL?Sg3d>)BTiU%KprV^g_@XSDbkctTIF!BTkxb)uF0(N#|EKwN| ztB{G5ggl~FVHQ#f@&x~iM8Xlgj6@wHc<4z)rqBvO%OV&f+9LS#q70}MA3x(Gapw0u?h+VU66%geWxZ!h0dUQvFqyte#g`I++Bn@TsW+LW|8Wpmo*jLq`qF`FlE e&fQ$G`QYZ-%_pVJXEqaaj2LfZXQip1_( mut installations: impl Iterator, path: &Path, ) -> Option<&'a ManagedPythonInstallation> { - let target = if cfg!(unix) { + if cfg!(unix) { if !path.is_symlink() { return None; } - fs_err::canonicalize(path).ok()? + let target = fs_err::canonicalize(path).ok()?; + + installations.find(|installation| installation.executable(false) == target) } else if cfg!(windows) { let launcher = Launcher::try_from_path(path).ok()??; if !matches!(launcher.kind, LauncherKind::Python) { return None; } - dunce::canonicalize(launcher.python_path).ok()? - } else { - unreachable!("Only Windows and Unix are supported") - }; + let target = dunce::canonicalize(launcher.python_path).ok()?; - installations.find(|installation| installation.executable(false) == target) + installations.find(|installation| installation.executable(false) == target) + } else { + unreachable!("Only Unix and Windows are supported") + } }