From 085b67ee26eb8494231a93046289c265b18f9c2d Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 13:18:12 +0200 Subject: [PATCH 01/50] toyos-elf, toyos-ld: the machine is a parameter, not x86-64 toyos-elf decodes EM_X86_64 and EM_AARCH64 and refuses any other e_machine as UnknownMachine; Layout::parse takes the machine its caller runs and refuses an image for the other one as WrongMachine before anything is mapped. RelocKind names what a dynamic relocation asks for, and RelocKind::from_raw(machine, r_type) is the one place a number is read, so AArch64's RELATIVE, GLOB_DAT, JUMP_SLOT and TLS_{DTPMOD,DTPREL,TPREL} decode to the same kinds x86-64's do. The kernel and the loader name their machine through their arch module (ELF_MACHINE). toyos-ld: - The link's machine is the one its objects name. The first object decides and an object for the other machine is refused by name; an object for any third machine is refused. Before, anything that was not x86-64 was treated as AArch64, and one x86-64 object turned a whole AArch64 link into x86-64. - e_machine, the dynamic relocation types and the PE header's machine come from that machine. The three copies of the .rela.dyn writer are one function over one table. - COFF relocation numbers are read per machine: ARM64 and AMD64 reuse the same small integers. ARM64 COFF instruction relocations carry their addend in the immediate they patch, decoded as LLD's applyArm64* do. - An AArch64 GOT load (ADR_GOT_PAGE / LD64_GOT_LO12_NC) gets a GOT slot. tests/machines.rs reads the outputs back with the object crate: an AArch64 PIE declares EM_AARCH64 and rebases with R_AARCH64_RELATIVE, its ADRP/ADD pair reaches its target; an ARM64 PE declares 0xAA64 and its BL, ADRP/ADD and ADDR64 land where the section layout says; a mixed link is refused. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/src/arch/mod.rs | 6 + bootloader/src/arch/x86_64.rs | 4 + bootloader/src/main.rs | 7 +- kernel/src/arch/mod.rs | 3 + kernel/src/elf/index.rs | 4 +- kernel/src/elf/mod.rs | 4 +- kernel/src/loader/mod.rs | 2 +- toyos-elf/src/header.rs | 32 ++++- toyos-elf/src/layout.rs | 9 +- toyos-elf/src/lib.rs | 19 +-- toyos-elf/src/rela.rs | 47 ++++--- toyos-elf/tests/common/mod.rs | 1 + toyos-elf/tests/crafted.rs | 23 +++- toyos-elf/tests/real.rs | 4 +- toyos-elf/tests/tables.rs | 70 ++++++---- toyos-ld/src/collect.rs | 98 ++++++++++++-- toyos-ld/src/emit_elf.rs | 247 +++++++++++----------------------- toyos-ld/src/emit_pe.rs | 7 +- toyos-ld/src/reloc.rs | 9 +- toyos-ld/tests/common/mod.rs | 21 ++- toyos-ld/tests/machines.rs | 146 ++++++++++++++++++++ 21 files changed, 501 insertions(+), 262 deletions(-) create mode 100644 bootloader/src/arch/mod.rs create mode 100644 bootloader/src/arch/x86_64.rs create mode 100644 toyos-ld/tests/machines.rs diff --git a/bootloader/src/arch/mod.rs b/bootloader/src/arch/mod.rs new file mode 100644 index 00000000000..b3a5eadcbdf --- /dev/null +++ b/bootloader/src/arch/mod.rs @@ -0,0 +1,6 @@ +//! The machine the loader runs on, and the only part of it that knows which one. + +#[cfg_attr(target_arch = "x86_64", path = "x86_64.rs")] +mod imp; + +pub use imp::*; diff --git a/bootloader/src/arch/x86_64.rs b/bootloader/src/arch/x86_64.rs new file mode 100644 index 00000000000..0523e32a242 --- /dev/null +++ b/bootloader/src/arch/x86_64.rs @@ -0,0 +1,4 @@ +//! x86-64. + +/// The machine the kernel image must be built for: the loader's own. +pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::X86_64; diff --git a/bootloader/src/main.rs b/bootloader/src/main.rs index b8a154ab904..54da41ef3d9 100644 --- a/bootloader/src/main.rs +++ b/bootloader/src/main.rs @@ -36,6 +36,7 @@ macro_rules! println { }; } +mod arch; mod attempt; mod blackbox; mod bootnext; @@ -341,7 +342,7 @@ fn load_kernel_elf(kernel_elf_bytes: &[u8]) -> LoadedKernel { // every program image with reads the kernel's own image here. Refused by // name before anything is allocated — ELF32, big-endian, a version that is // not `EV_CURRENT`, an `e_type` that is not `ET_DYN`, a machine that is not - // x86-64, no program headers or a table outside the file, more than + // this loader's own, no program headers or a table outside the file, more than // `toyos_elf::MAX_LOAD_SEGMENTS` `PT_LOAD`s or none at all, a `PT_LOAD` // with `p_filesz > p_memsz` or a `p_vaddr + p_memsz` or `p_offset + // p_filesz` that overflows, and an `e_entry` no segment covers. @@ -350,7 +351,7 @@ fn load_kernel_elf(kernel_elf_bytes: &[u8]) -> LoadedKernel { // loader: the pair is a (copy length, destination size) pair here too, as // the image is sized from every `p_memsz` and each segment is then copied // in at `p_filesz`. - let layout = toyos_elf::Layout::parse(kernel_elf_bytes) + let layout = toyos_elf::Layout::parse(kernel_elf_bytes, arch::ELF_MACHINE) .unwrap_or_else(|e| panic!("kernel.elf: {e}")); // Section headers are optional to `toyos-elf`, which loads programs whose @@ -399,7 +400,7 @@ fn load_kernel_elf(kernel_elf_bytes: &[u8]) -> LoadedKernel { for section in sections.iter().filter(|section| section.kind == SHT_RELA) { let table = file_range(kernel_elf_bytes, section.offset, section.size) .expect("kernel.elf: SHT_RELA section is past the end of the file"); - for rela in RelaTable::new(table).iter() { + for rela in RelaTable::new(table, arch::ELF_MACHINE).iter() { match rela.kind { RelocKind::Relative => { // Both fields index the image and both come out of the diff --git a/kernel/src/arch/mod.rs b/kernel/src/arch/mod.rs index 854092238c9..ab6ca620f67 100644 --- a/kernel/src/arch/mod.rs +++ b/kernel/src/arch/mod.rs @@ -17,6 +17,9 @@ pub mod smp; pub mod syscall; pub mod tlb; +/// The machine every program image this kernel loads must be built for. +pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::X86_64; + /// One log reservation and its publication, atomic against an interrupt on this CPU. TF is always clear in Ring 0, so this guard leaves it alone. #[must_use = "dropping the log commit guard reopens interrupts and single-step traps"] pub(crate) struct LogCommitGuard { diff --git a/kernel/src/elf/index.rs b/kernel/src/elf/index.rs index e0a5e7c605c..2100c790830 100644 --- a/kernel/src/elf/index.rs +++ b/kernel/src/elf/index.rs @@ -42,9 +42,9 @@ impl ParsedRelaEntries { /// Groups both relocation tables, returning `None` when any one group would not fit a single kernel allocation. pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Option { let entries = || { - RelaTable::new(rela_data) + RelaTable::new(rela_data, crate::arch::ELF_MACHINE) .iter() - .chain(RelaTable::new(jmprel_data).iter()) + .chain(RelaTable::new(jmprel_data, crate::arch::ELF_MACHINE).iter()) }; let counts = RelaCounts::of(entries()); // Ceiling assumes the widest record type, since any one group could be the whole table. diff --git a/kernel/src/elf/mod.rs b/kernel/src/elf/mod.rs index aee2de76c6e..928aaa7287e 100644 --- a/kernel/src/elf/mod.rs +++ b/kernel/src/elf/mod.rs @@ -35,7 +35,7 @@ const _: () = assert!(toyos_elf::MAX_TLS_ALIGN == PAGE_2M); /// [`Layout::parse`] plus the kernel's ceiling on section header table size, /// checked once here since not every caller can refuse a malformed file. pub fn parse_layout(data: &[u8]) -> Result { - let layout = Layout::parse(data).map_err(|e| e.as_str())?; + let layout = Layout::parse(data, crate::arch::ELF_MACHINE).map_err(|e| e.as_str())?; if layout .section_headers .is_some_and(|s| s.byte_len() > MAX_HEAP_ALLOC) @@ -509,5 +509,5 @@ fn table_entries(table: &Option) -> impl Iterator table(backing, path, "SHT_RELA sh_size", off, size as usize), diff --git a/toyos-elf/src/header.rs b/toyos-elf/src/header.rs index e5e1ed872c2..73714819706 100644 --- a/toyos-elf/src/header.rs +++ b/toyos-elf/src/header.rs @@ -22,15 +22,36 @@ const ELFDATA2LSB: u8 = 1; const EV_CURRENT: u8 = 1; const ET_DYN: u16 = 3; const EM_X86_64: u16 = 62; +const EM_AARCH64: u16 = 183; /// The instruction set an image is built for. /// -/// One variant, because one architecture boots. ARM64 adds a variant here and -/// a relocation set to [`crate::rela`]; nothing else in this crate is +/// Each machine names its own relocation numbers ([`crate::rela`]) and its own +/// TLS variant ([`crate::tls`]); nothing else in this crate is /// per-architecture. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum Machine { X86_64, + Aarch64, +} + +impl Machine { + /// The machine an `e_machine` names, or `None` for one ToyOS does not run. + pub const fn from_raw(e_machine: u16) -> Option { + match e_machine { + EM_X86_64 => Some(Machine::X86_64), + EM_AARCH64 => Some(Machine::Aarch64), + _ => None, + } + } + + /// The `e_machine` a file built for this machine carries. + pub const fn raw(self) -> u16 { + match self { + Machine::X86_64 => EM_X86_64, + Machine::Aarch64 => EM_AARCH64, + } + } } #[derive(Clone, Copy, Debug)] @@ -72,9 +93,8 @@ impl FileHeader { if e_type != ET_DYN { return Err(Error::NotPie); } - if read::u16_at(data, 18).ok_or(Error::TooSmall)? != EM_X86_64 { - return Err(Error::WrongMachine); - } + let machine = Machine::from_raw(read::u16_at(data, 18).ok_or(Error::TooSmall)?) + .ok_or(Error::UnknownMachine)?; let phnum = read::u16_at(data, 56).ok_or(Error::TooSmall)?; if phnum == 0 { return Err(Error::NoProgramHeaders); @@ -97,7 +117,7 @@ impl FileHeader { } Ok(FileHeader { - machine: Machine::X86_64, + machine, entry: read::u64_at(data, 24).ok_or(Error::TooSmall)?, phoff, phnum, diff --git a/toyos-elf/src/layout.rs b/toyos-elf/src/layout.rs index e754b334ae1..2d364ad36f9 100644 --- a/toyos-elf/src/layout.rs +++ b/toyos-elf/src/layout.rs @@ -6,7 +6,8 @@ //! site. use crate::header::{ - FileHeader, ProgramHeader, PT_DYNAMIC, PT_GNU_EH_FRAME, PT_LOAD, PT_TLS, SECTION_HEADER_SIZE, + FileHeader, Machine, ProgramHeader, PT_DYNAMIC, PT_GNU_EH_FRAME, PT_LOAD, PT_TLS, + SECTION_HEADER_SIZE, }; use crate::{Error, MAX_LOAD_SEGMENTS, MAX_TLS_ALIGN}; @@ -151,8 +152,12 @@ impl Layout { /// /// `data` need only reach the end of the program header table; the loader /// hands it 4 KiB and never reads a segment's contents to get here. - pub fn parse(data: &[u8]) -> Result { + /// `machine` is the one the caller runs: an image for any other is refused. + pub fn parse(data: &[u8], machine: Machine) -> Result { let ehdr = FileHeader::parse(data)?; + if ehdr.machine != machine { + return Err(Error::WrongMachine); + } let phdrs = ehdr.program_headers(data)?; let mut segments = [Segment { diff --git a/toyos-elf/src/lib.rs b/toyos-elf/src/lib.rs index ef0f167a393..29e68681c8f 100644 --- a/toyos-elf/src/lib.rs +++ b/toyos-elf/src/lib.rs @@ -24,11 +24,11 @@ //! //! # Scope //! -//! ELF64, little-endian, `ET_DYN`, `EM_X86_64`. Everything else is refused by -//! name rather than tolerated: ToyOS emits PIE binaries only, has no 32-bit -//! mode and no big-endian target. A second architecture adds a machine to -//! [`header::Machine`] and a relocation set to [`rela`], not a class or an -//! endianness. +//! ELF64, little-endian, `ET_DYN`, `EM_X86_64` or `EM_AARCH64`. Everything else +//! is refused by name rather than tolerated: ToyOS emits PIE binaries only, has +//! no 32-bit mode and no big-endian target. A loader names the machine it runs +//! ([`Layout::parse`]), so an image for the other one is refused as +//! [`Error::WrongMachine`] before anything of it is mapped. #![no_std] #![forbid(unsafe_code)] @@ -44,7 +44,7 @@ pub mod tls; pub use dynamic::{Dynamic, Table}; pub use gnu_hash::GnuHash; -pub use header::FileHeader; +pub use header::{FileHeader, Machine}; pub use layout::{Layout, Segment, SegmentFlags, SectionTableRef, TlsSegment}; pub use rela::{Rela, RelaCounts, RelaTable, RelocError, RelocKind}; pub use section::{SectionHeader, SectionTable}; @@ -92,7 +92,9 @@ pub enum Error { BadVersion, /// Not `ET_DYN`. ToyOS loads position-independent executables only. NotPie, - /// Not `EM_X86_64`. + /// `e_machine` names no machine ToyOS runs. + UnknownMachine, + /// Built for a machine other than the one loading it. WrongMachine, /// `e_phnum` is zero: nothing to map. NoProgramHeaders, @@ -140,7 +142,8 @@ impl Error { Error::NotLittleEndian => "ELF: not ELFDATA2LSB", Error::BadVersion => "ELF: e_ident version is not EV_CURRENT", Error::NotPie => "ELF: not PIE (expected ET_DYN)", - Error::WrongMachine => "ELF: not x86_64", + Error::UnknownMachine => "ELF: e_machine is neither x86_64 nor aarch64", + Error::WrongMachine => "ELF: built for another machine", Error::NoProgramHeaders => "ELF: no program headers", Error::BadProgramHeaderSize => "ELF: e_phentsize is not 56", Error::ProgramHeadersInsideFileHeader => "ELF: e_phoff points inside the file header", diff --git a/toyos-elf/src/rela.rs b/toyos-elf/src/rela.rs index 936df370baf..c1a9cdf77f7 100644 --- a/toyos-elf/src/rela.rs +++ b/toyos-elf/src/rela.rs @@ -7,45 +7,48 @@ //! a type in it that no writer handles would be validated for a write that //! never happens. Neither can drift, because there is one table. +use crate::header::Machine; use crate::read; /// Bytes in one `Elf64_Rela`. pub const ENTRY_SIZE: usize = 24; -/// The x86-64 relocations this loader knows about. +/// The dynamic relocations this loader knows about, by what they ask for +/// rather than by any one machine's number: [`RelocKind::from_raw`] is the +/// only place a number is read. /// /// `Other` carries the raw type rather than dropping it, so a log line can name /// what it skipped. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum RelocKind { - /// `R_X86_64_GLOB_DAT` + /// `R_X86_64_GLOB_DAT`, `R_AARCH64_GLOB_DAT` GlobDat, - /// `R_X86_64_JUMP_SLOT` + /// `R_X86_64_JUMP_SLOT`, `R_AARCH64_JUMP_SLOT` JumpSlot, - /// `R_X86_64_RELATIVE` + /// `R_X86_64_RELATIVE`, `R_AARCH64_RELATIVE` Relative, - /// `R_X86_64_DTPMOD64` + /// `R_X86_64_DTPMOD64`, `R_AARCH64_TLS_DTPMOD` DtpMod64, - /// `R_X86_64_DTPOFF64` + /// `R_X86_64_DTPOFF64`, `R_AARCH64_TLS_DTPREL` DtpOff64, - /// `R_X86_64_TPOFF64` + /// `R_X86_64_TPOFF64`, `R_AARCH64_TLS_TPREL` Tpoff64, - /// `R_X86_64_TPOFF32` + /// `R_X86_64_TPOFF32`; AArch64 has no 32-bit thread-pointer offset. Tpoff32, Other(u32), } impl RelocKind { - pub const fn from_raw(r_type: u32) -> RelocKind { - match r_type { - 6 => RelocKind::GlobDat, - 7 => RelocKind::JumpSlot, - 8 => RelocKind::Relative, - 16 => RelocKind::DtpMod64, - 17 => RelocKind::DtpOff64, - 18 => RelocKind::Tpoff64, - 23 => RelocKind::Tpoff32, - other => RelocKind::Other(other), + pub const fn from_raw(machine: Machine, r_type: u32) -> RelocKind { + match (machine, r_type) { + (Machine::X86_64, 6) | (Machine::Aarch64, 1025) => RelocKind::GlobDat, + (Machine::X86_64, 7) | (Machine::Aarch64, 1026) => RelocKind::JumpSlot, + (Machine::X86_64, 8) | (Machine::Aarch64, 1027) => RelocKind::Relative, + (Machine::X86_64, 16) | (Machine::Aarch64, 1028) => RelocKind::DtpMod64, + (Machine::X86_64, 17) | (Machine::Aarch64, 1029) => RelocKind::DtpOff64, + (Machine::X86_64, 18) | (Machine::Aarch64, 1030) => RelocKind::Tpoff64, + (Machine::X86_64, 23) => RelocKind::Tpoff32, + (_, other) => RelocKind::Other(other), } } @@ -93,11 +96,13 @@ pub struct Rela { #[derive(Clone, Copy, Debug)] pub struct RelaTable<'a> { data: &'a [u8], + machine: Machine, } impl<'a> RelaTable<'a> { - pub const fn new(data: &'a [u8]) -> RelaTable<'a> { - RelaTable { data } + /// `machine` decides what each entry's type number means. + pub const fn new(data: &'a [u8], machine: Machine) -> RelaTable<'a> { + RelaTable { data, machine } } /// Whole entries the bytes hold. A trailing partial entry is not an entry. @@ -118,7 +123,7 @@ impl<'a> RelaTable<'a> { Some(Rela { offset: read::u64_at(self.data, off)?, sym: (info >> 32) as u32, - kind: RelocKind::from_raw(info as u32), + kind: RelocKind::from_raw(self.machine, info as u32), addend: read::i64_at(self.data, off + 16)?, }) } diff --git a/toyos-elf/tests/common/mod.rs b/toyos-elf/tests/common/mod.rs index cc9e3b6fa7a..6f3817659c5 100644 --- a/toyos-elf/tests/common/mod.rs +++ b/toyos-elf/tests/common/mod.rs @@ -11,6 +11,7 @@ pub const ET_DYN: u16 = 3; pub const ET_EXEC: u16 = 2; pub const EM_X86_64: u16 = 62; pub const EM_AARCH64: u16 = 183; +pub const EM_386: u16 = 3; pub const PT_LOAD: u32 = 1; pub const PT_DYNAMIC: u32 = 2; diff --git a/toyos-elf/tests/crafted.rs b/toyos-elf/tests/crafted.rs index 44801e24ff4..9ae008d8537 100644 --- a/toyos-elf/tests/crafted.rs +++ b/toyos-elf/tests/crafted.rs @@ -15,37 +15,37 @@ mod common; use common::*; use toyos_elf::header::PROGRAM_HEADER_SIZE; -use toyos_elf::{Error, Layout, MAX_LOAD_SEGMENTS}; +use toyos_elf::{Error, Layout, Machine, MAX_LOAD_SEGMENTS}; fn refused(bytes: Vec) -> Error { - match Layout::parse(&bytes) { + match Layout::parse(&bytes, Machine::X86_64) { Ok(_) => panic!("accepted a file that must be refused"), Err(e) => e, } } fn accepted(bytes: Vec) -> Layout { - Layout::parse(&bytes).expect("refused a file that must be accepted") + Layout::parse(&bytes, Machine::X86_64).expect("refused a file that must be accepted") } // ── The bytes before the program headers ──────────────────────────────── #[test] fn an_empty_file_is_too_small() { - assert_eq!(Layout::parse(&[]).unwrap_err(), Error::TooSmall); + assert_eq!(Layout::parse(&[], Machine::X86_64).unwrap_err(), Error::TooSmall); } #[test] fn a_header_one_byte_short_is_too_small() { let bytes = Elf::honest(0x1000).build(); - assert_eq!(Layout::parse(&bytes[..63]).unwrap_err(), Error::TooSmall); + assert_eq!(Layout::parse(&bytes[..63], Machine::X86_64).unwrap_err(), Error::TooSmall); } #[test] fn the_magic_is_checked() { let mut bytes = Elf::honest(0x1000).build(); bytes[1] = b'e'; - assert_eq!(Layout::parse(&bytes).unwrap_err(), Error::BadMagic); + assert_eq!(Layout::parse(&bytes, Machine::X86_64).unwrap_err(), Error::BadMagic); } #[test] @@ -54,7 +54,16 @@ fn class_endianness_version_type_and_machine_are_each_refused_by_name() { assert_eq!(refused(Elf::honest(0x1000).endian(2).build()), Error::NotLittleEndian); assert_eq!(refused(Elf::honest(0x1000).version(0).build()), Error::BadVersion); assert_eq!(refused(Elf::honest(0x1000).kind(ET_EXEC).build()), Error::NotPie); - assert_eq!(refused(Elf::honest(0x1000).machine(EM_AARCH64).build()), Error::WrongMachine); + assert_eq!(refused(Elf::honest(0x1000).machine(EM_386).build()), Error::UnknownMachine); +} + +#[test] +fn an_image_for_the_other_machine_is_refused_and_one_for_this_machine_is_not() { + let arm = Elf::honest(0x1000).machine(EM_AARCH64).build(); + assert_eq!(refused(arm.clone()), Error::WrongMachine); + assert!(Layout::parse(&arm, Machine::Aarch64).is_ok()); + let x86 = Elf::honest(0x1000).build(); + assert_eq!(Layout::parse(&x86, Machine::Aarch64).unwrap_err(), Error::WrongMachine); } #[test] diff --git a/toyos-elf/tests/real.rs b/toyos-elf/tests/real.rs index aa54dee1f8c..4e2530797b1 100644 --- a/toyos-elf/tests/real.rs +++ b/toyos-elf/tests/real.rs @@ -10,13 +10,13 @@ //! of=toyos-elf/tests/fixtures/toyos-ld-headers.bin bs=1 count=4096`, and //! expect the entry point below to move. -use toyos_elf::Layout; +use toyos_elf::{Layout, Machine}; const HEADERS: &[u8] = include_bytes!("fixtures/toyos-ld-headers.bin"); #[test] fn a_toyos_ld_binary_parses_to_what_readelf_says() { - let layout = Layout::parse(HEADERS).expect("toyos-ld's own output"); + let layout = Layout::parse(HEADERS, Machine::X86_64).expect("toyos-ld's own output"); assert_eq!(layout.entry, 0x3261c); assert_eq!(layout.vaddr_min, 0); diff --git a/toyos-elf/tests/tables.rs b/toyos-elf/tests/tables.rs index 7a2395d6f23..61ad9903725 100644 --- a/toyos-elf/tests/tables.rs +++ b/toyos-elf/tests/tables.rs @@ -18,6 +18,7 @@ use toyos_elf::gnu_hash::{self, GnuHash}; use toyos_elf::rela::{self, RelaCounts, RelaTable, RelocError, RelocKind}; use toyos_elf::section::{SectionTable, SHT_DYNSYM, SHT_RELA, SHT_SYMTAB}; use toyos_elf::sym::SymTab; +use toyos_elf::Machine; /// `st_info` for a global `STT_FUNC`, and for the data object it is told apart /// from. @@ -80,7 +81,7 @@ fn everything_after_dt_null_is_ignored() { fn a_trailing_partial_relocation_is_not_a_relocation() { let mut bytes = rela(0x10, 0, 8, 4).to_vec(); bytes.extend_from_slice(&[0u8; 23]); - let table = RelaTable::new(&bytes); + let table = RelaTable::new(&bytes, Machine::X86_64); assert_eq!(table.len(), 1); assert_eq!(table.get(1), None); assert_eq!(table.iter().count(), 1); @@ -88,15 +89,15 @@ fn a_trailing_partial_relocation_is_not_a_relocation() { #[test] fn relocation_types_map_to_the_width_the_writers_use() { - assert_eq!(RelocKind::from_raw(8).write_width(), Some(8)); - assert_eq!(RelocKind::from_raw(23).write_width(), Some(4)); - assert_eq!(RelocKind::from_raw(0).write_width(), None); - assert_eq!(RelocKind::from_raw(42).write_width(), None); + assert_eq!(RelocKind::from_raw(Machine::X86_64, 8).write_width(), Some(8)); + assert_eq!(RelocKind::from_raw(Machine::X86_64, 23).write_width(), Some(4)); + assert_eq!(RelocKind::from_raw(Machine::X86_64, 0).write_width(), None); + assert_eq!(RelocKind::from_raw(Machine::X86_64, 42).write_width(), None); // RELATIVE is the one written type that resolves no symbol, so it is the // one whose `r_sym` needs no bound. assert!(!RelocKind::Relative.needs_symbol()); for raw in [6u32, 7, 16, 17, 18, 23] { - assert!(RelocKind::from_raw(raw).needs_symbol(), "type {raw}"); + assert!(RelocKind::from_raw(Machine::X86_64, raw).needs_symbol(), "type {raw}"); } } @@ -106,25 +107,25 @@ fn validation_refuses_a_write_outside_the_window_by_name() { let overflowing = [rela(u64::MAX - 3, 0, 8, 0)].concat(); assert_eq!( - rela::validate(RelaTable::new(&overflowing).iter(), window, 4, None), + rela::validate(RelaTable::new(&overflowing, Machine::X86_64).iter(), window, 4, None), Err(RelocError::OffsetOverflows), ); let below = [rela(0xFF8, 0, 8, 0)].concat(); assert_eq!( - rela::validate(RelaTable::new(&below).iter(), window, 4, None), + rela::validate(RelaTable::new(&below, Machine::X86_64).iter(), window, 4, None), Err(RelocError::OutsideWindow), ); // One byte of an eight-byte write past the end. let straddling = [rela(0x1FF9, 0, 8, 0)].concat(); assert_eq!( - rela::validate(RelaTable::new(&straddling).iter(), window, 4, None), + rela::validate(RelaTable::new(&straddling, Machine::X86_64).iter(), window, 4, None), Err(RelocError::OutsideWindow), ); let fits = [rela(0x1FF8, 0, 8, 0)].concat(); - assert_eq!(rela::validate(RelaTable::new(&fits).iter(), window, 4, None), Ok(())); + assert_eq!(rela::validate(RelaTable::new(&fits, Machine::X86_64).iter(), window, 4, None), Ok(())); } /// A table the loader reads while it writes must not lie inside the range it @@ -187,12 +188,12 @@ fn a_relocation_crossing_a_fill_page_is_refused_only_for_a_chunked_writer() { for off in 0xFF9u64..=0xFFF { let straddles = [rela(off, 0, 8, 0)].concat(); assert_eq!( - rela::validate(RelaTable::new(&straddles).iter(), window, 4, Some(lattice)), + rela::validate(RelaTable::new(&straddles, Machine::X86_64).iter(), window, 4, Some(lattice)), Err(RelocError::StraddlesFillPage), "offset {off:#x} straddles the page but was accepted", ); assert_eq!( - rela::validate(RelaTable::new(&straddles).iter(), window, 4, None), + rela::validate(RelaTable::new(&straddles, Machine::X86_64).iter(), window, 4, None), Ok(()), "offset {off:#x} refused for a contiguous writer", ); @@ -200,17 +201,17 @@ fn a_relocation_crossing_a_fill_page_is_refused_only_for_a_chunked_writer() { // A write ending at the boundary fits; a 4-byte TPOFF32 fits in the last 4. assert_eq!( - rela::validate(RelaTable::new(&[rela(0xFF8, 0, 8, 0)].concat()).iter(), window, 4, Some(lattice)), + rela::validate(RelaTable::new(&[rela(0xFF8, 0, 8, 0)].concat(), Machine::X86_64).iter(), window, 4, Some(lattice)), Ok(()), ); assert_eq!( - rela::validate(RelaTable::new(&[rela(0xFFC, 0, 23, 0)].concat()).iter(), window, 4, Some(lattice)), + rela::validate(RelaTable::new(&[rela(0xFFC, 0, 23, 0)].concat(), Machine::X86_64).iter(), window, 4, Some(lattice)), Ok(()), ); let shifted = rela::FillLattice { base: 3, granule: 4096 }; assert_eq!( - rela::validate(RelaTable::new(&[rela(0x1000, 0, 8, 0)].concat()).iter(), window, 4, Some(shifted)), + rela::validate(RelaTable::new(&[rela(0x1000, 0, 8, 0)].concat(), Machine::X86_64).iter(), window, 4, Some(shifted)), Err(RelocError::StraddlesFillPage), ); } @@ -224,14 +225,14 @@ fn every_written_type_is_validated_and_no_other_is() { for raw in [6u32, 7, 8, 16, 17, 18, 23] { let bytes = [rela(0x1000, 0, raw, 0)].concat(); assert_eq!( - rela::validate(RelaTable::new(&bytes).iter(), window, 4, None), + rela::validate(RelaTable::new(&bytes, Machine::X86_64).iter(), window, 4, None), Err(RelocError::OutsideWindow), "type {raw} was not validated", ); } // A type nobody patches may name any offset at all. let ignored = [rela(u64::MAX, 0, 42, 0)].concat(); - assert_eq!(rela::validate(RelaTable::new(&ignored).iter(), window, 0, None), Ok(())); + assert_eq!(rela::validate(RelaTable::new(&ignored, Machine::X86_64).iter(), window, 0, None), Ok(())); } #[test] @@ -240,20 +241,20 @@ fn a_symbol_index_past_the_table_is_refused_except_for_relative() { let bind = [rela(0x10, 4, 6, 0)].concat(); assert_eq!( - rela::validate(RelaTable::new(&bind).iter(), window, 4, None), + rela::validate(RelaTable::new(&bind, Machine::X86_64).iter(), window, 4, None), Err(RelocError::SymbolPastTable), ); - assert_eq!(rela::validate(RelaTable::new(&bind).iter(), window, 5, None), Ok(())); + assert_eq!(rela::validate(RelaTable::new(&bind, Machine::X86_64).iter(), window, 5, None), Ok(())); let relative = [rela(0x10, u32::MAX, 8, 0)].concat(); - assert_eq!(rela::validate(RelaTable::new(&relative).iter(), window, 0, None), Ok(())); + assert_eq!(rela::validate(RelaTable::new(&relative, Machine::X86_64).iter(), window, 0, None), Ok(())); } #[test] fn counts_are_per_kind_over_every_table() { let a = [rela(0, 0, 8, 0), rela(8, 1, 6, 0), rela(16, 2, 18, 0)].concat(); let b = [rela(24, 3, 7, 0), rela(32, 0, 23, 0), rela(40, 0, 99, 0)].concat(); - let counts = RelaCounts::of(RelaTable::new(&a).iter().chain(RelaTable::new(&b).iter())); + let counts = RelaCounts::of(RelaTable::new(&a, Machine::X86_64).iter().chain(RelaTable::new(&b, Machine::X86_64).iter())); assert_eq!( counts, RelaCounts { relative: 1, bind: 2, tpoff64: 1, tpoff32: 1, dtpmod64: 0, dtpoff64: 0 }, @@ -481,8 +482,8 @@ fn rela_dyn_is_found_by_shape_and_only_by_shape() { .concat(); let table = SectionTable::new(&bytes); let mut reader = |off: u64| match off { - 0x300 => RelaTable::new(&rela(0, 1, 6, 0)).get(0), - 0x400 => RelaTable::new(&rela(0, 0, 8, 0)).get(0), + 0x300 => RelaTable::new(&rela(0, 1, 6, 0), Machine::X86_64).get(0), + 0x400 => RelaTable::new(&rela(0, 0, 8, 0), Machine::X86_64).get(0), _ => None, }; assert_eq!(table.rela_dyn(&mut reader), Some((0x400, 72))); @@ -609,3 +610,26 @@ fn hash_table( fn bloom_word_for(h: u32, shift: u32) -> u64 { (1u64 << (h % 64)) | (1u64 << ((h as u64 >> shift) % 64)) } + +#[test] +fn each_machine_reads_its_own_relocation_numbers() { + // The AArch64 psABI's dynamic types, and one x86-64 number each machine + // must not read as the other's. + for (raw, kind) in [ + (1025u32, RelocKind::GlobDat), + (1026, RelocKind::JumpSlot), + (1027, RelocKind::Relative), + (1028, RelocKind::DtpMod64), + (1029, RelocKind::DtpOff64), + (1030, RelocKind::Tpoff64), + ] { + assert_eq!(RelocKind::from_raw(Machine::Aarch64, raw), kind, "type {raw}"); + assert_eq!(RelocKind::from_raw(Machine::X86_64, raw), RelocKind::Other(raw), "type {raw}"); + } + assert_eq!(RelocKind::from_raw(Machine::Aarch64, 8), RelocKind::Other(8)); + assert_eq!(RelocKind::from_raw(Machine::Aarch64, 23), RelocKind::Other(23)); + + let bytes = rela(0x10, 0, 1027, 4); + let entry = RelaTable::new(&bytes, Machine::Aarch64).get(0).unwrap(); + assert_eq!((entry.kind, entry.addend), (RelocKind::Relative, 4)); +} diff --git a/toyos-ld/src/collect.rs b/toyos-ld/src/collect.rs index da5ca4f0004..199eb9fc29f 100644 --- a/toyos-ld/src/collect.rs +++ b/toyos-ld/src/collect.rs @@ -298,6 +298,28 @@ pub(crate) fn collect(objects: &[(String, Vec)]) -> Result>()?; + // One link is one machine: the first object names it, and an object built + // for the other is refused rather than merged into an image that runs on + // neither. + let mut arch = None; + for ((name, _), input) in flat.iter().zip(&parsed) { + let ParsedInput::Object(object) = input else { continue }; + match arch { + None => arch = Some(object.arch), + Some(first) if first != object.arch => { + return Err(LinkError::Parse { + file: name.clone(), + message: format!("built for {:?}, but the link is {first:?}", object.arch), + }) + } + Some(_) => {} + } + } + let arch = arch.ok_or_else(|| LinkError::Parse { + file: String::new(), + message: "no object file names the machine to link for".to_string(), + })?; + // Phase 2: merge results sequentially. let mut state = LinkState { sections: Vec::new(), @@ -308,7 +330,7 @@ pub(crate) fn collect(objects: &[(String, Vec)]) -> Result Result } /// Parse a single object file into a `ParsedObject` with local section indices. -fn parse_object(obj: &object::File, _name: &str) -> Result { - let arch = if matches!(obj.architecture(), object::Architecture::X86_64) { - Arch::X86_64 - } else { - Arch::Aarch64 +fn parse_object(obj: &object::File, name: &str) -> Result { + let arch = match obj.architecture() { + object::Architecture::X86_64 => Arch::X86_64, + object::Architecture::Aarch64 => Arch::Aarch64, + other => { + return Err(LinkError::Parse { + file: name.to_string(), + message: format!("built for {other:?}, which is neither x86_64 nor aarch64"), + }) + } }; let mut sections = Vec::new(); @@ -540,7 +567,11 @@ fn parse_object(obj: &object::File, _name: &str) -> Result match coff_to_reloc_type(typ) { + RelocationFlags::Coff { typ } => match coff_to_reloc_type(arch, typ, || { + let data = §ions[local_sec.0].data; + let off = offset as usize; + u32::from_le_bytes(data[off..off + 4].try_into().unwrap()) + }) { Some(r) => (r, false), None => return Err(LinkError::UnsupportedRawRelocation { raw_type: format!("COFF {typ}"), @@ -576,6 +607,10 @@ fn parse_object(obj: &object::File, _name: &str) -> Result String { /// Merge a parsed object into the global LinkState, remapping local section indices. fn merge_parsed_object(state: &mut LinkState, parsed: ParsedObject, obj_idx: ObjIdx) { - if matches!(parsed.arch, Arch::X86_64) { - state.arch = Arch::X86_64; - } + debug_assert_eq!(parsed.arch, state.arch, "`collect` refuses a mixed link before any merge"); let base = state.sections.len(); let remap = |local: LocalSectionIdx| -> SectionIdx { SectionIdx(base + local.0) }; @@ -813,8 +846,25 @@ fn elf_to_reloc_type(r_type: u32) -> Option { }) } -/// Map COFF x86_64 relocation types to RelocType. -fn coff_to_reloc_type(typ: u16) -> Option { +/// Map a COFF relocation type to RelocType. The numbers are per machine: ARM64 +/// and AMD64 reuse the same small integers for different things. `insn` reads +/// the instruction an ARM64 page-offset load or store patches, whose access +/// size decides the scale. +fn coff_to_reloc_type(arch: Arch, typ: u16, insn: impl FnOnce() -> u32) -> Option { + if arch == Arch::Aarch64 { + return Some(match typ { + pe::IMAGE_REL_ARM64_ADDR64 => RelocType::Aarch64Abs64, + // The image base is 0, so an RVA and an address are one number. + pe::IMAGE_REL_ARM64_ADDR32 | pe::IMAGE_REL_ARM64_ADDR32NB => RelocType::Aarch64Abs32, + pe::IMAGE_REL_ARM64_BRANCH26 => RelocType::Aarch64Call26, + pe::IMAGE_REL_ARM64_PAGEBASE_REL21 => RelocType::Aarch64AdrPrelPgHi21, + pe::IMAGE_REL_ARM64_PAGEOFFSET_12A => RelocType::Aarch64AddAbsLo12Nc, + pe::IMAGE_REL_ARM64_PAGEOFFSET_12L => classify_pageoff12(insn()), + pe::IMAGE_REL_ARM64_REL32 => RelocType::Aarch64Prel32, + pe::IMAGE_REL_ARM64_SECREL => RelocType::Aarch64Abs32, + _ => return None, + }); + } Some(match typ { pe::IMAGE_REL_AMD64_ADDR64 => RelocType::X86_64, pe::IMAGE_REL_AMD64_ADDR32 => RelocType::X86_32, @@ -1445,3 +1495,27 @@ pub(crate) fn collect_unique_symbols<'a>( } result } + +/// The addend an ARM64 COFF instruction relocation carries in the immediate it +/// patches, in bytes, or `None` for a relocation that is not an instruction's. +/// The linker writes the whole field afresh from symbol plus this, which is +/// what LLD's `applyArm64Addr`, `applyArm64Imm` and `applyArm64Ldr` compute. +fn coff_arm64_insn_addend(r_type: RelocType, data: &[u8], offset: u64) -> Option { + let off = offset as usize; + let insn = || u32::from_le_bytes(data[off..off + 4].try_into().unwrap()); + let imm12 = |insn: u32| ((insn >> 10) & 0xfff) as i64; + Some(match r_type { + RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 => (((insn() & 0x03ff_ffff) as i64) << 38) >> 36, + RelocType::Aarch64AdrPrelPgHi21 => { + let insn = insn(); + (((insn >> 29) & 0x3) | ((insn >> 3) & 0x001f_fffc)) as i64 + } + RelocType::Aarch64AddAbsLo12Nc => imm12(insn()), + RelocType::Aarch64Ldst8AbsLo12Nc => imm12(insn()), + RelocType::Aarch64Ldst16AbsLo12Nc => imm12(insn()) << 1, + RelocType::Aarch64Ldst32AbsLo12Nc => imm12(insn()) << 2, + RelocType::Aarch64Ldst64AbsLo12Nc => imm12(insn()) << 3, + RelocType::Aarch64Ldst128AbsLo12Nc => imm12(insn()) << 4, + _ => return None, + }) +} diff --git a/toyos-ld/src/emit_elf.rs b/toyos-ld/src/emit_elf.rs index e119a0a372b..3fc344b3b78 100644 --- a/toyos-ld/src/emit_elf.rs +++ b/toyos-ld/src/emit_elf.rs @@ -1,7 +1,7 @@ use object::write::elf::{FileHeader, ProgramHeader, SectionHeader, SectionIndex, Sym, Rel, Writer, SymbolIndex}; use object::write::StringId; use object::Endianness; -use crate::collect::{collect_unique_symbols, InputSection, LinkState, RelocType, SectionKind, SymbolDef, SymbolRef}; +use crate::collect::{collect_unique_symbols, Arch, InputSection, LinkState, RelocType, SectionKind, SymbolDef, SymbolRef}; use crate::reloc::{RelocOutput, resolve_symbol, tpoff}; use crate::{align_up, classify_sections, LinkError, BASE_VADDR, PAGE_SIZE}; use object::elf; @@ -370,7 +370,8 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let got_symbols = collect_unique_symbols(state.relocs.iter(), |r| { matches!(r.r_type, RelocType::X86Gotpcrel | RelocType::X86Gotpcrelx - | RelocType::X86RexGotpcrelx | RelocType::X86Gottpoff) + | RelocType::X86RexGotpcrelx | RelocType::X86Gottpoff + | RelocType::Aarch64AdrGotPage | RelocType::Aarch64Ld64GotLo12Nc) || (r.r_type == RelocType::X86Tlsgd && !is_shared && state.dynamic_imports.contains(r.target.name())) }); @@ -1018,7 +1019,10 @@ pub(crate) fn emit_elf( os_abi: 0, abi_version: 0, e_type, - e_machine: elf::EM_X86_64, + e_machine: match state.arch { + Arch::X86_64 => elf::EM_X86_64, + Arch::Aarch64 => elf::EM_AARCH64, + }, e_entry: entry, e_flags: 0, }).unwrap(); @@ -1220,83 +1224,7 @@ pub(crate) fn emit_elf( // Shared library RELA (reserved before dynamic section, must be written here) if let Some(relocs) = relocs { if rela_count > 0 { - w.write_align_relocation(); - for &(offset, addend) in &relocs.relatives { - w.write_relocation(true, &Rel { - r_offset: offset, - r_sym: 0, - r_type: elf::R_X86_64_RELATIVE, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.glob_dats { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_GLOB_DAT, - r_addend: 0, - }); - } - for &(got_vaddr, addend) in &relocs.tpoff64s { - w.write_relocation(true, &Rel { - r_offset: got_vaddr, - r_sym: 0, - r_type: elf::R_X86_64_TPOFF64, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.named_tpoff64s { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_TPOFF64, - r_addend: 0, - }); - } - for &(vaddr, addend) in &relocs.tpoff32s { - w.write_relocation(true, &Rel { - r_offset: vaddr, - r_sym: 0, - r_type: elf::R_X86_64_TPOFF32, - r_addend: addend, - }); - } - for &(got_vaddr, addend) in &relocs.dtpmod64s { - w.write_relocation(true, &Rel { - r_offset: got_vaddr, - r_sym: 0, - r_type: elf::R_X86_64_DTPMOD64, - r_addend: addend, - }); - } - for &(got_vaddr, addend) in &relocs.dtpoff64s { - w.write_relocation(true, &Rel { - r_offset: got_vaddr, - r_sym: 0, - r_type: elf::R_X86_64_DTPOFF64, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.named_dtpmod64s { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_DTPMOD64, - r_addend: 0, - }); - } - for (got_vaddr, sym_name) in &relocs.named_dtpoff64s { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_DTPOFF64, - r_addend: 0, - }); - } + write_dyn_relocs(&mut w, state.arch, relocs, &sym_to_writer_idx); } } } @@ -1305,49 +1233,7 @@ pub(crate) fn emit_elf( // section so relocations are within the PT_LOAD segment for the dynamic area. if rela_before_dynamic { if let Some(relocs) = relocs { - w.write_align_relocation(); - for &(offset, addend) in &relocs.relatives { - w.write_relocation(true, &Rel { - r_offset: offset, - r_sym: 0, - r_type: elf::R_X86_64_RELATIVE, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.glob_dats { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_GLOB_DAT, - r_addend: 0, - }); - } - for &(got_vaddr, addend) in &relocs.tpoff64s { - w.write_relocation(true, &Rel { - r_offset: got_vaddr, - r_sym: 0, - r_type: elf::R_X86_64_TPOFF64, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.named_tpoff64s { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_TPOFF64, - r_addend: 0, - }); - } - for &(vaddr, addend) in &relocs.tpoff32s { - w.write_relocation(true, &Rel { - r_offset: vaddr, - r_sym: 0, - r_type: elf::R_X86_64_TPOFF32, - r_addend: addend, - }); - } + write_dyn_relocs(&mut w, state.arch, relocs, &sym_to_writer_idx); } } @@ -1391,49 +1277,7 @@ pub(crate) fn emit_elf( // Relocations (PIE / non-shared — shared writes RELA before dynamic section) if !is_shared && !rela_before_dynamic { if let Some(relocs) = relocs { - w.write_align_relocation(); - for &(offset, addend) in &relocs.relatives { - w.write_relocation(true, &Rel { - r_offset: offset, - r_sym: 0, - r_type: elf::R_X86_64_RELATIVE, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.glob_dats { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_GLOB_DAT, - r_addend: 0, - }); - } - for &(got_vaddr, addend) in &relocs.tpoff64s { - w.write_relocation(true, &Rel { - r_offset: got_vaddr, - r_sym: 0, - r_type: elf::R_X86_64_TPOFF64, - r_addend: addend, - }); - } - for (got_vaddr, sym_name) in &relocs.named_tpoff64s { - let sym_idx = sym_to_writer_idx[sym_name]; - w.write_relocation(true, &Rel { - r_offset: *got_vaddr, - r_sym: sym_idx.0, - r_type: elf::R_X86_64_TPOFF64, - r_addend: 0, - }); - } - for &(vaddr, addend) in &relocs.tpoff32s { - w.write_relocation(true, &Rel { - r_offset: vaddr, - r_sym: 0, - r_type: elf::R_X86_64_TPOFF32, - r_addend: addend, - }); - } + write_dyn_relocs(&mut w, state.arch, relocs, &sym_to_writer_idx); } } @@ -1545,3 +1389,74 @@ pub(crate) fn emit_elf( Ok(buf) } + +/// What a dynamic relocation asks the loader for; each machine's psABI gives +/// it a number ([`dyn_reloc_type`]). +#[derive(Clone, Copy)] +enum DynReloc { + Relative, + GlobDat, + TpOff64, + TpOff32, + DtpMod64, + DtpOff64, +} + +fn dyn_reloc_type(arch: Arch, kind: DynReloc) -> u32 { + match (arch, kind) { + (Arch::X86_64, DynReloc::Relative) => elf::R_X86_64_RELATIVE, + (Arch::X86_64, DynReloc::GlobDat) => elf::R_X86_64_GLOB_DAT, + (Arch::X86_64, DynReloc::TpOff64) => elf::R_X86_64_TPOFF64, + (Arch::X86_64, DynReloc::TpOff32) => elf::R_X86_64_TPOFF32, + (Arch::X86_64, DynReloc::DtpMod64) => elf::R_X86_64_DTPMOD64, + (Arch::X86_64, DynReloc::DtpOff64) => elf::R_X86_64_DTPOFF64, + (Arch::Aarch64, DynReloc::Relative) => elf::R_AARCH64_RELATIVE, + (Arch::Aarch64, DynReloc::GlobDat) => elf::R_AARCH64_GLOB_DAT, + (Arch::Aarch64, DynReloc::TpOff64) => elf::R_AARCH64_TLS_TPREL, + (Arch::Aarch64, DynReloc::DtpMod64) => elf::R_AARCH64_TLS_DTPMOD, + (Arch::Aarch64, DynReloc::DtpOff64) => elf::R_AARCH64_TLS_DTPREL, + // Only an x86-64 `TPOFF32` input produces one. + (Arch::Aarch64, DynReloc::TpOff32) => panic!("an AArch64 link produced a 32-bit TP offset"), + } +} + +/// Every dynamic relocation `relocs` holds, in the one order every mode writes. +fn write_dyn_relocs( + w: &mut Writer, + arch: Arch, + relocs: &RelocOutput, + sym_to_writer_idx: &HashMap, +) { + w.write_align_relocation(); + let mut write = |r_offset: u64, r_sym: u32, kind: DynReloc, r_addend: i64| { + w.write_relocation(true, &Rel { r_offset, r_sym, r_type: dyn_reloc_type(arch, kind), r_addend }); + }; + let named = |name: &String| sym_to_writer_idx[name].0; + for &(offset, addend) in &relocs.relatives { + write(offset, 0, DynReloc::Relative, addend); + } + for (got_vaddr, name) in &relocs.glob_dats { + write(*got_vaddr, named(name), DynReloc::GlobDat, 0); + } + for &(got_vaddr, addend) in &relocs.tpoff64s { + write(got_vaddr, 0, DynReloc::TpOff64, addend); + } + for (got_vaddr, name) in &relocs.named_tpoff64s { + write(*got_vaddr, named(name), DynReloc::TpOff64, 0); + } + for &(vaddr, addend) in &relocs.tpoff32s { + write(vaddr, 0, DynReloc::TpOff32, addend); + } + for &(got_vaddr, addend) in &relocs.dtpmod64s { + write(got_vaddr, 0, DynReloc::DtpMod64, addend); + } + for &(got_vaddr, addend) in &relocs.dtpoff64s { + write(got_vaddr, 0, DynReloc::DtpOff64, addend); + } + for (got_vaddr, name) in &relocs.named_dtpmod64s { + write(*got_vaddr, named(name), DynReloc::DtpMod64, 0); + } + for (got_vaddr, name) in &relocs.named_dtpoff64s { + write(*got_vaddr, named(name), DynReloc::DtpOff64, 0); + } +} diff --git a/toyos-ld/src/emit_pe.rs b/toyos-ld/src/emit_pe.rs index 87e964bfcea..e045b8d7a20 100644 --- a/toyos-ld/src/emit_pe.rs +++ b/toyos-ld/src/emit_pe.rs @@ -1,4 +1,4 @@ -use crate::collect::{collect_unique_symbols, LinkState, RelocType, SymbolDef, SymbolRef}; +use crate::collect::{collect_unique_symbols, Arch, LinkState, RelocType, SymbolDef, SymbolRef}; use crate::reloc::resolve_symbol; use crate::{align_up, classify_sections, LinkError}; use object::write::pe::{NtHeaders, Writer}; @@ -140,7 +140,10 @@ pub(crate) fn emit_pe_bytes( w.write_empty_dos_header().unwrap(); w.write_nt_headers(NtHeaders { - machine: pe::IMAGE_FILE_MACHINE_AMD64, + machine: match state.arch { + Arch::X86_64 => pe::IMAGE_FILE_MACHINE_AMD64, + Arch::Aarch64 => pe::IMAGE_FILE_MACHINE_ARM64, + }, time_date_stamp: 0, characteristics: pe::IMAGE_FILE_EXECUTABLE_IMAGE | pe::IMAGE_FILE_LARGE_ADDRESS_AWARE, major_linker_version: 0, diff --git a/toyos-ld/src/reloc.rs b/toyos-ld/src/reloc.rs index e0e703a1908..6a9eda6cb97 100644 --- a/toyos-ld/src/reloc.rs +++ b/toyos-ld/src/reloc.rs @@ -1,4 +1,4 @@ -use crate::collect::{InputReloc, LinkState, RelocType, SectionIdx, SectionKind, SymbolDef, SymbolRef}; +use crate::collect::{Arch, InputReloc, LinkState, RelocType, SectionIdx, SectionKind, SymbolDef, SymbolRef}; use crate::emit_pe::PeLayout; use crate::LinkError; use std::collections::{BTreeMap, HashSet}; @@ -1023,7 +1023,12 @@ pub(crate) fn apply_relocs_pe( } }; - let is_abs = apply_one_reloc_x86(&mut state.sections[reloc.section].data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?; + let arch = state.arch; + let data = &mut state.sections[reloc.section].data; + let is_abs = match arch { + Arch::X86_64 => apply_one_reloc_x86(data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?, + Arch::Aarch64 => apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, &layout.got)?, + }; if is_abs { abs_fixups.push(reloc_vaddr as u32); } diff --git a/toyos-ld/tests/common/mod.rs b/toyos-ld/tests/common/mod.rs index e36e10c06b1..6626af09a7f 100644 --- a/toyos-ld/tests/common/mod.rs +++ b/toyos-ld/tests/common/mod.rs @@ -34,9 +34,24 @@ pub struct ObjBuilder { impl ObjBuilder { pub fn new() -> Self { - ObjBuilder { - obj: Object::new(BinaryFormat::Elf, Architecture::X86_64, Endianness::Little), - } + Self::for_machine(BinaryFormat::Elf, Architecture::X86_64) + } + + pub fn for_machine(format: BinaryFormat, arch: Architecture) -> Self { + ObjBuilder { obj: Object::new(format, arch, Endianness::Little) } + } + + /// Add a relocation of `flags` against `symbol` at `offset` in `section`'s bytes. + pub fn reloc( + &mut self, + section: StandardSection, + offset: u64, + symbol: object::write::SymbolId, + addend: i64, + flags: RelocationFlags, + ) { + let section = self.obj.section_id(section); + self.obj.add_relocation(section, Relocation { offset, symbol, addend, flags }).unwrap(); } pub fn text(&mut self, name: &str, code: &[u8], scope: SymbolScope) -> object::write::SymbolId { diff --git a/toyos-ld/tests/machines.rs b/toyos-ld/tests/machines.rs new file mode 100644 index 00000000000..4288f6e6600 --- /dev/null +++ b/toyos-ld/tests/machines.rs @@ -0,0 +1,146 @@ +//! One linker, two machines: the machine every input names is the machine the +//! output declares, and every number in the output that means something only +//! to one machine — `e_machine`, a dynamic relocation's type, a PE header's +//! machine — is that machine's. The outputs are read back by the `object` +//! crate, a reader this linker does not share code with. + +mod common; + +use common::{Case, ObjBuilder, RET}; +use object::read::elf::{ElfFile64, FileHeader as _}; +use object::read::pe::PeFile64; +use object::write::StandardSection; +use object::{elf, pe, Architecture, BinaryFormat, Object as _, ObjectSection as _, ObjectSymbol as _, RelocationFlags, SymbolScope}; + +const ADRP_X0: u32 = 0x9000_0000; +const ADD_X0_X0: u32 = 0x9100_0000; +const AARCH64_RET: u32 = 0xd65f_03c0; +const AARCH64_BL: u32 = 0x9400_0000; + +fn words(insns: &[u32]) -> Vec { + insns.iter().flat_map(|i| i.to_le_bytes()).collect() +} + +/// `_start` takes `target`'s address PC-relatively, and `ptr` holds it as an +/// absolute pointer: one instruction pair the linker resolves and one word the +/// loader must rebase. +fn aarch64_elf_program() -> Vec { + let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + let target = b.data("target", &[7u8; 8], SymbolScope::Linkage); + let start = b.text("_start", &words(&[ADRP_X0, ADD_X0_X0, AARCH64_RET]), SymbolScope::Linkage); + let at = b.symbol_offset(start); + b.reloc(StandardSection::Text, at, target, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ADR_PREL_PG_HI21 }); + b.reloc(StandardSection::Text, at + 4, target, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ADD_ABS_LO12_NC }); + let ptr = b.data("ptr", &[0u8; 8], SymbolScope::Linkage); + let ptr_at = b.symbol_offset(ptr); + b.reloc(StandardSection::Data, ptr_at, target, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ABS64 }); + b.finish() +} + +fn symbol(file: &object::File, name: &str) -> u64 { + file.symbols().find(|s| s.name() == Ok(name)).unwrap_or_else(|| panic!("no {name}")).address() +} + +fn word_at(file: &object::File, vaddr: u64) -> u32 { + use object::ObjectSegment as _; + let seg = file.segments().find(|s| (s.address()..s.address() + s.size()).contains(&vaddr)).unwrap(); + let data = seg.data().unwrap(); + let off = (vaddr - seg.address()) as usize; + u32::from_le_bytes(data[off..off + 4].try_into().unwrap()) +} + +#[test] +fn an_aarch64_pie_declares_aarch64_and_rebases_with_its_own_relative_type() { + let out = Case::new("aarch64-pie").input("a.o", aarch64_elf_program()).link(); + + let elf = ElfFile64::::parse(&*out).unwrap(); + assert_eq!(elf.elf_header().e_machine(object::Endianness::Little), elf::EM_AARCH64); + + let file = object::File::parse(&*out).unwrap(); + let (target, ptr, start) = (symbol(&file, "target"), symbol(&file, "ptr"), symbol(&file, "_start")); + + let relocs: Vec<_> = file.dynamic_relocations().expect("a PIE carries .rela.dyn").collect(); + assert_eq!(relocs.len(), 1, "{relocs:?}"); + let (offset, reloc) = &relocs[0]; + assert_eq!(*offset, ptr); + assert_eq!(reloc.flags(), RelocationFlags::Elf { r_type: elf::R_AARCH64_RELATIVE }); + assert_eq!(reloc.addend(), target as i64); + + // ADRP names the page, the ADD the offset within it: together `target`. + let adrp = word_at(&file, start); + let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; + let imm = (imm << 43) >> 43; + let page = (start & !0xfff) as i64 + (imm << 12); + let lo12 = ((word_at(&file, start + 4) >> 10) & 0xfff) as i64; + assert_eq!((page + lo12) as u64, target); +} + +#[test] +fn an_x86_64_pie_rebases_with_the_x86_64_relative_type() { + let mut b = ObjBuilder::new(); + let target = b.data("target", &[7u8; 8], SymbolScope::Linkage); + b.text("_start", &[RET], SymbolScope::Linkage); + let ptr = b.data("ptr", &[0u8; 8], SymbolScope::Linkage); + let ptr_at = b.symbol_offset(ptr); + b.reloc(StandardSection::Data, ptr_at, target, 0, RelocationFlags::Elf { r_type: elf::R_X86_64_64 }); + let out = Case::new("x86-pie").input("a.o", b.finish()).link(); + + let elf = ElfFile64::::parse(&*out).unwrap(); + assert_eq!(elf.elf_header().e_machine(object::Endianness::Little), elf::EM_X86_64); + let file = object::File::parse(&*out).unwrap(); + let relocs: Vec<_> = file.dynamic_relocations().unwrap().collect(); + assert_eq!(relocs.len(), 1, "{relocs:?}"); + assert_eq!(relocs[0].1.flags(), RelocationFlags::Elf { r_type: elf::R_X86_64_RELATIVE }); + assert_eq!(relocs[0].1.addend(), symbol(&file, "target") as i64); +} + +#[test] +fn inputs_for_two_machines_are_refused() { + let mut x86 = ObjBuilder::new(); + x86.text("_start", &[RET], SymbolScope::Linkage); + let mut arm = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + arm.text("helper", &words(&[AARCH64_RET]), SymbolScope::Linkage); + let said = Case::new("mixed") + .input("x86.o", x86.finish()) + .input("arm.o", arm.finish()) + .link_expecting_failure(); + assert!(said.contains("arm.o") && said.contains("Aarch64"), "{said}"); +} + +#[test] +fn an_aarch64_pe_declares_arm64_and_patches_its_calls() { + let mut b = ObjBuilder::for_machine(BinaryFormat::Coff, Architecture::Aarch64); + let helper = b.text("helper", &words(&[AARCH64_RET]), SymbolScope::Linkage); + let target = b.data("target", &[7u8; 8], SymbolScope::Linkage); + let start = b.text("efi_main", &words(&[AARCH64_BL, ADRP_X0, ADD_X0_X0, AARCH64_RET]), SymbolScope::Linkage); + let at = b.symbol_offset(start); + b.reloc(StandardSection::Text, at, helper, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_BRANCH26 }); + b.reloc(StandardSection::Text, at + 4, target, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_PAGEBASE_REL21 }); + b.reloc(StandardSection::Text, at + 8, target, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_PAGEOFFSET_12A }); + let ptr = b.data("ptr", &[0u8; 8], SymbolScope::Linkage); + let ptr_at = b.symbol_offset(ptr); + b.reloc(StandardSection::Data, ptr_at, target, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_ADDR64 }); + let out = Case::new("aarch64-pe").input("a.obj", b.finish()).arg("--pe").arg("-e").arg("efi_main").link(); + + let file = PeFile64::parse(&*out).unwrap(); + assert_eq!(file.nt_headers().file_header.machine.get(object::LittleEndian), pe::IMAGE_FILE_MACHINE_ARM64); + assert_eq!(file.architecture(), Architecture::Aarch64); + + // `helper` leads `.text` and `efi_main` follows it at the next 16 bytes; + // `target` leads `.data` and `ptr` follows it. + let file = object::File::parse(&*out).unwrap(); + let entry = file.entry(); + let text = file.section_by_name(".text").unwrap(); + let data = file.section_by_name(".data").unwrap(); + assert_eq!(entry, text.address() + 16); + let bl = word_at(&file, entry); + assert_eq!(bl & 0xfc00_0000, AARCH64_BL); + assert_eq!((((bl & 0x03ff_ffff) as i64) << 38) >> 36, -16, "the call reaches helper"); + let adrp = word_at(&file, entry + 4); + let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; + let page = (entry as i64 + 4) & !0xfff; + let lo12 = ((word_at(&file, entry + 8) >> 10) & 0xfff) as i64; + assert_eq!((page + (((imm << 43) >> 43) << 12) + lo12) as u64, data.address()); + let bytes = data.data().unwrap(); + assert_eq!(u64::from_le_bytes(bytes[8..16].try_into().unwrap()), data.address(), "ptr holds target"); +} From c228cef6041beb02483aa74c47a49878c86649a0 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 13:33:01 +0200 Subject: [PATCH 02/50] build: one Arch names every triple, QEMU, firmware, CPU and accelerator `src/arch.rs` is the one place the build system and the harness learn a machine's target triples (userland, kernel, loader), its QEMU, its firmware images, its guest CPU and how this host accelerates it. Every hardcoded `x86_64-unknown-*` and `qemu-system-x86_64` that was an architecture choice now reads it: - `Plan` carries an `Arch`, and `cargo run -- --arch ` sets it; with none it is x86-64, the architecture whose userland boots to a desktop. Kernel, loader and ROOT memo keys and staged artifact names carry it, and the ESP gets the removable-media loader name UEFI gives that architecture. An aarch64 image is `target/bootable.aarch64.img`; x86-64's keeps its name. - `GUEST_TARGETS` gains `aarch64-unknown-none-softfloat` and `aarch64-unknown-uefi`, so a sysroot carries the aarch64 kernel's and loader's libraries; the target list is part of the sysroot key. `USERLAND_ARCHS` names the architectures whose userland target the pinned compiler carries, and `HOSTED_ARCH` the one the hosted rustc runs on. - The aarch64 kernel target is the softfloat one, and the softfloat certification asks each architecture its own question (no SSE; no NEON or FP). - `kvm_usable`, `CPU_KVM` and `CPU_TCG` become `Arch::accel` and `Arch::cpu`: the host's own hypervisor (KVM on Linux, HVF on macOS) when the host is the guest's architecture, TCG otherwise. - `cargo run`'s launch and the CI instrument spawn the architecture's QEMU; `virt` gets a GICv3, SMMUv3 as its IOMMU and `ramfb` as its GOP. - clippy lints the kernel and the loader for both architectures, and the host job installs both architectures' bare targets. - `Plan::without_userland` builds a ROOT with no program in it, for a boot that ends before the kernel starts one. Behaviour on x86-64 is unchanged apart from one host class: an x86-64 guest on an Intel Mac now asks for HVF instead of TCG, which is the same rule an aarch64 guest on Apple silicon follows and which no one here has measured. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/.cargo/config.toml | 5 +- bootloader/rust-toolchain.toml | 2 +- kernel/.cargo/config.toml | 5 +- kernel/rust-toolchain.toml | 2 +- src/arch.rs | 202 ++++++++++++++ src/build.rs | 482 ++++++++++++++++++--------------- src/ci.rs | 30 +- src/clippy.rs | 40 ++- src/flags.rs | 1 + src/image.rs | 19 +- src/lib.rs | 31 +-- src/libc.rs | 8 +- src/main.rs | 19 +- src/qemu.rs | 55 +++- src/release.rs | 6 +- src/sourcegate.rs | 14 +- src/sysroot.rs | 23 +- src/toolchain.rs | 52 +++- tests/common/compile.rs | 4 +- tests/common/faults.rs | 2 +- tests/common/metal.rs | 4 +- tests/common/passcost.rs | 2 +- tests/common/qemu.rs | 26 +- tests/common/swap.rs | 2 +- tests/toyos.rs | 9 +- 25 files changed, 694 insertions(+), 351 deletions(-) create mode 100644 src/arch.rs diff --git a/bootloader/.cargo/config.toml b/bootloader/.cargo/config.toml index 9311d3dc2ea..13126787482 100644 --- a/bootloader/.cargo/config.toml +++ b/bootloader/.cargo/config.toml @@ -3,4 +3,7 @@ target = "x86_64-unknown-uefi" rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes"] [target.x86_64-unknown-uefi] -linker = "toyos-ld" \ No newline at end of file +linker = "toyos-ld" + +[target.aarch64-unknown-uefi] +linker = "toyos-ld" diff --git a/bootloader/rust-toolchain.toml b/bootloader/rust-toolchain.toml index 2549413f0dd..b58d6aa2bd1 100644 --- a/bootloader/rust-toolchain.toml +++ b/bootloader/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -targets = ["x86_64-unknown-uefi"] \ No newline at end of file +targets = ["x86_64-unknown-uefi", "aarch64-unknown-uefi"] diff --git a/kernel/.cargo/config.toml b/kernel/.cargo/config.toml index 579ded638a7..e7607696e14 100644 --- a/kernel/.cargo/config.toml +++ b/kernel/.cargo/config.toml @@ -3,4 +3,7 @@ target = "x86_64-unknown-none" rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes"] [target.x86_64-unknown-none] -linker = "toyos-ld" \ No newline at end of file +linker = "toyos-ld" + +[target.aarch64-unknown-none-softfloat] +linker = "toyos-ld" diff --git a/kernel/rust-toolchain.toml b/kernel/rust-toolchain.toml index 76653840601..e3ab4867b0a 100644 --- a/kernel/rust-toolchain.toml +++ b/kernel/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -targets = ["x86_64-unknown-none"] \ No newline at end of file +targets = ["x86_64-unknown-none", "aarch64-unknown-none-softfloat"] diff --git a/src/arch.rs b/src/arch.rs new file mode 100644 index 00000000000..61dc034ef80 --- /dev/null +++ b/src/arch.rs @@ -0,0 +1,202 @@ +//! The machines ToyOS runs on. +//! +//! Every target triple, QEMU binary, firmware image, guest CPU and accelerator +//! the build system and the harness name is a function of one [`Arch`]. Neither +//! architecture is the reference: a new question about a machine is a new +//! method here that both variants answer, or it does not compile. + +use std::path::Path; + +/// One instruction-set architecture ToyOS builds for and boots. +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub enum Arch { + X86_64, + Aarch64, +} + +/// How a guest's CPU is provided. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Accel { + /// Linux's hypervisor, on a host of the guest's own architecture. + Kvm, + /// macOS's Hypervisor.framework, on a host of the guest's own architecture. + Hvf, + /// QEMU's emulator: every other host. + Tcg, +} + +impl Accel { + /// The name `-accel` takes. + pub const fn name(self) -> &'static str { + match self { + Accel::Kvm => "kvm", + Accel::Hvf => "hvf", + Accel::Tcg => "tcg", + } + } + + /// Whether the guest runs on the host's own CPU rather than an emulated one. + pub const fn is_hardware(self) -> bool { + !matches!(self, Accel::Tcg) + } +} + +impl Arch { + pub const ALL: [Arch; 2] = [Arch::X86_64, Arch::Aarch64]; + + /// The architecture this build system runs on, when ToyOS runs there too. + pub const HOST: Option = if cfg!(target_arch = "x86_64") { + Some(Arch::X86_64) + } else if cfg!(target_arch = "aarch64") { + Some(Arch::Aarch64) + } else { + None + }; + + /// The name a command line spells it with, and Rust's `target_arch`. + pub const fn name(self) -> &'static str { + match self { + Arch::X86_64 => "x86_64", + Arch::Aarch64 => "aarch64", + } + } + + pub fn parse(name: &str) -> Result { + Arch::ALL.into_iter().find(|arch| arch.name() == name).ok_or_else(|| { + let known: Vec<&str> = Arch::ALL.iter().map(|a| a.name()).collect(); + format!("{name:?} is not an architecture ToyOS builds for; it builds for {}", known.join(" and ")) + }) + } + + /// ToyOS userland's target: the rust fork's. + pub const fn userland(self) -> &'static str { + match self { + Arch::X86_64 => "x86_64-unknown-toyos", + Arch::Aarch64 => "aarch64-unknown-toyos", + } + } + + /// The kernel's bare-metal target: one without hardware float, so kernel + /// code never touches the FP/SIMD registers that are the user's state. + pub const fn kernel(self) -> &'static str { + match self { + Arch::X86_64 => "x86_64-unknown-none", + Arch::Aarch64 => "aarch64-unknown-none-softfloat", + } + } + + /// The UEFI loader's target. + pub const fn loader(self) -> &'static str { + match self { + Arch::X86_64 => "x86_64-unknown-uefi", + Arch::Aarch64 => "aarch64-unknown-uefi", + } + } + + /// Where on the ESP firmware looks for a removable medium's loader: UEFI + /// 2.11 §3.5.1.1 names one file per architecture. + pub const fn removable_loader(self) -> &'static str { + match self { + Arch::X86_64 => "EFI/BOOT/BOOTx64.EFI", + Arch::Aarch64 => "EFI/BOOT/BOOTAA64.EFI", + } + } + + /// The QEMU that emulates this machine. + pub const fn qemu(self) -> &'static str { + match self { + Arch::X86_64 => "qemu-system-x86_64", + Arch::Aarch64 => "qemu-system-aarch64", + } + } + + /// The firmware's code and variable-store images, relative to the + /// repository root, pinned and hashed in `NOTICE`. + pub const fn firmware(self) -> (&'static str, &'static str) { + match self { + Arch::X86_64 => ("ovmf/OVMF_CODE-pure-efi.fd", "ovmf/OVMF_VARS-pure-efi.fd"), + Arch::Aarch64 => ("aavmf/AAVMF_CODE.fd", "aavmf/AAVMF_VARS.fd"), + } + } + + /// How this host provides a guest of this architecture: its own + /// hypervisor when the host is the same architecture and will open it, + /// and emulation otherwise. + /// + /// **Presence is not permission**, and `Path::exists` cannot tell the two + /// apart. A GitHub runner ships `/dev/kvm` as `crw-rw---- root:kvm` with the + /// build user outside the group, so a check on existence puts `-accel kvm` + /// on every boot and every boot dies on `failed to initialize kvm: + /// Permission denied` — a whole suite red for a reason no test names. + /// Opening it is the question QEMU is about to ask. + pub fn accel(self) -> Accel { + if Arch::HOST != Some(self) { + return Accel::Tcg; + } + if cfg!(target_os = "macos") { + return Accel::Hvf; + } + let opens = cfg!(target_os = "linux") + && std::fs::OpenOptions::new().read(true).write(true).open(Path::new("/dev/kvm")).is_ok(); + if opens { + Accel::Kvm + } else { + Accel::Tcg + } + } + + /// The CPU every guest of this architecture gets under `accel`. + /// + /// **One declaration, read by `cargo run` and by the harness both**, because + /// the two drifted: the harness gained `+smep` and the interactive path did + /// not, so the machine an owner looked at differed from the machine the + /// suite judged in exactly the dimension the suite had been changed for. + /// The emulated CPU carries the same features off a base model, because a + /// TCG guest that withholds one is a feature this tree stops exercising. + pub const fn cpu(self, accel: Accel) -> &'static str { + match (self, accel.is_hardware()) { + (Arch::X86_64, true) => "host,+rdrand,+smap,+fsgsbase,+x2apic,+smep", + (Arch::X86_64, false) => "qemu64,+rdrand,+smap,+fsgsbase,+x2apic,+smep", + (Arch::Aarch64, true) => "host", + (Arch::Aarch64, false) => "max", + } + } + + /// The machine's three targets: userland, kernel, loader. + pub const fn targets(self) -> [&'static str; 3] { + [self.userland(), self.kernel(), self.loader()] + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn every_name_parses_back_to_its_arch_and_nothing_else_does() { + for arch in Arch::ALL { + assert_eq!(Arch::parse(arch.name()), Ok(arch)); + } + let refusal = Arch::parse("riscv64").unwrap_err(); + assert!(refusal.contains("x86_64") && refusal.contains("aarch64"), "{refusal}"); + } + + #[test] + fn every_target_names_its_own_architecture() { + for arch in Arch::ALL { + for triple in arch.targets() { + assert!(triple.starts_with(&format!("{}-", arch.name())), "{triple}"); + } + assert!(arch.qemu().ends_with(arch.name())); + } + } + + #[test] + fn a_guest_of_another_architecture_is_emulated() { + for arch in Arch::ALL { + if Arch::HOST != Some(arch) { + assert_eq!(arch.accel(), Accel::Tcg, "{arch:?}"); + } + } + } +} diff --git a/src/build.rs b/src/build.rs index 21ad9c33bf5..484983051f2 100644 --- a/src/build.rs +++ b/src/build.rs @@ -10,6 +10,7 @@ use std::time::{Duration, Instant, UNIX_EPOCH}; use serde::Deserialize; +use crate::arch::Arch; use crate::assets; use crate::buildlock; use crate::flags; @@ -227,8 +228,8 @@ enum Clean { /// Crates with explicit paths (toyos-ld, toyos-cc) also have host builds /// that must survive: the host toyos-ld *is* the cross linker. Both are /// host-workspace members, so the directory this empties is the - /// workspace's `target/x86_64-unknown-toyos` — the guest halves of the two, - /// and nothing the host builds. + /// workspace's `target/` for every architecture — the + /// guest halves of the two, and nothing the host builds. ToyosOnly, } @@ -261,10 +262,12 @@ fn clean(root: &Path, crate_dir: &Path, kind: Clean, fingerprint: &str) { .status(); } Clean::ToyosOnly => { - let toyos_dir = target.join("x86_64-unknown-toyos"); - if toyos_dir.exists() { - eprintln!("external deps changed: cleaning {}", toyos_dir.display()); - fs::remove_dir_all(&toyos_dir).ok(); + for arch in Arch::ALL { + let toyos_dir = target.join(arch.userland()); + if toyos_dir.exists() { + eprintln!("external deps changed: cleaning {}", toyos_dir.display()); + fs::remove_dir_all(&toyos_dir).ok(); + } } } } @@ -429,8 +432,13 @@ fn cargo_build( /// empty request; the harness passes `BootOptions::kernel_features` joined. /// Nothing between them may add a name — which is what `qemu::fold_inert` used /// to do to every boot in the suite. -fn kernel_key(features: &str) -> u64 { - key_hash(&[PROFILE, features]) +fn kernel_key(arch: Arch, features: &str) -> u64 { + key_hash(&[PROFILE, arch.name(), features]) +} + +/// The loader's build key: its profile and its architecture. +fn loader_key(arch: Arch) -> u64 { + key_hash(&[PROFILE, arch.name()]) } fn key_hash(parts: &[&str]) -> u64 { @@ -463,41 +471,55 @@ const OVERFLOW_CHECK_MARKER: &[u8] = b"attempt to add with overflow"; /// Refuse to build a kernel whose target has hardware float. /// -/// `arch::entry`'s bracket saves the user machine state at the ring transition -/// and nowhere else, which is sound only because kernel code cannot disturb it: -/// the FPU may be left dirty for a whole Ring 0 excursion because nothing in -/// Ring 0 reads or writes it. That rests on one line of the target spec — +/// The kernel's entry saves the user machine state at the ring transition and +/// nowhere else, which is sound only because kernel code cannot disturb it: +/// the FP/SIMD registers may be left dirty for a whole kernel excursion because +/// nothing in the kernel reads or writes them. That rests on the target spec — /// `RustcAbi::Softfloat` and `+soft-float` in -/// `rust/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs` — and an -/// edit turning it off would make every bracket in the kernel insufficient -/// without changing a byte of `kernel/`. +/// `rust/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs`, and +/// `aarch64_unknown_none_softfloat.rs`'s `-fp-armv8,-neon` — and an edit +/// turning it off would make every bracket in the kernel insufficient without +/// changing a byte of `kernel/`. /// -/// Asked of the compiler rather than of the manifest, and once per process: it -/// is a property of the toolchain rather than of any one image. -fn assert_kernel_is_softfloat(env: &GuestEnv) { - static CHECKED: std::sync::OnceLock<()> = std::sync::OnceLock::new(); - CHECKED.get_or_init(|| { - let out = Command::new("rustc") - .args(["--print", "cfg", "--target", "x86_64-unknown-none"]) - .env("RUSTUP_TOOLCHAIN", &env.toolchain) - .env("PATH", &env.path) - .env_remove("RUSTFLAGS") - .env_remove("RUSTC") - .output() - .expect("rustc --print cfg failed to launch"); - assert!(out.status.success(), "rustc --print cfg failed for the kernel target"); - let cfg = String::from_utf8_lossy(&out.stdout); - assert!( - cfg.lines().any(|l| l == r#"target_feature="x87""#), - "the kernel target no longer reports x87, so `arch::fpu`'s FXSAVE64 image is not \ - the state this machine has:\n{cfg}" - ); - assert!( - !cfg.lines().any(|l| l == r#"target_feature="sse""#), - "the kernel target has hardware float, so kernel code may now clobber the user \ - machine state between `arch::entry`'s save and its restore:\n{cfg}" - ); - }); +/// Asked of the compiler rather than of the manifest, and once per process and +/// architecture: it is a property of the toolchain rather than of any one image. +fn assert_kernel_is_softfloat(env: &GuestEnv, arch: Arch) { + static CHECKED: std::sync::Mutex> = std::sync::Mutex::new(BTreeSet::new()); + let mut checked = CHECKED.lock().expect("a softfloat check panicked"); + if checked.contains(&arch) { + return; + } + let out = Command::new("rustc") + .args(["--print", "cfg", "--target", arch.kernel()]) + .env("RUSTUP_TOOLCHAIN", &env.toolchain) + .env("PATH", &env.path) + .env_remove("RUSTFLAGS") + .env_remove("RUSTC") + .output() + .expect("rustc --print cfg failed to launch"); + assert!(out.status.success(), "rustc --print cfg failed for the kernel target"); + let cfg = String::from_utf8_lossy(&out.stdout); + let has = |feature: &str| cfg.lines().any(|l| l == format!(r#"target_feature="{feature}""#)); + match arch { + Arch::X86_64 => { + assert!( + has("x87"), + "the kernel target no longer reports x87, so `arch::fpu`'s FXSAVE64 image is \ + not the state this machine has:\n{cfg}" + ); + assert!( + !has("sse"), + "the kernel target has hardware float, so kernel code may now clobber the user \ + machine state between the entry's save and its restore:\n{cfg}" + ); + } + Arch::Aarch64 => assert!( + !has("neon") && !has("fp-armv8"), + "the kernel target has FP/SIMD, so kernel code may now clobber the user machine \ + state between the entry's save and its restore:\n{cfg}" + ), + } + checked.insert(arch); } /// Whether `haystack` contains `needle` as a contiguous subslice. @@ -616,89 +638,22 @@ fn build_and_assemble( env: &GuestEnv, extra_files: &[(String, Vec)], quiet: bool, + arch: Arch, + userland: Userland, ) -> Vec { - let userland_dir = root.join("userland"); - - let mut workspace_packages: Vec<&str> = vec![INIT_PROGRAM]; - let mut standalone: Vec<(&String, &ProgramConfig)> = Vec::new(); - for (name, cfg) in &config.programs { - let crate_dir = cfg.crate_dir(root, name); - assert!( - crate_dir.join("Cargo.toml").exists(), - "Program '{name}' crate not found at {}", - crate_dir.display() - ); - if cfg.is_workspace_member() { - workspace_packages.push(name); - } else { - standalone.push((name, cfg)); - } - } - let mut root_files: Vec<(String, Vec)> = Vec::new(); - let ws_target = userland_dir.join(format!("target/x86_64-unknown-toyos/{PROFILE}")); - - // Build and read under one hold, exactly as `build_toyos_bins` does and for - // the same reason: a program's path is keyed on (crate, target, profile) - // alone, so every config in this run writes and reads the same - // `userland/target/.../toybox`. Cargo's own lock orders the two *builds* and - // says nothing about a read between them — `ioapic_topology` died on - // `Failed to read binary for toybox` while another worker's config was - // relinking it, and was green the moment it was re-run alone. - { - let _artifact = buildlock::artifact(root); - if !workspace_packages.is_empty() { - let mut extra: Vec<&str> = Vec::new(); - for pkg in &workspace_packages { - extra.push("-p"); - extra.push(pkg); - } - cargo_build( - &userland_dir, - "x86_64-unknown-toyos", - &extra, - env, - &[], - quiet, - ); - } - - for (name, cfg) in &standalone { - let crate_dir = cfg.crate_dir(root, name); - let mut extra: Vec<&str> = Vec::new(); - if cfg.no_default_features { - extra.push("--no-default-features"); - } - cargo_build( - &crate_dir, - "x86_64-unknown-toyos", - &extra, - env, - &[], - quiet, - ); - } - - for (name, cfg) in &config.programs { - let binary = if cfg.is_workspace_member() { - ws_target.join(name) - } else { - let crate_dir = cfg.crate_dir(root, name); - hostws::target_dir(root, &crate_dir) - .join(format!("x86_64-unknown-toyos/{PROFILE}/{name}")) - }; - let data = - fs::read(&binary).unwrap_or_else(|_| panic!("Failed to read binary for {name}")); - root_files.push((format!("bin/{name}"), data)); - } - - let init = ws_target.join(INIT_PROGRAM); - let data = fs::read(&init).expect("Failed to read binary for init"); - root_files.push((format!("bin/{INIT_PROGRAM}"), data)); - root_files.push((toyos_manifest::PATH.to_string(), render_manifest(config))); + if userland == Userland::Built { + build_programs(root, config, env, quiet, arch, &mut root_files); } + root_files.push((toyos_manifest::PATH.to_string(), render_manifest(config))); - if config.hosted_rustc { + if userland == Userland::Built && config.hosted_rustc { + assert!( + arch == toolchain::HOSTED_ARCH, + "hosted-rustc is built to run on {}, and this image is for {}", + toolchain::HOSTED_ARCH.name(), + arch.name() + ); collect_hosted_rustc(root, &env.toolchain, &mut root_files); } @@ -734,6 +689,78 @@ fn build_and_assemble( image::create_root_image(&root_files, &symlinks, quiet) } +/// Build `config`'s programs and init for `arch`, and add each to `root_files`. +fn build_programs( + root: &Path, + config: &SystemConfig, + env: &GuestEnv, + quiet: bool, + arch: Arch, + root_files: &mut Vec<(String, Vec)>, +) { + let userland_dir = root.join("userland"); + let target = arch.userland(); + + let mut workspace_packages: Vec<&str> = vec![INIT_PROGRAM]; + let mut standalone: Vec<(&String, &ProgramConfig)> = Vec::new(); + for (name, cfg) in &config.programs { + let crate_dir = cfg.crate_dir(root, name); + assert!( + crate_dir.join("Cargo.toml").exists(), + "Program '{name}' crate not found at {}", + crate_dir.display() + ); + if cfg.is_workspace_member() { + workspace_packages.push(name); + } else { + standalone.push((name, cfg)); + } + } + + let ws_target = userland_dir.join(format!("target/{target}/{PROFILE}")); + + // Build and read under one hold, exactly as `build_toyos_bins` does and for + // the same reason: a program's path is keyed on (crate, target, profile) + // alone, so every config in this run writes and reads the same + // `userland/target/.../toybox`. Cargo's own lock orders the two *builds* and + // says nothing about a read between them — `ioapic_topology` died on + // `Failed to read binary for toybox` while another worker's config was + // relinking it, and was green the moment it was re-run alone. + let _artifact = buildlock::artifact(root); + if !workspace_packages.is_empty() { + let mut extra: Vec<&str> = Vec::new(); + for pkg in &workspace_packages { + extra.push("-p"); + extra.push(pkg); + } + cargo_build(&userland_dir, target, &extra, env, &[], quiet); + } + + for (name, cfg) in &standalone { + let crate_dir = cfg.crate_dir(root, name); + let mut extra: Vec<&str> = Vec::new(); + if cfg.no_default_features { + extra.push("--no-default-features"); + } + cargo_build(&crate_dir, target, &extra, env, &[], quiet); + } + + for (name, cfg) in &config.programs { + let binary = if cfg.is_workspace_member() { + ws_target.join(name) + } else { + let crate_dir = cfg.crate_dir(root, name); + hostws::target_dir(root, &crate_dir).join(format!("{target}/{PROFILE}/{name}")) + }; + let data = fs::read(&binary).unwrap_or_else(|_| panic!("Failed to read binary for {name}")); + root_files.push((format!("bin/{name}"), data)); + } + + let init = ws_target.join(INIT_PROGRAM); + let data = fs::read(&init).expect("Failed to read binary for init"); + root_files.push((format!("bin/{INIT_PROGRAM}"), data)); +} + /// What `tests/common/qemu.rs` prefixes every binary it injects with. const HARNESS_PREFIXES: [&str; 2] = ["bin/test_rs_", "bin/test_c_"]; @@ -786,19 +813,40 @@ const CONFIG: &str = "system.toml"; /// Everything one image is built from: the config, the kernel's feature list, /// and the parameters that kernel is armed with. pub struct Plan { + pub arch: Arch, pub config: PathBuf, pub features: Vec, pub params: Vec, + pub userland: Userland, +} + +/// Whether ROOT carries the config's programs. +#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] +pub enum Userland { + /// init and every program the config names, built for the plan's + /// architecture. + Built, + /// The manifest and the config's assets, and no program: the image of a + /// boot that ends before the kernel starts one, which pays for no userland + /// build. A kernel that does reach init finds none, and panics saying so. + Absent, } impl Plan { - pub fn new(config: &Path, features: &[&str], params: &[&str]) -> Self { + pub fn new(arch: Arch, config: &Path, features: &[&str], params: &[&str]) -> Self { Self { + arch, config: config.to_path_buf(), features: features.iter().map(|f| (*f).to_string()).collect(), params: params.iter().map(|p| (*p).to_string()).collect(), + userland: Userland::Built, } } + + /// This plan with a ROOT that carries no program. + pub fn without_userland(self) -> Self { + Self { userland: Userland::Absent, ..self } + } } /// The plan a `cargo run` command line names. [`build`] consumes one and @@ -819,9 +867,24 @@ pub fn plan_for(root: &Path, boot: &Boot, debug: bool, args: &[String]) -> Plan let features = kernel_features(root, debug, &feature, ¶m); check_params(root, ¶m); Plan { + arch: arch_for(args), config: boot.config.clone(), features: features.split(',').filter(|f| !f.is_empty()).map(Into::into).collect(), params: param, + userland: Userland::Built, + } +} + +/// The architecture a `cargo run` command line names with `--arch`: x86-64 +/// when it names none, because that is the one whose userland boots to a +/// desktop until the port's userland stage lands. +pub fn arch_for(args: &[String]) -> Arch { + match flags::CARGO_RUN.value(args, &flags::ARCH) { + Some(name) => Arch::parse(name).unwrap_or_else(|why| { + eprintln!("Error: --arch {why}"); + std::process::exit(2); + }), + None => Arch::X86_64, } } @@ -866,6 +929,16 @@ impl Boot { Ok(Self { config: dir.join(CONFIG), image: PathBuf::from(image), case }) } + /// The image `arch`'s build of this boot writes. x86-64 keeps the name + /// every flashing step already reads; every other architecture's carries its + /// name, so two architectures' builds of one config never share a file. + pub fn image_for(&self, arch: Arch) -> PathBuf { + match arch { + Arch::X86_64 => self.image.clone(), + Arch::Aarch64 => self.image.with_extension(format!("{}.img", arch.name())), + } + } + /// The three modes' directories are the repository's own, so a refusal from /// [`Boot::at`] on one of them is a broken checkout and not a command line. fn mode(root: &Path, dir: &Path) -> Self { @@ -1497,20 +1570,39 @@ fn assert_sched_check_matches_features(features: &str, kernel: &[u8]) { /// the kernel of every image this build system produces that gets it. The /// caller has already run `cargo_build` on the kernel crate and must hold /// [`buildlock::artifact`], since the stage below copies the shared cargo path. -fn stage_and_certify_kernel(root: &Path, features: &str, env: &GuestEnv) -> Vec { +/// Stage the loader `arch`'s build just wrote, under the key that names it. +/// The caller holds [`buildlock::artifact`], as [`stage_and_certify_kernel`]'s does. +fn stage_loader(root: &Path, arch: Arch) -> PathBuf { + stage_artifact( + root, + &root.join(format!("bootloader/target/{}/{PROFILE}/bootloader.efi", arch.loader())), + &format!("bootloader-{}.efi", arch.name()), + loader_key(arch), + ) +} + +fn stage_and_certify_kernel(root: &Path, features: &str, env: &GuestEnv, arch: Arch) -> Vec { let staged = stage_artifact( root, - &root.join(format!("kernel/target/x86_64-unknown-none/{PROFILE}/kernel")), - "kernel", - kernel_key(features), + &root.join(format!("kernel/target/{}/{PROFILE}/kernel", arch.kernel())), + &format!("kernel-{}", arch.name()), + kernel_key(arch, features), ); let bytes = fs::read(&staged).expect("Failed to read staged kernel"); assert_overflow_checked("kernel", &bytes); assert_actuators_match_features(root, features, &bytes); - assert_entry_window_matches_features(features, &bytes); - assert_entry_labels_match_features(features, &bytes); + match arch { + Arch::X86_64 => { + assert_entry_window_matches_features(features, &bytes); + assert_entry_labels_match_features(features, &bytes); + } + // Taking an exception to EL1 sets `PSTATE.SP`, so its handler's first + // instruction already runs on `SP_EL1`: no instruction runs at EL1 on a + // user's stack, and there is no window to judge. + Arch::Aarch64 => {} + } assert_sched_check_matches_features(features, &bytes); - assert_kernel_is_softfloat(env); + assert_kernel_is_softfloat(env, arch); bytes } @@ -1522,13 +1614,14 @@ pub fn build( plan: &Plan, ) -> PathBuf { let kernel_features = plan.features.join(","); + let arch = plan.arch; let params = plan.params.join(","); // Every lock below is `build_test_image`'s own, and the flags it cannot // combine with were refused before any of them. if boot.case { let bytes = build_test_image(root, plan, false, &[]); - let image_path = root.join(&boot.image); + let image_path = root.join(boot.image_for(plan.arch)); fs::write(&image_path, bytes) .unwrap_or_else(|e| panic!("write {}: {e}", image_path.display())); return image_path; @@ -1565,46 +1658,22 @@ pub fn build( extra.push("--features"); extra.push(&features); } - cargo_build( - &root.join("kernel"), - "x86_64-unknown-none", - &extra, - &env, - &[], - false, - ); + cargo_build(&root.join("kernel"), arch.kernel(), &extra, &env, &[], false); }) }; - { - cargo_build( - &root.join("bootloader"), - "x86_64-unknown-uefi", - &[], - &env, - &[], - false, - ); - } + cargo_build(&root.join("bootloader"), arch.loader(), &[], &env, &[], false); kernel_handle.join().expect("kernel build thread panicked"); ( - stage_and_certify_kernel(root, &kernel_features, &env), - stage_artifact( - root, - &root.join(format!( - "bootloader/target/x86_64-unknown-uefi/{PROFILE}/bootloader.efi" - )), - "bootloader.efi", - key_hash(&[PROFILE]), - ), + stage_and_certify_kernel(root, &kernel_features, &env, arch), + stage_loader(root, arch), ) }; - let root_bytes = - build_and_assemble(root, &config, &env, &[], false); + let root_bytes = build_and_assemble(root, &config, &env, &[], false, arch, plan.userland); let bl_bytes = fs::read(&bl_art).expect("Failed to read staged bootloader"); - let disk_bytes = image::create_boot_image(&kernel_bytes, &bl_bytes, &root_bytes, ¶ms); - let image_path = root.join(&boot.image); + let disk_bytes = image::create_boot_image(arch, &kernel_bytes, &bl_bytes, &root_bytes, ¶ms); + let image_path = root.join(boot.image_for(arch)); fs::write(&image_path, disk_bytes).expect("Failed to write image"); let nvme_path = root.join("target/nvme.img"); @@ -1701,14 +1770,17 @@ static KERNEL: Memo = Memo::new(); static BOOTLOADER: Memo = Memo::new(); static ROOT_IMAGE: Memo = Memo::new(); -/// What the ROOT image is a function of: the config naming the programs, and the -/// files the caller adds to it. Hashed whole: a key over the test binaries' +/// What the ROOT image is a function of: the config naming the programs, the +/// architecture and whether they are built at all, and the files the caller +/// adds to it. Hashed whole: a key over the test binaries' /// names and lengths would call two different builds of one binary the same /// image. -fn root_image_key(config_path: &Path, extra_files: &[(String, Vec)]) -> u64 { +fn root_image_key(plan: &Plan, extra_files: &[(String, Vec)]) -> u64 { use std::hash::{Hash, Hasher}; let mut h = std::collections::hash_map::DefaultHasher::new(); - config_path.hash(&mut h); + plan.config.hash(&mut h); + plan.arch.hash(&mut h); + plan.userland.hash(&mut h); for (name, data) in extra_files { name.hash(&mut h); data.hash(&mut h); @@ -1744,16 +1816,17 @@ pub fn build_test_image( "a boot asking for {kernel_params:?} must boot the test kernel, not {kernel_features:?}" ); let params = kernel_params.join(","); - let kernel_key = kernel_key(&features); - let bl_key = key_hash(&[PROFILE]); - let root_image_key = root_image_key(config_path, extra_files); + let arch = plan.arch; + let kernel_key = kernel_key(arch, &features); + let bl_key = loader_key(arch); + let root_image_key = root_image_key(plan, extra_files); // Nothing left to build, so nothing for the lock, the toolchain check or the // staleness sweep to protect. if let (Some(kernel), Some(bl), Some(root)) = (KERNEL.get(kernel_key), BOOTLOADER.get(bl_key), ROOT_IMAGE.get(root_image_key)) { - return image::create_boot_image(&kernel, &bl, &root, ¶ms); + return image::create_boot_image(arch, &kernel, &bl, &root, ¶ms); } // A cache miss is shared setup, not a property of whichever test happened @@ -1793,43 +1866,23 @@ pub fn build_test_image( kernel_extra.push("--features"); kernel_extra.push(&features); } - cargo_build( - &root.join("kernel"), - "x86_64-unknown-none", - &kernel_extra, - &env, - &[], - quiet, - ); - stage_and_certify_kernel(root, &features, &env) + cargo_build(&root.join("kernel"), arch.kernel(), &kernel_extra, &env, &[], quiet); + stage_and_certify_kernel(root, &features, &env, arch) }); let bl = BOOTLOADER.get_or_build(bl_key, || { - cargo_build( - &root.join("bootloader"), - "x86_64-unknown-uefi", - &[], - &env, - &[], - quiet, - ); - let staged = stage_artifact( - root, - &root.join(format!("bootloader/target/x86_64-unknown-uefi/{PROFILE}/bootloader.efi")), - "bootloader.efi", - bl_key, - ); - fs::read(&staged).expect("Failed to read staged bootloader") + cargo_build(&root.join("bootloader"), arch.loader(), &[], &env, &[], quiet); + fs::read(stage_loader(root, arch)).expect("Failed to read staged bootloader") }); (kernel, bl) }; let root_bytes = ROOT_IMAGE.get_or_build(root_image_key, || { - build_and_assemble(root, &config, &env, extra_files, quiet) + build_and_assemble(root, &config, &env, extra_files, quiet, arch, plan.userland) }); drop(build_timer); - image::create_boot_image(&kernel_bytes, &bl_bytes, &root_bytes, ¶ms) + image::create_boot_image(arch, &kernel_bytes, &bl_bytes, &root_bytes, ¶ms) } /// The host binaries the network judges drive, built here rather than inside a @@ -1881,8 +1934,8 @@ pub fn https_fetch_host(root: &Path) -> PathBuf { /// Copy to `to` the binary the build leaves for userland workspace program /// `name`: the bytes a swap sends a running machine in place of the ones its /// image carries. Read under the artifact lock, as every image build reads it. -pub fn copy_guest_program(root: &Path, name: &str, to: &Path) -> Result<(), String> { - let from = root.join(format!("userland/target/x86_64-unknown-toyos/{PROFILE}/{name}")); +pub fn copy_guest_program(root: &Path, arch: Arch, name: &str, to: &Path) -> Result<(), String> { + let from = root.join(format!("userland/target/{}/{PROFILE}/{name}", arch.userland())); let _artifact = buildlock::artifact(root); fs::copy(&from, to) .map(|_| ()) @@ -1907,7 +1960,8 @@ fn host_judge(root: &Path, (dir, bin): Judge) -> PathBuf { /// target-directory scan keeps shipping a renamed or merged test from an artifact /// nothing in the tree can produce any more — into the ROOT image, into the test list, /// and over the name of whatever gets it next. -pub fn build_toyos_bins(root: &Path, crate_path: &Path, quiet: bool) -> Vec<(String, Vec)> { +pub fn build_toyos_bins(root: &Path, arch: Arch, crate_path: &Path, quiet: bool) -> Vec<(String, Vec)> { + let target = arch.userland(); let _slot = buildlock::build_slot(root, "the test binaries"); let mut lock = buildlock::shared(root, "test binaries"); let sysroot = crate::toolchain::ensure(root, false, &mut lock); @@ -1953,9 +2007,9 @@ pub fn build_toyos_bins(root: &Path, crate_path: &Path, quiet: bool) -> Vec<(Str if !quiet { eprintln!("[build] Building cdylib subcrate: {lib_name}"); } - cargo_build(&sub_path, "x86_64-unknown-toyos", &[], &env, &[], quiet); + cargo_build(&sub_path, target, &[], &env, &[], quiet); - let lib_out = sub_path.join(format!("target/x86_64-unknown-toyos/{PROFILE}")); + let lib_out = sub_path.join(format!("target/{target}/{PROFILE}")); lib_search_dirs.push(lib_out.clone()); for so_entry in fs::read_dir(&lib_out).unwrap() { @@ -1980,16 +2034,9 @@ pub fn build_toyos_bins(root: &Path, crate_path: &Path, quiet: bool) -> Vec<(Str } else { vec![("RUSTFLAGS", link_flags.trim_end())] }; - cargo_build( - crate_path, - "x86_64-unknown-toyos", - &["--bins"], - &env, - &extra_env, - quiet, - ); + cargo_build(crate_path, target, &["--bins"], &env, &extra_env, quiet); - let bin_dir = crate_path.join(format!("target/x86_64-unknown-toyos/{PROFILE}")); + let bin_dir = crate_path.join(format!("target/{target}/{PROFILE}")); let bin_src = crate_path.join("src/bin"); if bin_src.exists() { for entry in fs::read_dir(&bin_src).unwrap() { @@ -2021,7 +2068,8 @@ pub fn build_toyos_bins(root: &Path, crate_path: &Path, quiet: bool) -> Vec<(Str /// lock its rebuild takes. fn collect_hosted_rustc(root: &Path, toolchain: &Path, root_files: &mut Vec<(String, Vec)>) { let _compiler = buildlock::compiler_shared(root, "reading the hosted rustc"); - let sysroot = toolchain::rust_dir(root).join("build/x86_64-unknown-toyos/stage2"); + let target = toolchain::HOSTED_ARCH.userland(); + let sysroot = toolchain::rust_dir(root).join(format!("build/{target}/stage2")); assert!( sysroot.exists(), "Hosted rustc sysroot missing: {}", @@ -2047,7 +2095,7 @@ fn collect_hosted_rustc(root: &Path, toolchain: &Path, root_files: &mut Vec<(Str } } - let backends = sysroot.join("lib/rustlib/x86_64-unknown-toyos/codegen-backends"); + let backends = sysroot.join(format!("lib/rustlib/{target}/codegen-backends")); if backends.exists() { for entry in fs::read_dir(&backends).into_iter().flatten().flatten() { let path = entry.path(); @@ -2055,20 +2103,20 @@ fn collect_hosted_rustc(root: &Path, toolchain: &Path, root_files: &mut Vec<(Str let name = path.file_name().unwrap().to_str().unwrap().to_string(); let data = fs::read(&path).unwrap(); root_files.push(( - format!("lib/rustlib/x86_64-unknown-toyos/codegen-backends/{name}"), + format!("lib/rustlib/{target}/codegen-backends/{name}"), data, )); } } } - let rlibs = toolchain.join("lib/rustlib/x86_64-unknown-toyos/lib"); + let rlibs = toolchain.join(format!("lib/rustlib/{target}/lib")); for entry in fs::read_dir(&rlibs).unwrap_or_else(|e| panic!("read {}: {e}", rlibs.display())) { let path = entry.unwrap_or_else(|e| panic!("read {}: {e}", rlibs.display())).path(); if path.extension().is_some_and(|e| e == "rlib" || e == "rmeta") { let name = path.file_name().unwrap().to_str().unwrap().to_string(); root_files.push(( - format!("lib/rustlib/x86_64-unknown-toyos/lib/{name}"), + format!("lib/rustlib/{target}/lib/{name}"), fs::read(&path).unwrap(), )); } @@ -2129,13 +2177,13 @@ mod tests { assert_eq!(shipping, "", "`cargo run` asks the kernel for {shipping:?}, not nothing"); let harness = <&[&str]>::default().join(","); assert_eq!( - kernel_key(&shipping), - kernel_key(&harness), + kernel_key(Arch::X86_64, &shipping), + kernel_key(Arch::X86_64, &harness), "a featureless boot and the shipping build stage different kernels" ); assert_ne!( - kernel_key(&shipping), - kernel_key("test-actuators"), + kernel_key(Arch::X86_64, &shipping), + kernel_key(Arch::X86_64, "test-actuators"), "the key ignores the features, so it cannot tell two kernels apart" ); } diff --git a/src/ci.rs b/src/ci.rs index bdad08ddc43..4dfe4c879e6 100644 --- a/src/ci.rs +++ b/src/ci.rs @@ -31,6 +31,7 @@ use std::io::{BufRead, BufReader, Write}; use std::path::Path; use std::process::Command; +use crate::arch::Arch; use crate::{flags, pr, release, sdkversion}; /// The checks `main`'s ruleset must require, as `gate-stage` reads them back: @@ -368,8 +369,8 @@ fn run_control(root: &Path, control: &Control) -> Result { /// runs), and the SDK. /// /// Clippy needs none of the ToyOS toolchain the nightly alone builds — the -/// kernel and the bootloader lint against `x86_64-unknown-none` and -/// `x86_64-unknown-uefi`, targets any rustup installs, and userland carries no +/// kernel and the bootloader lint against every architecture's bare targets +/// ([`crate::clippy::BARE_TARGETS`]), which any rustup installs, and userland carries no /// clippy shape (`src/clippy.rs`). Userland and the SDK are tested against the /// host triple for the same reason. fn host(root: &Path) -> Vec { @@ -382,10 +383,10 @@ fn host(root: &Path) -> Vec { ]; steps.push(step("clippy and the bare targets", || { for args in [ - &["component", "add", "clippy"][..], - &["target", "add", "x86_64-unknown-none", "x86_64-unknown-uefi"], + vec!["component", "add", "clippy"], + [&["target", "add"][..], &crate::clippy::BARE_TARGETS].concat(), ] { - let status = Command::new("rustup").args(args).status().map_err(|e| e.to_string())?; + let status = Command::new("rustup").args(&args).status().map_err(|e| e.to_string())?; if !status.success() { return Err(format!("rustup {} exited {status}", args.join(" "))); } @@ -528,7 +529,9 @@ fn suite_args(args: &[&str]) -> Vec { } fn guest(root: &Path, suite: &[String]) -> Vec { - let mut steps = vec![step("the instrument", || instrument(root))]; + // Every guest lane boots x86-64 guests: no hosted runner has been measured + // for an aarch64 one. + let mut steps = vec![step("the instrument", || instrument(root, Arch::X86_64))]; if steps.iter().all(|s| s.verdict.is_ok()) { steps.push(step("the toolchain", || release::install(root))); } @@ -575,16 +578,17 @@ fn verdicts(log: &str) -> String { /// The QEMU on `PATH` against `.github/qemu-version`, and whether `/dev/kvm` /// opens where it is present — the two things a guest verdict must be read /// against. -fn instrument(root: &Path) -> Result { +fn instrument(root: &Path, arch: Arch) -> Result { let want = declared_qemu_version(root).ok_or(".github/qemu-version declares no version")?; - let out = Command::new("qemu-system-x86_64") + let out = Command::new(arch.qemu()) .arg("--version") .output() - .map_err(|e| format!("qemu-system-x86_64: {e}"))?; + .map_err(|e| format!("{}: {e}", arch.qemu()))?; let said = String::from_utf8_lossy(&out.stdout).into_owned(); let have = parse_qemu_version(&said).ok_or_else(|| format!("QEMU said {said:?}"))?; let node = Path::new("/dev/kvm").exists(); - let accel = match (node, crate::kvm_usable()) { + let accelerated = arch.accel().is_hardware(); + let accel = match (node, accelerated) { (true, true) => "/dev/kvm opens", (true, false) => "/dev/kvm is present and does not open", (false, _) => "no /dev/kvm: emulated", @@ -606,7 +610,7 @@ fn instrument(root: &Path) -> Result { instrument moved" )); } - if node && !crate::kvm_usable() { + if node && !accelerated { return Err(format!("{line}: every boot would fall back to emulation in silence")); } Ok(line) @@ -637,9 +641,9 @@ fn parse_qemu_version(text: &str) -> Option { /// The line `cargo run` prints when this host is not the instrument the /// project's numbers were taken on, and nothing at all when it is. -pub fn qemu_version_note(root: &Path) -> Option { +pub fn qemu_version_note(root: &Path, arch: Arch) -> Option { let want = declared_qemu_version(root)?; - let out = Command::new("qemu-system-x86_64").arg("--version").output().ok()?; + let out = Command::new(arch.qemu()).arg("--version").output().ok()?; let have = parse_qemu_version(&String::from_utf8_lossy(&out.stdout))?; (have != want).then(|| { format!( diff --git a/src/clippy.rs b/src/clippy.rs index ce35ab4beb0..e1c38af7a9b 100644 --- a/src/clippy.rs +++ b/src/clippy.rs @@ -4,12 +4,15 @@ //! host` runs the same list as one of its steps, so the local command and //! the merge gate cannot verify different sets. //! -//! Userland is not here: `x86_64-unknown-toyos` is a custom target, and the -//! fork's `toyos` toolchain ships no clippy. +//! Userland is not here: its targets are the fork's own, and the fork's +//! `toyos` toolchain ships no clippy. The kernel and the bootloader are linted +//! for every architecture. use std::path::Path; use std::process::Command; +use crate::arch::Arch; + /// The pedantic/nursery lints adopted one at a time, each on a measured finding /// (`issues/build/clippy-stage-two-is-lints-one-at-a-time.md`). const ADOPTED: &[&str] = &[ @@ -46,22 +49,42 @@ const SHAPES: &[Shape] = &[ }, Shape { dir: "kernel", - before: &["--target", "x86_64-unknown-none"], + before: &["--target", Arch::X86_64.kernel()], + after: &["$ADOPTED", "-D", "warnings"], + }, + Shape { + dir: "kernel", + before: &["--target", Arch::X86_64.kernel(), "--features", "boot-actuators,test-actuators"], + after: &["$ADOPTED", "-D", "warnings"], + }, + Shape { + dir: "kernel", + before: &["--target", Arch::X86_64.kernel(), "--features", "boot-actuators"], after: &["$ADOPTED", "-D", "warnings"], }, Shape { dir: "kernel", - before: &["--target", "x86_64-unknown-none", "--features", "boot-actuators,test-actuators"], + before: &["--target", Arch::Aarch64.kernel()], after: &["$ADOPTED", "-D", "warnings"], }, Shape { dir: "kernel", - before: &["--target", "x86_64-unknown-none", "--features", "boot-actuators"], + before: &["--target", Arch::Aarch64.kernel(), "--features", "boot-actuators,test-actuators"], + after: &["$ADOPTED", "-D", "warnings"], + }, + Shape { + dir: "kernel", + before: &["--target", Arch::Aarch64.kernel(), "--features", "boot-actuators"], after: &["$ADOPTED", "-D", "warnings"], }, Shape { dir: "bootloader", - before: &["--target", "x86_64-unknown-uefi"], + before: &["--target", Arch::X86_64.loader()], + after: &["$ADOPTED", "-W", "clippy::undocumented_unsafe_blocks", "-D", "warnings"], + }, + Shape { + dir: "bootloader", + before: &["--target", Arch::Aarch64.loader()], after: &["$ADOPTED", "-W", "clippy::undocumented_unsafe_blocks", "-D", "warnings"], }, Shape { @@ -71,6 +94,11 @@ const SHAPES: &[Shape] = &[ }, ]; +/// The bare targets the kernel and bootloader shapes lint against, which +/// `rustup target add` installs: every architecture's. +pub const BARE_TARGETS: [&str; 4] = + [Arch::X86_64.kernel(), Arch::X86_64.loader(), Arch::Aarch64.kernel(), Arch::Aarch64.loader()]; + impl Shape { /// The command as a reader writes it, `$ADOPTED` unexpanded. fn line(&self) -> String { diff --git a/src/flags.rs b/src/flags.rs index 20eda8613bb..d0928e4ba91 100644 --- a/src/flags.rs +++ b/src/flags.rs @@ -75,6 +75,7 @@ declare_flags!(pub CARGO_RUN = { pub DIAG_BOOT = "--diag-boot", None; pub CONSOLE_BOOT = "--console-boot", None; pub BOOT_CONFIG = "--boot-config", Next; + pub ARCH = "--arch", Next; pub REGEN_FONT = "--regen-font", None; pub REGEN_WALLPAPER = "--regen-wallpaper", None; pub REGEN_SOUNDFONT = "--regen-soundfont", Next; diff --git a/src/image.rs b/src/image.rs index f6ab4603e1b..ed882deaf5c 100644 --- a/src/image.rs +++ b/src/image.rs @@ -4,6 +4,8 @@ use std::num::NonZeroU64; use std::path::Path; use bcachefs::{BlockBuf, Formatted, FsUuid, Superblock, VecBlockIO}; + +use crate::arch::Arch; use sha2::{Digest, Sha256}; use toyos_fat32::{BlockAccess, Fat32, FatTime, IoError}; @@ -119,6 +121,7 @@ fn superblock_of(bytes: &[u8]) -> Superblock { /// under a build-key-derived name first, because cargo's own path is shared by /// every config and is overwritten by any concurrent build (see `build.rs`). pub fn create_boot_image( + arch: Arch, kernel_bytes: &[u8], bl_bytes: &[u8], root_bytes: &[u8], @@ -134,7 +137,7 @@ pub fn create_boot_image( // superblock's UUID picks one, because a release puts several ROOTs on one // disk and the bootloader chooses by writing this argument. let cmdline = cmdline_with_root(root_uuid_of(root_bytes), params); - let esp_volume = create_esp_volume(kernel_bytes, bl_bytes, log_guid, &cmdline); + let esp_volume = create_esp_volume(arch, kernel_bytes, bl_bytes, log_guid, &cmdline); let log_volume = create_log_volume(); create_gpt_disk(esp_volume, root_bytes, log_volume, esp_guid, log_guid) } @@ -413,6 +416,7 @@ fn populate(volume: &mut [u8], label: &str, files: &[(&str, &[u8])]) { /// The partition firmware boots from: the bootloader, the kernel, the kernel's /// arguments, and the name of the partition the kernel's log goes on. fn create_esp_volume( + arch: Arch, kernel: &[u8], bootloader: &[u8], log_guid: uuid::Uuid, @@ -429,7 +433,7 @@ fn create_esp_volume( &mut volume, "TOYOS-BOOT", &[ - ("EFI/BOOT/BOOTx64.EFI", bootloader), + (arch.removable_loader(), bootloader), ("toyos/kernel.elf", kernel), // Mirrored in `bootloader/src/main.rs` as `\toyos\log.guid`, which // reads it beside the two files above and refuses the volume if it @@ -890,7 +894,7 @@ mod tests { #[test] fn the_volumes_this_build_writes_break_no_format_rule() { for (what, volume) in [ - ("ESP", create_esp_volume(b"kernel", b"bootloader", uuid::Uuid::new_v4(), "")), + ("ESP", create_esp_volume(Arch::X86_64, b"kernel", b"bootloader", uuid::Uuid::new_v4(), "")), ("log volume", create_log_volume()), ] { let complaints = toyos_fat32_check::check(&volume); @@ -908,7 +912,7 @@ mod tests { #[test] fn a_damaged_image_is_refused_by_the_reader_that_caught_it() { let log_uuid = uuid::Uuid::new_v4(); - let esp = create_esp_volume(b"kernel", b"bootloader", log_uuid, ""); + let esp = create_esp_volume(Arch::X86_64, b"kernel", b"bootloader", log_uuid, ""); let root_image = tiny_root(); let disk = create_gpt_disk(esp, &root_image, create_log_volume(), uuid::Uuid::new_v4(), log_uuid); @@ -968,7 +972,7 @@ mod tests { /// one the volume pays for and nothing loads. #[test] fn the_esp_carries_what_the_bootloader_looks_for() { - let mut esp = create_esp_volume(b"kernel", b"bootloader", uuid::Uuid::new_v4(), ""); + let mut esp = create_esp_volume(Arch::X86_64, b"kernel", b"bootloader", uuid::Uuid::new_v4(), ""); let mut fs = Fat32::mount(VolumeIo(&mut esp)).expect("mount the ESP we just built"); let mut found: Vec = fs .walk("", 64) @@ -1004,7 +1008,7 @@ mod tests { let root_image = tiny_root(); let write = |name: &str, params: &str| { let path = dir.join(name); - std::fs::write(&path, create_boot_image(b"kernel", b"bootloader", &root_image, params)) + std::fs::write(&path, create_boot_image(Arch::X86_64, b"kernel", b"bootloader", &root_image, params)) .expect("write an image"); path }; @@ -1118,7 +1122,7 @@ mod tests { let symlinks = vec![("bin/ls".to_string(), "/system/bin/toybox".to_string())]; let root_image = create_root_image(&files, &symlinks, true); - let disk = create_boot_image(b"kernel", b"bootloader", &root_image, ""); + let disk = create_boot_image(Arch::X86_64, b"kernel", b"bootloader", &root_image, ""); // Located by *type*, through the parser the kernel uses, at the offset // the table gives — never at the one the writer computed. @@ -1218,6 +1222,7 @@ mod tests { files.push((toyos_manifest::PATH.to_string(), manifest.clone())); let disk = create_boot_image( + Arch::X86_64, b"kernel", b"bootloader", &create_root_image(&files, &symlinks, true), diff --git a/src/lib.rs b/src/lib.rs index 0f2025f82b3..a8a416738db 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,7 @@ pub mod actuatorstate; /// What the suite's isolated re-run is allowed to call one failure; read by /// `tests/toyos.rs` and by its own tests. pub mod alone; +pub mod arch; pub mod assets; pub mod bootlog; pub mod build; @@ -53,36 +54,6 @@ pub mod worktree; use std::path::{Path, PathBuf}; use std::process::Command; -/// Whether this host will actually let a guest run on KVM. -/// -/// **Presence is not permission**, and `Path::exists` cannot tell the two -/// apart. A GitHub runner ships `/dev/kvm` as `crw-rw---- root:kvm` with the -/// build user outside the group, so a check on existence puts `-accel kvm` on -/// every boot and every boot dies on `failed to initialize kvm: Permission -/// denied` — a whole suite red for a reason no test names. Any Linux box whose -/// user is not in `kvm` is that machine. Opening it is the question QEMU is -/// about to ask. -pub fn kvm_usable() -> bool { - cfg!(target_arch = "x86_64") - && std::fs::OpenOptions::new() - .read(true) - .write(true) - .open("/dev/kvm") - .is_ok() -} - -/// The CPU every guest this repository launches gets, accelerated and not. -/// -/// **One declaration, read by `cargo run` and by the harness both**, because -/// the two drifted: the harness gained `+smep` and the interactive path did -/// not, so the machine an owner looked at differed from the machine the suite -/// judged in exactly the dimension the suite had been changed for. The kernel's -/// own `CR4` comes from one declaration for the same reason. -pub const CPU_KVM: &str = "host,+rdrand,+smap,+fsgsbase,+x2apic,+smep"; -/// [`CPU_KVM`]'s emulated twin — the same features off a base model, because a -/// TCG guest that withholds one is a feature this tree stops exercising. -pub const CPU_TCG: &str = "qemu64,+rdrand,+smap,+fsgsbase,+x2apic,+smep"; - /// The `.git` directory every worktree of this repository shares. /// /// `git rev-parse --git-common-dir` answers relatively from the primary diff --git a/src/libc.rs b/src/libc.rs index e805b5505ee..55397bc571c 100644 --- a/src/libc.rs +++ b/src/libc.rs @@ -2,11 +2,13 @@ use std::fs; use std::path::Path; use std::process::Command; +use crate::arch::Arch; + /// Build toyos-libc against the toolchain at `toolchain`, in `target_dir`, and /// install it there as `libtoyos_c.a`. Part of making a sysroot /// (`src/sysroot.rs`), whose key `userland/libc/src` is one of. -pub fn build(root: &Path, toolchain: &Path, target_dir: &Path) { - let dest = toolchain.join("lib/rustlib/x86_64-unknown-toyos/lib/libtoyos_c.a"); +pub fn build(root: &Path, toolchain: &Path, target_dir: &Path, arch: Arch) { + let dest = toolchain.join(format!("lib/rustlib/{}/lib/libtoyos_c.a", arch.userland())); eprintln!("Building toyos-libc for sysroot..."); @@ -24,7 +26,7 @@ pub fn build(root: &Path, toolchain: &Path, target_dir: &Path) { "build", "--release", "--target", - "x86_64-unknown-toyos", + arch.userland(), "--features", "std-runtime", "--message-format=json", diff --git a/src/main.rs b/src/main.rs index ba74d901838..0ab86e7a586 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ mod qemu; use std::env; use std::path::{Path, PathBuf}; +use toyos_build::arch::Arch; use toyos_build::flags::{self, CARGO_RUN}; /// One prerequisite: any of `any` satisfies it, and `why` is what reaches it. @@ -19,7 +20,6 @@ struct Tool { const REQUIRED: &[Tool] = &[ Tool { any: &["git"], why: "every build; the image ships what git says is tracked" }, Tool { any: &["rustup"], why: "the toolchain — install from https://rustup.rs" }, - Tool { any: &["qemu-system-x86_64"], why: "every boot — install QEMU" }, Tool { any: &["cc"], why: "rustc links every host binary through it; no guest binary" }, ]; @@ -51,7 +51,7 @@ fn executable_on_path(name: &str) -> bool { }) } -fn check_prerequisites(root: &Path) { +fn check_prerequisites(root: &Path, arch: Arch) { fn absent(tools: &'static [Tool]) -> Vec<&'static Tool> { tools.iter().filter(|t| !t.any.iter().any(|n| executable_on_path(n))).collect() } @@ -60,11 +60,15 @@ fn check_prerequisites(root: &Path) { eprintln!("Note: no {} — {}", tool.any.join(" or "), tool.why); } - let missing = absent(REQUIRED); + let mut missing: Vec = + absent(REQUIRED).iter().map(|t| format!("{} ({})", t.any.join(" or "), t.why)).collect(); + if !executable_on_path(arch.qemu()) { + missing.push(format!("{} (every {} boot — install QEMU)", arch.qemu(), arch.name())); + } if !missing.is_empty() { eprintln!("Error: missing required tools:"); for tool in &missing { - eprintln!(" - {} ({})", tool.any.join(" or "), tool.why); + eprintln!(" - {tool}"); } std::process::exit(1); } @@ -72,7 +76,7 @@ fn check_prerequisites(root: &Path) { // The one prerequisite whose *version* decides verdicts rather than whether // anything runs at all, so a scan of `PATH` cannot ask it. // `toyos_build::ci` carries why this is a note here and a red in CI. - if let Some(note) = toyos_build::ci::qemu_version_note(root) { + if let Some(note) = toyos_build::ci::qemu_version_note(root, arch) { eprintln!("{note}"); } } @@ -135,7 +139,8 @@ fn main() { return; } - check_prerequisites(&root); + let arch = toyos_build::build::arch_for(&args); + check_prerequisites(&root, arch); env::set_current_dir(&root).expect("Failed to cd to project root"); let debug = asked(&flags::DEBUG); @@ -236,7 +241,7 @@ fn main() { println!("Boot image: {}", image.display()); if !build_only { - qemu::launch(&qemu::Options { debug, dump_audio, profile, smp, mute, image }); + qemu::launch(&qemu::Options { arch: plan.arch, debug, dump_audio, profile, smp, mute, image }); } } diff --git a/src/qemu.rs b/src/qemu.rs index 95cb81f492e..ced024232bc 100644 --- a/src/qemu.rs +++ b/src/qemu.rs @@ -51,6 +51,8 @@ use std::fs::File; use std::path::PathBuf; use std::process::Command; +use toyos_build::arch::Arch; + /// The hardware shape QEMU presents to the guest. /// /// Not a display setting: each variant is a whole machine. `Virtio` and `Gop` @@ -105,6 +107,7 @@ impl Profile { } pub struct Options { + pub arch: Arch, pub debug: bool, pub dump_audio: bool, pub profile: Profile, @@ -122,7 +125,8 @@ pub struct Options { pub fn launch(opts: &Options) { let shape = opts.profile.shape(); - let mut qemu = Command::new("qemu-system-x86_64"); + let arch = opts.arch; + let mut qemu = Command::new(arch.qemu()); // Without this QEMU runs its default-device pass whenever no network // option is given, which is exactly and only the Metal profile: measured @@ -132,29 +136,28 @@ pub fn launch(opts: &Options) { // leaves i8042/ps2-kbd/ps2-mouse alone. qemu.arg("-nodefaults"); - if toyos_build::kvm_usable() { - qemu.arg("-accel").arg("kvm"); - qemu.arg("-cpu").arg(toyos_build::CPU_KVM); - } else { - qemu.arg("-cpu").arg(toyos_build::CPU_TCG); + let accel = arch.accel(); + if accel.is_hardware() { + qemu.arg("-accel").arg(accel.name()); } + qemu.arg("-cpu").arg(arch.cpu(accel)); + let (code, vars) = arch.firmware(); qemu.arg("-machine") - .arg(if shape.iommu { "q35,kernel-irqchip=split" } else { "q35" }) + .arg(machine(arch, shape.iommu)) .arg("-smp") .arg(format!("cores={}", opts.smp)) .arg("-m") .arg("2G") .arg("-drive") - .arg("if=pflash,format=raw,unit=0,file=ovmf/OVMF_CODE-pure-efi.fd,readonly=on") + .arg(format!("if=pflash,format=raw,unit=0,file={code},readonly=on")) .arg("-drive") - .arg("if=pflash,format=raw,unit=1,file=ovmf/OVMF_VARS-pure-efi.fd,readonly=on"); + .arg(format!("if=pflash,format=raw,unit=1,file={vars},readonly=on")); // Before every other `-device`: a PCI function created ahead of the unit // gets QEMU's bypassing address space and is never decoded by it. - if shape.iommu { - qemu.arg("-device") - .arg("intel-iommu,intremap=on,caching-mode=on,aw-bits=48"); + if let (true, Some(unit)) = (shape.iommu, iommu_device(arch)) { + qemu.arg("-device").arg(unit); } // Without this a virtio function keeps the machine's own address space and // the unit never sees it, whatever the tables say. @@ -191,7 +194,12 @@ pub fn launch(opts: &Options) { .arg("-device") .arg(format!("virtio-gpu-pci,xres=1280,yres=720{platform}")); } else { - qemu.arg("-vga").arg("std"); + match arch { + Arch::X86_64 => qemu.arg("-vga").arg("std"), + // A framebuffer in guest memory that firmware publishes as its + // GOP and that needs no driver after it: `virt` has no VGA. + Arch::Aarch64 => qemu.arg("-device").arg("ramfb"), + }; } if shape.virtio { @@ -269,6 +277,27 @@ pub fn launch(opts: &Options) { qemu.status().expect("failed to execute QEMU"); } +/// The machine a profile runs on, with its IOMMU where the machine carries one +/// as a property rather than a device. +fn machine(arch: Arch, iommu: bool) -> &'static str { + match (arch, iommu) { + (Arch::X86_64, true) => "q35,kernel-irqchip=split", + (Arch::X86_64, false) => "q35", + (Arch::Aarch64, true) => "virt,gic-version=3,iommu=smmuv3", + (Arch::Aarch64, false) => "virt,gic-version=3", + } +} + +/// The IOMMU as a device, in the one configuration this project builds +/// against: interrupt remapping on, caching mode on, 48-bit addresses. `virt`'s +/// SMMUv3 is a machine property ([`machine`]) and has none. +fn iommu_device(arch: Arch) -> Option<&'static str> { + match arch { + Arch::X86_64 => Some("intel-iommu,intremap=on,caching-mode=on,aw-bits=48"), + Arch::Aarch64 => None, + } +} + fn audio_backend() -> &'static str { if cfg!(target_os = "macos") { "coreaudio" diff --git a/src/release.rs b/src/release.rs index d9b08fefc38..32d8dc2e349 100644 --- a/src/release.rs +++ b/src/release.rs @@ -19,6 +19,8 @@ use std::process::{Command, Stdio}; use sha2::{Digest, Sha256}; +use crate::toolchain::HOSTED_ARCH; + /// What the tag hashes, as `git rev-parse HEAD:` names them. The last is /// this file. pub const TREES: [&str; 7] = [ @@ -268,10 +270,10 @@ fn build(root: &Path, tag: &str, tmp: &Path) -> Result<(), String> { let mut tar = Command::new("tar") .arg("-C") .arg(&build) - .arg(format!("--exclude=x86_64-unknown-toyos/stage2/lib/rustlib/{HOST}")) + .arg(format!("--exclude={}/stage2/lib/rustlib/{HOST}", HOSTED_ARCH.userland())) .arg(format!("--exclude={sysroot}/bin/cargo")) .arg(format!("--transform=s,^{sysroot},{HOST}/stage2,")) - .args(["-c", &sysroot, "x86_64-unknown-toyos/stage2"]) + .args(["-c", &sysroot, &format!("{}/stage2", HOSTED_ARCH.userland())]) .args(["toyos-sysroot-witness", "toyos-ld-witness", "TOOLCHAIN"]) .stdout(Stdio::piped()) .spawn() diff --git a/src/sourcegate.rs b/src/sourcegate.rs index a13d210b032..666aab70920 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -540,9 +540,15 @@ const HOST_SPAWNS: &[Spawn] = &[ why: "how the toolchain is installed and linked, and `REQUIRED`", }, Spawn { - arg: "\"qemu-system-x86_64\"", - sites: &[], - why: "QEMU, the other half of the bar, and `REQUIRED`", + arg: "arch.qemu()", + sites: &[("src/qemu.rs", 1), ("src/ci.rs", 2)], + why: "QEMU, the other half of the bar: `Arch::qemu` names `qemu-system-x86_64` and \ + `qemu-system-aarch64`, and `check_prerequisites` requires the one being booted", + }, + Spawn { + arg: "SUITE_ARCH.qemu()", + sites: &[("tests/common/qemu.rs", 1)], + why: "QEMU for the suite's machines, through `Arch::qemu` as `cargo run`'s is", }, Spawn { arg: "\"gh\"", @@ -1829,7 +1835,7 @@ mod tests { } } assert!( - found.iter().any(|(arg, _, _)| arg == "\"qemu-system-x86_64\""), + found.iter().any(|(arg, _, _)| arg == "arch.qemu()"), "the walk did not find the QEMU launch, so it is reading no host tree" ); assert!( diff --git a/src/sysroot.rs b/src/sysroot.rs index 2cbb6c20e1e..0e4046ca00e 100644 --- a/src/sysroot.rs +++ b/src/sysroot.rs @@ -60,7 +60,7 @@ const SOURCES: &str = "SOURCES"; /// What changes how a key's sources become a sysroot and is none of them: the /// std build's recipe below. Moving it moves every key. -const RECIPE: &str = "bootstrap stage-0 local rebuild, profile compiler, targets toyos none uefi, \ +const RECIPE: &str = "bootstrap stage-0 local rebuild, profile compiler, \ libtoyos_c merged, libraries from the stamp; 2"; /// Where each build records the key it compiled against, for [`sweep`]. @@ -258,7 +258,7 @@ fn check_compiler(rust_dir: &Path, fork: &Path) { /// The key of the sysroot `root` builds against with its std fork at `fork`. pub fn key(root: &Path, rust_dir: &Path, fork: &Path) -> String { let parts = [ - format!("{RECIPE}; cargo {STAGE0_CARGO}"), + format!("{RECIPE}; cargo {STAGE0_CARGO}; targets {}", GUEST_TARGETS.join(" ")), witness(root), tree_identity(fork, &["library", "src/bootstrap"]), compiler_identity(rust_dir), @@ -416,7 +416,9 @@ fn build(root: &Path, rust_dir: &Path, fork: &Path, key: &str, dir: &Path) { place_std(&stamp(&built, target), &partial.join("lib/rustlib").join(target).join("lib")); } let libc_target = dir.with_extension("libc-target"); - crate::libc::build(root, &partial, &libc_target); + for arch in toolchain::USERLAND_ARCHS { + crate::libc::build(root, &partial, &libc_target, arch); + } let _ = fs::remove_dir_all(&libc_target); // The sources the key named are the ones built, or this is not that key's. @@ -464,7 +466,9 @@ fn build_std(root: &Path, rust_dir: &Path, fork: &Path) -> PathBuf { let (ok, log) = toolchain::x_build(fork, &args, "std"); toolchain::refuse_on_compile_error(&log, "std"); assert!(ok, "the std build failed, and nothing in its output was a compile error"); - toolchain::assert_std_built_from(root, &build_dir.join(&host).join("stage0-std/x86_64-unknown-toyos")); + for arch in toolchain::USERLAND_ARCHS { + toolchain::assert_std_built_from(root, &build_dir.join(&host).join("stage0-std").join(arch.userland())); + } build_dir.join(&host).join("stage0-std") } @@ -519,6 +523,11 @@ fn place_std(stamp: &Path, lib: &Path) { /// so these libraries are built with the options `stage2`'s own were. fn std_config(rust_dir: &Path, build_dir: &Path, host: &str, toyos_ld: &Path) -> String { let targets = GUEST_TARGETS.iter().map(|t| format!("\"{t}\"")).collect::>().join(", "); + let linker = toyos_ld.display(); + let userland: String = toolchain::USERLAND_ARCHS + .iter() + .map(|arch| format!("\n[target.{}]\nlinker = \"{linker}\"\n", arch.userland())) + .collect(); format!( r#"change-id = "ignore" profile = "compiler" @@ -533,14 +542,10 @@ target = [{targets}] [rust] lld = false - -[target.x86_64-unknown-toyos] -linker = "{linker}" -"#, +{userland}"#, rustc = toolchain::stage2(rust_dir).join("bin/rustc").display(), cargo = bootstrap_cargo().display(), build_dir = build_dir.display(), - linker = toyos_ld.display(), ) } diff --git a/src/toolchain.rs b/src/toolchain.rs index f48433812ba..3746f7b9bc9 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -4,6 +4,7 @@ use std::path::{Path, PathBuf}; use std::process::Command; use std::sync::OnceLock; +use crate::arch::Arch; use crate::buildlock; use crate::buildlock::Scope; use crate::stamps; @@ -85,8 +86,23 @@ const STD_SOURCES: [&str; 2] = ["toyos-abi/src", "toyos/src"]; /// `src/build.rs`'s external fingerprint. A fifth spelling would silently leave /// one of them building or fingerprinting a different set of targets than the /// others. -pub const GUEST_TARGETS: [&str; 3] = - ["x86_64-unknown-toyos", "x86_64-unknown-none", "x86_64-unknown-uefi"]; +pub const GUEST_TARGETS: [&str; 5] = [ + Arch::X86_64.userland(), + Arch::X86_64.kernel(), + Arch::X86_64.loader(), + Arch::Aarch64.kernel(), + Arch::Aarch64.loader(), +]; + +/// The architectures whose userland target the compiler this tree pins +/// carries, in [`GUEST_TARGETS`]. A userland target is a target spec in the +/// fork's `compiler/`, so a new one is a compiler change: it lands, and the +/// primary's next build makes the compiler every sysroot is cloned from. +pub const USERLAND_ARCHS: [Arch; 1] = [Arch::X86_64]; + +/// The one ToyOS the hosted rustc (`system.toml`'s `hosted-rustc`) is built to +/// run on. +pub const HOSTED_ARCH: Arch = Arch::X86_64; /// The primary's compiler, which every sysroot is cloned from and compiled by. pub(crate) fn stage2(rust_dir: &Path) -> PathBuf { @@ -479,7 +495,7 @@ pub fn ensure(root: &Path, force_rebuild: bool, lock: &mut buildlock::Held) -> S |()| sysroot::record_compiler(&rust_dir), ); - let hosted_rustc = rust_dir.join("build/x86_64-unknown-toyos/stage2/bin/rustc"); + let hosted_rustc = rust_dir.join(format!("build/{}/stage2/bin/rustc", HOSTED_ARCH.userland())); lock.act_if( Scope::Global, "build the ToyOS-hosted rustc", @@ -733,10 +749,12 @@ fn full_bootstrap(root: &Path, rust_dir: &Path) { ); tolerated_failure(&log, "the toolchain build"); } - assert_std_built_from( - root, - &rust_dir.join(format!("build/{host}/stage1-std/x86_64-unknown-toyos")), - ); + for arch in USERLAND_ARCHS { + assert_std_built_from( + root, + &rust_dir.join(format!("build/{host}/stage1-std/{}", arch.userland())), + ); + } } fn build_hosted_rustc(rust_dir: &Path, toyos_ld: &Path) { @@ -748,7 +766,7 @@ fn build_hosted_rustc(rust_dir: &Path, toyos_ld: &Path) { refuse_on_compile_error(&log, "the hosted rustc"); // rustdoc for ToyOS may fail to link; rustc and librustc_driver may not. - let toyos_stage2 = rust_dir.join("build/x86_64-unknown-toyos/stage2"); + let toyos_stage2 = rust_dir.join(format!("build/{}/stage2", HOSTED_ARCH.userland())); assert!( toyos_stage2.join("bin/rustc").exists(), "the hosted rustc build failed and {} is not there.\n\ @@ -774,7 +792,7 @@ fn build_hosted_rustc(rust_dir: &Path, toyos_ld: &Path) { fn write_config(rust_dir: &Path, host: &str, toyos_ld: &Path, with_hosted_rustc: bool) { let linker = toyos_ld.display(); let host_line = if with_hosted_rustc { - format!("host = [\"{host}\", \"x86_64-unknown-toyos\"]") + format!("host = [\"{host}\", \"{}\"]", HOSTED_ARCH.userland()) } else { format!("host = [\"{host}\"]") }; @@ -788,6 +806,13 @@ fn write_config(rust_dir: &Path, host: &str, toyos_ld: &Path, with_hosted_rustc: .map(|t| format!("\"{t}\"")) .collect::>() .join(", "); + let userland: String = USERLAND_ARCHS + .iter() + .map(|arch| { + let backends = if *arch == HOSTED_ARCH { codegen_backends } else { "" }; + format!("[target.{}]\nlinker = \"{linker}\"{backends}\n\n", arch.userland()) + }) + .collect(); let config = format!( r#"change-id = "ignore" profile = "compiler" @@ -800,10 +825,7 @@ target = [{targets}] incremental = true lld = false -[target.x86_64-unknown-toyos] -linker = "{linker}"{codegen_backends} - -"# +{userland}"# ); fs::write(rust_dir.join("bootstrap.toml"), config).unwrap(); } @@ -955,14 +977,14 @@ fn host_sysroot() -> PathBuf { /// Whether the ToyOS sysroot is missing the host target proc-macros compile against. fn host_target_missing(rust_dir: &Path) -> bool { - let toyos_sysroot = rust_dir.join("build/x86_64-unknown-toyos/stage2/lib/rustlib"); + let toyos_sysroot = rust_dir.join(format!("build/{}/stage2/lib/rustlib", HOSTED_ARCH.userland())); toyos_sysroot.exists() && !toyos_sysroot.join(host_triple()).exists() } fn link_host_target(rust_dir: &Path) { let host = host_triple(); let host_target_dir = rust_dir - .join("build/x86_64-unknown-toyos/stage2/lib/rustlib") + .join(format!("build/{}/stage2/lib/rustlib", HOSTED_ARCH.userland())) .join(&host); let source = host_sysroot().join("lib/rustlib").join(&host); diff --git a/tests/common/compile.rs b/tests/common/compile.rs index c611ee7504b..9392a728225 100644 --- a/tests/common/compile.rs +++ b/tests/common/compile.rs @@ -28,7 +28,7 @@ fn libc_archive_toyos() -> PathBuf { ARCHIVE .get_or_init(|| { let libc_dir = libc_dir(); - let target = "x86_64-unknown-toyos"; + let target = super::qemu::SUITE_ARCH.userland(); let _slot = toyos_build::buildlock::build_slot(&repo_root(), "the libc archive"); let mut lock = toyos_build::buildlock::shared(&repo_root(), "toyos-libc archive"); @@ -85,7 +85,7 @@ pub fn compile_c(name: &str) -> (Vec, Vec>) { let opts = toyos_cc::CompileOptions { include_paths, defines: Vec::new(), - target: Some("x86_64-unknown-toyos".to_string()), + target: Some(super::qemu::SUITE_ARCH.userland().to_string()), opt_level: 0, force_includes: Vec::new(), }; diff --git a/tests/common/faults.rs b/tests/common/faults.rs index b30ea23488f..a00c2e86b56 100644 --- a/tests/common/faults.rs +++ b/tests/common/faults.rs @@ -899,7 +899,7 @@ pub fn syscall_window_nmi( /// from. /// /// **The decision itself rather than a second reading of it**: `qemu_command` -/// puts `-accel kvm` there when `toyos_build::kvm_usable()` says so, and +/// puts `-accel kvm` there when `SUITE_ARCH.accel()` says so, and /// `profile_argv` is that same builder. A CPUID probe in the guest would be a /// second place that can be told the wrong answer, and `virtio_net_no_msix` and /// `diskless_boot` already assert about a boot by reading its argv. diff --git a/tests/common/metal.rs b/tests/common/metal.rs index 11f5ca965af..3e3b86c0c9a 100644 --- a/tests/common/metal.rs +++ b/tests/common/metal.rs @@ -800,14 +800,14 @@ fn build( let identity = super::ssh::Identity::mint_in(&talk_home(&home))?; extra.push((super::ssh::KEYS_ON_ROOT.to_string(), identity.authorized_line().into_bytes())); } - let plan = toyos_build::build::Plan::new(&config, features, ¶ms); + let plan = toyos_build::build::Plan::new(toyos_build::arch::Arch::X86_64, &config, features, ¶ms); let bytes = toyos_build::build::build_test_image(root, &plan, quiet, &extra); let image = home.join("image.img"); std::fs::write(&image, &bytes).map_err(|e| format!("{}: {e}", image.display()))?; // The binary the second invocation sends, copied now so it is this // build's and not whatever the tree holds when the machine is reached. if let Some(service) = batch.swap { - toyos_build::build::copy_guest_program(root, service, &home.join(service))?; + toyos_build::build::copy_guest_program(root, toyos_build::arch::Arch::X86_64, service, &home.join(service))?; } Ok(image) } diff --git a/tests/common/passcost.rs b/tests/common/passcost.rs index 2dd72008c46..ff741280c06 100644 --- a/tests/common/passcost.rs +++ b/tests/common/passcost.rs @@ -232,7 +232,7 @@ pub const TCG: Baseline = Baseline { /// The recorded sample for the accelerator this run is actually using. pub fn baseline() -> &'static Baseline { - if toyos_build::kvm_usable() { + if super::qemu::SUITE_ARCH.accel().is_hardware() { &KVM } else { &TCG diff --git a/tests/common/qemu.rs b/tests/common/qemu.rs index 985ffc48a7c..66bf911f72a 100644 --- a/tests/common/qemu.rs +++ b/tests/common/qemu.rs @@ -9,6 +9,12 @@ use std::time::{Duration, Instant}; use std::{fs, thread}; use super::compile; +use toyos_build::arch::Arch; + +/// The architecture every machine this suite builds and boots is: the suite's +/// q35 shapes, i8042 and VT-d are x86-64's, and the aarch64 bring-up boots +/// through its own launcher ([`boot_bringup`]). +pub const SUITE_ARCH: Arch = Arch::X86_64; /// When true, serial output is printed to stderr as it arrives. pub static VERBOSE: AtomicBool = AtomicBool::new(false); @@ -2862,7 +2868,7 @@ fn build_boot_image_with( ); let quiet = !VERBOSE.load(Ordering::Relaxed); - let plan = toyos_build::build::Plan::new(&config_path, kernel_features, kernel_params); + let plan = toyos_build::build::Plan::new(SUITE_ARCH, &config_path, kernel_features, kernel_params); toyos_build::build::build_test_image(&compile::repo_root(), &plan, quiet, &extra_files) } @@ -2870,7 +2876,7 @@ fn build_boot_image_with( pub fn build_toyos_bins(crate_path: &Path) -> Vec<(String, Vec)> { let repo = compile::repo_root(); let quiet = !VERBOSE.load(Ordering::Relaxed); - toyos_build::build::build_toyos_bins(&repo, crate_path, quiet) + toyos_build::build::build_toyos_bins(&repo, SUITE_ARCH, crate_path, quiet) } /// All kernel serial output goes through log!() which prepends "[kernel ...]". @@ -4241,13 +4247,13 @@ fn qemu_command( ); let repo = compile::repo_root(); - let ovmf_dir = repo.join("ovmf"); + let (firmware_code, firmware_vars) = SUITE_ARCH.firmware(); - let mut qemu = Command::new("qemu-system-x86_64"); + let mut qemu = Command::new(SUITE_ARCH.qemu()); - let kvm = toyos_build::kvm_usable(); - if kvm { - qemu.arg("-accel").arg("kvm"); + let accel = SUITE_ARCH.accel(); + if accel.is_hardware() { + qemu.arg("-accel").arg(accel.name()); } // Without this QEMU runs its default-device pass whenever no network @@ -4278,7 +4284,7 @@ fn qemu_command( qemu.arg("-machine") .arg(&machine) .arg("-cpu") - .arg(if kvm { toyos_build::CPU_KVM } else { toyos_build::CPU_TCG }) + .arg(SUITE_ARCH.cpu(accel)) .arg("-smp") .arg(options.smp.to_string()) .arg("-m") @@ -4286,12 +4292,12 @@ fn qemu_command( .arg("-drive") .arg(format!( "if=pflash,format=raw,unit=0,file={},readonly=on", - ovmf_dir.join("OVMF_CODE-pure-efi.fd").display() + repo.join(firmware_code).display() )) .arg("-drive") .arg(format!( "if=pflash,format=raw,unit=1,file={},readonly=on", - ovmf_dir.join("OVMF_VARS-pure-efi.fd").display() + repo.join(firmware_vars).display() )) .arg("-drive") .arg(format!( diff --git a/tests/common/swap.rs b/tests/common/swap.rs index 23b5fa4b04e..f26a9d9fa42 100644 --- a/tests/common/swap.rs +++ b/tests/common/swap.rs @@ -175,7 +175,7 @@ impl Rig { /// rehearsal sends as that service's rebuild. fn rebuilt(name: &str, dir: &Path) -> Result { let to = dir.join(format!("{name}.rebuilt")); - toyos_build::build::copy_guest_program(&super::compile::repo_root(), name, &to)?; + toyos_build::build::copy_guest_program(&super::compile::repo_root(), super::qemu::SUITE_ARCH, name, &to)?; Ok(to) } diff --git a/tests/toyos.rs b/tests/toyos.rs index 43e96f374fb..b052390999d 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -16360,8 +16360,8 @@ fn control_regs(log: &str, cpus: u32) -> Result<(), String> { // Vol. 3A §2.5, Vol. 2 `WRGSBASE`), so no Ring 3 thread aims `GS.base`. (16, "FSGSBASE", false), (18, "OSXSAVE", false), - // Not a bit the machine may withhold: `toyos_build::qemu::CPU_KVM` and - // `CPU_TCG` are the only two CPUs this repository launches and both name + // Not a bit the machine may withhold: `Arch::cpu`'s two x86-64 CPUs + // are the only x86-64 CPUs this repository launches and both name // `+smep`, so a boot without supervisor-mode execution prevention is a // kernel that stopped enabling it or a launcher that stopped asking. (20, "SMEP", true), @@ -16992,7 +16992,7 @@ fn control_regs_negative( } // Where the host does leave `CD` set, it is demanded, so the arm that *can* // see the caching defect does not quietly become the weaker of the two. - if !toyos_build::kvm_usable() && !refusal.contains("CD") { + if !common::qemu::SUITE_ARCH.accel().is_hardware() && !refusal.contains("CD") { return Err(format!( "TCG leaves an AP's `CD` set and the refusal does not name it: {refusal}" )); @@ -17581,7 +17581,8 @@ fn run_debug_mode(c_tests: &[(String, Vec)], rust_bins: &[(String, Vec)] let repo = compile::repo_root(); let kernel_elf = repo.join(format!( - "kernel/target/x86_64-unknown-none/{}/kernel", + "kernel/target/{}/{}/kernel", + common::qemu::SUITE_ARCH.kernel(), toyos_build::build::PROFILE )); From 0840b2578511d9178e5c78149b0d0b10d87f4817 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 13:44:53 +0200 Subject: [PATCH 03/50] kernel: arch/ is x86_64/ behind one selector; syscalls, one IrqGuard, one MSI doorbell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `kernel/src/arch/mod.rs` selects `x86_64/` (and, next, `aarch64/`) and re-exports it: generic code keeps naming `crate::arch::…`, and a `target_arch` cfg appears in that file and inside the implementation only. Every x86 file moves under `arch/x86_64/` unchanged. - The syscall handlers are not architecture: `arch/syscall/*` moves to `kernel/src/syscall/`, and the entry gate, the one x86 file among them, is `arch/x86_64/syscall.rs` (`arch::syscall::init`). The build system's `SYSCALL_ENTRY_SYMBOL` follows the new path. - One interrupt guard. `arch::IrqGuard` replaces `hw::IrqGuard`, `arch::LogCommitGuard` and `serial::BackendGuard`'s private `SavedFlags`, which were three spellings of pushfq/cli/popfq. Two of them declared their `asm!` `nomem`, which tells the compiler the instruction touches no memory and lets it move loads and stores across `cli` and `popfq`: the scheduler's guarded region and the console lock's CAS were not compiler-ordered against the interrupt mask. The one guard is a compiler barrier on both edges, as `LogCommitGuard` already was. `log-unbracketed-reserve` keeps its staging through `IrqGuard::unclosed`, compiled only with `boot-actuators`. - One MSI doorbell: `arch::MSI_DOORBELL` and `arch::msi_message(dest, vector)`, used by PCI's compatibility message and by VT-d's remappable format and fault event, where `0xFEE0_0000` was written three times. Behaviour on x86-64 is unchanged except for the compiler ordering above. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/src/watchdog.rs | 4 +- kernel-loom/src/lib.rs | 8 +- kernel-loom/tests/log_body_words.rs | 4 +- kernel-loom/tests/log_record.rs | 10 +- kernel-loom/tests/log_wake.rs | 6 +- kernel-loom/tests/log_zeroed_init.rs | 2 +- kernel/Cargo.toml | 2 +- kernel/src/arch/mod.rs | 112 +++--------------- kernel/src/arch/{ => x86_64}/apic.rs | 12 ++ kernel/src/arch/{ => x86_64}/control_regs.rs | 0 kernel/src/arch/{ => x86_64}/cpu.rs | 0 kernel/src/arch/{ => x86_64}/entry.rs | 0 kernel/src/arch/{ => x86_64}/fpu.rs | 0 .../src/arch/{ => x86_64}/idt/device_irq.rs | 0 kernel/src/arch/{ => x86_64}/idt/dma_fault.rs | 0 .../src/arch/{ => x86_64}/idt/exceptions.rs | 3 +- kernel/src/arch/{ => x86_64}/idt/hda.rs | 0 kernel/src/arch/{ => x86_64}/idt/i8042.rs | 0 kernel/src/arch/{ => x86_64}/idt/log_nest.rs | 0 kernel/src/arch/{ => x86_64}/idt/mod.rs | 0 kernel/src/arch/{ => x86_64}/idt/nmi.rs | 0 kernel/src/arch/{ => x86_64}/idt/spurious.rs | 0 kernel/src/arch/{ => x86_64}/idt/timer.rs | 0 kernel/src/arch/{ => x86_64}/idt/tlb.rs | 0 kernel/src/arch/{ => x86_64}/idt/unclaimed.rs | 0 kernel/src/arch/{ => x86_64}/idt/user_dev.rs | 0 .../src/arch/{ => x86_64}/idt/virtio_sound.rs | 0 kernel/src/arch/{ => x86_64}/idt/xhci.rs | 0 kernel/src/arch/x86_64/mod.rs | 111 +++++++++++++++++ kernel/src/arch/{ => x86_64}/mtrr.rs | 0 kernel/src/arch/{ => x86_64}/pat.rs | 0 kernel/src/arch/{ => x86_64}/percpu.rs | 4 +- kernel/src/arch/{ => x86_64}/smp.rs | 0 .../{syscall/gate.rs => x86_64/syscall.rs} | 4 +- kernel/src/arch/{ => x86_64}/tlb.rs | 2 +- kernel/src/drivers/i8042/mod.rs | 4 +- kernel/src/drivers/pci.rs | 10 +- kernel/src/drivers/serial.rs | 60 ++-------- kernel/src/drivers/virtio_console.rs | 2 +- kernel/src/hw.rs | 35 +----- kernel/src/inbox.rs | 2 +- kernel/src/iommu/vtd/fault.rs | 8 +- kernel/src/iommu/vtd/interrupt.rs | 3 +- kernel/src/log/mod.rs | 12 +- kernel/src/log/shard.rs | 4 +- kernel/src/main.rs | 5 +- kernel/src/object/ops.rs | 2 +- kernel/src/sched/driver.rs | 2 +- kernel/src/sched/dump.rs | 4 +- kernel/src/{arch => }/syscall/debug.rs | 0 kernel/src/{arch => }/syscall/device.rs | 0 kernel/src/{arch => }/syscall/dispatch.rs | 5 +- kernel/src/{arch => }/syscall/fs.rs | 2 +- kernel/src/{arch => }/syscall/handles.rs | 0 kernel/src/{arch => }/syscall/io.rs | 0 kernel/src/{arch => }/syscall/ipc.rs | 0 kernel/src/{arch => }/syscall/machine.rs | 0 kernel/src/{arch => }/syscall/mod.rs | 12 +- kernel/src/{arch => }/syscall/proc.rs | 2 +- kernel/src/{arch => }/syscall/vm.rs | 2 +- src/bootlog.rs | 8 +- src/build.rs | 10 +- src/sourcegate.rs | 6 +- tests/common/audio.rs | 2 +- tests/common/logread.rs | 2 +- tests/common/power.rs | 2 +- tests/common/serial.rs | 10 +- .../src/bin/abuse_thread_name.rs | 2 +- tests/toyos-rust-tests/src/bin/fault_gates.rs | 2 +- .../toyos-rust-tests/src/bin/fpu_isolation.rs | 2 +- tests/toyos-rust-tests/src/bin/log_hold.rs | 2 +- tests/toyos.rs | 12 +- toyos-elf/tests/tables.rs | 2 +- toyos-userbound/src/lib.rs | 4 +- userland/toybox/src/mv.rs | 2 +- 75 files changed, 246 insertions(+), 282 deletions(-) rename kernel/src/arch/{ => x86_64}/apic.rs (96%) rename kernel/src/arch/{ => x86_64}/control_regs.rs (100%) rename kernel/src/arch/{ => x86_64}/cpu.rs (100%) rename kernel/src/arch/{ => x86_64}/entry.rs (100%) rename kernel/src/arch/{ => x86_64}/fpu.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/device_irq.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/dma_fault.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/exceptions.rs (99%) rename kernel/src/arch/{ => x86_64}/idt/hda.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/i8042.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/log_nest.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/mod.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/nmi.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/spurious.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/timer.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/tlb.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/unclaimed.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/user_dev.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/virtio_sound.rs (100%) rename kernel/src/arch/{ => x86_64}/idt/xhci.rs (100%) create mode 100644 kernel/src/arch/x86_64/mod.rs rename kernel/src/arch/{ => x86_64}/mtrr.rs (100%) rename kernel/src/arch/{ => x86_64}/pat.rs (100%) rename kernel/src/arch/{ => x86_64}/percpu.rs (99%) rename kernel/src/arch/{ => x86_64}/smp.rs (100%) rename kernel/src/arch/{syscall/gate.rs => x86_64/syscall.rs} (98%) rename kernel/src/arch/{ => x86_64}/tlb.rs (99%) rename kernel/src/{arch => }/syscall/debug.rs (100%) rename kernel/src/{arch => }/syscall/device.rs (100%) rename kernel/src/{arch => }/syscall/dispatch.rs (99%) rename kernel/src/{arch => }/syscall/fs.rs (99%) rename kernel/src/{arch => }/syscall/handles.rs (100%) rename kernel/src/{arch => }/syscall/io.rs (100%) rename kernel/src/{arch => }/syscall/ipc.rs (100%) rename kernel/src/{arch => }/syscall/machine.rs (100%) rename kernel/src/{arch => }/syscall/mod.rs (71%) rename kernel/src/{arch => }/syscall/proc.rs (99%) rename kernel/src/{arch => }/syscall/vm.rs (99%) diff --git a/bootloader/src/watchdog.rs b/bootloader/src/watchdog.rs index 2cdbf0b1c51..46a5e770ac2 100644 --- a/bootloader/src/watchdog.rs +++ b/bootloader/src/watchdog.rs @@ -189,14 +189,14 @@ fn config_u32(ecam: u64, device: u8, function: u8, offset: u16) -> u32 { /// # Safety /// No fault in Ring 0; the caller owns which device answers at `port` and what -/// the word commands it to do. `kernel/src/arch/cpu.rs` states the same +/// the word commands it to do. `kernel/src/arch/x86_64/cpu.rs` states the same /// contract for the same instruction. unsafe fn outw(port: u16, value: u16) { core::arch::asm!("out dx, ax", in("dx") port, in("ax") value, options(nomem, nostack, preserves_flags)); } /// One word from an I/O port; safe because a read has no value a caller can get -/// wrong, as `kernel/src/arch/cpu.rs`'s `inw` is. +/// wrong, as `kernel/src/arch/x86_64/cpu.rs`'s `inw` is. fn inw(port: u16) -> u16 { let value: u16; // SAFETY: one instruction into the declared output, no memory operand. diff --git a/kernel-loom/src/lib.rs b/kernel-loom/src/lib.rs index de8c6494962..5b69ce38a68 100644 --- a/kernel-loom/src/lib.rs +++ b/kernel-loom/src/lib.rs @@ -89,9 +89,9 @@ pub mod arch { /// The kernel implementation masks IF and TF across reservation and /// publication. Loom has no per-CPU flags; the model's sole-writer /// precondition is the corresponding witness here. - pub struct LogCommitGuard; + pub struct IrqGuard; - impl LogCommitGuard { + impl IrqGuard { pub fn close() -> Self { Self } @@ -119,7 +119,7 @@ pub mod arch { #[cfg(feature = "loom")] pub unsafe fn percpu_fetch_add( counter: &loom::sync::atomic::AtomicU64, - _guard: &LogCommitGuard, + _guard: &IrqGuard, ) -> u64 { counter.fetch_add(1, loom::sync::atomic::Ordering::Relaxed) } @@ -128,7 +128,7 @@ pub mod arch { #[cfg(not(feature = "loom"))] pub unsafe fn percpu_fetch_add( counter: &core::sync::atomic::AtomicU64, - _guard: &LogCommitGuard, + _guard: &IrqGuard, ) -> u64 { counter.fetch_add(1, core::sync::atomic::Ordering::Relaxed) } diff --git a/kernel-loom/tests/log_body_words.rs b/kernel-loom/tests/log_body_words.rs index 3ed72828722..d49d78f97eb 100644 --- a/kernel-loom/tests/log_body_words.rs +++ b/kernel-loom/tests/log_body_words.rs @@ -41,7 +41,7 @@ fn record(seq: u64, len: usize) -> LogRecord { fn round_trip(len: usize) { let shard = Shard::new(); - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); // SAFETY: this host thread is the shard's only producer, and each sequence // number is committed once. let seq = unsafe { shard.reserve(&guard) }; @@ -86,7 +86,7 @@ fn every_field_survives_the_word_packing() { #[test] fn a_shorter_record_does_not_inherit_the_longer_one_it_replaced() { let shard = Shard::new(); - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); // SAFETY: sole producer, each number committed once. let first = unsafe { shard.reserve(&guard) }; unsafe { shard.commit(first, &record(first, 64), &guard) }; diff --git a/kernel-loom/tests/log_record.rs b/kernel-loom/tests/log_record.rs index e24127e3415..80b8712e671 100644 --- a/kernel-loom/tests/log_record.rs +++ b/kernel-loom/tests/log_record.rs @@ -47,7 +47,7 @@ use toyos_abi::log::{LogRecord, MAX_RECORD_MESSAGE}; /// The model's witness for the production IF/TF-off bracket. fn commit_one(shard: &Shard) -> u64 { - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); // SAFETY: every caller is this model's sole producer for the shard. The // real witness additionally prevents that producer being preempted between // these two operations. @@ -106,7 +106,7 @@ fn a_committed_record_is_whole_or_absent() { let w = loom::thread::spawn(move || { // SAFETY: this thread is the shard's sole writer, which is the // precondition the shim's own doc states. - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); let seq = unsafe { writer.reserve(&guard) }; let r = record(seq); unsafe { writer.commit(seq, &r, &guard) }; @@ -188,7 +188,7 @@ fn a_recycled_slot_does_not_answer_for_the_record_it_replaced() { // from the moment `head` moves, before a byte of its body is written — // which is the guarantee the reader's lower bound rests on. // SAFETY: sole writer. - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); let recycling = unsafe { shard.reserve(&guard) }; assert_eq!(recycling % SHARD_RECORDS as u64, FIRST_SEQ % SHARD_RECORDS as u64); assert!( @@ -250,7 +250,7 @@ fn a_reader_racing_a_recycle_gets_nothing_rather_than_a_mixture() { let writer = shard.clone(); let w = loom::thread::spawn(move || { // SAFETY: this thread is the shard's sole writer. - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); let seq = unsafe { writer.reserve(&guard) }; let r = record(seq); unsafe { writer.commit(seq, &r, &guard) }; @@ -344,7 +344,7 @@ fn a_key_and_the_record_it_names_come_from_one_generation() { let writer = shard.clone(); let w = loom::thread::spawn(move || { // SAFETY: this thread is the shard's sole writer. - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); let seq = unsafe { writer.reserve(&guard) }; let r = record(seq); unsafe { writer.commit(seq, &r, &guard) }; diff --git a/kernel-loom/tests/log_wake.rs b/kernel-loom/tests/log_wake.rs index 2b32c1c21a1..55558ca6cd3 100644 --- a/kernel-loom/tests/log_wake.rs +++ b/kernel-loom/tests/log_wake.rs @@ -35,7 +35,7 @@ #![cfg(feature = "loom")] -use kernel_loom::arch::LogCommitGuard; +use kernel_loom::arch::IrqGuard; use kernel_loom::log_shard::{arm_waiter, signal_after_commit, waiter, Shard, FIRST_SEQ}; use loom::sync::atomic::{AtomicBool, Ordering}; use loom::sync::Arc; @@ -72,13 +72,13 @@ fn a_commit_and_an_arm_cannot_both_miss() { let producer = m.clone(); let p = loom::thread::spawn(move || { - let guard = LogCommitGuard::close(); + let guard = IrqGuard::close(); // SAFETY: one producer, and the guard is the model's stand-in for // the kernel's sole-writer bracket (`percpu_fetch_add`'s shim // argument in `lib.rs` is the other half). let seq = unsafe { producer.shard.reserve(&guard) }; unsafe { producer.shard.commit(seq, &record(seq), &guard) }; - // The kernel's `LogCommitGuard` has a `Drop` that reopens interrupts + // The kernel's `IrqGuard` has a `Drop` that reopens interrupts // here; the model's stand-in has nothing to restore, so this reads // as a no-op drop. It stays because the bracket closing before the // wake signal is the edge this model is about. diff --git a/kernel-loom/tests/log_zeroed_init.rs b/kernel-loom/tests/log_zeroed_init.rs index edcaeb0e284..be7d25c56f5 100644 --- a/kernel-loom/tests/log_zeroed_init.rs +++ b/kernel-loom/tests/log_zeroed_init.rs @@ -43,7 +43,7 @@ fn a_zero_allocated_ap_shard_issues_first_seq_first() { "zero must remain the empty-slot state" ); - let guard = kernel_loom::arch::LogCommitGuard::close(); + let guard = kernel_loom::arch::IrqGuard::close(); // SAFETY: this host thread is the allocation's only producer. let first = unsafe { shard.reserve(&guard) }; assert_eq!( diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index b73866800bf..029ebb85b07 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -96,7 +96,7 @@ boot-actuators = [] # One name rather than seven, because a feature set is a whole kernel build and # builds that differ only in which unreachable arm they carry are several builds # of one kernel. The per-action justification — what nothing else can reach — now -# lives beside each arm in `arch/syscall/dispatch.rs`, which is the file that +# lives beside each arm in `syscall/dispatch.rs`, which is the file that # has to stay true when an arm changes. # # The one place it is not confined to the match: `arch::tlb::serve_ipi` loads one diff --git a/kernel/src/arch/mod.rs b/kernel/src/arch/mod.rs index ab6ca620f67..c89f3178ead 100644 --- a/kernel/src/arch/mod.rs +++ b/kernel/src/arch/mod.rs @@ -1,102 +1,18 @@ -#![warn(clippy::undocumented_unsafe_blocks)] //! The machine, and the only part of this kernel that knows which one. //! -//! Every `unsafe` block here carries a one-line `SAFETY:` comment, enforced by the lint above. -//! [`percpu`] owns every `gs:` access; nothing outside this directory writes one. +//! One implementation per architecture, chosen here at compile time and +//! nowhere else: generic code names `crate::arch::…` and never an +//! architecture, and a `cfg` on `target_arch` appears in this file and inside +//! the implementation it selects. Every item one implementation exports, the +//! other exports with the same meaning — a missing one is a compile error in +//! the architecture that lacks it, not a fallback. -pub mod apic; -pub mod control_regs; -pub mod cpu; -pub mod entry; -pub mod fpu; -pub mod idt; -pub mod mtrr; -pub mod pat; -pub mod percpu; -pub mod smp; -pub mod syscall; -pub mod tlb; +#[cfg(target_arch = "x86_64")] +mod x86_64; +#[cfg(target_arch = "x86_64")] +pub use x86_64::*; -/// The machine every program image this kernel loads must be built for. -pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::X86_64; - -/// One log reservation and its publication, atomic against an interrupt on this CPU. TF is always clear in Ring 0, so this guard leaves it alone. -#[must_use = "dropping the log commit guard reopens interrupts and single-step traps"] -pub(crate) struct LogCommitGuard { - rflags: u64, - // Same-CPU only: keeps this guard `!Send + !Sync`. - _not_send_sync: core::marker::PhantomData<*mut ()>, -} - -impl LogCommitGuard { - pub fn close() -> Self { - let rflags: u64; - // SAFETY: pushfq/pop is balanced; cli touches only RFLAGS — one uninterruptible read-and-clear of IF. - unsafe { - // No `nomem`: the clobber keeps shard selection and publication on the closed side. - core::arch::asm!( - "pushfq", - "pop {saved}", - saved = out(reg) rflags, - ); - // Skips `cli` under the `log-unbracketed-reserve` actuator, to stage that defect. - if crate::actuator::log_unbracketed_reserve() { - return Self { rflags, _not_send_sync: core::marker::PhantomData }; - } - core::arch::asm!("cli"); - } - Self { rflags, _not_send_sync: core::marker::PhantomData } - } -} - -impl Drop for LogCommitGuard { - fn drop(&mut self) { - // SAFETY: `close`'s argument, restored on the CPU that captured it. - unsafe { - // No `nomem`: the slot store must stay before this reopens IF. - core::arch::asm!( - "push {saved}", - "popfq", - saved = in(reg) self.rflags, - ); - } - } -} - -/// Adds one to `counter`, atomic against an interrupt on this CPU, and answers the value before the add. -/// # Safety: `counter` is written by no other CPU; `guard` covers the shard selection that owns it. -#[inline(always)] -pub unsafe fn percpu_fetch_add( - counter: &core::sync::atomic::AtomicU64, - _guard: &LogCommitGuard, -) -> u64 { - // Under `log-shared-reservation`, stage a load/store race instead of the `xadd` below. - if crate::actuator::log_shared_reservation() { - let previous = counter.load(core::sync::atomic::Ordering::Relaxed); - if crate::log::nested::inject() { - // SAFETY: `sti`/`cli` each write one `RFLAGS` bit and touch no memory. - unsafe { - core::arch::asm!("sti"); - for _ in 0..256 { - core::hint::spin_loop(); - } - core::arch::asm!("cli"); - } - } - counter.store(previous + 1, core::sync::atomic::Ordering::Relaxed); - return previous; - } - - let previous: u64; - // Not `AtomicU64::fetch_add`: its locked xadd is costly under QEMU TCG emulation. - // SAFETY: `counter.as_ptr()` is live; unlocked `xadd` retires whole, atomic against an interrupt here. - unsafe { - // No `preserves_flags`: `xadd` changes arithmetic flags. - core::arch::asm!( - "xadd [{ptr}], {out}", - ptr = in(reg) counter.as_ptr(), - out = inout(reg) 1u64 => previous, - ); - } - previous -} +#[cfg(target_arch = "aarch64")] +mod aarch64; +#[cfg(target_arch = "aarch64")] +pub use aarch64::*; diff --git a/kernel/src/arch/apic.rs b/kernel/src/arch/x86_64/apic.rs similarity index 96% rename from kernel/src/arch/apic.rs rename to kernel/src/arch/x86_64/apic.rs index 103a6ea9614..14c7335ac29 100644 --- a/kernel/src/arch/apic.rs +++ b/kernel/src/arch/x86_64/apic.rs @@ -40,6 +40,18 @@ impl Reg { pub const TIMER_VECTOR: u8 = 0x20; +/// Where a device writes a message-signalled interrupt: the local APIC's +/// message window (SDM Vol. 3A §11.11.1). The one spelling of it — the +/// compatibility format below, VT-d's remappable format and VT-d's own fault +/// event all start here. +pub const MSI_DOORBELL: u32 = 0xFEE0_0000; + +/// The compatibility-format message that raises `vector` on the CPU whose APIC +/// ID is `dest`: the destination in address bits 19:12, the vector in the data. +pub fn msi_message(dest: u32, vector: u8) -> (u32, u32) { + (MSI_DOORBELL | (dest << 12), vector as u32) +} + /// Calibrated LAPIC timer ticks per 10ms (computed on BSP, reused by APs). static TIMER_TICKS: AtomicU32 = AtomicU32::new(0); diff --git a/kernel/src/arch/control_regs.rs b/kernel/src/arch/x86_64/control_regs.rs similarity index 100% rename from kernel/src/arch/control_regs.rs rename to kernel/src/arch/x86_64/control_regs.rs diff --git a/kernel/src/arch/cpu.rs b/kernel/src/arch/x86_64/cpu.rs similarity index 100% rename from kernel/src/arch/cpu.rs rename to kernel/src/arch/x86_64/cpu.rs diff --git a/kernel/src/arch/entry.rs b/kernel/src/arch/x86_64/entry.rs similarity index 100% rename from kernel/src/arch/entry.rs rename to kernel/src/arch/x86_64/entry.rs diff --git a/kernel/src/arch/fpu.rs b/kernel/src/arch/x86_64/fpu.rs similarity index 100% rename from kernel/src/arch/fpu.rs rename to kernel/src/arch/x86_64/fpu.rs diff --git a/kernel/src/arch/idt/device_irq.rs b/kernel/src/arch/x86_64/idt/device_irq.rs similarity index 100% rename from kernel/src/arch/idt/device_irq.rs rename to kernel/src/arch/x86_64/idt/device_irq.rs diff --git a/kernel/src/arch/idt/dma_fault.rs b/kernel/src/arch/x86_64/idt/dma_fault.rs similarity index 100% rename from kernel/src/arch/idt/dma_fault.rs rename to kernel/src/arch/x86_64/idt/dma_fault.rs diff --git a/kernel/src/arch/idt/exceptions.rs b/kernel/src/arch/x86_64/idt/exceptions.rs similarity index 99% rename from kernel/src/arch/idt/exceptions.rs rename to kernel/src/arch/x86_64/idt/exceptions.rs index e7d81edb463..0714da2b671 100644 --- a/kernel/src/arch/idt/exceptions.rs +++ b/kernel/src/arch/x86_64/idt/exceptions.rs @@ -1,4 +1,5 @@ -use crate::arch::{apic, cpu, syscall, percpu}; +use crate::arch::{apic, cpu, percpu}; +use crate::syscall; use crate::arch::percpu::CpuFaultState; use crate::{alert, log, mm, process, scheduler, symbols}; diff --git a/kernel/src/arch/idt/hda.rs b/kernel/src/arch/x86_64/idt/hda.rs similarity index 100% rename from kernel/src/arch/idt/hda.rs rename to kernel/src/arch/x86_64/idt/hda.rs diff --git a/kernel/src/arch/idt/i8042.rs b/kernel/src/arch/x86_64/idt/i8042.rs similarity index 100% rename from kernel/src/arch/idt/i8042.rs rename to kernel/src/arch/x86_64/idt/i8042.rs diff --git a/kernel/src/arch/idt/log_nest.rs b/kernel/src/arch/x86_64/idt/log_nest.rs similarity index 100% rename from kernel/src/arch/idt/log_nest.rs rename to kernel/src/arch/x86_64/idt/log_nest.rs diff --git a/kernel/src/arch/idt/mod.rs b/kernel/src/arch/x86_64/idt/mod.rs similarity index 100% rename from kernel/src/arch/idt/mod.rs rename to kernel/src/arch/x86_64/idt/mod.rs diff --git a/kernel/src/arch/idt/nmi.rs b/kernel/src/arch/x86_64/idt/nmi.rs similarity index 100% rename from kernel/src/arch/idt/nmi.rs rename to kernel/src/arch/x86_64/idt/nmi.rs diff --git a/kernel/src/arch/idt/spurious.rs b/kernel/src/arch/x86_64/idt/spurious.rs similarity index 100% rename from kernel/src/arch/idt/spurious.rs rename to kernel/src/arch/x86_64/idt/spurious.rs diff --git a/kernel/src/arch/idt/timer.rs b/kernel/src/arch/x86_64/idt/timer.rs similarity index 100% rename from kernel/src/arch/idt/timer.rs rename to kernel/src/arch/x86_64/idt/timer.rs diff --git a/kernel/src/arch/idt/tlb.rs b/kernel/src/arch/x86_64/idt/tlb.rs similarity index 100% rename from kernel/src/arch/idt/tlb.rs rename to kernel/src/arch/x86_64/idt/tlb.rs diff --git a/kernel/src/arch/idt/unclaimed.rs b/kernel/src/arch/x86_64/idt/unclaimed.rs similarity index 100% rename from kernel/src/arch/idt/unclaimed.rs rename to kernel/src/arch/x86_64/idt/unclaimed.rs diff --git a/kernel/src/arch/idt/user_dev.rs b/kernel/src/arch/x86_64/idt/user_dev.rs similarity index 100% rename from kernel/src/arch/idt/user_dev.rs rename to kernel/src/arch/x86_64/idt/user_dev.rs diff --git a/kernel/src/arch/idt/virtio_sound.rs b/kernel/src/arch/x86_64/idt/virtio_sound.rs similarity index 100% rename from kernel/src/arch/idt/virtio_sound.rs rename to kernel/src/arch/x86_64/idt/virtio_sound.rs diff --git a/kernel/src/arch/idt/xhci.rs b/kernel/src/arch/x86_64/idt/xhci.rs similarity index 100% rename from kernel/src/arch/idt/xhci.rs rename to kernel/src/arch/x86_64/idt/xhci.rs diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs new file mode 100644 index 00000000000..06be21653d2 --- /dev/null +++ b/kernel/src/arch/x86_64/mod.rs @@ -0,0 +1,111 @@ +#![warn(clippy::undocumented_unsafe_blocks)] +//! The machine, and the only part of this kernel that knows which one. +//! +//! Every `unsafe` block here carries a one-line `SAFETY:` comment, enforced by the lint above. +//! [`percpu`] owns every `gs:` access; nothing outside this directory writes one. + +pub mod apic; +pub mod control_regs; +pub mod cpu; +pub mod entry; +pub mod fpu; +pub mod idt; +pub mod mtrr; +pub mod pat; +pub mod percpu; +pub mod smp; +pub mod syscall; +pub mod tlb; + +pub use apic::{msi_message, MSI_DOORBELL}; + +/// The machine every program image this kernel loads must be built for. +pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::X86_64; + +/// Interrupts masked on this CPU for as long as the guard lives, and then put +/// back as they were — restored, not enabled — so a guard nests inside a region +/// that is already masked. The one way this kernel masks and restores: the +/// scheduler's pass, a log record's reservation and publication, and the +/// console backend each hold one. `TF` is always clear in Ring 0, so the guard +/// leaves it alone. +/// +/// Both edges are compiler barriers (no `nomem`): a memory access written +/// inside the region is emitted inside it. +#[must_use = "dropping the guard reopens interrupts"] +pub struct IrqGuard { + rflags: u64, + // Same-CPU only: keeps this guard `!Send + !Sync`. + _not_send_sync: core::marker::PhantomData<*mut ()>, +} + +impl IrqGuard { + pub fn close() -> Self { + let rflags: u64; + // SAFETY: pushfq/pop is balanced and cli touches only RFLAGS — one + // uninterruptible read-and-clear of IF. + unsafe { + core::arch::asm!("pushfq", "pop {saved}", "cli", saved = out(reg) rflags); + } + Self { rflags, _not_send_sync: core::marker::PhantomData } + } + + /// The flags captured and interrupts left as they are: what the + /// `log-unbracketed-reserve` actuator stages a log reservation with. + #[cfg(feature = "boot-actuators")] + pub fn unclosed() -> Self { + let rflags: u64; + // SAFETY: pushfq/pop is balanced and writes no RFLAGS bit. + unsafe { + core::arch::asm!("pushfq", "pop {saved}", saved = out(reg) rflags); + } + Self { rflags, _not_send_sync: core::marker::PhantomData } + } +} + +impl Drop for IrqGuard { + fn drop(&mut self) { + // SAFETY: the word `close` read out of RFLAGS on this CPU (the guard is + // `!Send`), restored whole. + unsafe { + core::arch::asm!("push {saved}", "popfq", saved = in(reg) self.rflags); + } + } +} + +/// Adds one to `counter`, atomic against an interrupt on this CPU, and answers the value before the add. +/// # Safety: `counter` is written by no other CPU; `guard` covers the shard selection that owns it. +#[inline(always)] +pub unsafe fn percpu_fetch_add( + counter: &core::sync::atomic::AtomicU64, + _guard: &IrqGuard, +) -> u64 { + // Under `log-shared-reservation`, stage a load/store race instead of the `xadd` below. + if crate::actuator::log_shared_reservation() { + let previous = counter.load(core::sync::atomic::Ordering::Relaxed); + if crate::log::nested::inject() { + // SAFETY: `sti`/`cli` each write one `RFLAGS` bit and touch no memory. + unsafe { + core::arch::asm!("sti"); + for _ in 0..256 { + core::hint::spin_loop(); + } + core::arch::asm!("cli"); + } + } + counter.store(previous + 1, core::sync::atomic::Ordering::Relaxed); + return previous; + } + + let previous: u64; + // Not `AtomicU64::fetch_add`: its locked xadd is costly under QEMU TCG emulation. + // SAFETY: `counter.as_ptr()` is live; unlocked `xadd` retires whole, atomic against an interrupt here. + unsafe { + // No `preserves_flags`: `xadd` changes arithmetic flags. + core::arch::asm!( + "xadd [{ptr}], {out}", + ptr = in(reg) counter.as_ptr(), + out = inout(reg) 1u64 => previous, + ); + } + previous +} diff --git a/kernel/src/arch/mtrr.rs b/kernel/src/arch/x86_64/mtrr.rs similarity index 100% rename from kernel/src/arch/mtrr.rs rename to kernel/src/arch/x86_64/mtrr.rs diff --git a/kernel/src/arch/pat.rs b/kernel/src/arch/x86_64/pat.rs similarity index 100% rename from kernel/src/arch/pat.rs rename to kernel/src/arch/x86_64/pat.rs diff --git a/kernel/src/arch/percpu.rs b/kernel/src/arch/x86_64/percpu.rs similarity index 99% rename from kernel/src/arch/percpu.rs rename to kernel/src/arch/x86_64/percpu.rs index a030d860a04..a1072d3df73 100644 --- a/kernel/src/arch/percpu.rs +++ b/kernel/src/arch/x86_64/percpu.rs @@ -405,9 +405,9 @@ fn alloc_log_shard(cpu_id: u32) -> u64 { } /// This CPU's shard, its identity, and one sequence number out of that shard. -/// The `xadd` has no `lock` prefix, sound only while the live [`crate::arch::LogCommitGuard`] proves ownership; the four reads are one `asm!` block, not four [`gs`] calls, so the absent `nomem` keeps shard selection inside the guard's barrier. +/// The `xadd` has no `lock` prefix, sound only while the live [`crate::arch::IrqGuard`] proves ownership; the four reads are one `asm!` block, not four [`gs`] calls, so the absent `nomem` keeps shard selection inside the guard's barrier. pub fn reserve_log_slot( - guard: &crate::arch::LogCommitGuard, + guard: &crate::arch::IrqGuard, ) -> (*const log::Shard, u64, u32, u32, u32) { let shard: u64; let seq: u64; diff --git a/kernel/src/arch/smp.rs b/kernel/src/arch/x86_64/smp.rs similarity index 100% rename from kernel/src/arch/smp.rs rename to kernel/src/arch/x86_64/smp.rs diff --git a/kernel/src/arch/syscall/gate.rs b/kernel/src/arch/x86_64/syscall.rs similarity index 98% rename from kernel/src/arch/syscall/gate.rs rename to kernel/src/arch/x86_64/syscall.rs index 54d0fce5ff4..58c208d89cb 100644 --- a/kernel/src/arch/syscall/gate.rs +++ b/kernel/src/arch/x86_64/syscall.rs @@ -1,6 +1,6 @@ //! Where Ring 3 enters, and what the CPU is told to do when it does. //! -//! `STAR` names the selectors, `LSTAR` is the one address `syscall` can reach, and `FMASK` masks the `RFLAGS` bits a Ring 3 thread may not hand the kernel; [`super::dispatch`] is the first code that interprets the syscall number. +//! `STAR` names the selectors, `LSTAR` is the one address `syscall` can reach, and `FMASK` masks the `RFLAGS` bits a Ring 3 thread may not hand the kernel; [`crate::syscall::dispatch`] is the first code that interprets the syscall number. use crate::arch::cpu; use crate::arch::entry::{restore_user_state, ring3_naked_asm, save_user_state, Ring3Entry}; @@ -8,7 +8,7 @@ use crate::arch::percpu; #[cfg(feature = "boot-actuators")] use crate::arch::smp::asm_label_addr; -use super::dispatch::syscall_dispatch; +use crate::syscall::dispatch::syscall_dispatch; // `IA32_EFER.SCE` is `arch::control_regs`'s bit, decided in one place, not read back here. const MSR_STAR: u32 = 0xC000_0081; diff --git a/kernel/src/arch/tlb.rs b/kernel/src/arch/x86_64/tlb.rs similarity index 99% rename from kernel/src/arch/tlb.rs rename to kernel/src/arch/x86_64/tlb.rs index 3a1870f37aa..6355596390e 100644 --- a/kernel/src/arch/tlb.rs +++ b/kernel/src/arch/x86_64/tlb.rs @@ -155,7 +155,7 @@ pub fn bench() { ); } -/// Never logs: `drivers::serial`'s lock under `save_and_cli` would deadlock a +/// Never logs: `drivers::serial`'s lock under its `IrqGuard` would deadlock a /// target that cannot answer while blocked on it. fn wait_for(me: usize, cpu: u32, generation: Generation) { let mut spins = 0u32; diff --git a/kernel/src/drivers/i8042/mod.rs b/kernel/src/drivers/i8042/mod.rs index d22bfab4c29..476381c0746 100644 --- a/kernel/src/drivers/i8042/mod.rs +++ b/kernel/src/drivers/i8042/mod.rs @@ -607,7 +607,7 @@ pub fn service() { && is_irq_cpu() { SPLIT_RESCUED.store(true, Ordering::Relaxed); - let _irq = crate::hw::IrqGuard::close(); + let _irq = crate::arch::IrqGuard::close(); handler_poll(); } if has_bytes() { @@ -1043,7 +1043,7 @@ fn aux_command(bytes: &[u8], deadline: u64) -> bool { fn aux_reenable() { AUX_RESET_PENDING.store(false, Ordering::Relaxed); let ok = { - let _irq = crate::hw::IrqGuard::close(); + let _irq = crate::arch::IrqGuard::close(); let budget = deadline(ms(AUX_REENABLE)); // Masking the line doesn't stop the device: port 1 is disabled so a // stray keystroke mid-handshake can't be consumed as the aux ack. diff --git a/kernel/src/drivers/pci.rs b/kernel/src/drivers/pci.rs index 224f3e3913f..0deb9bf9a4c 100644 --- a/kernel/src/drivers/pci.rs +++ b/kernel/src/drivers/pci.rs @@ -27,9 +27,8 @@ const INVALID_VENDOR: u16 = 0xFFFF; /// The one MSI-X table entry this kernel programs; a device's queues must point at it too. pub const MSIX_ENTRY: u16 = 0; -// Every device interrupt in this kernel targets this LAPIC address, so all land on cpu0. -const MSG_ADDR: u32 = 0xFEE0_0000; -// The same CPU, named as a destination rather than encoded in an address, for the unit to put in an entry. +// Every device interrupt in this kernel targets cpu0, named as a destination for +// the message and for the unit to put in an entry. const MSG_DEST: u32 = 0; /// No requester id: a bus/device/function is sixteen bits, so this is none of them. @@ -375,9 +374,8 @@ impl PciDevice { fn message(&self, vector: u8) -> Option<(u32, u32)> { let dest = if crate::actuator::iommu_dest_apic1() { 1 } else { MSG_DEST }; match crate::iommu::remap_msi(self.bus, self.dev, self.func, vector, dest) { - // Destination id at address bits 19:12, so the compatibility message - // names the same CPU the remappable one would. - crate::iommu::Delivery::Direct => Some((MSG_ADDR | (dest << 12), vector as u32)), + // The same CPU the remappable one would name. + crate::iommu::Delivery::Direct => Some(crate::arch::msi_message(dest, vector)), crate::iommu::Delivery::Remapped(m) => Some((m.address, m.data)), crate::iommu::Delivery::Refused(why) => { log!("PCI {:02x}:{:02x}.{}: not armed — {why}", self.bus, self.dev, self.func); diff --git a/kernel/src/drivers/serial.rs b/kernel/src/drivers/serial.rs index f40fca95f37..0677f658671 100644 --- a/kernel/src/drivers/serial.rs +++ b/kernel/src/drivers/serial.rs @@ -7,6 +7,7 @@ use core::sync::atomic::{AtomicBool, Ordering}; use crate::arch::cpu::{inb, outb}; +use crate::arch::IrqGuard; use crate::log; const PORT: u16 = 0x3f8; // COM1 @@ -89,33 +90,13 @@ static BACKEND_LOCKED: AtomicBool = AtomicBool::new(false); /// Exclusive access to the serial backend; interrupts are off for as long as the guard lives. /// Same-CPU re-entry from an IRQ handler deadlocks the spin. pub struct BackendGuard { - rflags: SavedFlags, -} - -/// This CPU's own `RFLAGS`, captured by `pushfq`; the only value `popfq` may be given. -/// Not `Copy`/`Clone`: one CPU's state at one instant, not to be duplicated. -pub struct SavedFlags(u64); - -impl SavedFlags { - /// Restores the flags; `&self` because `Drop` cannot move a field out, and restoring twice is idempotent. - #[inline] - fn restore(&self) { - // SAFETY: `popfq` has no safe spelling; `self.0` came only from this - // CPU's own `pushfq` in `save_and_cli`, so no unintended bit reaches RFLAGS. - unsafe { - core::arch::asm!( - "push {}", - "popfq", - in(reg) self.0, - options(nomem), - ); - } - } + // Dropped after `Drop::drop` releases the backend, so interrupts reopen last. + _irq: IrqGuard, } impl BackendGuard { pub fn lock() -> Self { - let rflags = save_and_cli(); + let irq = IrqGuard::close(); while BACKEND_LOCKED .compare_exchange_weak(false, true, Ordering::Acquire, Ordering::Relaxed) .is_err() @@ -124,21 +105,16 @@ impl BackendGuard { core::hint::spin_loop(); } } - Self { rflags } + Self { _irq: irq } } /// Non-blocking acquire: `None` if another CPU already holds the backend. pub fn try_lock() -> Option { - let rflags = save_and_cli(); - if BACKEND_LOCKED + let irq = IrqGuard::close(); + BACKEND_LOCKED .compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed) .is_ok() - { - Some(Self { rflags }) - } else { - rflags.restore(); - None - } + .then_some(Self { _irq: irq }) } /// Writes raw bytes with no escape stripping; callers must pre-strip via [`write_console`]. @@ -172,27 +148,7 @@ impl BackendGuard { impl Drop for BackendGuard { fn drop(&mut self) { BACKEND_LOCKED.store(false, Ordering::Release); - self.rflags.restore(); - } -} - -/// This CPU's `RFLAGS`, captured with interrupts off in one instruction sequence: -/// the value is stale if anything runs between the read and `cli`. -#[inline] -fn save_and_cli() -> SavedFlags { - let rflags: u64; - // SAFETY: irreducible — `pushfq`/`cli` have no safe spelling; the asm reads - // RFLAGS and clears IF only, writes no memory, and touches no other register. - unsafe { - core::arch::asm!( - "pushfq", - "pop {}", - "cli", - out(reg) rflags, - options(nomem), - ); } - SavedFlags(rflags) } pub fn has_data() -> bool { diff --git a/kernel/src/drivers/virtio_console.rs b/kernel/src/drivers/virtio_console.rs index 58ed6141c27..5c4cfd01685 100644 --- a/kernel/src/drivers/virtio_console.rs +++ b/kernel/src/drivers/virtio_console.rs @@ -1,7 +1,7 @@ //! VirtIO console: single-port (no MULTIPORT), replacing the 16550 UART as //! the kernel log channel after init. Uses queues 0 (RX) and 1 (TX). //! -//! RX is poll-driven: no UART IRQ handler is wired (see `arch/idt/mod.rs`). +//! RX is poll-driven: no UART IRQ handler is wired (see `arch/x86_64/idt/mod.rs`). use core::cell::UnsafeCell; use core::mem::MaybeUninit; diff --git a/kernel/src/hw.rs b/kernel/src/hw.rs index 58017823204..2f1c444057d 100644 --- a/kernel/src/hw.rs +++ b/kernel/src/hw.rs @@ -26,35 +26,6 @@ pub fn now_ns() -> u64 { HW.now().0 } -/// RAII interrupt gate: restores the caller's `IF` rather than setting it, so nesting inside an already-closed region is safe. -#[must_use = "the interrupt gate closes when the guard drops"] -pub struct IrqGuard { - rflags: u64, -} - -impl IrqGuard { - pub fn close() -> Self { - let rflags: u64; - // SAFETY: touches only RFLAGS and one pushed-and-popped stack slot; `cli` cannot fail in - // Ring 0 — reading the flags and closing them must be one uninterruptible sequence, which - // two safe calls could not guarantee. - unsafe { - asm!("pushfq", "pop {}", "cli", out(reg) rflags, options(nomem)); - } - Self { rflags } - } -} - -impl Drop for IrqGuard { - fn drop(&mut self) { - // SAFETY: `rflags` is the word this guard's own `close` read out of `RFLAGS` on this CPU — - // restoring it is not `sti`, and `arch::cpu` has no safe primitive for that. - unsafe { - asm!("push {}", "popfq", in(reg) self.rflags, options(nomem)); - } - } -} - impl Kicker for KernelHw { fn kick(&self, target: CpuId) { apic::kick_cpu(target.0); @@ -62,7 +33,7 @@ impl Kicker for KernelHw { } impl Machine for KernelHw { - type IrqGuard = IrqGuard; + type IrqGuard = crate::arch::IrqGuard; fn now(&self) -> Nanos { Nanos(crate::clock::nanos_since_boot()) @@ -79,8 +50,8 @@ impl Machine for KernelHw { apic::stop_timer(); } - fn irq_guard(&self) -> IrqGuard { - IrqGuard::close() + fn irq_guard(&self) -> crate::arch::IrqGuard { + crate::arch::IrqGuard::close() } fn halt(&self) { diff --git a/kernel/src/inbox.rs b/kernel/src/inbox.rs index ccb8fc30afb..b09bbc8e60f 100644 --- a/kernel/src/inbox.rs +++ b/kernel/src/inbox.rs @@ -116,7 +116,7 @@ impl WatchFlags { pub const READABLE: Self = Self(toyos_abi::inbox::READABLE); pub const WRITABLE: Self = Self(toyos_abi::inbox::WRITABLE); /// Every bit `toyos_abi::inbox` defines for `Submission::op_flags`; - /// hand-copied and unchecked, for the reason `arch/syscall/vm.rs`'s + /// hand-copied and unchecked, for the reason `syscall/vm.rs`'s /// `MMAP_PROT_KNOWN` gives for all four of these masks. const KNOWN: u32 = Self::READABLE.0 | Self::WRITABLE.0; diff --git a/kernel/src/iommu/vtd/fault.rs b/kernel/src/iommu/vtd/fault.rs index 1037d5c8e2e..98847659627 100644 --- a/kernel/src/iommu/vtd/fault.rs +++ b/kernel/src/iommu/vtd/fault.rs @@ -25,10 +25,6 @@ use super::{ FECTL_REG, FEADDR_REG, FEDATA_REG, FEUADDR_REG, FSTS_REG, MAX_UNITS, REGISTER_WINDOW, }; -// LAPIC destination every device MSI in this kernel targets. -// The unit's own fault event is generated by the remapping hardware itself, so interrupt remapping never blocks it. -const MSG_ADDR: u32 = 0xFEE0_0000; - // Write-1-to-clear bits; the rest of FSTS is read-only status. const FSTS_WRITE_ONE_TO_CLEAR: u32 = 0x7F; // FSTS.PPF: a fault recording register has its F bit set. @@ -195,7 +191,9 @@ pub fn arm(index: usize, regs: Mmio, found: Records, vector: u8) { UNITS[index].regs.store(DirectMap::phys_of(regs.addr() as *const u8), Ordering::Release); regs.write_u32(FEDATA_REG, vector as u32); - regs.write_u32(FEADDR_REG, MSG_ADDR); + // Generated by the remapping hardware itself, so interrupt remapping never + // blocks it: a compatibility message at the doorbell, destination 0. + regs.write_u32(FEADDR_REG, crate::arch::MSI_DOORBELL); regs.write_u32(FEUADDR_REG, 0); regs.write_u32(FECTL_REG, 0); } diff --git a/kernel/src/iommu/vtd/interrupt.rs b/kernel/src/iommu/vtd/interrupt.rs index cfe4b99d647..88a9bca9691 100644 --- a/kernel/src/iommu/vtd/interrupt.rs +++ b/kernel/src/iommu/vtd/interrupt.rs @@ -58,7 +58,6 @@ const VERIFY_SOURCE_ID: u64 = 1 << 18; const NARROW_DESTINATION_SHIFT: u64 = 8; const NARROW_DESTINATIONS: u32 = 0xFF; -const MESSAGE_BASE: u32 = 0xFEE0_0000; const MESSAGE_REMAPPABLE: u32 = 1 << 4; const MESSAGE_SUBHANDLE_VALID: u32 = 1 << 3; const PIN_REMAPPABLE: u32 = 1 << 16; @@ -183,7 +182,7 @@ fn allocate(source: StreamId, vector: u8, dest: u32, level: bool) -> Result Result { let index = allocate(source, vector, dest, false)? as u32; Ok(Msi { - address: MESSAGE_BASE + address: crate::arch::MSI_DOORBELL | ((index & 0x7FFF) << 5) | MESSAGE_REMAPPABLE | MESSAGE_SUBHANDLE_VALID diff --git a/kernel/src/log/mod.rs b/kernel/src/log/mod.rs index 6a6ab818d0d..749cd37afe3 100644 --- a/kernel/src/log/mod.rs +++ b/kernel/src/log/mod.rs @@ -215,7 +215,7 @@ struct Origin { /// the `xadd` is atomic against a same-CPU interrupt only, not against another /// CPU, so this holds only while the CPU keeps ownership of the shard across /// the whole bracket, since work stealing is enabled. -fn reserve(guard: &crate::arch::LogCommitGuard) -> (Origin, u64) { +fn reserve(guard: &crate::arch::IrqGuard) -> (Origin, u64) { if !PERCPU_READY.load(Ordering::Relaxed) { // SAFETY: nothing else is running, so this CPU owns the boot shard. let seq = unsafe { BOOT_SHARD.reserve(guard) }; @@ -250,7 +250,15 @@ pub fn emit(level: Level, args: core::fmt::Arguments) { record.len = message.len as u16; record.elided = message.elided.min(u16::MAX as usize) as u16; - let guard = crate::arch::LogCommitGuard::close(); + // `log-unbracketed-reserve` stages a reservation made with interrupts open. + #[cfg(feature = "boot-actuators")] + let guard = if crate::actuator::log_unbracketed_reserve() { + crate::arch::IrqGuard::unclosed() + } else { + crate::arch::IrqGuard::close() + }; + #[cfg(not(feature = "boot-actuators"))] + let guard = crate::arch::IrqGuard::close(); // Stamped inside the bracket: outside it, ordering by seq and by at_ns // could disagree. The NMI handler never logs and #MC halts rather than // returning, which is what closes the two paths IF/TF masking alone diff --git a/kernel/src/log/shard.rs b/kernel/src/log/shard.rs index 0ac0da0b6b5..63e63e7e4c9 100644 --- a/kernel/src/log/shard.rs +++ b/kernel/src/log/shard.rs @@ -150,7 +150,7 @@ impl Shard { /// Take the next sequence number, on the CPU that owns this shard. /// # Safety /// Caller must be the owning CPU, and `guard` must stay live through the matching [`Shard::commit`]. - pub unsafe fn reserve(&self, guard: &crate::arch::LogCommitGuard) -> u64 { + pub unsafe fn reserve(&self, guard: &crate::arch::IrqGuard) -> u64 { crate::arch::percpu_fetch_add(&self.head, guard) } @@ -161,7 +161,7 @@ impl Shard { &self, seq: u64, record: &LogRecord, - _guard: &crate::arch::LogCommitGuard, + _guard: &crate::arch::IrqGuard, ) { debug_assert!( self.head().saturating_sub(seq) < SHARD_RECORDS as u64, diff --git a/kernel/src/main.rs b/kernel/src/main.rs index af0d49c560a..bdd4181b8af 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -95,6 +95,7 @@ mod pcidev; mod gpu; mod user_ptr; mod vma; +mod syscall; /// Nested generic forces a demangled symbol wider than the console grid, /// proving `screen_late_panic`'s renderer really wraps. @@ -116,7 +117,7 @@ mod late_panic { use crate::mm::paging::MmioPolicy; use alloc::boxed::Box; use alloc::sync::Arc; -use arch::{apic, cpu, idt, pat, percpu, smp, syscall}; +use arch::{apic, cpu, idt, pat, percpu, smp}; use drivers::{acpi, gop, i8042, ioapic, nvme, pci, serial, virtio_console, virtio_gpu, virtio_sound, xhci}; use toyos_abi::boot::{KernelArgs, MemoryMapEntry}; @@ -429,7 +430,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { percpu::init_bsp(apic::id()); ioapic::init(&madt); idt::enable_interrupts(); - syscall::init(); + arch::syscall::init(); symbols::set_kernel_base(kernel_args.kernel_memory_addr); if !kernel_elf.is_empty() { symbols::load_kernel(kernel_elf, mm::PHYS_OFFSET + kernel_args.kernel_memory_addr); diff --git a/kernel/src/object/ops.rs b/kernel/src/object/ops.rs index 62438c85919..836aae38ac9 100644 --- a/kernel/src/object/ops.rs +++ b/kernel/src/object/ops.rs @@ -69,7 +69,7 @@ pub fn install(table: &mut HandleTable, object: KObjectRef) -> Result(f: impl FnOnce(&IrqOff) -> R) -> R { - let _guard = crate::hw::IrqGuard::close(); + let _guard = crate::arch::IrqGuard::close(); f(&IrqOff(())) } diff --git a/kernel/src/sched/dump.rs b/kernel/src/sched/dump.rs index a1fc465d68a..72a7dbba06e 100644 --- a/kernel/src/sched/dump.rs +++ b/kernel/src/sched/dump.rs @@ -61,7 +61,7 @@ const NMI_BUDGET: Budget = Budget::of( static REQUEST: DumpRequest = DumpRequest::new(); static OWES: [AtomicBool; MAX_CPUS] = [const { AtomicBool::new(false) }; MAX_CPUS]; -/// NMI handshake: the handler (`arch/idt/nmi.rs`) may not allocate, log, or +/// NMI handshake: the handler (`arch/x86_64/idt/nmi.rs`) may not allocate, log, or /// lock, so it only stores and clears; the asking CPU reads. static NMI_OWES: [AtomicBool; MAX_CPUS] = [const { AtomicBool::new(false) }; MAX_CPUS]; static NMI_RIP: [AtomicU64; MAX_CPUS] = [const { AtomicU64::new(0) }; MAX_CPUS]; @@ -567,7 +567,7 @@ pub mod staged { } } -/// Where this CPU was, for the NMI probe. Called only from `arch/idt/nmi.rs`. +/// Where this CPU was, for the NMI probe. Called only from `arch/x86_64/idt/nmi.rs`. /// Stores unconditionally: reading the flag first would race the requester that owns it. pub fn note_nmi(rip: u64) { let me = percpu::cpu_id() as usize; diff --git a/kernel/src/arch/syscall/debug.rs b/kernel/src/syscall/debug.rs similarity index 100% rename from kernel/src/arch/syscall/debug.rs rename to kernel/src/syscall/debug.rs diff --git a/kernel/src/arch/syscall/device.rs b/kernel/src/syscall/device.rs similarity index 100% rename from kernel/src/arch/syscall/device.rs rename to kernel/src/syscall/device.rs diff --git a/kernel/src/arch/syscall/dispatch.rs b/kernel/src/syscall/dispatch.rs similarity index 99% rename from kernel/src/arch/syscall/dispatch.rs rename to kernel/src/syscall/dispatch.rs index 104a02c6691..aef1f880b33 100644 --- a/kernel/src/arch/syscall/dispatch.rs +++ b/kernel/src/syscall/dispatch.rs @@ -12,9 +12,6 @@ use crate::object::{ops, KObjectRef}; use crate::user_ptr::SyscallContext; use crate::UserAddr; use crate::{device, process}; -// The macro, not the module: only `SYS_DEBUG`'s arms below spell `log!` unqualified. -#[cfg(feature = "test-actuators")] -use crate::log; use toyos_abi::handle::{RawHandle, Rights}; #[cfg(feature = "test-actuators")] @@ -99,7 +96,7 @@ retired_syscalls! { 96 => "SYS_SET_RT_PRIORITY", } -pub(super) fn syscall_dispatch(num: u64, a1: u64, a2: u64, a3: u64, a4: u64) -> u64 { +pub(crate) fn syscall_dispatch(num: u64, a1: u64, a2: u64, a3: u64, a4: u64) -> u64 { // Placed first so `nmi_gate` counts the call whatever it turns out to be. #[cfg(feature = "boot-actuators")] crate::nmi_gate::note_syscall(); diff --git a/kernel/src/arch/syscall/fs.rs b/kernel/src/syscall/fs.rs similarity index 99% rename from kernel/src/arch/syscall/fs.rs rename to kernel/src/syscall/fs.rs index 50d92dd59bc..90af32bc9f1 100644 --- a/kernel/src/arch/syscall/fs.rs +++ b/kernel/src/syscall/fs.rs @@ -6,7 +6,7 @@ use crate::object::ops; use crate::user_ptr::UserBytesMut; -use crate::{log, process, vfs}; +use crate::{process, vfs}; use toyos_abi::syscall::*; diff --git a/kernel/src/arch/syscall/handles.rs b/kernel/src/syscall/handles.rs similarity index 100% rename from kernel/src/arch/syscall/handles.rs rename to kernel/src/syscall/handles.rs diff --git a/kernel/src/arch/syscall/io.rs b/kernel/src/syscall/io.rs similarity index 100% rename from kernel/src/arch/syscall/io.rs rename to kernel/src/syscall/io.rs diff --git a/kernel/src/arch/syscall/ipc.rs b/kernel/src/syscall/ipc.rs similarity index 100% rename from kernel/src/arch/syscall/ipc.rs rename to kernel/src/syscall/ipc.rs diff --git a/kernel/src/arch/syscall/machine.rs b/kernel/src/syscall/machine.rs similarity index 100% rename from kernel/src/arch/syscall/machine.rs rename to kernel/src/syscall/machine.rs diff --git a/kernel/src/arch/syscall/mod.rs b/kernel/src/syscall/mod.rs similarity index 71% rename from kernel/src/arch/syscall/mod.rs rename to kernel/src/syscall/mod.rs index e642901a1f1..c46f91864e2 100644 --- a/kernel/src/arch/syscall/mod.rs +++ b/kernel/src/syscall/mod.rs @@ -1,12 +1,12 @@ -//! The syscall ABI: the entry gate, [`dispatch`]'s argument-decode boundary, -//! and the per-subsystem handlers. +//! The syscall ABI: [`dispatch`]'s argument-decode boundary and the +//! per-subsystem handlers. The entry that reaches it is the architecture's +//! (`arch::syscall`). #[cfg(feature = "test-actuators")] mod debug; mod device; -mod dispatch; +pub(crate) mod dispatch; mod fs; -mod gate; mod handles; mod io; mod ipc; @@ -14,10 +14,6 @@ mod machine; mod proc; mod vm; -#[cfg(feature = "boot-actuators")] -pub(crate) use gate::{entry_extent, hold_spin}; -pub use gate::init; - use toyos_abi::handle::RawHandle; use toyos_abi::syscall::SyscallError; diff --git a/kernel/src/arch/syscall/proc.rs b/kernel/src/syscall/proc.rs similarity index 99% rename from kernel/src/arch/syscall/proc.rs rename to kernel/src/syscall/proc.rs index b4b5fdbb86a..8e85db511f3 100644 --- a/kernel/src/arch/syscall/proc.rs +++ b/kernel/src/syscall/proc.rs @@ -61,7 +61,7 @@ pub(super) fn sys_process_wait(h: RawHandle, flags: u64) -> u64 { // First, so the answer is the bit and not the handle's own refusal — which // for an unheld handle is the kill policy, so a call carrying both returns // instead of ending the caller. `WNOHANG` is the whole of this word, - // hand-copied and unchecked (`arch/syscall/vm.rs`'s `MMAP_PROT_KNOWN`). + // hand-copied and unchecked (`syscall/vm.rs`'s `MMAP_PROT_KNOWN`). if flags & !WNOHANG != 0 { return SyscallError::InvalidArgument.to_u64(); } diff --git a/kernel/src/arch/syscall/vm.rs b/kernel/src/syscall/vm.rs similarity index 99% rename from kernel/src/arch/syscall/vm.rs rename to kernel/src/syscall/vm.rs index 43b49647d2a..0f0d007e316 100644 --- a/kernel/src/arch/syscall/vm.rs +++ b/kernel/src/syscall/vm.rs @@ -10,7 +10,7 @@ use crate::mm::paging::{CachePolicy, Occupancy, Prot}; use crate::user_ptr::UserBytesMut; use crate::UserAddr; -use crate::{log, process, vfs}; +use crate::{process, vfs}; use toyos_abi::syscall::*; diff --git a/src/bootlog.rs b/src/bootlog.rs index b29a0cf4417..069d6c1c167 100644 --- a/src/bootlog.rs +++ b/src/bootlog.rs @@ -11,7 +11,7 @@ use std::fmt; /// The word the kernel writes as it hands the machine back to the firmware, -/// in `kernel/src/arch/syscall/machine.rs`'s `quiesce`. +/// in `kernel/src/syscall/machine.rs`'s `quiesce`. pub const REBOOTING: &str = "Rebooting."; /// What `userland/test-runner` says when its job list runs past @@ -36,7 +36,7 @@ pub const WEDGE_STAGED: &str = "wedge: staged, and only the boot deadline ends t /// also in `kernel/src/deadline.rs`. /// /// **The one line that measures that control's own claim.** It arrives through -/// the shutdown syscall, and `arch::syscall::gate` masks `IF` for the whole of a +/// the shutdown syscall, and `arch::syscall` masks `IF` for the whole of a /// syscall — so a wedge that inherited its state leaves exactly one CPU per boot /// taking no interrupt at all, which is not a wedge but a hard lockup. A boot on /// which no CPU says this is a boot whose wedge never reached the CPU that asked @@ -254,7 +254,7 @@ pub fn lines_of(log: &str, name: &str) -> String { .collect() } -/// The AP bring-up record, in `kernel/src/arch/smp.rs`. A reader asks for the +/// The AP bring-up record, in `kernel/src/arch/x86_64/smp.rs`. A reader asks for the /// trailing ` online` as a separate word: the same head carries the failure. pub const AP_BRINGUP: &str = "SMP: AP cpu"; @@ -564,7 +564,7 @@ mod tests { let root = std::path::Path::new(env!("CARGO_MANIFEST_DIR")); for (file, needle) in [ ("kernel/src/process.rs", format!("log!(\"{EXIT}{{name}} pid=")), - ("kernel/src/arch/smp.rs", format!("log!(\"{AP_BRINGUP}")), + ("kernel/src/arch/x86_64/smp.rs", format!("log!(\"{AP_BRINGUP}")), ("kernel/src/process.rs", format!("THREAD_NAME_LEN: usize = {NAME_LEN}")), ("kernel/src/deadline.rs", format!("EXPIRED: &str = \"{DEADLINE_EXPIRED}\"")), ("kernel/src/deadline.rs", format!("WEDGE_STAGED: &str = \"{WEDGE_STAGED}\"")), diff --git a/src/build.rs b/src/build.rs index 484983051f2..fab2506f348 100644 --- a/src/build.rs +++ b/src/build.rs @@ -1382,7 +1382,7 @@ fn assert_actuators_match_features(root: &Path, features: &str, kernel: &[u8]) { ); } -/// The labels `arch::syscall::gate` defines inside `syscall_entry` for +/// The labels `arch::syscall` defines inside `syscall_entry` for /// `nmi_gate`, which `toyos-ld` carries into `.strtab`. const ENTRY_LABELS: [&str; 3] = ["syscall_entry_hold_spin", "syscall_entry_hold_end", "syscall_entry_end"]; @@ -1397,15 +1397,15 @@ fn assert_entry_labels_match_features(features: &str, kernel: &[u8]) { kernel, TEST_KERNEL, &ENTRY_LABELS, - "labels `arch::syscall::gate` puts inside `syscall_entry`", + "labels `arch::syscall` puts inside `syscall_entry`", "They bound what `nmi_gate` holds and counts, and belong to a kernel built with \ `boot-actuators`.", ); } -/// `arch::syscall::gate::syscall_entry`'s v0-mangled path, less the crate +/// `arch::syscall::syscall_entry`'s v0-mangled path, less the crate /// disambiguator that stands in front of it. -const SYSCALL_ENTRY_SYMBOL: &str = "6kernel4arch7syscall4gate13syscall_entry"; +const SYSCALL_ENTRY_SYMBOL: &str = "6kernel4arch6x86_647syscall13syscall_entry"; /// `cld`, which `arch::entry::ring3_naked_asm` puts first in every Ring 0 entry. const CLD: u8 = 0xfc; @@ -3360,7 +3360,7 @@ mod tests { file } - const ENTRY_NAME: &str = "_RNvNtNtNtCs2TF9wDo3GXK_6kernel4arch7syscall4gate13syscall_entry"; + const ENTRY_NAME: &str = "_RNvNtNtNtCs2TF9wDo3GXK_6kernel4arch6x86_647syscall13syscall_entry"; fn entry_with(between: &[u8]) -> Vec { [&ENTRY_OPENS[..], between, &SWITCH[..], &[0x90; 32][..]].concat() diff --git a/src/sourcegate.rs b/src/sourcegate.rs index 666aab70920..9406f1c87e7 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -193,10 +193,10 @@ const BANS: &[Ban] = &[ with it", allowed: &[ // Cache lines to walk, not bytes. - ("kernel/src/arch/control_regs.rs", 1), + ("kernel/src/arch/x86_64/control_regs.rs", 1), // Two guard-page sizes: the mapping is 4 KiB because a guard is one // hardware page, and `PAGE_SIZE` is 2 MiB territory here. - ("kernel/src/arch/percpu.rs", 2), + ("kernel/src/arch/x86_64/percpu.rs", 2), // A device's TX buffer. ("kernel/src/drivers/virtio_console.rs", 1), // A VT-d table is 4 KiB by the specification, not by this kernel. @@ -409,7 +409,7 @@ const LOG_PRODUCERS: &[&str] = &["log!(", "alert!(", "boot_phase!(", "log::emit( /// `kernel/src/hardlockup/probe.rs`, which is why it is a file of its own — and /// neither is the line the arm writes, which its caller writes for it. const NMI_SILENT: &[&str] = - &["kernel/src/arch/idt/nmi.rs", "kernel/src/hardlockup/mod.rs"]; + &["kernel/src/arch/x86_64/idt/nmi.rs", "kernel/src/hardlockup/mod.rs"]; /// Every `enable_bus_master(` site `kernel/src` holds, by file and count. /// Arming DMA comes after a site's refusals — virtio parses its capability diff --git a/tests/common/audio.rs b/tests/common/audio.rs index 583fefa38ba..fa9a199a4d4 100644 --- a/tests/common/audio.rs +++ b/tests/common/audio.rs @@ -448,7 +448,7 @@ pub struct SounddCounters { /// The two numbers this boot drew for its clocks, off the kernel's own boot /// lines: the TSC period against the HPET (`kernel/src/clock.rs`) and the LAPIC -/// timer's tick rate against that (`kernel/src/arch/apic.rs`). +/// timer's tick rate against that (`kernel/src/arch/x86_64/apic.rs`). /// /// **They are here because they are the only per-boot draws that scale every /// armed timer for the boot's whole life**, which is the shape diff --git a/tests/common/logread.rs b/tests/common/logread.rs index 0fa51bb8f80..731f349b003 100644 --- a/tests/common/logread.rs +++ b/tests/common/logread.rs @@ -233,7 +233,7 @@ pub fn log_reserve_window( /// `log::nested`'s handler emits: exactly one shard generation. const BURST: u64 = 512; -/// The negative control on [`log_reserve_window`], and on `LogCommitGuard` +/// The negative control on [`log_reserve_window`], and on `arch::IrqGuard` /// itself: the same boot with the reserve bracket removed. /// /// **The one thing that can make the log's correctness claim fail on purpose.** diff --git a/tests/common/power.rs b/tests/common/power.rs index 28dee8d8106..5c6bebdd497 100644 --- a/tests/common/power.rs +++ b/tests/common/power.rs @@ -2495,7 +2495,7 @@ pub fn blackbox_early_panic_sealed_muted( Ok(()) } -/// `kernel/src/arch/apic.rs`'s `LOG_DRAIN_EXPIRED`, which a boot that never had +/// `kernel/src/arch/x86_64/apic.rs`'s `LOG_DRAIN_EXPIRED`, which a boot that never had /// a drainer may not print. const LOG_DRAIN_EXPIRED: &str = "the report did not reach /log"; diff --git a/tests/common/serial.rs b/tests/common/serial.rs index e497d02d723..b8e7270cb7c 100644 --- a/tests/common/serial.rs +++ b/tests/common/serial.rs @@ -45,7 +45,7 @@ pub enum Died { /// dying", and the guest going quiet afterwards is what says it meant it. Kernel, /// A process the kernel killed: a Ring 3 fault, reported by name in - /// `kernel/src/arch/idt/exceptions.rs`. The machine is fine — a test whose + /// `kernel/src/arch/x86_64/idt/exceptions.rs`. The machine is fine — a test whose /// whole subject is a process dying (`handle_kill_policy` and every /// `faults.rs` probe) produces these deliberately. Before a boot's ready /// marker it still ends the boot: whatever died was `init` or one of its @@ -93,7 +93,7 @@ pub enum Died { /// recursive kernel fault is still found by the guard, one silent ceiling later. const DEATHS: &[(&str, Died, Died)] = &[ // spelling the kernel wrote it anybody else wrote it - // kernel/src/arch/idt/exceptions.rs — a Ring 0 exception. Always fatal. + // kernel/src/arch/x86_64/idt/exceptions.rs — a Ring 0 exception. Always fatal. ("KERNEL PANIC", Died::Kernel, Died::Kernel), // `double_fault_handler`, which is `-> !` and ends at `halt_all_cpus`. It // writes none of the words above it, which is how a staged `#DF` inside a @@ -119,13 +119,13 @@ const DEATHS: &[(&str, Died, Died)] = &[ // rather than the console, and is here so that a capture carrying it is // never read as anything else. ("PANIC REENTRY", Died::Kernel, Died::Kernel), - // kernel/src/arch/idt/exceptions.rs `crash_report_panic` — a Rust `panic!`. + // kernel/src/arch/x86_64/idt/exceptions.rs `crash_report_panic` — a Rust `panic!`. ("PANIC:", Died::Kernel, Died::Panicked), // `PanicInfo`'s `Display` newlines this out of the record above, so the // kernel writes it too — and so does every program's panic handler. ("panicked at", Died::Kernel, Died::Panicked), ("libc panic:", Died::Panicked, Died::Panicked), - // kernel/src/arch/idt/exceptions.rs — a Ring 3 fault, by name. + // kernel/src/arch/x86_64/idt/exceptions.rs — a Ring 3 fault, by name. ("SEGFAULT", Died::Faulted, Died::Faulted), ("SIGILL tid=", Died::Faulted, Died::Faulted), ("SIGFPE tid=", Died::Faulted, Died::Faulted), @@ -613,7 +613,7 @@ pub fn self_check() -> Result<(), String> { // **The report, which is the artefact a verdict used to drop.** Staged as // the lines `double_fault_handler` really writes - // (`kernel/src/arch/idt/exceptions.rs`), with the ordinary run in front of + // (`kernel/src/arch/x86_64/idt/exceptions.rs`), with the ordinary run in front of // it and a daemon still talking after the header — a capture that begins at // the death would be a capture nobody has. const DF_HEADER: &str = diff --git a/tests/toyos-rust-tests/src/bin/abuse_thread_name.rs b/tests/toyos-rust-tests/src/bin/abuse_thread_name.rs index 313b82811db..4bdc43a3b37 100644 --- a/tests/toyos-rust-tests/src/bin/abuse_thread_name.rs +++ b/tests/toyos-rust-tests/src/bin/abuse_thread_name.rs @@ -2,7 +2,7 @@ //! usize).min(THREAD_NAME_LEN)` and set the truncated prefix — a silent //! clamp, and the shape //! `issues/isolation/untrusted-sites-not-yet-adopted.md` named for the -//! whole of `kernel/src/arch/syscall/`. `Untrusted::at_most` replaced it +//! whole of `kernel/src/syscall/`. `Untrusted::at_most` replaced it //! with a refusal, which is a behaviour change worth its own gate: this //! proves the refusal actually fires, rather than the clamp it replaced. //! diff --git a/tests/toyos-rust-tests/src/bin/fault_gates.rs b/tests/toyos-rust-tests/src/bin/fault_gates.rs index 71c9140086c..5fd6d5db3f8 100644 --- a/tests/toyos-rust-tests/src/bin/fault_gates.rs +++ b/tests/toyos-rust-tests/src/bin/fault_gates.rs @@ -32,7 +32,7 @@ const ARMS: &[(&str, Expect)] = &[ ("ss", Expect::Killed), ("ss_rsp", Expect::Killed), // Trappable at all only because `CR0.NE` is in the declaration every CPU - // is held to (`arch/control_regs.rs`): with it clear the exception is + // is held to (`arch/x86_64/control_regs.rs`): with it clear the exception is // signalled on FERR#, which nothing in a modern machine listens to. ("mf", Expect::Killed), // TCG raises no #XM whatever MXCSR says. `CR4.OSXMMEXCPT` is declared set, diff --git a/tests/toyos-rust-tests/src/bin/fpu_isolation.rs b/tests/toyos-rust-tests/src/bin/fpu_isolation.rs index 2e09a701640..ff81834e671 100644 --- a/tests/toyos-rust-tests/src/bin/fpu_isolation.rs +++ b/tests/toyos-rust-tests/src/bin/fpu_isolation.rs @@ -1,7 +1,7 @@ //! What a transition out of Ring 3 preserves. //! //! Three arms, all positive assertions, and each one fails on the tree that -//! came before the bracket in `kernel/src/arch/entry.rs`: +//! came before the bracket in `kernel/src/arch/x86_64/entry.rs`: //! //! 1. **Leak.** One process pins a distinctive FP state and exits without //! restoring it; the next asserts the *declared* state at its own entry. diff --git a/tests/toyos-rust-tests/src/bin/log_hold.rs b/tests/toyos-rust-tests/src/bin/log_hold.rs index 510f73382ca..e4263dc3021 100644 --- a/tests/toyos-rust-tests/src/bin/log_hold.rs +++ b/tests/toyos-rust-tests/src/bin/log_hold.rs @@ -8,7 +8,7 @@ const RECORDS: usize = 192; /// A retired syscall's number: each call is refused and is one kernel record -/// naming it (`kernel/src/arch/syscall/dispatch.rs`'s `retired_syscall`). +/// naming it (`kernel/src/syscall/dispatch.rs`'s `retired_syscall`). const RETIRED: u64 = 26; fn main() { diff --git a/tests/toyos.rs b/tests/toyos.rs index b052390999d..200df8c3ece 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -1523,7 +1523,7 @@ const MACHINE_TESTS: &[(&str, Sched, Tier)] = &[ ("quarantine_exit_status", Sched::Parallel, Tier::Fast), ("quarantine_entries", Sched::Parallel, Tier::Fast), // Same: the control-register verdict, against the machine this tree - // actually booted before `arch/control_regs.rs`. + // actually booted before `arch/x86_64/control_regs.rs`. ("control_regs_verdict", Sched::Parallel, Tier::Fast), // Same: which of the two shared boots each binary belongs on, asked of the // binaries rather than of the list that claims to name them. @@ -2463,7 +2463,7 @@ const T14_COLS: usize = 1920 / 8; /// The line `SYS_DEBUG` action 3 logs immediately before halting every CPU. /// It exists only on a `test-actuators` kernel — every other action costs the /// caller its own process, this one costs the machine. Kept in sync with -/// `kernel/src/arch/syscall/debug.rs` by this comment and by screen_fatal_halt +/// `kernel/src/syscall/debug.rs` by this comment and by screen_fatal_halt /// failing loudly if it drifts. const FATAL_HALT_NONCE: &str = "SYS_DEBUG: fatal halt 4b1d9e2c"; @@ -2472,7 +2472,7 @@ const FATAL_HALT_NONCE: &str = "SYS_DEBUG: fatal halt 4b1d9e2c"; /// /// `screen_fatal_halt_composited` reads it off the *panel*, because the machine /// that wait exists for has no serial port and `/log` is the thing that did not -/// answer. Kept in sync with `kernel/src/arch/apic.rs::LOG_DRAIN_EXPIRED` by +/// answer. Kept in sync with `kernel/src/arch/x86_64/apic.rs::LOG_DRAIN_EXPIRED` by /// this comment and by that test turning every spent budget into a red if it /// drifts. const LOG_DRAIN_EXPIRED: &str = "the report did not reach /log"; @@ -3095,7 +3095,7 @@ fn check_symbols_were_read(test: &str, serial: &str) -> bool { /// that held the lock rather than the scheduler that caught it — which is the /// only thing `#[track_caller]` on `assert_baseline` buys. /// -/// A whole-buffer `contains("arch/syscall/dispatch.rs")` certifies none of that: the +/// A whole-buffer `contains("syscall/dispatch.rs")` certifies none of that: the /// same boot's `test_syscall_panic` panics in that file too, so the needle is /// already present before the tripwire runs. Scope it instead to the window /// between this panic's header and its message — `panicked at ` is @@ -3111,7 +3111,7 @@ fn check_tripwire_attribution(serial: &str) -> Result<(), String> { .rfind(HEADER) .ok_or("tripwire message with no panic header before it")?; let location = &serial[header_at..msg_at]; - if !location.contains("arch/syscall/dispatch.rs") { + if !location.contains("syscall/dispatch.rs") { return Err(format!( "expected the tripwire to name the guilty call site, not scheduler.rs; got: {}", location.trim() @@ -13056,7 +13056,7 @@ fn run_machine_test( // touching it. With one CPU there is nowhere else. // // The actuator is SYS_DEBUG 5, 6 and 7, and the reason it is not - // an ordinary workload is beside them in `arch/syscall/dispatch.rs`: routes + // an ordinary workload is beside them in `syscall/dispatch.rs`: routes // past the ceiling do still exist, // and each of them holds the VFS lock when it dies, so the // machine wedges either way and the allocator's recovery cannot diff --git a/toyos-elf/tests/tables.rs b/toyos-elf/tests/tables.rs index 61ad9903725..9ce78e2da96 100644 --- a/toyos-elf/tests/tables.rs +++ b/toyos-elf/tests/tables.rs @@ -373,7 +373,7 @@ fn one_byte_past_a_sized_symbol_is_not_that_symbol() { /// A symbol with no size bounds nothing, so every address above it is inside /// it until a later symbol takes over. That is the assembly case — hand-written /// entry points carry `st_size` 0 — and losing it would leave every frame in -/// `arch/entry.rs` unnamed. +/// `arch/x86_64/entry.rs` unnamed. #[test] fn a_symbol_with_no_size_owns_everything_above_it() { let syms = [sym(0, 0, 0, 0), sym_sized(1, FUNC, 1, 0x1000, 0)].concat(); diff --git a/toyos-userbound/src/lib.rs b/toyos-userbound/src/lib.rs index de10023d8a2..c39f963899f 100644 --- a/toyos-userbound/src/lib.rs +++ b/toyos-userbound/src/lib.rs @@ -14,8 +14,8 @@ //! //! Pure. No I/O, no allocation, no `unsafe`, nothing read from a device and //! nothing named outside this crate. The kernel is the only caller — -//! `user_ptr.rs`, `mm/`, `arch/syscall/`, `loader/` and -//! `arch/idt/exceptions.rs` — and this is a crate rather than files inside it so +//! `user_ptr.rs`, `mm/`, `syscall/`, `loader/` and +//! `arch/x86_64/idt/exceptions.rs` — and this is a crate rather than files inside it so //! that the boundary table below runs on the host in milliseconds instead of in //! a boot. //! diff --git a/userland/toybox/src/mv.rs b/userland/toybox/src/mv.rs index cabf753f291..70ce7c9b3bd 100644 --- a/userland/toybox/src/mv.rs +++ b/userland/toybox/src/mv.rs @@ -6,7 +6,7 @@ use std::process; /// /// There is no copy-and-delete fallback for a move between mounts, and the /// reason is not that the pieces are missing — `cp` is right there. It is that -/// `sys_rename` in `kernel/src/arch/syscall.rs` collapses all five of +/// `sys_rename` in `kernel/src/syscall/fs.rs` collapses all five of /// `Vfs::rename`'s errors into `NotFound`, and `Stat` carries no mount /// identity, so this process cannot tell "different mounts" from "the rename /// is broken". A fallback keyed on *any* rename failure would quietly copy its From 3f3ae53ed79eaca33e29b0b424308adb484f2a9a Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 13:51:46 +0200 Subject: [PATCH 04/50] kernel: Mmio carries writel/readl ordering, and every DMA barrier is named `arch::barrier` is the ordering a device's view of memory needs: `dma_wmb` (stores before stores, as a device's DMA reads see them), `dma_rmb` (loads of device-written memory after loads), what an MMIO store is preceded by and what an MMIO load is followed by, and `scanout_flush` for the write-combining panel. On x86-64 each is a compiler barrier, except the scanout's `sfence`; TSO gives the rest for nothing. A `fence(Release)` is not one of them on AArch64, where it is `dmb ish` and orders nothing a device, outside the inner-shareable domain, observes. `Mmio`'s contract is now Linux's `writel`/`readl`: every `write_*` is ordered after the stores this CPU made before it, and every `read_*` before the loads it makes after. That ordering was the `Sync` impl's unstated assumption ("volatile accesses order correctly regardless of which CPU issues them"), which held for x86 TSO and uncacheable memory only, and it also was not true of the compiler: `volatile` orders a store against other volatile accesses, not against the plain stores of a descriptor. Every DMA ordering site now names its barrier: - virtio: descriptors before the avail idx (`dma_wmb`), the avail idx before the notify (the `Mmio` write), the used idx before the element it counts (`dma_rmb`, both consumers). - NVMe: the submission entry before the doorbell (the `Mmio` write). Fixed: the completion entry and the data it completes were read with nothing after the phase-tag poll to order them; `dma_rmb` does. - xHCI: fixed, a TRB was written as one 16-byte volatile struct store, whose order the compiler chooses, so a controller running the ring could see the Cycle bit before the body; `TrbRing::put` writes the body, `dma_wmb`, then the control word. Fixed, an event TRB was read whole and its Cycle bit checked after; `next_event` reads the control word, checks it, `dma_rmb`, then reads the TRB. Doorbells are `Mmio` writes. - The black box's write-back is `arch::cache::write_back`, the panel's `sfence` is `barrier::scanout_flush`: no x86 instruction is left in either generic file. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/arch/x86_64/barrier.rs | 51 ++++++++++++++++++++++++ kernel/src/arch/x86_64/cache.rs | 33 +++++++++++++++ kernel/src/arch/x86_64/mod.rs | 2 + kernel/src/blackbox.rs | 31 ++------------- kernel/src/drivers/nvme.rs | 9 +++-- kernel/src/drivers/panic_console/mod.rs | 5 +-- kernel/src/drivers/virtio.rs | 20 ++++++---- kernel/src/drivers/virtio_gpu.rs | 4 +- kernel/src/drivers/xhci/hid.rs | 3 +- kernel/src/drivers/xhci/mod.rs | 29 ++++++++++---- kernel/src/mm/mmio.rs | 53 ++++++++++++++++++++----- 11 files changed, 179 insertions(+), 61 deletions(-) create mode 100644 kernel/src/arch/x86_64/barrier.rs create mode 100644 kernel/src/arch/x86_64/cache.rs diff --git a/kernel/src/arch/x86_64/barrier.rs b/kernel/src/arch/x86_64/barrier.rs new file mode 100644 index 00000000000..44da0d49a0a --- /dev/null +++ b/kernel/src/arch/x86_64/barrier.rs @@ -0,0 +1,51 @@ +//! The orderings a device's view of memory needs, as x86-64 gives them. +//! +//! Every function here is the contract both architectures implement; on x86-64 +//! each is a compiler barrier and no instruction. TSO keeps a CPU's +//! write-back stores in program order and its loads in program order (SDM +//! Vol. 3A §9.2.2), and a store to an uncacheable register is not reordered +//! with an older store — so what a device sees follows program order once the +//! compiler is held to it. Write-combining memory is the exception, and its +//! one user orders it with its own `sfence`. + +use core::sync::atomic::{compiler_fence, Ordering}; + +/// Every store to memory this CPU made before this call is visible to a +/// device's DMA reads before any store it makes after it — a descriptor before +/// the index that publishes it. +#[inline(always)] +pub fn dma_wmb() { + compiler_fence(Ordering::Release); +} + +/// Every load of device-written memory this CPU makes after this call sees at +/// least what the loads before it saw — a completion's index before the entry +/// it counts. +#[inline(always)] +pub fn dma_rmb() { + compiler_fence(Ordering::Acquire); +} + +/// What an MMIO store is preceded by: [`dma_wmb`], so a register write that +/// starts a device's work comes after the memory that work reads. +#[inline(always)] +pub fn before_mmio_write() { + dma_wmb(); +} + +/// What an MMIO load is followed by: [`dma_rmb`], so memory read after a +/// status register is at least as new as the status. +#[inline(always)] +pub fn after_mmio_read() { + dma_rmb(); +} + +/// Every store this CPU made to the scanout reaches the display before this +/// returns: the scanout is write-combining, and its stores can sit in a buffer +/// with nothing to evict them. `SFENCE` (SDM Vol. 3A §11.3.1) is the only way +/// to drain one. +#[inline(always)] +pub fn scanout_flush() { + // SAFETY: `SFENCE` touches no memory or register. + unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; +} diff --git a/kernel/src/arch/x86_64/cache.rs b/kernel/src/arch/x86_64/cache.rs new file mode 100644 index 00000000000..c3f23d10601 --- /dev/null +++ b/kernel/src/arch/x86_64/cache.rs @@ -0,0 +1,33 @@ +//! Writing memory back out of the caches, for the one reader that is not a +//! CPU: DRAM across a reset. + +/// `CLFLUSH`'s line: `CPUID.01H:EBX[15:8] × 8`, which every x86-64 part +/// reports as 64. +const LINE: u64 = 64; + +/// Every line of `[at, at + len)` written back to memory and invalidated, in +/// this CPU's caches and every other CPU's — `CLFLUSH` is coherent across the +/// machine — before this returns. +/// +/// A reset invalidates the caches without writing them back, so a byte that +/// must outlive one has to reach DRAM first. +pub fn write_back(at: u64, len: usize) { + let mut line = at & !(LINE - 1); + while line < at + len as u64 { + // SAFETY: `CLFLUSH` writes back and invalidates the line containing the + // address and touches nothing else; the caller names memory it owns, + // and the instruction faults on nothing a mapped canonical address can + // be. Not privileged, and present on every x86-64 part. + unsafe { + core::arch::asm!( + "clflush [{addr}]", + addr = in(reg) line as *const u8, + options(nostack, preserves_flags), + ); + } + line += LINE; + } + // SAFETY: `SFENCE` orders those writebacks ahead of whatever ends this + // machine; it touches no memory or register. + unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; +} diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs index 06be21653d2..7ef14a8d161 100644 --- a/kernel/src/arch/x86_64/mod.rs +++ b/kernel/src/arch/x86_64/mod.rs @@ -5,6 +5,8 @@ //! [`percpu`] owns every `gs:` access; nothing outside this directory writes one. pub mod apic; +pub mod barrier; +pub mod cache; pub mod control_regs; pub mod cpu; pub mod entry; diff --git a/kernel/src/blackbox.rs b/kernel/src/blackbox.rs index a9bf2c67274..134e66a3c3c 100644 --- a/kernel/src/blackbox.rs +++ b/kernel/src/blackbox.rs @@ -238,32 +238,9 @@ fn with_page(write: impl FnOnce(&mut [u8; BYTES], u64, toyos_blackbox::Identity) flush(at); } -/// Write the page out of this CPU's caches, and every other CPU's. -/// -/// **A reset does not write dirty lines back.** INIT and RESET invalidate the -/// caches without flushing them, so a page sealed into write-back memory and -/// then reset over is a page whose bytes never reached DRAM — the one failure -/// this mechanism cannot survive, and it looks exactly like a seal that never -/// happened. The section number that states it is left out rather than cited -/// wrong. `CLFLUSH` is coherent across every CPU, so one caller's flush is the -/// whole machine's. +/// Write the page out of every CPU's caches: a reset does not write dirty +/// lines back, and a page that never reached DRAM reads, from the next boot, +/// exactly like a seal that never happened. fn flush(at: u64) { - let mut line = 0u64; - while line < BYTES as u64 { - // SAFETY: `CLFLUSH` writes back and invalidates the line containing the - // address and touches nothing else; the address is inside the page - // `arm` took, and the instruction faults on nothing a canonical address - // can be. Not privileged, and present on every x86-64 part. - unsafe { - core::arch::asm!( - "clflush [{addr}]", - addr = in(reg) (at + line) as *const u8, - options(nostack, preserves_flags), - ); - } - line += toyos_blackbox::CACHE_LINE as u64; - } - // SAFETY: `SFENCE` orders those writebacks ahead of whatever ends this - // machine; it touches no memory or register. - unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; + crate::arch::cache::write_back(at, BYTES); } diff --git a/kernel/src/drivers/nvme.rs b/kernel/src/drivers/nvme.rs index 4a89a6e9a74..b8674aa532d 100644 --- a/kernel/src/drivers/nvme.rs +++ b/kernel/src/drivers/nvme.rs @@ -7,7 +7,7 @@ //! `read_sectors`/`write_sectors`; `admin` takes none and is bounded by //! [`COMMAND`] alone. A refusal is taken between commands, never inside one. -use core::sync::atomic::{fence, Ordering}; +use crate::arch::barrier; use toyos_untrusted::{Refused, Untrusted}; use crate::mm::Mmio; use super::pci::PciDevice; @@ -202,10 +202,10 @@ impl NvmeQueue { fn submit(&mut self, bar: &Mmio, cmd: SqEntry) { // Bounded by `sq_tail % QUEUE_DEPTH` against the page `init` allocated; - // the fence and doorbell below are what tell the device it happened. + // the doorbell below is what tells the device it happened, and as an + // `Mmio` write it is ordered after the entry. self.sq.write(self.sq_tail as usize * core::mem::size_of::(), cmd); self.sq_tail = (self.sq_tail + 1) % QUEUE_DEPTH as u16; - fence(Ordering::Release); bar.write_u32(self.sq_doorbell, self.sq_tail as u32); } @@ -238,6 +238,9 @@ impl NvmeQueue { if !answered { return Err(Unanswered::Silent); } + // The entry, and the data it completes, read after the phase tag that + // says they are there. + barrier::dma_rmb(); let cq: CqEntry = self.cq.read(at(self.cq_head)); let status = cq.status >> 1; let cid = Untrusted::new(cq.cid); diff --git a/kernel/src/drivers/panic_console/mod.rs b/kernel/src/drivers/panic_console/mod.rs index acbb887a4ca..bc72af1d307 100644 --- a/kernel/src/drivers/panic_console/mod.rs +++ b/kernel/src/drivers/panic_console/mod.rs @@ -1288,10 +1288,9 @@ fn panel_carries_report(fb: &Fb) -> bool { }) } -/// Put every store this module has made on the bus: the scanout is write-combining, and stores can sit in a buffer with nothing to evict them. +/// Put every store this module has made on the bus. fn flush_stores() { - // SAFETY: `SFENCE` (SDM Vol. 3A §11.3.1) is the only way to drain a write-combining buffer; it touches no memory or register. - unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; + crate::arch::barrier::scanout_flush(); } /// `[page 2/4]` into the bottom row's cells; not decoration — the pager advances on a timer with no key to press. diff --git a/kernel/src/drivers/virtio.rs b/kernel/src/drivers/virtio.rs index 015eab1fe02..3587b459cad 100644 --- a/kernel/src/drivers/virtio.rs +++ b/kernel/src/drivers/virtio.rs @@ -1,4 +1,4 @@ -use core::sync::atomic::{fence, Ordering}; +use crate::arch::barrier; use toyos_untrusted::{Refused, Untrusted}; @@ -376,8 +376,9 @@ impl UsedRingConsumer<'_> { if used_idx == self.last_used_idx { return None; } - // Acquire: pairs with the device's release when it bumps the used idx after writing the element. - fence(Ordering::Acquire); + // The device writes the element before it bumps the idx (virtio 1.2 + // §2.7.8), so the element is read after the idx that counts it. + barrier::dma_rmb(); let slot = self.last_used_idx % self.size; let id: Untrusted = Untrusted::new(self.used.read(USED_RING_OFF + slot as usize * USED_ELEM_SIZE)); @@ -554,10 +555,13 @@ impl<'pool> Virtqueue<'pool> { let avail_idx: u16 = self.avail.read(AVAIL_IDX_OFF); self.avail.write(AVAIL_RING_OFF + (avail_idx % size) as usize * 2, first_desc); - fence(Ordering::Release); + // The descriptors and the ring entry before the idx that publishes them + // (virtio 1.2 §2.7.13). + barrier::dma_wmb(); self.avail.write(AVAIL_IDX_OFF, avail_idx.wrapping_add(1)); - fence(Ordering::Release); + // The idx before the notification: the notify is an `Mmio` write, which + // orders every earlier store before it. let notify_off = self.notify_offset as u64 * notify_multiplier as u64; notify_mmio.write_u16(notify_off, queue_index); @@ -581,7 +585,8 @@ impl<'pool> Virtqueue<'pool> { if used_idx == self.last_used_idx { return None; } - fence(Ordering::Acquire); + // The element after the idx that counts it, as in `UsedRingConsumer::poll`. + barrier::dma_rmb(); let slot = self.last_used_idx % self.size; let id = self.used_ring_id(slot); let len = self.used_ring_len(slot); @@ -637,7 +642,8 @@ impl<'pool> Virtqueue<'pool> { let slot = at % self.size; self.used.write(self.used_elem_at(slot), id); self.used.write(self.used_elem_at(slot) + 4, len); - fence(Ordering::Release); + // As a device does: the element before the idx. + barrier::dma_wmb(); self.used.write::(USED_IDX_OFF, at.wrapping_add(1)); } diff --git a/kernel/src/drivers/virtio_gpu.rs b/kernel/src/drivers/virtio_gpu.rs index 9cba23e4e87..8f15446a564 100644 --- a/kernel/src/drivers/virtio_gpu.rs +++ b/kernel/src/drivers/virtio_gpu.rs @@ -238,8 +238,8 @@ struct GpuController { impl GpuController { /// Reads what the device wrote into the response buffer. fn answer(&self) -> T { - // Safe only because submit_and_wait's fence(Acquire) already ordered - // the device's write before this read. + // Safe only because `submit_and_wait`'s `barrier::dma_rmb` already + // ordered the device's write before this read. self.resp.read(0) } diff --git a/kernel/src/drivers/xhci/hid.rs b/kernel/src/drivers/xhci/hid.rs index 79a616d6591..49d205fb544 100644 --- a/kernel/src/drivers/xhci/hid.rs +++ b/kernel/src/drivers/xhci/hid.rs @@ -1,4 +1,3 @@ -use core::sync::atomic::{fence, Ordering}; use crate::{keyboard, mouse}; use super::{Mmio, Trb, TrbRing, TRB_NORMAL}; @@ -103,7 +102,7 @@ impl HidDevice { trb.status = self.report_size; trb.control = TRB_NORMAL | (1 << 5); // IOC self.int_ring.enqueue(trb); - fence(Ordering::Release); + // An `Mmio` write: ordered after the TRB it announces. db_base.write_u32(self.slot_id as u64 * 4, self.int_ep_dci as u32); } } diff --git a/kernel/src/drivers/xhci/mod.rs b/kernel/src/drivers/xhci/mod.rs index f54545b9b01..8dab3e83475 100644 --- a/kernel/src/drivers/xhci/mod.rs +++ b/kernel/src/drivers/xhci/mod.rs @@ -14,7 +14,9 @@ pub use wait::msc::{storage_flush, storage_read, storage_write}; use alloc::vec::Vec; use core::fmt; use core::num::NonZeroU8; -use core::sync::atomic::{fence, AtomicU64, AtomicUsize, Ordering}; +use core::sync::atomic::{AtomicU64, AtomicUsize, Ordering}; + +use crate::arch::barrier; use crate::mm::Mmio; use crate::mm::Dma; use crate::log; @@ -444,9 +446,16 @@ impl TrbRing { } /// One TRB at ring index `at` — the ring's one writer. + /// + /// The control word last, behind a barrier: it carries the Cycle bit, and a + /// controller running this ring owns the TRB the moment the bit matches its + /// own (xHCI 1.2 §4.9.2), so the body must already be there. fn put(&self, at: usize, trb: Trb) { - // Volatile: the controller reads this ring concurrently, and the Cycle bit tells it the TRB is complete. - self.buf.write(at * core::mem::size_of::(), trb) + let off = at * core::mem::size_of::(); + self.buf.write(off + core::mem::offset_of!(Trb, param), trb.param); + self.buf.write(off + core::mem::offset_of!(Trb, status), trb.status); + barrier::dma_wmb(); + self.buf.write(off + core::mem::offset_of!(Trb, control), trb.control); } /// Where the controller should resume, with the cycle state it must expect; bit 0 carries the cycle since a TRB address is 16-byte aligned. @@ -866,7 +875,7 @@ impl XhciController { /// Put a command on the ring and ring the doorbell, answering with the address the completion will name it by. fn submit_command(&mut self, trb: Trb) -> u64 { let at = self.cmd_ring.enqueue(trb); - fence(Ordering::Release); + // An `Mmio` write: ordered after the TRB it announces. self.db_base.write_u32(0, 0); at } @@ -874,11 +883,15 @@ impl XhciController { /// One event, or `None` while the controller has not published the next; every reader goes through here since the ring is one shared queue. fn next_event(&mut self) -> Option { // Volatile so the poll observes the Cycle bit flipping; racing the controller by design (xHCI 1.2 §4.9.2). - let event: Trb = - self.event_ring.read(self.event_head as usize * core::mem::size_of::()); - if ((event.control & 1) != 0) != self.event_phase { + // The control word alone first: the rest of the TRB is the controller's + // until the Cycle bit it carries says otherwise. + let at = self.event_head as usize * core::mem::size_of::(); + let control: u32 = self.event_ring.read(at + core::mem::offset_of!(Trb, control)); + if ((control & 1) != 0) != self.event_phase { return None; } + barrier::dma_rmb(); + let event: Trb = self.event_ring.read(at); if crate::actuator::usb_slow_device() && !self.slow_device_would_have_answered(&event) { return None; } @@ -1569,7 +1582,7 @@ impl XhciController { } fn ring_doorbell(&self, slot: u8, dci: u8) { - fence(Ordering::Release); + // An `Mmio` write: ordered after every TRB enqueued before it. self.db_base.write_u32(slot as u64 * 4, dci as u32); } } diff --git a/kernel/src/mm/mmio.rs b/kernel/src/mm/mmio.rs index fe3d8f1e6fc..6e248808676 100644 --- a/kernel/src/mm/mmio.rs +++ b/kernel/src/mm/mmio.rs @@ -1,6 +1,24 @@ +//! A bounds-checked window over a device's registers, and the ordering every +//! access through it carries. +//! +//! **The contract, which is what a driver may rely on:** a `write_*` is ordered +//! after every store this CPU made to memory before it, as a device's DMA reads +//! observe them — the descriptor before the doorbell — and a `read_*` is +//! ordered before every load this CPU makes after it — the status before the +//! entry it reports. It is Linux's `writel`/`readl` and not their `_relaxed` +//! forms: `arch::barrier::before_mmio_write` and `after_mmio_read` supply it, +//! which is a compiler barrier on x86-64's TSO and a `dmb` on AArch64, where a +//! plain `fence` is inner-shareable and orders nothing a device sees. +//! +//! A store to device memory is not a store to plain memory, and `volatile` +//! alone promises nothing about the two against each other: without the +//! barrier the compiler may move a descriptor write past the doorbell that +//! publishes it on either architecture. + use core::ptr::{read_volatile, write_volatile}; use super::DirectMap; +use crate::arch::barrier; /// Bounds-checked volatile window over device or kernel-owned memory. Copy, no ownership, no lifetime. #[derive(Clone, Copy)] @@ -11,7 +29,8 @@ pub struct Mmio { // SAFETY: the window's address is fixed for the machine's life and Mmio carries no lock, so Send costs nothing new. unsafe impl Send for Mmio {} -// SAFETY: every access goes through read_volatile/write_volatile below, which order correctly regardless of which CPU issues them. +// SAFETY: every access is one volatile load or store carrying the module's ordering +// contract on whichever CPU issues it; nothing here is shared state of its own. unsafe impl Sync for Mmio {} impl Mmio { @@ -70,13 +89,17 @@ impl Mmio { pub fn read_u8(self, offset: u64) -> u8 { self.check(offset, 1); // SAFETY: check asserted the offset fits; read_volatile preserves the register's read side effect. - unsafe { read_volatile(self.base.add(offset as usize) as *const u8) } + let value = unsafe { read_volatile(self.base.add(offset as usize) as *const u8) }; + barrier::after_mmio_read(); + value } #[inline] pub fn write_u8(self, offset: u64, val: u8) { self.check(offset, 1); - // SAFETY: check asserted the offset fits; write_volatile preserves ordering against other MMIO accesses. + barrier::before_mmio_write(); + // SAFETY: check asserted the offset fits; write_volatile keeps the store, and the + // barrier above orders it after this CPU's earlier stores. unsafe { write_volatile(self.base.add(offset as usize), val) } } @@ -84,13 +107,17 @@ impl Mmio { pub fn read_u16(self, offset: u64) -> u16 { self.check(offset, 2); // SAFETY: check asserted the offset fits; read_volatile preserves the register's read side effect. - unsafe { read_volatile(self.base.add(offset as usize) as *const u16) } + let value = unsafe { read_volatile(self.base.add(offset as usize) as *const u16) }; + barrier::after_mmio_read(); + value } #[inline] pub fn write_u16(self, offset: u64, val: u16) { self.check(offset, 2); - // SAFETY: check asserted the offset fits; write_volatile preserves ordering against other MMIO accesses. + barrier::before_mmio_write(); + // SAFETY: check asserted the offset fits; write_volatile keeps the store, and the + // barrier above orders it after this CPU's earlier stores. unsafe { write_volatile(self.base.add(offset as usize) as *mut u16, val) } } @@ -98,13 +125,17 @@ impl Mmio { pub fn read_u32(self, offset: u64) -> u32 { self.check(offset, 4); // SAFETY: check asserted the offset fits; read_volatile preserves the register's read side effect. - unsafe { read_volatile(self.base.add(offset as usize) as *const u32) } + let value = unsafe { read_volatile(self.base.add(offset as usize) as *const u32) }; + barrier::after_mmio_read(); + value } #[inline] pub fn write_u32(self, offset: u64, val: u32) { self.check(offset, 4); - // SAFETY: check asserted the offset fits; write_volatile preserves ordering against other MMIO accesses. + barrier::before_mmio_write(); + // SAFETY: check asserted the offset fits; write_volatile keeps the store, and the + // barrier above orders it after this CPU's earlier stores. unsafe { write_volatile(self.base.add(offset as usize) as *mut u32, val) } } @@ -112,13 +143,17 @@ impl Mmio { pub fn read_u64(self, offset: u64) -> u64 { self.check(offset, 8); // SAFETY: check asserted the offset fits; read_volatile preserves the register's read side effect. - unsafe { read_volatile(self.base.add(offset as usize) as *const u64) } + let value = unsafe { read_volatile(self.base.add(offset as usize) as *const u64) }; + barrier::after_mmio_read(); + value } #[inline] pub fn write_u64(self, offset: u64, val: u64) { self.check(offset, 8); - // SAFETY: check asserted the offset fits; write_volatile preserves ordering against other MMIO accesses. + barrier::before_mmio_write(); + // SAFETY: check asserted the offset fits; write_volatile keeps the store, and the + // barrier above orders it after this CPU's earlier stores. unsafe { write_volatile(self.base.add(offset as usize) as *mut u64, val) } } } From 2200918ef8ae84298930235dc43fa0245428e62e Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 13:57:49 +0200 Subject: [PATCH 05/50] aavmf: QEMU's own edk2-stable202408 ArmVirtQemu firmware, pinned beside OVMF `aavmf/AAVMF_CODE.fd` and `aavmf/AAVMF_VARS.fd` are QEMU 11.1.0's `share/qemu/edk2-aarch64-code.fd` and `edk2-arm-vars.fd`, unmodified, committed the way `ovmf/` is and hashed in `NOTICE` and the binary gate. `Arch::pflash` is the one place a launcher gets its two `-drive` values. AAVMF's variable store boots as a snapshot QEMU discards: the build is a DEBUG one, and with a read-only store `BdsDxe` asserts on its first `NorFlashWriteBuffer` (measured: `ASSERT_RETURN_ERROR (Status = Device Error)` at `PlatformBm.c(1069)`). With the snapshot, `qemu-system-aarch64 -M virt,gic-version=3 -accel hvf -cpu host` reaches the UEFI shell on this M4 Pro in 10 s, five of them the shell's own `startup.nsh` countdown. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- NOTICE | 19 +++++++++++++++++++ aavmf/AAVMF_CODE.fd | Bin 0 -> 67108864 bytes aavmf/AAVMF_VARS.fd | Bin 0 -> 67108864 bytes src/arch.rs | 16 ++++++++++++++++ src/qemu.rs | 6 +++--- src/sourcegate.rs | 10 ++++++++++ tests/common/qemu.rs | 12 +++--------- 7 files changed, 51 insertions(+), 12 deletions(-) create mode 100644 aavmf/AAVMF_CODE.fd create mode 100644 aavmf/AAVMF_VARS.fd diff --git a/NOTICE b/NOTICE index 3b7440095ce..e4d5b0028fd 100644 --- a/NOTICE +++ b/NOTICE @@ -215,6 +215,25 @@ instead — which would put it inside the "comes with QEMU" allowance and delete 6,291,456 bytes from the repository. + +aavmf/*.fd — EDK II firmware for QEMU `virt`, BSD-2-Clause-Patent +------------------------------------------------------------ + + AAVMF_CODE.fd 67,108,864 bytes + sha256 47765fe344818cbc464b1c14ae658fb4b854f5c2ceffa982411731eb4865594d + AAVMF_VARS.fd 67,108,864 bytes + sha256 b3b855c5a80310168051164986855692d1bdb06e67619856177965cd87c6774f + + Copyright (c) 2019, TianoCore and contributors + Licence text: licenses/BSD-2-Clause-Patent-EDK2.txt + +QEMU's own prebuilt ArmVirtQemu firmware, unmodified: `edk2-aarch64-code.fd` +and `edk2-arm-vars.fd` as QEMU 11.1.0 installs them under `share/qemu/`, +whose version string reads `edk2-stable202408-prebuilt.qemu.org` (a +`DEBUG_GCC5` build of 2024-09-12). The variable store is the template: every +boot gives it a writable snapshot QEMU discards, because this `DEBUG` build +asserts on a read-only store. + tests/fixtures/gbae-v0.2.0-* — gbae, MIT ----------------------------------------- diff --git a/aavmf/AAVMF_CODE.fd b/aavmf/AAVMF_CODE.fd new file mode 100644 index 0000000000000000000000000000000000000000..89924f4b509cccc4acae488a4df862f988b2d1aa GIT binary patch literal 67108864 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

>T_ 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≦}AvpPX-Wmz76#*ThduU)^?BKM8l$dRvC| zT{1}B<)*Kpu1^3q6o@z~|XM>%j%W}M`IH~HT|x#8UeDQ{Ab2J@ea%zUMs@tEqT zSGmxUEOG7{nU-{vSQl zj!~U_Z42l-ebM}q&y>&J3v~L^2CWM@+=qG3Uvy*1JlDxW?N18xZiDhCx@O-9{dV>x z^GoyRW|w%D&Ob4zxqSg<(HS2BO`BB^D2F{8@8JpbnW1+Iw~ zyDm^C<(J?`A(Z1_k*{dkdHlR$;ZkuvJDaL{{Mas&$%~8fO%KeXj}K{MN-yd0cg^LO zQz@ifGyTfkE7LtoZ@3}9$aS{sE9oaE%N29;LuKiXdH;HT(PDypZIN#Y2yO&POPiU0 zBXMCBrWG#h*VILG(_Lpl2}d%UqCU!(HfnDAg|1Nx7L+2Lc`ME@;i1%(x1dPwF~N8v z+63WUykx=rl9Kt0ZgkBd$_rfii%N=?xo(+Hop;3**SO}+FZRt@AXNF@Sm{C-7jwHp z12jHHeO~PQV{!6R@^7A>m!DgdpD*!wnqc{>^A|4t+Wevt5@PzI8x~7G>0v}>#dI>f z_L8Edc_oV_rRJI<%r05BBwsDeU%0qvnb6p!0U;NiT9G$XXV$XflKh3Pnc1D3b&@rN z3xA1kK8fQhS?pTkD*|(W$&_4|<*#ee;<@=TYE0?aG1i}8;B6YdQ1NHYzct_WRT8Xp zOr~XlY-VQX@nh3_m-Ldk60g~F=N9D`7n9jP$+mcrE&;c_O_%I)N`4?;T9Dv>wm4%t znXUv~KFzmi?t){%{-0%4&|3<3RvQ$Zg8569NXg0bq1V8*&^LckN&X_=qP%?9;zh3O zrq3|dGQ_BmPbkl#n&-G570>g{U3?2EDheH9POdJ&dC90!pO9I}a?-Oz^zOez1B3Ni z;*d)Fm`3?zV=m}fup;eIEP5#^7~#9rHdBj=78hOUva_vS%jeHnym&!cx}{QJ%F=~q zoZ2~mie!CDZr2sQB^Sm-&zQHYcz&L5f#k&t&9ZP^Oti?fw1=5h@PbzCz~@SBc1+MG zFJ8K+#5K`1e(cFbc`wzs1pD$?^XA`Ba?SX$gqBpHYPezkjZ2I2X=l)tKo+^eR~jrn zQi!i}%`c{$mbi+SE?Kg;sDyN%v&>a84^ydo>BE`do9*D2C3@_d-)sl0fKjn8F0ze7 z1B|(^DBpB^iSNdImv6!R8yDrzb;qdgNkGj(mX$cc#~Af#^doq*9crX@pE}fWs3VDi z*(1%tzn|9sc++>9n_dq7jrq#?7mOV@enMtewrBE`sh7-JnwLja5**BR-LLf(Es`>F z&7y)ui*H%vx^%&^CG+HU@Wqt;1^FdZcT|7GZ^(;li{^JT@BG4UqH`B7cFkJoTd<(> z1(8YUr4_UN5BkxkAE8e_f}JIl`cKx6Ff)J20v{bKsV1gM_fTE4WUj9y-|B`^D@%nv zGe2)>QStnn^Hq=b;Fv~Ksz#}=FU^Fuc9S8NMQ+g7;r zH<#6f4ZVCq_UBOW#AIGrt>wy{VO{@f z{R+Xh`9vK7Tfah=mE)*a=q)_|NoL9DkGMk7k2iHkEK}3fA~j#JLqv7-`j>#Xw&S^u@rxK@2?l#2?Q)a@eicG{$T! zN?h^kX88XZ)70TK;s0MexBBq(r(W`Wchfh2^~Yzv@i)h)D-LNbS3Ejm(xLI=CLJ1a zz!^2RPanW3PYXPJiN*hS!v7z6E}sk6-z&2v{9VGuu&si zz7;o=+(Z6!r5e9nl+Q{hhVtI_%e;5D=Lz}Q_xK+e12=p;Z8v+ko3<%Oo8zb1MHlLnQ`&>+ z-=3kx|C#F!@^02011zThPX-*9>HiRJ2-Dw<9su{t132rnsp$pI;&JxAlj-kCBYc>9 z-Wy=-=AE25ZseT)KVkg@&r7GG6F_l!M#AQ}XJ9AOzZiW0#Xo?jK{yYF*k2Fp-_PZF zB*C4`8RZ2h(59qMH80 zCK9ejZ%qGW(n!v?uO+=thUxzn{&+)}{;%^pl<9v+*z<5tnqm6CYd%{{|G%5h7SsPN zp1ts3Le8M}|MDT^nKAGj$Q!zy z2E8%;-JFRdeL9)`9SD1$SI86(q7 z?o@_fP1-|Qd7K_*`Gp{G)iNkg4WI1@y1K{HFlnyavDu=u5 z=e^WPFND~0Xs}s@`M=k)w+?$Z^Ipz)o*JLIclNOZEZReb`XWFn+)|udd{}=cGxzdIk z>cQcr&V;j&31-quwJ;r8sY_bk=X^Vt=e;kPcHHm}zJ#5i&V-itc+cfgDdziZ-Vfrv z)Jvb2&V*{tf=j&|pgoaxMHnuB!t8W)CVUq+bnWo?J+X3D^mu2@Ek+T#K-x>;A(V4Y znD+J?EhNUdusZGKgT^b5Ol2rO<6rBf#WvYR>q)<35#odAihPMrX+@=oue6TtVZ za9do)Xo;8O=mhu!WlW(P)9W~~PJq*4;-|v?^Xx^|=`cTF0IF$j<8JYn{C_e`{L~$= z9WE1gL~5^0{K1m1PJ)Twyp8zyJ$h1Lj0jJJv;SM)r{9x`x#E&GS!B~{{Y^I_-$>+> zd=tvV{|D@Bjmlt@n3i*{?3P07Zcx``GsNP3pe#-nE0>T_KwHI|C{~(vt;5w zXS><>1!dxoh5=|Y@iSfjCz<%~(LM#4`1^PcGVw)cQz#R^70#c@#E%+vT1@;L=4}2I zO#D{ZecLcH52PG4XdUvYGf}&oY_#rHsY? zH<ENuE07^{BPZ2Bin zH$Rz8zvCO|AK(hkBMO^dnEpN4^vnZw)1$_iRT%f(*z}BX+gg~HOZ_j>kISa^Y$`!-p^h5^sjS2x_oQM{0!?+!joSf%99Uc z{2Xr1*YxDcf8=!52buD7VE*Y`p6YYVJSa^0cFIa9Q+_}55i;HvwtP>n{2cWD30L0p zY^0%GMgKhWTqA-qB8+e^va7Hfj(ef|8J;}+(3vJ@zDzaLUcqOp&fO8l))Ww>A6`r7}0|f4&-)7A>!(cZV?eON& zX_vbl&bu&QxAVLkuDX{v7G}9Cu8TJx2vg%qSdWqN-@3tZj4pJqI{d_;YvJLBF~)^w z=zu9M^A6TLg{Q~-)Gm{gDPdOwySVD>23X8@=8tG+hN0=YueI{}8rtQncao^bQUZYz04^6Wm+@EYvy!#%MdWa!U9cevkNTeJE3 z?=uHSeihkT_y)Z(YtA4q1S+HInyGKvr9V_Tjc2_bzH6nhYFT?d@Cx_fH>>%k1%K|x z>~&bt#osNd`ZLesPmpo%f}1ZK>EZ~BalgBhaX-BNY5b_ezOotjKJtykhv@nEEAJ$( znV-vToIu*CsAKr{erE{Z{&D#B<0)7ENW=Z!xrR=h>Bu*NxRSX`nG+LU|JkI+UHBIdDFqoMbkY}j-@{J5icKdFW|1h{TxLZal`&Bb_`wJdSiLhURa;) zBP8tyQx{F9+$7eIih6o&>!FT=>!=U&9L)1Emv~GqQd=ii1p0dlKd@JrAUH-IL_T;_1lYM2M759GZ@lOR_#I`ek^7dQnXMn-SIqoyBL2C|btvqVvnE!I9pUQNQa}7}=n2?P8|tSmEtmEfIiiuH{5ZM- zL|4Vh=n9bf;dr_Nm;PGh9citx&pe^O(d;?c}3QS9fL{VLBwg;`G#6@zR7Gq z(~Ni4rAKIn!wavRdO>G>TIx!#&1}zxq$z#RG0cm$B(Ofn<)PmxZusD1pMe{)&m#fz zVn>wm@<5B(zDbzv=<{%!%ytjUU>38z)n>Mr55V1bFEE+-E`xEi6K1;}Z*uJqQFmmM zcSLRvdH`Ia3qaP$@pC(ClJ8RfH_)%Aa*%bFdd=aV*+?0d@bJwR`JLcWS=vbUgQh8C zJMr@n@_!%u8g1>~R%J*#B5nStM7`bp9huvUH);vHavXjlkfOJDAcGk%*ry$%4mH>9 zp9oO?#SaI1r%ms{c^0yaetm~?>p!*IqqM=&rjmGUxyuO zx1|mgjyqeetA*pP?7vgxAAd3r(_&mI7?7aXyOME3ui&atnjcRd$Z<*>t z)_!r2wV$SJQ6pKzq&_t5za5%3yQHLO{+y*H`B(Ug3xsnz=JaT_AxPU!_-`iQ)ndq* zi*InHO}%9L>}gkdW?y>E^eMA*|7*rn@XVhkPj#=aCof*Ij4alL{q3Wio>#PZVextS za|_NFII|E=rxbyhD=I$E>WA1jdI$XdYuS}bt^Bqe7*?u}VtLJ?PGG4SBj!JkZ?4OR zYzkr4dT|VOQ;e^KcseuRH+Pw3$NF!lHK zz;;>9UQi@))cr;F91|1UWlNr>PrhPCkBDP>^^)9U4gZrVmPAyT8m^+8!}&j4^>dyg z){+S~<(KGIC@7S_`2Vr)=8wLAU$_|foBqbIs&n7Yeth@Pxd}6_{-`GpG%fNU5C37` z)0b^NGyl7Py!MT;CC^_v@9j75zH0qLKbo>XchkqcMTq1W6gH~4Q>^P>%>zAdlW9Xh zt!A_j0NPtxsWD2S?@h)3n18xb?`cXUt#_^O)o!2R7cK?{!hfBtmZ+s_1{7F`9UNZi z?Qc5V*WX9>abJ6jn?AF?80d?Ez8L6>fxZ~{ca4Ej+8@5P;pg{xesG@m?6zOrQ|^KP zcUiGIe4+6F{`sRo!?OQMoW7=P;Xg`ul>Wdm?GI5UcYXZ&l~t>r`gLQ~!|}%g0i97w zx%!xZC+rVCRoKP8Wjz)AWXj+U&Y)S9vnrnsMP_dPALZ=1kJGf@w?u zg-=lpBa}1NqqH2St{Pf7U+lPEHOSf2JFs7_yDPOs)h>QbRgrCZ_!a$?nzc`>@XC$z z=4U=VFE!J{zU24WvvYL$6Lm4Fd}eS@pqzK^+;>?JR`*eHcwGy7mIqDI8zPZ2?2${; zzvocnG-R6Nh}`8?u{mE+k(IOAfBuz?|*GdyEI z>A#P?&XXLGZMA;Skxd_V1<`MYHP`tp=naZYFKH=Ic^?`XqfAB;f$TTf1Y$uA;* zl5^N)p<%e&4nsO&;Oxqf-sC*&9F`%h#yx|-ma~WS7<^mV?mQKqv!_BCE4lx1-pwaS z*CZ=l`%Ahe~Sw&P1bfIWAPrY{So!DKrP=8`WqNE)o@H>`|&@$F=h zzhBNbiT`uL<0?mKYMJD_B+WnbJns9DX{{Ds`OW$HowDTGd2A)=S%O>dEK8YHeS7$@ z8q)K*VIog>&W6OvvH7HDEBv3S#6^deRIq`#NJrLmEiN|YTveEU9y~qr&nWykk395F ze)6n$G;P2mDlYc^_Ojj2mo7N2pBu?T)wlOE{d_Y?{Op%=$Dqlv3v551CqB1*tjs*L zQE69i>xX~j*Pkdg@R1c7{-m70ZLBJMmT&J0S662t!$&pcRl_OM@3@~&-bWt4_0mz5 zFV4Fa8HSr>t7o_~$v4&HV>8@?M20x>;?USun3t^laAE15c_p3Y@z}gD*vt#*W?3AZBV|X*jg;}H2TzTCdfwR5 zeUzm%WDa+Po8^Bao4|#vr zpv%bv&YW{7M-mU`xIeiJrsL;3Ze>V0e5dfXDk+Pj+-jMW$7tdRPLb)ZxF>bk2Gd>M zYf(lt`+W!Veq-X)oII6C+$ZL2B=5aL{!O*N3!2|W{Rkg+0OwDJv^$eBrg4{gDfnLM zPx5H&Eb}{cbs}Y$A2D%}aj_4puvi~wHQru0d{#K$ zzZj-3D^uaexFPjMu;9W0V?Dl9(HN$5$2KWtKikd*sB8m#@n&?a-X28*$X;zisD#z)V(AQ+bEoLw>N z0hhXZqw1F-;So8c9@OmkmNb&MF5#X}n4iWxFL5$y7nhSq+L``4;&LRvRS(WJ%TqPs z+2~ROS_$J{YPw&3cwX-B80QeKg}xA@oQ#-wY~M_T2m zbH+!e$I>tBml>TNH8M7R9epzCFHKUhX8%p2|0d^VZf74kXHD8C!3A-UXEpjMEz%~# zC9a?hYV;E)O$jSZ-vZ-@aQ)n>{aR$@ zTYMizKkY1Jj@9*sROP6Y{@OFHr;?wcFB%!8w?9L_E4<&O>CY_~J}Y8CMC|Kf5tUCx z=`XETE0%>3$I{1omN<~Om~#%SW%8KxdG2sIGae?duUrvh<}nBTuyB{&zMp>BMu*x$ zU)l6GhW=zU`{ti<(MKeX#b5FB8P{)%65kDxy=iiqR^UegBy&k!=IAeG}OfZRy4p zQOFlwKz}e->Nu%073DgGe%PC|+v1*-qZ&mS8ft}8jj2g~j)PKr>7PkICJMPD7z>0G zj%Y1nSBe(VwjNm`kiAw#SH|#t)Vv!qP1#)3|MVLeFT_5lqGC3x=-9T>d}NL3lr=T= zc(TTtvPvF&MnzvH{)?R7M$SFR5y9C3$pfL`c-cbLrg86w94}lqkFfXal)*#4EZt705pHM3w~;~OEB&@Ja3{K81O1JaDw?oF=R`?= zT#G4aCH!Udr=C67L79okxdFE~s;Jm#+?W2(#(Tb%{DZm4vqoY5jM4^dQW3Flm5RU7 zo&Ht~R=H`mzfSyJC1EFjMBOI&H>zL+=POsLDEy7eAwLd~KGt*i8|-7f`Hzm=AJ9HX z-ztjpmmBGCNnYNlQqF&a{?$g;Gs)poM^)}u;g#vg@doJh3@8UZt*G|e#t(2V=VZ@6nki016BZcyjMj4lSz)Sc7 zBmBuSt|cCbGnMl?V>~ghB<%~4H7Mt|y!tYcHB`=2&Ji6eX9WI*7wja?gWs;a=h$yO zoKrmZTah)qpq2BkQoh5vU~kc9v&zJ?u4D7EgLd`Uy3ESUJE-rN1Tey-KBC_u`5G4F z5Gh~Ja88rHKu(NH`i%aWmq@yh)?YL4Q5i+tpGj0#M-k>4@>MX7E9irUru$0rlB91w zZf#saJ!R&luo#g)n|{W(h|5K|6)fvfT1@N;eoGv$=dQTda{n|8{XPyp=f^nL)yKj2 z50o;j`Z)M~9DH?nJax;!qsw=gbAc`NJ7xFW5owJk;(k~K5 z<2%g1{sYFM%v%cYFp#1e{tnxLGnW(ojy?G{;EdyZ`WYFVOJ9=`r3(GDDJfqV4t@_d z@c^6sLSIqF7Q%LUSK^0wRgRQB0s6eu-A!h><8E<^cbah?%G8%Lu>EYeEZ%fN{m6-W zdpY&KUvX~rpB+yGhTyiD4x!vjP1qVXlf+T~QM`RV7G|PwM1&PUJ7memdDM5E;mEdg zlM`7)zEBww9&^Nd2WEG1{du0Gj^+A4g&(3j;$#^6YhV@xdNB6?1n>XnTnoq_S$X3u z#{S*oj?38p7H$Y*U;8nv?JeUB;iYpXU0C9sjQ!L{VQ&j#|K)MUMZ6OpXd~y`cXCEH z$k=y00-yRv@TtSba}IfYCu4sWX2su{U^4cf2(e#LkDdcA&s`Ht`^_c(rU!V>7`Wcc zIHxgIjcc8)H!xRwbur_)S&W1H4vPt!P2UO53u8IqFKlYM4Mvd2>k47)k3`N|@`s$g zJ_N5p_%A-@ybdw1l+JjhwOE6PA>7r33~?hI`@J#tm_Aom4OS6H-0}V?UDbLK*uX#+{h4@4QcoZ}}dK{jr&bXGW%>xw;tp zVG>Vp^&?4V35PrjV?T;3$k-RgZE(Fw%10=7KJ{M850~es#1&;jxbp$N74G~sRa*Rb zuC4vEj6Fr;Pm4Rh3pe4J8wc$6Bvc+*0}JKOSA3W9$K`oD%alpD^P-0@=^O~wbQtBD^j&$IaP-i3x6ZUUT`HU8Ay zYc1}G)sA-7r??^Y@>u4Rz}lQZ6;_KgNFfO~skQtw;XKvVrPAHvNhd#ZxF(D`u8s1%-mnFEFs zqIhsIF~`NE5Q-UxkJF?_K1 zOn!<1GzrJq(OeVU`ox79Vn(MT=S;w9gB_Tv5$+&|~5#_w@o z((UN-?Y;JQ0un#(5I>8FpFotMo}6Tqlh!+=y{8=wY*Sf;JuC1Fl_hzvd7C`zS?=MA ze(TOnYIxEt@<4_qM^}E7awl$AyiNVFpv!FyF2|2>TjKezq=BT9H%1vST-NwK%H+id z`@=nX&=E&31hyWI07`uZidZGMM-MAr2KLu!&k)2zGO!jG|d=&;c1KY-CB z;n>lt#n*Cq-cW|Rp0*!0Pd;+K&%2fu^p9|P`Z>*a8myN8=G}V|e#`^Syt~JG=jPqD zyfgVkm@9dg6lQ*x&AS=A^Tp_98oDRO&vLm`hL3cGN0p(Ob3|H!ceaCmTa?jEzsE=T z8YJ$NnxK(V>?4=J5LlJu8*pnAP7*Iq?m~Y@nW{xwLw3 zGIn)1Q)lwqtJS-eBWKbW*8IuS6@MXrd;^&uL}v19_CWZJ$SmCOXSp|*>6rk}gy?LT7XBh4$3+j}H(yzlGy{of(-&E)sj^sGGcaj1-N0kafw zBJ*!v;v|oJoQG^>$o8ku`ov~TN?k>~ltRKN0GOgs2%tCaawD4QzpIca$bTZ#rrXmaS?zuC$!IMQ>PMt)b8jjOU)@#=^!u3;X z=&tW`?{KJsY})^3*5+DF9^laWh1j7CZmpfEjOWFliR_KQj{kgR{EBk3rM+Y8&$*|t z*8#R%?(5F*oKeJAZG|!#vHu!!Y@!@>u$B~!4v(FT+ob;^V=U1#@C0!s=@zO31^pMM z*@<+Z{7_^W&Kd%9(zGSUTC)syvAlvDuikW^Y~Wk*^Hg-8tQ%*IYoxCFzn}x~cpXz6TE$i>*o8bdZy)8P= z60WEC&S&dw3Ag1sk=_Wag(CaEjn4{p21w+3zOB@8f{pc(?ffct+oi8ygzNy8C-E(I~gYxJC<&i zJmO-n1N$$GRPHHzRpBPqQ&U!`!g~%)g=LIe>I`W)Z`=}>8QQOyEQmqZUfjuX$4_D|F4R1qd zS*{nmwQ*|8+bV3Am;Aaqx^eAg;W3q~wU{=YK2D5^*;S*d1A)kzzi}>W8%LH_?Y}OrQ*TQ` z(u@g`mb4Fv^V@?DTeFYzaSyc*tJb`9Cx36ckxL;Hqm|2FM{=x%BL2He+ejKAZR zu@E!S;UZ@Het}t%GUj0xVViBZUW?zCaBX^CTB4CUk$EG^*JziX1sl8}HIw_<+{bbs z!F>$(VcgH*p1?hgd#q}ZzJPnAp4IGB4cp1bQ(#o@#~q2gS)UMhFNVb3^E|I$eKa(E z6k+uDQ(GeAIahJ5X6bZ!JMs8BUGR4#{xdJs8K*B0rxkXZOB&=7x1Uz0i)$8bus)$v zr%UN4_#^w1f_bBj=NjfdG|I|r(e_AAHcrM zp^9#>>$u;Uqs5E=`(KVTUgLLU@b|-UrcReTFSFm{r|5KvJ1=*Tsney9b*giTucOORwM7TIY8h9v{G7!1@2#dl&eqio5@Rb~l6w2!R9wh;lZ722?M4NTX6i8}C=a z<&3?(lJ`BW_nqy`r`q8TAzb!Qcv$nd!%azS4|faU)-(67fb-7|w+=h>C!|I8X|&6I zO6P0iN@uXKyQ`{^v^NSKc0{0GBY7%$BKf-KzV20TKN3~7H!hV+@@}%uyS;IoKkE}& zCHd$5C1J7N_`kv1Qp&t1-1aWI2W|gVv7h*yN^>CBpG*3=yx14jz5$wRWh?2IFh-lxFU6Y?}iY5vI(4KSd|lo9YZ&{JLf3%W%&l?9A+CBPG9slZM65TaVrH0s2l^FMghQKOfnx zT-J?$PM)5{8PTEp`Yev3Jb!+sQQiYttvQ@qON%afmwaRnP~zdt#@lJpec#Pdec4k# z_i?`ed1UwUx7GI^c9FnVzCVR9Dd($SNE(`f>;gCCi`}%uTq|z3!DJAwv;+I>>O_7Q zbBR4p>fc=I^#H!FN1#Z7Ek4i7x?m)_Yxn<*bD{b_1h1M`Ma0jIP43)Wv0 z`E1)*Y#wKur=yg$?)c@WXB>h{dKPw92kBL6U3vuZzoEP8tJrUQ!z9&@{Y!Ht|7M-0 z7K?72GVGzj?q2HZ0mOlQDt+&(A6H%&=?V5H&PxlTl7~|MDag`(3I788Dc(8A3xm5~ z6;IrLyISn0jvRnX_!PpcM9%%*3FTXnvmF@|@F#i(Yr5%w=33z#FfZqVSxf!!L9B4b z>E}AakTxdim2({gIfOH+vcN1qv^@Eg)9>?jUW!*Hu+Tnec zn~!H(hU^Oummzgk`f7<&*=O*l!2#$^8mz}>H+(6>h?9a-MfPIJzK^U!D%u10pZ6}) zPaS>+y;v(EC8(xYGIlj2@>#*<$x}VE1h2 z6=JPsO$FRf2gXo`q<*}wq7|3-rqhDz<gSr1n{4CusgR)xp59D)c9Sr$? z+R$p`3%8J6?)DgZc-af)*clU7UgA_$MdbgI9_Xyp-T8zgx+QCRPl;_&!njc6zk__P zHu?Rr2_XLf<@qtTlGk+pZfny6?DZw#6Owg)QxAyHI>2XVqxX@=&b=x+v;bkxC@?nj+FL9}%?a#|*9q#~Z{=X%k2hs*Y zyFDc;LM6Tproi)rx1I1FC%nfazBjmn@FEGXf_8$gQXTlbbxRZeO5dc;(3iTO92$Iq z^@4-sMbjH9x|YkE>DFbCa(y*?SOH2BoiCWw6g3TuVIqf6=oo`Zq4SY%1yBnvf@D)1R{OP&S|GvKgey z=4#5O)}azT>^0a!J#3=P8kt8%6ff&gHinc9d4QaTTJi;bGfwgsc{+bn(I+H-e}{WK zwx00uD-)gifVFQ$)=OpYii~4%D%RBh|68&CPn>1_zc^m=Pi@utANz##?|bOS*1b&o z;nI5m@KcJ8y#YV6cgDabup3@R#_h~?)_sNWGxA&BXYsybZdP;c-1ufMeYwx++{xOm z-eZ=<9oE>DZZKs8?4wolkhkx2!q-X6GDtv&?S~AtU$m zSxLFbls zCcJ%x)T6ev;m=MRtV-x{9n&FkkaVn*bP%qjBh^aBEalqo4@-xG@P|c9S{zS=u=}UX z$=>FeGi;me0}wfrNy}u?A~r&av*^f*Z|Ea;HagW#8J7*X{>sp|X^+8prIN*_N}7^L zlg3vepEReYv>8e7=iJTlw|zanZ7i~|R*YWQMzAHYSA4M|%yk#QzjqDojI}<`Gqf}M z_#xCE5AwqICE0qZiK}9AJc+%lh4hTW-ZBjPp6v6X+>>LBm{A6{m7$LErxp zd8Okq+>A%znd)jC7V&tScV51!`vrZ_bHjqdWhrCBkFmSf^6fLc-#(f((A(Sl;acQN z8#Y*546rAwl)YJNWG@zbvjW!MtTb(~@DonPA9LtFJEucmE1^2=FC+TXfaNd{?l zth%$|G@tN7##Dbwn8ZKbb09jo=mv%U3@0V~SC@Ua+sMzD$DTo16@B!0`c z*@P*-*Kzmr?l<)7zARNTkU5T@bB^-Pjm~}!{^M{nnD-1Bwz5IOHz@kI@_QJvFnU z)Zzrftv^MLpG7@zv$iO4C?$S9iG%9JTnPQ&5jKAr`dRnIrNm3_&X{YL4r8p_;VNr* zYf>P+)HU$(Tb-`*kT;2Wujjr;$>%2ed9nG6+&eBUYgkG8a-0$6f9G9q@<`Gv@7^a) z2dP)jBdcx_9G}cz?!wQVe1i=3w?vjZ)Ey0*aPuBW)9G+=2C2~%NS|lrBl|K60-XEx zWqC?MJ=BEd{X8{mzi=&{Mjz%I?WvJ{JtIl451o)S^!4{sHL=q!O8TDE%^Xk3FS*-g zu#@7d=8UUxcN2HF@y6hZ?9F<#ySjSyA=lN9y5cSu zj0GS0=GXbhZi`d%-5)+s^&L zvmcrLLB(6>NX(!0d`a{k&Yw(hsg?ok=~l#PJ$B==-YPmJ+w6mlyUjlM*YqcE^X~An zC$;V?{kYiP-9P#w+FcvTITqDYch_Nf2~P<&Vi$I+iiXz{(I>3^__lpaY!hM=+jAkh zF<4bI$j{yEQ=dj2c?kd5ef%q0SCl!MkNpv?m#P-*s4YVS)KSR;`mSNLhb(llfj+PX zqIL`}q2G(A@AmihB&T>B)ycj=)&5?to{a66S5k(8JuzemwuPv=!54COM>%@3*ZOh? z@hIYVz-jaxI1F3UN=MLx?mO5uv~LsnC1IzmSh34?5AhqlYYS$q;H2)J#Z4}3zq3xM zf~z;ZFi{1Qhm{UKh+b71A4vb)^fKo9s85q(>1(L_O^>A}H@?f78G(+o(jxI`1dB`J`m0Y` zCrEj2q%O!ejp!szKj)h#Qj=TxE`@QRX>)3FyvJGH_^Z_96!z#k1JvuN+8Y{K>mwfh z8d=|yyl@t~i-}8cmdmk!JzX)K>Hb3SHhF11s42Y|4%~vgVzDIr9OF;S@Dtw?i$i?U8Ya zGehisA3&QEzTLR$g!g6trJB&@M%Zc0jXotUyZB!E8d>L&b|W$(26~sKfbk`BDT%Ad zIB+BTXNY6qQ^IEbGKMn@uRCLQ%AAIEg}C~3^=cNnq}Y(M=K7N2=NMYoVGi80h5mKz zmFzVkUAxhR9OT2tge_qOdSon3p#E~^k9IXshxPfti0@~u+{5kVlD^LK)JB;f<}*L!k~xj+NB8$d$Dp4$AoG)j%ul%Nz3QdB zdxm%D%g5bUUcua7?<=Q_{pb?IXx|>@Z{!*F55Ar4NzS5O8nP!HokZ$k7W#ZE@WInu|NwlmYF5^kr`^ILRY$uHT1-b8sjXET4#B`r!a|CMo%_-w6b+~C^)b+@;r5BttiTLXV#{yoeYRM^ubp7F#l zHLH`{8wn?nPIK=JqR9RnnRmyzWaIu+7pAl1i7xo$2Rs-`Py*}CW zm@_!+9FIQN>$B57jJ+c0<8^41l5bU{J&R`#m!0;Mi^aafx;bfaaNWY(|Jn={oy7IJ zH!^q-d)UDD`v+zHSdSk%`~lUFv(dNR%fV}>SM6r*L0!$PpMggGGIhE(LDy-=FvcHA?Wy?xo-)a`J4!Q>H42@g<%Y(f=_tvsLBWH_My|hzja8jqZ zrKFhhgh#r`L;AREdE|M+mB^b=tD?{1{nq+!x~)k$jI+vtaeRyP(bC`4NSp4h5|_S{ zQsv=XfY|kPaDO<5&nf>QLz4vz?{dxT}tfpp6pIlS+- z=l_S7y{`2_*|X>to#8RFZ zE7Sb|?twR3pKe5N3=e0!jAK^b-ynJaR`-cMZ2Nx7`&r((KDceyV{@~&$(m-=TVVB| zfBhNvPpE6H=nlKt$07ai9@+%@eD(0Lo|a1TJ3tzIs`=>y=oIhbAKPE>RqnRzfYuG# z*AY!Uo;EVf5foeBR{G_NUaSwCWvvg4CLg(MJ7pt#9=4Gew{BF?2jMJ_l{U&+!CLGo zspP-x?-%~^ELl6)prTjfN6OigW|YrEHu^(L;EC2~-q%1j5j2Y9o3nbu_swqueb*Ps zxtLL3M5}vF4SKF~H=A`Nw%SR(8cF@3k;W1pmVSh1sC;d|e?IJ*Uq9?3C*OPY8 zG=lcU<()rP*G+%VK*KFkx5zi$fBcku@yE+8(Dbut_=jE#EtO(@xJY<0O5J=O;W@xPopg zO`$`rdOuF->FwYDOTOoKT^}Pdfa=txuJn*8ct9<$HcN z61K!4#P_Px-|58v3-WY@lD>+)iOi*HU9(;vY8=VyEbf$P^7e~ef0F0zm$?4qz*cFw zmvnM3vD|Aqxz||kEuGw3#NG4CgGA=R_$DcGE<&3pSq;5D1X7^ zT&Z{kxrK!~jkveFkkFG!kMMVjFt{nl%v|W7pLg@Z+#F<0U$|&VQ3jNSdHD-ZI^#|} zEtf9I%gN2L!kbcDRN&Vk6A`EqiHS+VD5Q)>L?$D-(TlM1+K_pnoZ1ZrYk#Jrj$)^`FiGjO#yuUp>-V7cy@(RDX zie?gg>*|(U)S;Q3?C8*0;(3Yf^v(%(Wwn};L0z>OrmykOUy?gAyxvMDe?)bk>@V_L zt+%c1e;HBrH2=b!`MCwt7tYQ2%J9N7}eq50gfrH7-x}=grT}A&W;8^iZaXzzCURn5k&< zW|p9#$G3vq#Y^%E@RL_)j4d8fY><_PKPN|&3d?O#j}C+G5vfaAQZy%bVNqVT?tbi+*1=me`sE~Z+ra4Yqw-CwGI zQ6c)}G5jVZm~|y({(OZ@iSeULoSs&m{HCf!K>?AbIj)O7+&v6{g# z6JRFxOOx5doMO#NpOQH<{mNNW($lX>H#(KdmnFcvByWC>Xyw=B6%<{ayI{$=DJkix z(-OynO*$$UHtZT^O(XI zpFi8UA~z?`Z@a1V+``;~ThIg&&QI2jTHdrfj$^)O{aK$+McJ^O6b6D@uomPPGyDs0 zUgE#me3L5XiTnk5g@~0AOM9Q5X4pMzYW~96^YgNcl$w^AnPyBWD9A5p7pcTJ7?9rv z2L13q+kLF%zHf;6KJ9?n?(O#;>-`7TdygeAI^OjE!H1@QTXx#dzU#Z`g+}i)f#Bn# zo*MYVyL%G{KXqvCrFSpMyP?}Hhu`?lANKW_ws+#>^>6I|x7&Kyzo!W&D^+Wy*=_j>-}4cwN#>~!_gZ#wg@ccxvh|vz%-;`f z+_E-e(2R*GyRLXNx_r(0Nrw;l|5>$o!VTZKY{UDHHZNFkb7*hhA3phX(~`@#_TTJ} zoU{E^@BIrtJJ&zus_&1vsWtr{7yt3ubFW+Qy}!mz`SHs)?9Mvt7neSG-If1}O}^gy zUkl$__Qq=0A1}^X-8}udSG{+y|K4xjeBs8w+xZZFmmIp6YceGx*T0qD{lrHuQ#tNT z^X}7iM(x}1!3Ld%MM{n3VOzy36>nCADn6)au869PuGH_2@?Sp|94D({J-#eb^YPJo z)W00~v7hYK#gBc|%;|FM%7LyN=*oev9O%k{t{mvffvz0r%7LyN_+QO|tNwDqBiC#i zKI2FK{NTbR*KJCxuZ}$DWxr~E3t-=i2HkeiIdfuX{Ordw&;93Bskg&dq23Ie3(4~U zuH{@gToqi~xPH%-#wCBJD3@}mzvw^q)O7fhgm&Y-$c^A0#XXYyDcl=4aIuTa$E$r@ zgcbE9Q?@N!?{RQB#P8`JY_8mYc+})y88J`Hc>3&T`AqBpNBN7!-NC=sR*6WYQl~`{ zSg}$Ae{@bvM0}6+SCuU+-~RqzSIR{0-~Kn*r}|xULr%4;=PF09sq8$GiSt;?Zh_^a zf}d$VPM>ifU6fml(L;G|H2v9koZ9{jrF^4vOruEvF@f)JS@$+iJb09<9bJ%%f!+)Q zbEpnW?%{v<^M?OEndd$1y^_6T#H3*s=Sox94=4Meh9`JxMnpNwe>x{;+uB}H1>#P@ z2fgf7{FHrML)ix}d%lJb^l;=E%n{xXXODI29A8o@IG`e9E%*m{@*UsEIaJx-CHF4A zJ6MOW3fQwguafhJzO*jBJ-t8A8R+8M zv$#Jd^;L^~oNt&kLM?8lE;YKMM#ZydH{|M39p!NLf4rjCvZ-8%IAvaz0} zt2pDjiu2H%RR|8|z3dO(2aeJT&P7*ocfm)!g8J>@dDU3eH-voqJWeAVccov#m&f_G zHF6HSGhd#xkrVm;zvTNazP;CnMsxn2bCh5Q_LKg%?fjU*=~%DE!@tk>}I>}}@!^aq^v z=*;JL-xg=I?@Y-L)zV0w$nzw|IT`;XpX@wJL$Tr=W<42eM2r>bd9uEUu5${ z;k{e82^=2Wy|0}coX0!C^$5V{ca316a*k%*M)38xyb+_}{2Hyf{C>uM?*kiz%Wn+( zvtz0`K&$J!hdGt72aUwi^6Y($DG^nLpI4{o`9Th8Q zF+Y=Y0O%ib)+RJ7Ahhh>ZDd#Pxs4Z(b%UgK>3>MDM6>*kHFe7f|Y)r|$DpV zCMAkL_VT9#jJ`T#@%UY(pG_XW8T#4e@te-GuOIlE_@AoXO&-5go)bv3=wc_z>=1BQX8MEaYK zXH}1kgY;E$CPL!TpYZh=dBT^tg~y>Dy#ER=I}ZLgILAl&Bo6DWIQW+?DSp85L1Nb3 zj%W{;_t9}WzK%b0t_#1^oi=PhyB`a1Uf1SpDkc60sq2DULp?4r@Gs}79lfIZIXxBW z@S4vvI42}!tI{%e(JwBp#E&XEgOiY@n(JHz#2@%9oFP`KQa>x6MgOhjj9=LgEY36H zX7H@`jthcAq2p$Ao=Lb`7qsp^>mH7GB;_P|Cg+}{Z>ztP{NeHrf$NmMO}H5Ikt+@duS&$3eR zZMnSH37_idU@5$dQ{)|e?|YV?tN`W5<$ccdQ;DC8cn9vsSL9~2u=A{OT!(*{@NYx* zi|~<+pQyRxMj+beMo^{*jS>#C{7B~UEI9(6XS=@}X z8Y2b&Z$b=LyJjAPEv3uaWCW9!P!&qlgUBDa(^Co8PD|ja?Y=dz5$n7 z=63L{9JDvV*|IT;vNV??;~-~n@duY9{=;y#BrO_eOYpYfk<3sr<+H%oNf7+i=Fon*ysO{}U45a(ClkG?))|IRb~E*h%Nv3h52rQEc7jy}Mp-}BtJTqoBGH2w^PD*X^b-U1Q?W=9x%!bFv{Qs3d1N%)EH$FXTc~#$KkxZV`s?e z0He&YAC6&-QRb!}b#m@c>?f325@pr_qwFWRi{397W#MxOnRm!|YR@5Tyy~WzjNe?| zH#wVJaY@k6dB=T>we-0=;S1F`5%rnWKQ3vP;-?fpyYXXlq3)sl1p~lrL-t(4Y(qBQ zz#i(NYVAI;&q45a4)0tnqgdb_| z_;GWFekFba_WNnPf06gn)_I@8`(?bBdiKA?NBH01c!>TV3gaW}2j zkMJ3A6Buib;3NDc?zI*l;bxv~KEkJY7F&+5d-KE)_!%_9WAYISmtJQ+!k>tn$HdSQ z9>9nBy&b)-3H+^Zl8^8X2?x8?19-&>ryWCIi z1IK~s+tajP1vtY#OX7lU>!p+6BfODsrLOqkEJ1HbZoJ)d-f+_z2@k<2S)a7-yA*sb>tR?uA?x#z*+Rgk$j$elEBJ zd@Fj#r?^YK5zKboCy?ipB(E9g-7Ymj@MQZljtD-+N3_}hYd*qP ziGyIdu%?3j)z-o4*U#xRhKW8YdQr%l6ACUd^V3mveE)U$2?8g23Gfkq z9d5reYyjRlU=K})f0t+Va%Aum>XX!g6XEtNyWisW8xnO?Za=Tos}tb%OTixCjz04U zZoe`(|9o6}&O+QA6@dmBM}`wWsf(IR1{_G4%Ow()&Fxoz58ni$G`F9RXGzy~zVkC~ zOaCy$ir2T9+wbSA945El$KATP{f@)!=U+kHQzO3h+aI~KR!nb!O5;28c-_q7lI!2w5#<5bPT5MoWR;v~5J`dTt;!Q=Zja{GNh z*W&hjwp(z8bIC``V%9$VpT_OyW?bmZ?bi*r&fIq9JTAB2Kj5~&ZWmX296rXA<@WPn3sAjAeQj<(m5!YE&O9!+-@EYtX>LEp zy|2RUch*&K`+<8WTniU+$+w-k{e=Hd^W|D&st5fz+`rhWY;M1w&#<`rk|H&?-&ywW zs7TH2_w&oG_k{Td-<`#8vE#jq>~NX8c_;4wE^fbl;7&>Z`J--Xe1D5SRrITHUew)| zpOfMCd&T

u~#Rw`3fP+b=c6;`ZCtQ*-+zQkVZPxc#0$uN3>G@cdmt-`~#d_iP&` zskU*m*78u4iCYKGeoNyX74)cfzP&n|=kMj7L3ljZc=>H`dDD6Y)qC)XV++?jenYWA zvku~g2hia1M)lV3D|zoCE(dtOB*_td4cFGWy@Rj+t5@(>_!pc!(Su9DMr&G50^DUW2ifzuvx}2=n38t*xH-SCOc4Peod*W}a zeB)`ewHF69XF9gK-;f@$yGgvu#-ZQ;3e2^ai8pIk{s7!K#0Pxvpt(PwUfYCay-U8A zH66vi343kp@Uj{>7FBf$bANg7KBtf7`H?(UtdHq6Ex~<-cknj8mAP1dzTfVQ)!Y`s zmE#}dh!z{Z``JElA$hChJHb>uyzF=D7m)^u>z@Rt6U;fsXmrKm=-^!B2#%iYg%I}? zxB%TreSie zvmL=au=*qnpM?eLA4a;U=lu!C$#ZBO^+D>ngmp!r;cCLl8Q`he1FzB@LsZ|~cu&n8 zi*CDjyNcL9l67*wiYU*Tlapk?b-@}#bv)b`PB4@W_%u8|e#3v^4DcKN3r_{V;kt0v z@*55ePe_4n9J}9*{X8Ci2?NdxEd!1VEd$OAEd!nlEd#z@Ed%~uEdyR(kx>g5R=mfP zO#FhzWJ|_0OU4XSMg;M^1H4_q*G`qVP4;Y4H+k;Oo@*ox<6HU8XQ=97eCP7GstvyL z`6vt4f@ZOXm5m*_s5kp)28kZeK8CR|L8%wN!%i-B&R!q4>#nSw#XH}r?BfAvv&FWl*lD-d;XSRbc2DhZV!}L>;qw+LH6g9?;8$}^DNbEe>`hQp5?dg zx)Yws6)JLn1!KLJILJDRl*xAG+&`J$FVY5$8N>DOA7JYgKk^QJkv%i!+T!qDo)THB zlD&Bb`vXsX_uco`5~kQR6l-Ps28V`6=yM^6?hw|IrnkYJko^7_VfHO@o*G6K?pGq{%KD!J!{UJ`N{e zTywIEWvxr}rbf~!{6nT6_v>JQI?LhVdYX* z!u1w%MQRy$Alr>U=@V9whuew2)@84Bmw%@7tK;}(s{{1IGGE*sZ}O7bWns2$vyB~I zW^&t^`vlEBFVdduG{v$0B;#HQYg=d7wkCPPjKs{{Ykx$ zI<=Pm#_T`hu-844E`5k<`gOlVrFslgt{%djS>jDBU!mCVLjA~tZ-sF!-5ufVM|kt% z3&?9Oy$^>n2oQgVTA#iGoyEJir-VGs&g)!?%zr zZCLkF)HO-l|L|Sli|&d3xwmZdC3-1am&ZVWVVfIxE_ z2?np!>7fSu80kkUkmZ}3*vx(z*2ftu<|Zb|Jc8#Eo{L{IpKEyD_A1YH$P%4E)PYTe9Jwo)+eJFY}*a#98)sN&lFl!|K?kr5}`elI&s1!ge0_+LVzpPCD*k z?-=c(KUnJ0wxs`>N_omS7^2V20{h=Hi#)%BK9hP?w>;1=o;+U-2b$FFLT8-xiRr7q zkiJdLlYJdh7owb#vrYO$Tc`blPG{Zv zIIyY1$7zYPnI@;^Qfww|x6+o+CT+2_W0|vUlfH^^b2WU#f{(nSe!SibP!I2)U^t|u z187`>%!}f59#x*h{1|y3EB4310qB{@yEn~ub-dflyNcJ$zERd%?7Vj37Gigs-8Z_= z4K(~2zlHBC-Nn9(etz`+Yn^JMv{&gL3$q--m2>^*x~}~)FOhtIV6MCQX#HXQtL&OP zn=xqhfZz`DSNwj!-Oacl`yuLNJjZPo`|PAGIndRVDt%bmggsV?eFIw%eS(8M{c4Mh zQBv<7#$CRZ??kWa>_^&Du#=y*eQSEZg0ni4{Fc18=QXEM7E%Y|kt=Nx+W~EfeQ($r zB@F4KBb%Gfs_{huP z#l3(!i2nd}shJN2g-z{T6fc`dKIeUy#F+BqGx9A7+LZ_Ce=k;dODJsO zb0zKU0ceHWsgeE1dmocAasYd%;n7qc=y3uKwT$1D+#S>x(Ops)pAIo!dX#$k{?mz_*W?XptfM>|B?KYe#eN$^JMq4ZVK*E(?zjUx_=;GHKw z-HT}d#NocVh1&|z(Pge|+Z@_?4NPuS@gwCYdum@hPeuQVYxPgY1q#Uf|(QD zihhhd`*$V3#gi2KUM1s~w2up|_R+b$$#^C2$64>oJ~7){spXDcNw=%}EO!|@ z#s68BdnN7;{0<|YPVVrC$Jzb5$^8X)H2t{D4UW{^Tv{KQj;>;0bNDG^ytG&I%!Oia za~$snRL`K@p)-z>{Fi(ZZh-K-6MIeZVY6S8zEb)vc^|GnvbRO|bHaN$oc?Q%9$RJq zbT^CJ_qSCMxJ%mhpd;+bRzY*DvTZWIt&)C_{!yo2`b_CBo6r%sWIdRCGX0vmf$2ZB zvww7iCUgV#Ikx$izEfnc?CcjEp$XmK&qwj=vim(d9>lq+Q=FM!Y@LeC=hv#}pK?83 zJ1BTZ@tMI$@@LP%K)MsR#-C6>;p27-4|G&T1N$f9-X(9G(^fUSgX|_p#YgPj-anH5 zPGsf&mx`Xu_4rLg+GOo$4y4Pt;MgGIc=X(5}_HTzBqFm_n%O0YgafQcM^uCa*dv!Ll&{y^+Am?Yu8S$Ws zj^KLy<#suHkR!UtcGX?a2O6128G3H3_V1w26nDS=KC+zsLHnINzkR=oeva$$;b-Wy zyc3i1%axx6(y^_@J+7kk{IQX9t)-l6-41V<#8bwzN{d6x9M?L|Uq^U6HE-iz+N$0D zrM}v_Wh!%-w_V*van`7Y1H}Cv>*XpRt|H3gm8*OLdn4~hx2uI)T=ctzv~_7SJZrAj ze~=FEJ?Jl7-g|}y)hZ+CxH8ZnJbn_^DmXJZbGOCR-^2H#?pP0pbDSrFv4lJk+1Dal z>oT;#OrFuZaOd2L@NQtckoY&{~ z6lwOwn`0Mz_qP*|N7xVKKxdRZA}!`zm-(B_-AV!oDCj3u%A#%;Q#~a}Px~bTeip($*wy5{AUj zAe=Jv@Lcjy%1qkDO7!*JPM5Z+26%UY6=!*tI4jw+X~p{iE8ZeQY<6zihH%0*^2|P4 z(t>S=IQ?v)dZd?h^RCiaE@P#)r|89(cKk#z+1C2lfJdHJb?(1Il_9IbM zd*f2M992zyCUZG??#4Z`YEP;Pk~a9c#|GcMO0`5W?>@Zj_qq+4_HNGn(N}2s5>Bck zDBtL?TxM8xa6U;`BGV3MZ`@>_omKA)jjTGrSS@yFX_sw!s>M%XsfkkobRbZ|l4M&waaSC3^pm%n2oJcDwbW_WLF(WNe~I`^ z<@}TARasf8@1Dn0aCidTtdxHM-AZiP%m!NG7oiKWrssXDcd!<&KlxsG{9M#UIj^Z& zTelqGexF_gi>=;F`AZr5D09kxO@KR_`As)3eAHPg__A)t9rrIEUe?Yjw0geq{#?Qu z0B36~{<)dTQ}PVKuvfq>@7vePn#1#Y&EfWs*n^H-TjrbS z5izlzn!z4;#pvgnkuSX487}syd*Oth>PdFMOX#}{`?N<@`>*6T{FqYq_mg&%U9H!7 zbLn5-rq13oOxqpn`Ue`a$y-}SmV6f`N7|^sr8{CgHE!(wZfyQ;;u*pFNh)r?0-dwzthIxg&&`F$GIOPZ*F8d=XYgD`S^~`b zyvQq4!inzOKMeZ{a+vc4(uaAlA!3UcSu#$u!@6V=d%GF4uqk=4Zw=V*<5>~j-*|8E z&EL6q!{2txpYWP(5A!Ge@=D|~-`MYj<1!`8#_yhIB+35&@Oi6whR@_S3b*Cibp?Z} zuG8^Dupz~mysH7~vebb(c>c^apPs?rVaxFH+xRp2Z>^j7>1$l%f9O(pM}^}Fd->^7 zPxv;LI#<+PZGGxm6}^UQ3D@ha4INDH72GOoLuad&0xN9c^)lCnV%z2^=GxEzz3#Q1 zuzi1OWjzA^DX}*X4>Y`u-qFllLFD+5qsXTw`Y7Q8HP?pBbtYLG!tP+M4V_IIhcS;5 z9x38zuML%^n|1td!incuHMFPE4cF7}39FFxAkNh5HAbmd@1r|6!r3L``T5i>Q~#B< zKwJMcZFb>fsN~B8E3PI7R!p@)-%$$pl|6^^_haAj4*J=ZoJ;#}!V9TjE9)rhI>oth zh8bthaIPui*(W@JR=Lz+@Axm`9OCSdLccE+-aqQ;%1$!sE;D7MAtQ@t&+pr1q>K(U z+=Yy$J;dcPxNzb9Q=v&g>EndwuS5P#Gv!<&`Ny+*v0YB-m_Wl)iHr1o#KjFKpxc-f z^mUTq7v4YSkmn-9$#dxWb{USbfrdPZiJWUNfcMGroHHZESCs<$yzSoRv2Qd6R+-z#W(r9Mnlp>Ba4G-bRj--%{44d|&Zw zYqV|?B8R#t_0V2NZyn0|3c6I;h18E<6K?cyt)o?vhW_}M{Q&aK8J*LQEkN?{_k^`B zne^9KaYn~*|mCsIC7@qW1(uhK-;|9I~^ll4E=V%h`mqVMMzua-b%a;_5mo`!WKBz!t1dAd^62IlKka4^b0G^ z^fwOpH(w%N9&7=My8C#iZ%fCT-`>u*@jR<1+rO>j+h_Q8Vi-r8V~ph6B|#5uKRga8 z@cv1@&qq$vx!AWhw##voH|voj z+=W*zS&)@mAgm8U`!LhE=py6%@gof=0LB)d*YW519eu2ZOFLn@vUX~N znG5r7$t@`K&mWVPI$5Y$#*ikHzTs=LtsN;l19|D*2P$0AwoynkV(hy_T&BSBY z)V$){oD`_aU~ZU&!xjGGyah`Zq!ec7>=4{u0$i%=YaeW;>Z0!-%B$+_J`)H(JQC_}y@a zf#)csq|$_Wc|;91M{hcfjCo6@=Ll`m{9+;OD#|yqa-sSv8r?&6^26Ig|AJiclD(v$ z0M0I>u%xgkcY(+V_ntW?*T}ehrh(k-{3Y{qL}Kg$Xs&MVx0t0SiCbLMx?3{;c`A z;jzsiI6FO7tnJXlz1ajMdBS9B$~wn@xy;DPo$X&TA15=#x8}{Cuj5xF4@;mfK}xt5 z1l1RWv|-wj$x*8rz^)MLQ7N(`%Ihc+s2*457I%69d1YspV}=$MhjtAOwkA`_O0xMO zkKxTy&Dy=ekfv1-2*rpRmB)5CB1Wiw=zjKVAs`#6u33~5PMU>sG*%^q4bPo(X~L6{c6e^{8w#XOOp91+5=;jq&NKMC5Aa7@oFS&IYqez z(CfA*%ROu=Jzjt*Sy>DQC4_{bx*SHY1Vy?bsu8gn{P6|KiPDQ zWl>E2eAfLg>mFg57fRCLKteFzLXs4>6$X zzvdsC{wu8SaSzCg^_KfRmivwU%dfb;_Qx}RaAxG;)bsxOL;L%rd(7{r-EH3O@3&ds zZ?nF?ZpgmKH!gd2^2&QYbmkr$uEUUU!vCE7xR-0b&%FNkc;b#U)uB&V1gGW{Xo1ZW zm!{Mm#PObu4{og3xPIf48@Fw&-T30hS2n)6F|={t#t$|&Z&aJ2Hbrk5xXIX*uxae3 zq)nbp(>A4Tx^9zi)0|CIZyvbW*qpF=?B=A+4{om5{L1DxH}Bj0!DfP{@|qj~(G>$L5-P@4h?D&n z3;$f2%2qil4Gy|ISWl16K-UES+}Pe-{BuxEbp3VZKvxcQ>sbmc%-4s_)}R}OUL zKvxcQ<-q^1bKuUsDgM+YgRgqLq%~vo8+R|c2mZesCaLBDaO62V8xuIlJK6Dn!|d3T*zrkb^fDD`nrq z{drV7{~yn6KQ+UWd-$K{8{q#N+Qs8nz}2S*6zI_K-U ztH`t0vH#b{xrllAk+|f^IS2Nxp2|5GUz!Tac`3mvm-9Av;y+$6y(sHhxbMdQdax(H z=NVD%Q{Bq#a+Y)I01s3*QN9w7e-fW8IP%`(EKwO}C%|d}!$QujcxqPlRedkx_dkfA zhjdVXY9^h^zGTjO$XUfn-IU4GcMAB^oY@%Z5UlT0M%iIa>f-TB^hrKjXKOi&HfmM` zyd#v8oQ>r?S{IKWZ3Uc_WAgazn&gP~IWKMJrQ>-LXUqcB`EXvk3r;z4UOM5U33cM7 zd+1pey_BnhGD+Ss(d4Cje_|Ui-G5uWbPhO6g;(quWcc8vt9yq1=CMhfRa)P$kF#x@ zLmO3L@zOQb$o_G7>Bc7o|HV7mcV7z+%ntUkgD3L~+IeREHp1lc!jq$3Nz&YOKj(c6 zZiVk8>$3$$UqiGm3yaeV`~3eFXTz<@gue!6Y= zm$PW96F=P#iL>Gy=0Q1kdklU$`q3l!>7KU3-@!Q~;&3#6x`~t#`}9W%)`!hc=RXcV z-A-is!uaWa$M4$Kc7D1u!Ns%r>4xcNlb_De&n7?J={);5Z|9(o9IV|ki8HSn$3oIiTb~dgsm2q(@!9-dL!8}J)R{%_e~{ld5*Mj6aKKF5Q?*#|x0iMJ8>F$-^kHRSm&R&S~TX)Ovli;Td z@Lf1R-2$*LKO)RR6}xi*_ruFJ!zbsgew*{2dx_f)FaXzaWv{*<=zZmapu?~*22xdU zo#51R?@l>OI^=mEWf#TO&QEtFHjvG2*2EeAS}yO{3(dL?w^@j9h1;w@?w@l0f9u^B z248PT`dZv(JCWJWZ5Ga_X>yo>)g*kay1jZIq5W}r=flrJ`zwW`?AN@PGeG|x=FbTZ zKGX=WI1Ljd_MM zo>P!&4YF%FBRTD2&1FVg_(r(Qys?gGV|BZ1M-2QlR{A(!`IWiM>iasPD}wFv{BW5G zKb@R4lCqR`9H3o^?Efn+vtw}#HT49il{~J5V<=EgUtY|4BjPFN+I`@7oh-*t{0~%g z9WuQyPWs9mL*DL`50`g6Wj_Rb9Qc7wBTnHQL-CQ+4=!(!Q~Pn_ryqW7j-mK&yyx-; z;3+~z3h#UHUiz?aiepH|IujEsLStfq+c&Biypk3$j6N&m{5+UEk8`G3%0JY`GZb6> zPu#+JhU6^wXYimr184Y6Up!tAx=^(Q&gabCB-L^scvl0^Rd<0U5J?}*`83YD$5yXJ zMu2y>^fWo?lI7eu+@%k3F5Bi*xgQLhTe_<)74Y8#aj!*2MGsHS-8_pvE^;2=8GU_J z$l?D`!dl~P9OUMB(S1#j!AYBD-6E}-XC{PApD!;eW z*0b;v&L#AaHyP|Y!IK#zob~C~Qx+a@N|hS4a}f7dry@#-(bc-w>P%`|PZoS^lhW3g;M2Or8lXty_OX|2LChKB>^!~9DyzW9trHuq{8?eS2``y&3(4K?uipNZ-~w}Yl6tU| zxXQdo<`q8jWuoK@95yc!kIcH-tS9T8EAA(<8x#(w}WuC?O(C8evQ^xitFi2jp;u=d_Mc#h!F}?|o zBEr;pb%6X8xqm{g3gal+#`}Q9QS?0T?DiDSQ6&5=C(2QzNXOAQihhl|=d;$W6?03H z4D1$yoh4~^MuFePJFp@3J8T?_9pH-`_@p)Q5gq6L)q-OT&rh7>?E~DwdP)B|_i+3S z>7O)jC3=kT-O1Tj&V1^2Z=U}>agL%t^8J@_6kVXhe^&4uH3pO5W(c;a#ADr?jE}_; zM{pE1y`fBwqSX<{jhqCw=DIsuNNwmh=hZX3P`$RC3K;oTMy zR1w`Yci(My~f$&6XIX`9c7&sec}qsrQ`80aqi#k zaew>ymo^B7zQw<^E&f}>zw~=>Wdz^x%lMaSEq}-2U)pB9|0emD9EJXY9DB{BvyYV1UIfho`jk62WYVtsW1q6zd!nd63s8$q}~bv8fs{btX-?}BC5 zx(Yn87?tS(3s4O_^Xv03-HDv$_~Y|0-JwkWCC0t4#J{vsMZa6|CHzZe9miA;^Ve{$ zBrxUL`IiDJTEc(#O^biY{=MGfUs_?kCroT{acA*c^DhzaaGAS#_wVFiS_+nt^qQntNn6{_#yoP&-Hj}zUMPp-V$i5CtKClPV zu`!=Zz8zlnGd-7X>JwMhv@$Zdr(2+3Q%_e_(~fSzCa@9rfQxA26b=NJa8MQVt`D&l zXNK?_a&@Z;362*WGa>9c!l~5MX9^gJf|)o~Vbyg!j^YmYv`*Y7^{2o5HX#Q7_7F#UmVPK1NW4KAjKvazwt z?Pq&FD(lMO^DD8f2tSL80z+{&x|vE0{)(^+aM^u5z-a^P&s{qqC^~$=VY;P=TVO)4 z3ODj%Vto$lPh8&lec&693AzUb8oKjNzQ>*;wt#BE_w)}2yKUj!>4Cd97EHp1#kZMF zS=i^fysO}z;oC}VyUmoN?+mb~uq#PD6Fk2c@mtZ-3husBW6sWsRxQ}vnOj!5bmviZ;d`!KT*~K z;2($?CE?4rPtYdB77)NLCu=8r@GJJH0GM&S|L8vCioIeL@s#y?=AAWyN56NR;DyHt z7V0R$3>R6yll(p0x+NAHRPznsI5Lh5JP;QQT@|RIJ(PoMx<4MfjbP}>yz4!}s>Mbp z&(HI$n4@mRpY(qpUkB#onFIA$^xIBxT4=>7fi|}8T5xK)ysOU(x;n*kRy5iK&jq-NB{fv(Jpr2iO+`S6JdCb|bNgNxUR32OKK)XztCp zA6~XW_dB7LroAwOGKmRn`{)38eYcUu5cqqP`BwcNw_-`Rwl}<{F;Nw~N|jeqr`Hb( z{*gFPehn({s*5O`W|}DH;woDhL-u|c&|<{07FwL z1Ir#Gc&~$~L!I$ne?T7pyYOD6T)&z=_a@htuIZoXx=+EKA!XX!jJv0!CgFTnc2 z4Yr%t#DayF$+TNhS8bbeU2nC;wq4tpwiai2btTw;(zi-Kdn2->e+@|gDj0wCuh-xv z{j0d8h#URu)wq#A6YG=7A1=FpZ9Fy5u$lOa->KABX@eD!YODNq^bIupjJSzSFhJhw zx(wbq`|x7LAN_9w{qIN0S^JUiPSuR9Utx^kITRT^l^E64FR8UNYKIh(*1*4vxK_5~Y@6`N2!f7%~fjd4I+a;gm9Y_xkVm;9t?NerUPv!3HY7W!>7N`)!j8MEd&;xE)^hWZSyI zu5*}|c_#$Pb8NpcdJRE%nLZVKZoQ7+GS{rYNc{_XOQ0Kl5&qoBZQbrj#;&W&P_TYO z+a1j9)c!2WgL|@*a(j_H&SI@l`YHcN>c-eJf?l{~ykIbA;b$E(eX^FApcY3(s>~Y_ zRP+sxjnjIqXIXLcZ+I_dufQyqb%CLM)Q2g^T-!q}_P|v!hi|}$ozT|ru|6jH)M)Bf zBH_pQG{4AE%cE&H<2RRG9*qfbJ*~_4IeR{`P{f0a7l1??;RR+URTsCW0}}> zWo{tYeA^;S81!B-LCVNFB5_K)r<&GDx?s*G-m@&A-+(N&M;mo{-!zyFcA zlyntAZ?sVN2PVe_vHZI7Z+|)fv9; ze+@RV3n#D(Con%tFtao~VAkl9zzMYQC^hz6g6={Ax&mbE+)Kpi9OKNJr{v7b%S)T@ zFPfcSupnbmZg$@6yzDTaX^Zm2tHyTwI?}GpFA~ZAqP+Zt-;_)fu&clpcfvrUN5cy4 zIKGSt`$@jf$SW*5_mYgfn-}_lhs!m}wD=!ZZj1Lh{+!I=fQxq_1SRZv(hc-3$iU(4z0+yzUn$X}QT z+!-UK)SqL$AZ7l71?MaRd-&Y3qt90ha*O8V=K!2{fpJA%VWFTIr)8v0H%xb9Q9=Hq z+=8N#9%{}l*{X1XK)KT#hPX-F^Xt`iBAR=Ps+I+ z*!Bo~==kQwvEQLK9vPU0Mop#*TxVFIAZ}6%MjJB=K?(&P(}vbGJr)s-3ycwk?jE9I z$EgFY9sljXn=BOpA2-kddD@#jCrQyeq%WPc4Plj3q4pufuShKmZbvDR z{ch`CVci3NGv6<=?mqkXi>CX>_2&Ip?)GF(`_AXAH^u&ONy_-QrdLP* zdcx12DSzTS6V`_I{Uv((FD|>cxX)V$cka1j?OpdQd;ik=q7s(B_xgf;(K;1aI;{9j zv+lOL9p2bZ?sohJwz~&Jl${=Bx#wQ{-2A;SAND?bjbm{23oos=g6nX@cA%c%8qRrP zx&AM3+w@r0Hsudj$AwLh5l#7+ICs`%f2|DT-yfAf6RoFM1_Um5(f8fU_Rl&vuj zT>Xc6e_C<`Ab=}sd>0;oSs}i{|C7&aKmY$G70DwFD`fT)oUKp>KVLkrru#0NcKB@d|I;blzjn?$-;Oe@c8HJ%zI}UFZK*Y&Z6}$X=|6$){HK zE!gMzU9$Fd4?Ll`a}M?FGS14&dHz)HKGyc{?&QDg{C}Y9{C}tO`x~Y0(H0x2Gwdy@ zkv_!UpVJ8cbtz}id|l`NYlaRdkLa&tzp#fsYU3{ggF~)U!HFfeR=&tm_-hs(R@bnU+$vFGS9C&!{moiO%5%H!0Tk10RW zJJu?LqhSy9?Swrbd#)KP<7EFF>RJcvfzk5&(RSU=l*9_e?oBBkFrHg-YV`Tr-`13}wr1iRoBWC(V_1kM5s;M&@IXz=xGhI}pTf?p%^ zM6nC9?x+27dEXnV<0RMxPgv;+$1aFpP5QaK*BRQMU>8*4Pxe84UF-rc=K+u!?ez=~ zsuvB7UGPI>``CjK+OCp)oc{>@S|v+g-MC$zJ;`uEgQ2ryy&5tw!%%9J=-F*!gvEs( zqTk56oAhznvIV<9&Phu@_T|_G?R@6P!UMS7y-p#4g8qBuCgC&b^W;VEnq!-8mYDfzzO(1?zP|q zuvf3<4xUY%fd18Y@htN;pM?{!g5NeyKt21jOq_uJ8YiHbcY+g88lf`Z?$$i9g7ff& z;%4ClRIv9dpWoY=t2E&!94DZr6HY(|WmF69j^G45#Jv@qfRs)+0SoX`!QL?m=Xwc; zea>vy$z;wQ6g+?}-~v3uy)!O=#N!J5?}j5Cl^Yl} z6X|EQTZ!fN2>t{YK<)#_v3IQ}XZ(>Nc{yI4bHz=wQfvIu1)h5ZkC z9OC#%!oG=01l&eC2^tg~P*jM^@c*6L-4Ga;S)BLz-uav7>D+tk);(2q&Z$$UPSrWZ z{0zPCAM@w$!MDOI-{;S7(DqIdfBr)D`^&f|dy{_%fBv5VoA&--{`?`vC8=xFpZ^5= zfPV;o{tqL#iu&`{09Q5g=ikixV8oyQRo;D*KmRV$|51PbOKHb9`SVN6t#9+^U(UN9 z(x1N_@MNCwuln=5`2PF+`FG$?Bjdk}iM9O?AlO=21GvvB!ls0eKmGljeY~6Py^}%eiv1|@-|>S_mwo?-y4!y6p$x{r;VITb z^mmc1|A-%a`qdFX_y_!!_*nRc&&NNV{iIsiCzs#{*GYIyd5+9SM%|8|#fcd8D*W{E zHIBrRN_2!1t(QIYnWJ5~Mr;6|yU*YG!KdR3;N@rQ0Mt$V;Pa{9H~GPzzy~7g2VXRT zZ@%)|e(+xIrCqsv7xja0Ag|Qxzu6Cd;$VCVCaQ+|Te|<~2mc*@@IKogp!a{hAAH>< zjr`#6=<{FW2j75ihS+Al&kz1+B;U9B!PiIL|B!z0dm}I_|4aSghq3qH_Ji-={eP_= zd^S4Mxqk3NNITaL9$ojeAN=gL5kL6Y3x6;__{*`;{3rb2JI6=-;CEkWHDUcqY?V&d zvcz9l#WN=--kA6jcclCfV|d|r_}~Ale(;RIZuNTqf7=hfvITI~_xVmg_{W<^{NNe) z{uw{`dKZ51GrOPVgZ@78+3-Kz8;gD@eRx~5v&Yl`dQD@Wb@5L;a%$OLY3ghYORmmhptB+tL%2X95b z{dfG}gAo|t<_GWi`c&8tzV}78AN&;TgxEyT>Hp{b;QxwlDRW8j+mbQoj30d1KA9Tv zlRT7jwl7l6G<4u#jO~jQ)J{GpF>BI3KZV^NU-;n{Sz^=M_}M9U8Nc-17g=i3#g>Mz zwD^OES_K-S>o2EmX%RbUE#GNQ)=-$Igx6ZMMr$n_>@|)z$RlySHFuz)41PZ*>m2r4 z%n#>lTYHpxW7id5+iGO#5AAFFq7CyLUt4f+0$yNVRW3HgjYq&Azw|{tEVa9b9ZO&= z_&Y|PDhKw(-)KuU<}fmUDR5OiR1oo}oPT<~DZIvYi2UKTtru2%!B=$7D0ZPy_eNwK!T{teWb>&oV&TtY{i_D5R{p@=Wa0e!?r45?_+o z2%{tLB!5A-pH+(uNMNoVj~{z7aU$>^PpduU_LX7t#@|tFj8fjDC~VeBug4zNiE`5@ zS8P*)=T7IeGb+|or3z*GWbN+fTTSd?GZmnX_Mfu<^b*L(#v{_xxK=7HPlHpe966I1pbc_ z51=x}s;N^}B{LhfC z$`IdcXTEbS zp6cS9NjDed-Go0^E*pR^ye0eANh*4_`l##g%=2~+`wpgv^I(sE*q5ZS1BUGF7k`T| zAiOJndTt4M+4(t>&MqhWhU@vPfRKt4d$BKe!u1n>^lvPN88H7^Hu4A(ysdI#g2 zayk7MO<#0Q`Wew9@@B|Qx8_eDdGqx*-Fo`NZ@HZ2s@Q+%<_7lG=Z}V!8 zvcF``7`!O=lbHFJ&D?!$hr=-k%ohgFUi7h^ccM%1x=*Hb-?VXI;MuiZ-@C1(An}{P zikks@^VFf9;opDMf9D^OzY%|(vv3r3*Xf~@m%4hF_g~KC@BX~_-(=$FHBt3a;xTrU z?e{fNeVg~q5&UktxA=d@@8;Bxe?Ma2M-2RkfgdsOBL;rNz>gUC5d%MB;71Jnh=KoM z4BTF_qiof#^;bN2srmVyOFlf*6aW9_d(=sen{TfVKM;HC!mr-D>fZUAU#z_MQMZ2X ztn}{#0ytusv;7zo;P2+EjT4G@pYi|iF^82knV5US_JrU|N@el*+U~Rc|Fduelzh=^ zV|ZSYFUrlnHJikcL#Z+j?u%X<=LzlZJS)DC!bG(k6 zfylaNICia<_u|JI;41#dSzKjLQM8WQe_1>NiJi~|9~7aj?4jT+V!!e#Yb$H$;*Uc- zhx2RtEo=*zxO~F$O*8Q`HsqiP##sB7g^35fGawIl@ zoY#9${9o`*o)hR=lBJrIM9;RDdK|$AxmNtUsmBM@XS}8=K4kxY5%k;7x0S@pr`J@> zk5h3E^ZY*b6aVKd@(paErqV|;yURZQCd56KYcn;~3tyyY!3<*P;vZdQ@7o_37kS@R zalDB5-o*NoDI?@?mB(tj@n>LXNz7|#?d7~_U2A?tjiWifIIi-wybH3AKDLF5i@mL5 z>q(UTeguZRm%54%VAfam_Z9ivJ2iE__%nrW@6@ZPN8rx+>}QzoRdIoAnc=_r3UT~sFTmp6B}d?RR~}7 zukm3Nxe~2Y)W7|$$oJpt-;R%oocAGRMtw|nN4`CTFP6k@m%Sqrr&|19#MkYZqX~Pr zHa#JJD(CvjAK%=>os~ZHjITWR1HZvnelca(G6sI;{l|l217Fa$GNlg)?|1Bqw^|F`ghqMm}&xsmS{<3A&~i|&u} zM*MQVgs;D?OstdgltKTj!VKHLUc2ahBim)R?f}a#QvT*?R&9DeHXj zdoT4o1BqczA|jTWBQ}*cYNDAr~Ci#Ti3dUwf}F%zvXuKkO=TETT{X;$lieMWWoOqj476#gk?A0uZ*e4NG@i`>XKK_453jB&ct zzNqA!?9;J5PRl+$BKuT1GHBh#N1X05e(7Ive$g#%+yA*sm^WW7(>+htA*WXS4*Kv* z-yUb@@!{Xxo;=a>&{sUndw%J!wYJ}<@!li#M~?k_{?BK8$|e4WoHs1^>hquz|9|@7 z9*?!ZSNz|dG4&~X?!M`aspww2#yHGoucX9-D3bb~YT7R=CNN$0pdJB_okY(RT_%$D zp*=4DeVrHw*ATJ};8)#x0T@r&u7{L;(9d8){RALJ5|Pw1K7 zd5%kw4zd)*Cue(9A7mhvWA+0b(t??tW)O&iPhWX6{8zTC6VEmkdqdt(~GEGhv%{L-J| zyrcNGHp~Uz0`sqo1>Xp>eQ@u`Vc%%>TB>!m^PTQWe(BF}E>2Q=8|H1_0@LvwFyC$j zGkq@dpI`b~&VlLh6H9m*-S8XRzR?%0=NX>(w%7+nvw?~1Tuz($$0WKjt%hOIk5pskOu*0I5t3At`Zxd ziup!OKhY7}Bct1vKL-804z=!D`kV)!9_be%yG6d7eWv|(TW{?{tN@7_aBi#ssn-PR zb+A#afV-G8NUVT2$sfh35usJ^bgY2*@`OklXU*BM0_56QPm@0FWnM0NZ7Or_W5s*14sJyGR|RHj?DKmmNf3?*^{&SXEPsE5*LUv$eSTL?dh`E_aBF> zk@7?y>Nhyup(&IxJlRsk$@aegyD7t#MdMrd^pnmFOzelKK|hsp8(E9?Nvkl(8#?upI9c}7P10M&YhuBLBfKYa!D*w4Q9!tbd^0J=#XWzGOy_6mJY<254VW$a9+ zoT#p-kApsAp-)7olyl^}@m}cDzfr!8W6%%yMRiI!N4^8^qp@uMr_Yg3|0Q*q*(K~h ze=U3*>SCRw??}7tIz^wdl z^`Ae_8TOxlyYv5A|M{mG3(obQUrgG${_}T}7ClFPb|+`}9Qm^DKbZggQ~xRd`F76m zIr6zF-|0WU@IUE4pU}juwm19t{pUTv;T-n!@O7Q1nl7DyZssKxfQ)mTS^04`^N`2y zb%xK8XWaXz{O8?HcYS=9vwYY8&VT-%v&Yl`I%;EI_p|)xTROw%$dBj}_MdMNdG639 z>^~oUrpyDhqkf??e2zTzZVdAv@BWkL$bW*r<@fo|zaPo-ulUcu8Tt0#@t@xjf$^>W z^A2p-=&U)rQ*8hFH?UVXC&!pIXuTekOny(yeo5xo^lw$2=t}>qI0KfEHzePxJ+gCmg_}}F# z{~q6cyRZD&@kM1`rV+z9I)@aWd6`Fs*JaMwpJWaxal~FGzdl&ja?ZpWK0EGlc>P7r zGyY~@{Il1o(!7y4%3XlDQdt2taDNmRg`b|m#XV9k&!OWHTwtp!ByPYS@fl_v%bp+e zF7yfSyI)}23zzeLEAJ)da~@S(4*OhUAJ41{?2_`K z4sB6SR(_6sXj0C4@1)M_Lk@@Cmcg`TFl~{z%Ti|tbru;)TX%)PgPi$Iyy(oL$>aO` zu%)pjD7AsS(5yc+>z_^(s1v_F7S@#66WYb!kh~mi4XhXTw7s&cM%NZ$%Wo zPCO%lUz3wu(ir}w-w6ND;n?oy)*twz+n<3SYy`iCcLHCB{~N>ad=~sIkv##=e=GdK zjo_Dk6MSMtG=^`S1%GPLb)B4HKHOO4aF_8* zAJEHE^LtrU#L^ysZgFOe*!aY6JDwX$`)u1MGRQA7=>&Uyq+h>F`=WNwPAYLSYblvx z_xv4WfY?0`e~-OU_$ItQb7rl9@yCvl5|)7u`|NjFXJ|n7eOb_C^_TQ@jdt5HKG>_0 z(kUFrM7vC7b|hV7U-t9#tk^R2iA$^((NAW@IHxAW1~b-IINZ~E-QO;0SZ^zlvJdKs zM`Do)Ul2d#VEQFTM2B9YYgS))|JwdecT)R{So=yM21wc7r+^dSn_8~O!TdsG%Hq}< zHds&jO7Ng!V*5FsC}b~?hc$$S|TI ztX;o9I@})RF-{EaZ5@OjBD2O{F%5W$cAKyX$4%o~ksDGcA9XrN9}Tx7(QZdFX&S#f zX-9~42YDBy-O|SN$h!jG*?PmtQ|lhqbt?fp8LZO?{AgSE6CY?zaw2OS9| zytnp|HqMc7L}JJkp315Y7HQUtq}{(l&I9P+59Vvu^E^K^D{yacyk=>~3NxPLd0Awf z(4R#ADTl9T_O|(Y`S{@8xtwudLu^tzo+&tfsF!91?+t(ZINyeNCvAO{d&kJTpjo@} zl~0!CN8373=-EWAlXgfwrvk5Ra^L<^--CYUTGaKr#~tqL;3LUX^H_x6w)eJ@!RLy} zg5!2k99usjO}d@2I~M*G{)beByj&Iuthf> z*~dC=r2Wywcf=D)ygym9qz%%>d}+s`MHy26O^&jBX^+sX1?`aQ7b4%uH;H_AHk?{J zj_;SdSU)(fSw&KRV1{M|DxUi6)Dm<-zt<6{ILJEHVe0VbZs_ae>C3v5)?LN1h6OKa zQ|8mx<4M<+McTf(k5z|0b5M_;!rr#i?R%fUG=?E^frld0Nw=I`-@D-D9 zJ&mhU@XH`&>yOU@+rwH!AM$jkexjo;Um7W^cVBBe`J`XR)2~lH+g5CZ>JBIvi>46<`lT_vKMds6=(I~xCi-G`rH9@X^r|z zA7Ks0rlH&m4Rz=y@5Z37$=MoZUz}Q3d9RYQNHRi~sD@dO=-5luspJkTuer zLA^`9Iv$u#J9C(9Q3Mwq`mrDB*eAD8 z$DhesE9Y-Om$+>7wL0R%zt0$0$J%94Q+0LiaW$PWz?K~vIH=`axIZP@{YlzT(<0dV z0?G=3@5c2%#kb44sj1CkRpyrq9qt+6OZcgfdt0`x?{EE_I)wS7z1^3DKTOh=o$gCv zdP>a4#(n8R>06EZQVp_N`qJ{dB5jQHrG9)z=Zcs9RW%>Fmi4oGktQ_Iyk!{=OMB>7 zjcFq7Imx(LMn4jsX-^wJo$GLyB4d|xwd+1O)q?IzW;v3k%tz)&WkLHWZ0NcK*sRAT zM(L*s{k}f6?uGQ;C0|0nOHZ8Y9mW0CpYtwJ^{3ra%g_~Pfcr1OpX@Vk+>eh6eERY8 zpPpLsWuza^a;Pb>qRYcOmrA@y;T=b~kIFbAWqifFR%qOha>^zT=r8ZH7%NgKr-5=B zsLvaJJJlyz*Zrb5u$NWZUj>Y4Uwx7L6_f9vKTF)Kvb{-7mGus`LrJe@@1F40VA_0Y zlke5K*>P5_2N~a4v%a38!a5ggjKY(uM|i#UM2=&1XtA0exHy1E)Z_3I^}$0KP^awTnsq&*!;dsa>Nk~U4!{uD|3vzlIsZZ%cXmPFE)s_9vU^s8a2 zLf*+f4$&h*5-WUIphEVCUr%4FtsXu-^z!iOY{2(t^F904{bkHkYo@_F>r;_$&+J`6 zdp`v)U(X0IuE(FAKg-xoyDeE;MThr?W+V46P_NcJ9cL8^-6jSqMnqtW{v8-FygCd0 zJ1}}=brw2!U}n;&EOgj$@oMTM=y`ib)`Xwd?D6My`c1YTu+Qx9deMJefmDsN?y_34 z51I4sI;n&svJas0s-&eW_Kv$F-C22^?pCSkl%dC~)D@qM>tFjxr~c#Eiz|Dtvu~k2 zy)U(PLpM$CXa3aM!M)wb=o>N)o?s5Jj$a0Kui@Rf`$a-I+UYfGp<@GcZrK}k@>hY1 z6W})OM(HcTy}o0Y60a`Fp9$WUAd4=6UfDN9`sob=tgA?0%zln%`PDi&ABbswq09}i|Ywd?V*re=nt16rPA6{;Kfo^`Lj-5`! zo+INjwj8NPb{2Uz544VwH(bX~y=1StUH^l;dw}x~&w|tOG@Jt9c)tq6@x4RdTQuu0 zr{Q$$CH7u{llB+h4c4vwXTkZ&X*k)y2{nY_)VxLB4i0PAX*fUWCGGlp#-CSo%d=%vRHbjCHpk2hO}mKQAGzdoUwk((Z|*iF_en?X!GyF=vW!UxQqz zacI_?@V3Y!`s2FL&4KAP1p)fL<{!`Z()Yde{Z7g`6*-YvwLikMNwKyr!Fau-33Sy+ z_jPG%$3$F8+L`%Qc)qFapvR; zURz(P#8)FLpsZhzzKrkd9Zmczyn#DoX`g(bg?*a8ck+2mK^#k+KGozUmv!cuYMffAoyUOCtGo`l_4>Ddngh%i2Zvw+HlK zYkRK>z8qgtu9vImRbqQQ3f=xHXVbwK8-PR1#)^-qkJ3-}6JG=ILkKxqm5VRJ&AgXb zm_gbmJ_uggBzUc2{(3j|kxGqz>Qr%+_-r&jFK-WHU={CtPIYw^@6x_L)mLE4z8Sf` z#J;r+KGicDI0rTL@tU}0*B#@XoUg~ZqSP~Nk9`;3i~1lWGX@LoDQj&O`_4Z3gu3D9 zv7NewE)G_3Ua=*765u(@8K^ic@A3cGf!xl4cD9cLHl*kt%^dOzZvN3TT@C^dp8wu6 zUG_0o=)``dHtr=4)w~D~Z;rL~&>!MVm**KL#3tpH^EQy5pE6Gx&ANuvOLY4p_~9gD zE1q)kqGO!Wla7SYvy~%|+UW)OROVTF(ykD5_u3}GjPgibqi4E2MjL;KGhJANvvDQ% zMycl_;IhxRUwEHgLb(sV3P#R!3GyzwUoqt9P`*!ZQ?d@*;+>=meWi~n#;E0t;{$1f zmp#MBlcexMIW-Um3Wn14;4dUk$UT+B7wS%Oy4rTYX9+%vc z(eu{d+2fMo4pg-2A4qv*>5_~VJ3kt3hX@A=l6{NL35A%E0} ziu|zc%kbCZJN5zc>2pU*|EG>temO_E%cQ*Z!?mVntd`)KdsC^Wn6r#ydETmGjYqK` zb9|Vw3faC@IgK5z`#q28F~;ZU_n$eM`Zp-;<0?0NrO?fg5zjH!ZEpFS>Q%{siYM4F zEB2b)Nx8siVy;3rS*2pl`7X-fxvSUw_DCf&Av;-rb|^Jvd1)zqBV zSH;O3MBYhyy-J|GrslTTxt>)s=Xmla^;y4<`mEENneREA{&jj2W6ljyhd5)EYGVx1 zniwD8tG8@CXY!z*$vk;(Lb%KYl)V+Ww^63q;y2Y3CQVpBZPMiRTU8tLK7Y8}b<|DX zuhSF2CF!auWyHF+&YbI+Fv-7ufokenr@QoeFs%FOf z_yaD>AeJ-ZuC)8ENcqK-pF+6;znFSlKk0hP&t0FQeRKJezAko-C*{|7d9I(-W&NXq zZ*Z{%Jg>r@S4>%g>vy3=F?2r+ZKd7F%*>;j)7YcM7;CgP#zM_yOwpPet@^8!7Cp2S z!;QZqKDfS*PGz21*9)&d3C)DIg2RdMuv`Vt(x%&amaDW?%38>?T%~;Z?lGR_D)~R4 z?``B+*4{2)AAs<>jKS|S-&vU5$>w?CZ+lLFT~}FTcF>)+-8_CoAVq9# z9S5hS)H4ro4@gfr;fV9M>^&&uFnt5HnzB1m#}@u0^q2SG`8%|(u9X+e@#G|JF)LK8 ztIwoq>ysR9&79mVW{yfS9=Lwm`gN|#>-J4ff$mAhN#%0oK+Dg-cMg2Kxi@?ryA_^` zf%Zve@wHo_LmOj1a{D%wXh@zDwEK|5@M9DExCXjQ-%4Pe!+{pfBo(24|G#;U9QhvFX`=m{($GYVXvD@hZlSL@oq+^&E~b|Uu)*J8cbP9#tFRx zKl<54_j!tw_L)gqA6LKYQ`cAMO0 zwr5JSP38&R;W|M(ru=e~IYmn}mM9l|WYBM#g0on=4a?DeN-3{EcNp(DVvL@8Q^Tz% z8b{%$J@m0PTC5R2LZx&ZtfjaI=qW9GJ5m-wZ~0!}9EL~g;fr_SgZCT`|1z6b&QANx zk?603SN>%4$sbpL$Xb7LhsJ!;=3n5GJyAa4On0puK3OgN0-vmgM^?i#z^}VWc6*KHs!Nl8P|Vhx}*HQ z(767$d3k<@cQdo9r?+*Px?g^{gsgGYwRPW-vz}O`)4J2MyoHa$gd;Z_fSV$US;NXjbGtp8I)``y}q~ ziQISKehK%~N$Va+iM=*0#mAW6Vq|*Ceq>jh4uewGG^@NWCVp^AJ?YNoLsCjfj~g&F zMRWsC*02=T&MmR~9VK6AMxesvdW35M`97Q-sMt!r6FfH?8T5$#@CL29d88yzkwdyt zy79NMOFW7(XQ5`8M-~SvL}tbUL(dI*ym^&oifUm--jhce@6V&oz)9v?A2O)q>V=+W zs+k$Ohq=<=m(3)j^12jFnV}`<7?jbYOQDBn!#%XhOu>&nM4ft4M)GBMdD2JkFx!s~ zdeZs+uH5~+*UYq`R)$vaV!j();Cf9nYRGSYN4Yg)tIUh??(+ClbMyMV9druw(hcJXbpwu3Lw-fM{jR>tGo??JSwsCWn43Q2;uNhVKk|^*)M89?NVS>TyU_E7 z-qy&ztijHsiPRV@FYi3^4yU25eW*9EUdQ)p}#A;0hhVcRA#SURS7_-oG!I<6VpODjL@13UL z-lXlxy*F}gXZ&=+Yh0Caog>x^T(-cYM(>0MF4NU@zQ-K0-JH~RP6qkRJFhPB4BuUm zKim;Z8Tf@LWp>D$?-@REyP2*!81s?myY;5P?`Z7To#>U#jS;G?v47|*=2v<9%!eHb zX3=E}p~G&onlA zPq^Q+f8u@{Z(8pvv#*u_Kj`La@R>rJeU!gnZ)T)0R;|$-=FAD(%r!&ym_F$4gYNHS z+z)=6nX9}0*7LBVg_$zsCG(@a(u^5nN<1xkKA!)QqXplA#4)>o*8%(`m=8jq7xI4V zd1>NHW+L3h50AO$cHDCdS09O zn)yp;D|Cw2;%$6CVdJ$u_Z|2y))-EE*Xgay4imPR>xS+&^~=EP=@z&V;J-^ueLjFES8@|(x=f>=(%ns&$J>G1f4KGZ%&$DmhKC>VE zDR^dXY2*2G9&Z zo{i910iy$YTw6o>j^H;+XW{AJQqEe{itpRmcwPhUGs(*_>*m9GubM@dgWJ)s*|bep z@#fmW+bJ{tG;hv<)~g1;W`6p@!i>`7$09V=`Mv}4KsT4rhUvf)8Vlb(KlVOPKhpM% z-Dj@TTbM$3&L}o&E??rg4;=eOA3*nN$+wBTZ*MFayp6iGF$UzlOu32Xp>9h&#e)yn zG(Rx?L7T>jL!Qb%;7CN@(`*_SQ?}6fs|iay2PPgc+eC1F0A3S(PXnhyU*YEy&^Lkl z@Zw~am|MqkJIr zU85zMeW<(iW#Qp;bYP+Ng}U49sW-Rj-E-&`>e9lvazK%1&6tg5o4nUa*UjW^7W1Vz zo9^j@Up0Hy&&l9>b87q_;O98wQg{~p8N#<+iTv-WYv!l9ukfywS=03%kBm9O=Qr;u;T)TI z^X2XT+#u;UODv_IU<`;}{GoaHw(D%UD1EjSAukFEW8=JP$2R{Y=?Yhe>&<#`c z@`9n8%vJ+}o>I||$5c`uWxk!e2RwVstZs`vYH+np-|B~#Wc;bmZ#|2zel)+@;X$`< zWjr@_zj4&XlqpK9wWig+@|sK;3NrIUjUtxhHW&j z9QY7;e$%Xg57!{)JDm4`=lR^7=EKY-u5%=refwIT2ORCpFGk*zak4;F+>x=^bKM`F z&F|=FXFRNX{O=$;?;E$z#l35t-ogLo#78_GC%$7Q(v}zXjz$~CR^eMWW5YYhozMEb zDtzveG5QaEUo~gw9sNDQeY?IUUPj+Kj;Y_$>-{+Cz?xg zcY`yxd2IP38KdF<1EU`CEE@lK{xRK68FA2}z5la5_jrE6Jfq!&MV@05UNLVUyV$dc z_pdSbl_J-f*P3o8l>HD&|7Tg|1uD{XsZqMh`A$8au^G%1_Uy2ME zHLlwAGJWAFGLtmdQO1aAxjVpVOLNbl-(_6N_?D2d$aB$_-{7yFHV6_rdL|V!^zJGCX=q|KtV#H@_Uc!DP%T z82gS(>hjAx@=w@lwi&xf@*9h>_Y{Ehg_;u`z+)VTHU-dT;gGk@snF&)cs>?J@2ZmxV0sN#7z3+Qgf^bGL)f=H>;h?#uXs=gg}Ycs`8(bN)iT zIc3B_pSJ!bc?&%YC+s%kbGMnzN$+9PBFRW$++L`;jc1?w3b|izaRXU$N%yvAbQobNMf~Jm#2J!DWKq)Z)xI^tkRrx0}`2dlJca3wqr4>GLz5 zczk_+EILFix?&u9TkzHXYh8GJQ0?;5+q#XHxBm)+x8IOb(=8Sh_+EIQg{o~M4uHuD*5d;7`P68-P- ztMza^oHs#bNMF5oG=vH zaQ$fHJkNys!i>irS&{!3_Aar%Rp-w2JeIfBymI13a{_5kGDc3Jy)uSxMei@^vyiUA_pKykeI0S?Dn}xA{z$Ii4nr zb5nq|mTzAgIoGpg&+LpLm#xZQg>3}8sPRnh9M7t}E#`%N?(#GtZN5#5R@hnEW6z8= zy7$=)ZCtKm#@^=KA00i}fi7n~P^xy>k2KqkG3P54cjbfadhk ziB-_lX>MlBTg>&Tk#ju7znhm)d}n!nF}6Rk2i~1q>?uaa8v#vhdo1|809s9CE>_QY ziY?I?)@KLzv94znHoo3Fz&o;U^jzj)h7mJ%tE9WOQvP}9;`Qj_(9(P#dgO3zHnGyo z8N82g9OjfRvpqROHkm!SziVW%$8qUB8II4^=6BW{=n_qhDY>&fouOZ|KJz`Bl*1Tm z)1nnRL_2J3F-8n@*s7Yk($T$kGS9h3IpBZ8cyja{aE?CFrO5N{m@O{SU8__p|4`;S zTbb)HpM>VfPTKYXve85atQfM<9LaU^$l0FcX^&*+AFR$#XFi!uIalTudD8PXnjiF@ z=UKtLw5v^zmZDpr(_l;Oy&d|*xO|M+PjG*e(*5Z5#&1U#d!#R2z#Mh+n9VNIUFdcG zCg|*|(AmXCzJ0>m&{Q)Ehg6xZxDFp#IEy7a@{m5tA9k=n^#5HB~Y|p&j+rYid$uz(8r)FJ(p4nqIxp;Qv zsOJ7d1Lk>(M{hGnj4r|k-_(43!dv85rkAntuUyX?S?DQy{lSc^CmzoaF{vRgpV5qY zdnmWke7yG@PZnu);Bca&DfAMW$Xv-`tn9s&d#CF{rTi1PUomDQ{Lswc*;RMmRVnGJ zg?}>qj$O*!Dc8ZTm?E2nC!#bG`b>sDO!#Ba9~NhfMPCyeL*2-yBm5C#Opfr!UA>Dv zgDAHMn`Sz=ka=egbSmn-h36R8!^2)Shj2fB!kggSB|5(O1ian?e({ek^ei7!<%-gT zGY;7!c}vmr--5<1{LtMT3~$V*-ZkiCtlJp7;D;+5hH)db){y7(8H;0iAA&zPeTeT| zMmcnnxqBIOQ1lhQ!)3&9FL}07$M(o&=?^SpnLFe<_#IQ5@H+KYW;gopR{F0KzJY$` z^$UKN5gc4;-Zk&}{OcXf;7tY1VvK-_^{dgFT!WAa(BI#MvG)3jJIr6fR{}c#JrsDk z&fy`yGD6ToL6_@>y=^w(K9qL=x;TwN=RL$41-uL|-8uM8vo3yVM(0-R@*f?5oEk0P zv=iPoyE2}xgx>8KpT&-zK5nCnd)J5bPh^8%+HV^`{YGy!QyGKnRgAfnIgQMX+cBnX z9knpyy#Z_U=i1|0Q)80IpfNjK*TYM(;OTY7x4DdOPr(l{yBN>5 zPk$nR61qezW62%x`CZ5be>3=VQr>p+8hBz79lv9-ciN_WQXub z3)i}#Z<@j*N$9}P$aoU_%7@UTYwoM?Y#Z!5`_K!TnDZEG>#=kF0{wT@BSjg=T{EwK zdHyQa8sQluX53a6FkD6O05tPIC1d@BEoK{da0_tf+H^={F4Far$PbQNn6cO^(1pw!na{34M>eSo zws~{@oeMJN|L*bp!?rG}8=pesc;*@&c;qlT>2P?+Z_}X-Ye*U}T*d-u09{;nK*wQy zwwa0W2lgmq9b^4_;H$~FE%MGKeQXu@jrNrf_*VK#x1qbtt0(R;d+IT^J}A1N+{b)Y znh|s9)A{d#3-E30f$vS&YCa|~ZCWHShf&a?i7^B^KuhQt%xWE<#sx58Z4!Ke#KS%d{8s53z10 z>$1#I%~Eu*LlZWexzI_**E;AYYm34w(3U>2k>@6^*Ok*ho_nD`b}82GoLpV>za+ol zRBVld1{8U6MoWH?Re_45jAhArZ<|N4ho)om`T!e;Ipk&Y9`rBKgOXocoRR+F3;DJ7 z80RpqL3Y(L#yySPka2H2Itu#-nCrIVdyyO4cy=(Ke${LWU8FzNW831eTl$N~sAgVW zFm#Xk9(o~ZuEWUE*fHC{XQE&B9@Nvmd$6ZWWFAnjTAEiO=kCC6F!70b8IQkS5t%E* z8pk7Zg_~H9+yhm7)tOYl$x0}Bi z`i^-V-Tw{l=P-|5g-!20Y#i)OFo$B_m;eu4qni4K*7u>i9U8mY#WVdW(f=Cqa{_!J z@{9PwwhmV8aAL1%hMY_=9v&vTsMB!v*~D`bR{}cg?B3j?N6-(APgRUR2fI)aGKhOu zU%r86{+sEyN5^bpzUweovK}Hfw1)@3ZT^PqX85ZPo5yTy9gCs6*nV=b^(;odjiPNb zZiy}|Hnq=~3*cX9tU&*SuCC!+<-ILixn9MbY9@A^SakIjLQBRWCwgcxdMJ9oISCoQ z37dwDHJ!0%lsX*9BB!xQdHgw}x4E_{j|-jLe>XO+QpSdQ=B~HWuFk4Gb!NR7x|bqb z>iUG`_)I%!hD(g7m$xKFTDsm1Uzp16&u9ej+W#r z_6%h$x|aEA`skNU(QkzB@6nt1_mJ=Cm}=Kzy@{(M^5!V>w*A;{?nX{5#uoKg;2pL5 zjA7d&#J+Pg{T}$P7trGmA*1EJ(EkATn0j=wQtVg6STK0+LYDh)hF@=nzoWXg=-Cso zP1IwXsAqi~JT>8jjdrV?a z46$eeW|^KJG3VQZ27F3eZK zA@d*CbIR$jzISV`vUGf|b|^aw7B5+ZZcz zn2(;%{CpGrajxcq2jj7G(J!Gzw>}$rZt8j(+HC}X=c6x5-@K3UleI772FA@*W4E|? zhGuR2Ly^r}kLU(voait$`=QbIu(+$GGlB zPOWARJ_@-hc%8$1{z7!2In3$v=ts9Ahl`P8Q5y-*F0qp^Uin485_{Y`^plHd(;DcN zM}M0`f9s;NKLncJ%-ANn`DWxiG;w7@8<|%+nXA_`-*YlwKLQSCkKH8iTrZ(RBk%kZ z(GTm<4?m@Upj(?yLfc&EbtQEZn)ICT8f#oGv**z5=KOBk&Bf3#7aI0Nr;u^4b03*Q zitO!(Y~RX!&FS9?uL`Y1Cmw|y)|pq5?qVGBNBO>|$VkO_&m2C6IlS0%kQ2tm=*cx* ztIXldt*>)v=5CSa=)>KaXUiP_J#Z-UBpDgHgZo18hV9Aljou>oGM<8_bHLpZ=)s)M zADtWJfeV=%{S5qfM{g0D#8T$tq$hz_<~+tK=FlzBZ3JK4(Sc8*XZjdB(;S+S$J}}c zJlS;M1K{g*vpaL{dg?0nAJH3A=-;N+)=Xhs2{12T1&vaqk1_t8&)hGdH2?Y7Jk;pT zuAeE5vYRkZYUZE8+(%Ic`3zaNm;AD~fW6l2Es*)4W=b4Muajri>vi}rw3v1GSXJRf zXA$3eS-*BRR~53h>4Sy}dY=A{{a_(k16NH=Z#?&`f7|oQC4q`=Nvgs@n>u$;6)&7P zl~{F9$6OiQ+xg_+2JtC8=5UltybRfkT*zLIfy4&5i!1v=*_W$v=7U}?aRX*4)i7J> zyJkgV2PEUa?;u@b2l!&~u~&|gH1f+HFxe9#`?nGz!&+dCm{Plg#Fii2+le&oC0zNbS4|AoSYtM~K!Jf`t64P*?Qb*or4|UPCx;u+s zdiQ4d^SCSxpYcx)hxfcT-tQ`V+@!9j{oQTfC9S;oS0k#!`(25d3JwNd5covV7V%vh z)G8eJqpprPD318@E&~D$h2Szs{12s_{8Ok?prO+C$M=-)WACc$cXcqS&-~k|b@A+F z!jI+SN81q}l6vCLdqn(kHr~7VA*t6bM~P))`x3|7zA$I}@t`nXU9lG%f2;-tZ0gOv??m=t$Csa2p)3dO zrwx6j9HFmosP6WSFsz?YR**e`JIOD5r>f;Ue0jHV{d&fVM!s*FKMfy>=-wp!KK+UC zhxk&75Bx~*v|d+zYkx(26v{8=UA7)r%pPmMoUf9Ok3#LQRE3)9SXx)0S-F$Echt?` zN+5>#X_&d}3C@m5s}`8}z+Ca~!F8X8TP$#0=|2$Mq|1;27tBcb6SeR^49Fk{qv>?0qhhy56@(5Gj04Q5;=X+MvojnZwurIXNH zsVDM>$-8SJ?|!9Er+;KfdK&5M_w|Q%Ij!0j_(q&^TA{a`mdNHecs^C zctc6$OYno&;^khqO6C3no!E_@a$hEA5itIk@(uo2wT?vF7f?H2XFq={YcT1xj)bs( zpr5pvt*n7|S{pm9DuuK|t*oDtmd!o=)9)L>83e%WLt1EA6Dy7T+bNU!pXE>3Fl8`j zP`qRBFHNf(cZa+$XsImmvGd_e`D<{dx5wwQld{Ht(h1*oPkD3tydv!+zW4>YDtVH= zUNeZX`h}6zd*2QFj|on8Aj@mIL~!zUbE`FV`7?RzhLQKHTdGyS;olm`A3~lMc8=tI zpoQ&c7DIl{W=O2LBG8ca)g9F*E=^BWUd>;@H?}YT+t*e<$Gynq5PKSZY`_{V8-hYel=7%4`Z$f+cat^)_$nLcwSG8rxP@yL>wT?VR zk7(|!j*OooQ+wdsnjGAlTu)u#DZzE&PoTqy){K7%{sZLy4Bn{eK-#Syn-;Z>HvU&h z55lj43-S3WBVP1z(#5Ys(i2G+Ur=9rzAKKmzuU|=YuU??#d|03@iFyNKfl%vd{M6N zwRr2#(>%#q zLb}dZ@*2Y)OdBMH=>09#{_v?UV^EBU7dHCk3w$=i^3CAHz@K1$TMMuD24O)a@ z7q*tVwzq=hlQBrjtFgjk-VD-;xX+3^Lmw?Axc7O=v&Y@wGoOUmCyIR8`xo(df#1;j z+@V(FFK$n4{0?@E@86UETGEns{ltz(Aoao5pK<$%y*~Vzgs+0cO_%=sC-RCfjf{W1 z|KxJ`PW+u%7tN&1)}e8#LVV&5Ay2`#jHR}pi@+MkSnS2et_?nHZy37!1o}?uiJw@Z zalwi*`qU|19ZAOTs|H^v8HXz=s}j9M?jPh{F;<@-pTw8i*GzY>^LMoUsO~+dPHiJ~ zdIBGWqWQWzJC^nayI8)#9g)G$?7a}YZEUK$%lO%J5H&;jNqUr z^%lC6Me1JD1RPR#-|mjq1?UKYShY4Sn)Y@_>parD^e5@ zpYgTLRq1Q+`7FKfB-zHeo@{lJU_U%AGnb=Nk6-caz%#MoYKPba*@x*$NPM{SU>rk$Yqs@9vaaelICdx7G`$Nvhj{mU##oWVHJ|WqWHNCS0=67)j7J%}zC1tBK%K1_ zN8r~@$na-1EB;tGrb=auT6cT8y85T+4W9y2;%{El`9Ql9)a@;)>kP(j^nf~IBZ;3i z0b`9)A-JL2ky>oTDba)3|%Rr8x zOF8`SF4nCH+~=To)~!?(zM1WpuAAh$*1(T$e!S%65`2c@8-eMgF6g1~Vk4$cox=cQ9|T)L>!|FyE1Q6Gg4n^kjTw ziu@{d3%HOutIS`glfPzVT0>~oP}{e@q>g!(u6oPZ?Rz_-TP!@!+D)A{($95bhzOsj zy%m-*J{6WRB8N`AQ#vL2Qj?i~-rN3;ikI-QAXVYbd*xm>#v%HBH7b=h~&60?9|_e|ReM(}51_^L{Pt zcw(VlfeIOuBv#)>a1qYCV(D7Opt8wXcN7vQQ{o3?NO_$#;#uIo@1=g^uX+vK@9u6L zqKr!7Qf!nM65uVkx6>U(=#&zh<1l`|HO!XR`!;A+kNDYE4=WKGgMza=rjWKPfxJ}t!OI7pmsub0>>lv!5W=?;BB z;NEdcn|hb%r!P}C>;iJ;NTI}yf^M0VDYPwv*6Uo%Rbr_R?GzlXpuasty<~n~hwKW+ zybA99mGB$yq+U6+S@h>pzLhv4RlB7RBFB?1vaTkd)L-TwEAjOf`6VeAF_PB)%>3*P((U=#6;A6;mn!`g zF@Hk83eU%;@_Z_X`Pszq^Nl>q+-$eN>J)~R4Lw4gnIA$M%}Xp7V!C((#C9R3i^|gc zRZ;jiJFW42pZ%TjUlNZDN5<4Rn8&Tupc6498RMS;hA#1Rno>?{>Nip3D>|p4Pp@69 zS?wa@zdeVWh|C(HPfbCFW^ah}OX9Y^hwc)c!-Zqs{QcbN%Yq@qzAe?N6p15|zue7OA2@Zs?D?LH~7hqh5R{@;l* zw-Fu_y+`0le-&7p7{dfs2WTrgqQDfH%)y&WiYCuI9e3JPN~EtP8JhJZdBoS%wz(otvZ$Nghr!DZso!%Eyxef1RYqRo7$k=3=<~>!Uqtc- z(W$f7(GKrL)*jw#a!*WKsn=q@5uQ3s{Gm0x`+CNzMz*1-A3e6LOVD#d7umdf0{evU zt>_%FwA@@n2Un7VKTw5`Q(W zSyQH+%)-7Y*P7XywW4*PA;7cnYdZZsDWG6@LYq~0wXT9VuUY6bf={to zOa!Ol*n_&Yku(=|zt2$p-sq~kQyt+L>k?a8Iog)Q;}^J$?*kq9{?Ukz{rbhWj^_sc zGS2MDN+gb*3q7N~%6u1_{~^jKVr+2$qc~Q>7T)AY&QIu*`GM4|X<-?jeJ3~yATxf$ zbC$%@BFG zoyyYvcQS8AW|U_gC%y=BWCP<-8gUUseuy5C{Q!M3(9?RFd7SWq@Nqmin;wBZjXA&I zOYGS*&f!Ou#hG50;zP!ilQ;{p# z%xRya?AS-p{w&oagmLohDbC2+@!)Io5GZeZuDg?Il#zFN-ME7kQ9 zp?lx2TJ@E9MW26}*jHk9KKEs(z7pr@Gx`qaS|@&nJpCirQ;yiv`c_ze+VS&k8M>dj z|NeZxh3v}^d25eZ$kJNooZ)ya3FS{fS6K%m7E6N{UurLNdRdp#h^w%USPGv}#*!~J z_ig+_R}F1g&b(b4>9g}l+$@nP4}PJ!ozy?|5Hn@qxVoo(7{?8 z?b9e@pz<8a_As}_U%QivKcaEput~SV^1N;Nabg{QPTsdpXzm#~ovq;Qv;!HYiu=g8 zYR}cgW+w0y@|<{JQ=TCH2>foB_hnO6`uS&k^GOQ*FroZwY!hC$*soc8<0p2$WG7=V z_0XVUGJR|u^;iz=C69J1bQit&?VeT%-xe0w<3zdd8R9sTK9@Anv%|Vq!r$4gZQaWe zYwKRVfU=$fhYn&K=)^l1@72p4v4PY<0Y|ysoM&XH!_9M$=XjpWcuwNElIIRQhxBr( zXEyb8c!AL+0;78b#sv`=Jt8oAM_}}iz!(sP5q~5N9=F?fW2AkHF0n>Q`)-J|uei4* zW3-~q^SRdG|1Ry_s0XGWVh%T)yjAu+G^DQt=pz!R(Z13T>?{4rzS2JgpE8z=Z>5(E zf!6Qd%zV$$WO9glj7E+K%+a%6SW3T&3wo60b*Peg&~77hwjgUERg5i?mLPp7@ye7W zM^{%R?~2ho#8$K)Jw;*@=+e))CUce8sOelqM;*^q=4i}M;zn}?pA{PGir{lf4Rr^X z70`W3A@>UZfB2vxG%9wr(kii=9{VJ8g=!GH0NNMEL5yeKi>(KU6SWCl zqZYpPQO-{EN5QSc%+H+#+|E46Fa3wInPjzlp)_%jg6FZLw~D=Z_{|T*FXcQ_SmuiFPdBW zYvtV|=yPgHXW?)9Fki(fvBzO^yHMhaUKL}XYmq)$b9?!vAN#2#_CjACu{`Lz@;&&D ztGv5;g}|!=MzVYl9kP^Oviz~;6$O)$`;Wgoc9iZ^spH4GN9nO#f0HyyZ_f3RtZKBN z)bTG)vSVM4f9IBJJ&D-%lD`XA$={u;ly1#>+F#^XSv8b^z`xu)=>iRlo#B+0*-9E%2$r5((jM*EaTCBf{QHMgx+9S`E%DR~{B#y;#hJjq|s?Pt{jS72sh6DVEL%hoME zAdlEt%Q(AGbd5S;?Q0~yJYR$*PM2rT{Z7VGx2$OrFc$aizd$NcT|-hk!X!*%RQdOG)Be$l-FReghd zZ-F+!ZIltX$l3rr`L+`=@MJzQ*d6#H3mn?|<52X+TQ9RZ0Y}G)Dm3IwThlnJc`R@O zTYyt`p|$2a;P?iI;j{qG#!bpyHs}nT<-i#sys`;6>OyPjcfhGh3&Z)6b&jGc<<8V<9`@P1TzqF{Q&Cl`R8{K=YufO1ywar^E zx7S*q1cu1=t79VP_jI726=;_9hsJ!A{al!jmXTlQKGY}DKIB;T?BL#a4g!B1HgV?u zo#@Av@J&cZADJZePbio63cR4bW_Ik8ap*v4j0;})woJbyHS1Z;oiIA4p-eAGCFXY@ z()YeVS+?A8awY48&EyTzrEgYJW>l^$N8bE@%zX(smD|_&K}m*^%#{vBrc6;J znddQ6G~nRim=4Y{RWeix85<;uP#GH(kus%3Qif7UNQNXim5}sb`y6h=?RS6o-tYUK z=YM+izV9B_UTf_&?ft$ReUDjCmJZGbcux_`*-DM6kWd@Q|G5IV$p$$9&uBg)S>FbD zVxWVVHZP_b!6S&iw+LnFF4M;93}rJfVc4q=hP5D`P?G}O!FaQvUpQBY#{ukgL4dz* z0en*%zDMo=Hk1?k9yz3;bVtzVRp19%z?hMJjc|?N?t%4<#2;W+n?}CI@;r5@b8oIK z^gQ2IFH0B)JLsuVXanS83)*9YaE zl}()Nron*Wp1gr@4gRux*hR>5kVzbeydP;^eSwAtA%NQv?$t!T)4VqbzFCaM0J{A6 zc{=t9-6Jhl!oY6^!imKds)-YH8I<;H;1f6p8(?S&-{TOp9Q=doCo2KK!bj; zlaW4sm5eEK3JOg^G{I&eIHePt;2XdN3u!!w_MWVfoQu8u!k6dH(O{ecUseO|v4Y=W z6m$=3Q3M!2fSr{BZDHUX`CjOg-kCP1e&uoXbXr>j&{p4B411Np_qKYWEn#S@FALV1 zKESyP0PEFX@TGo+R{trgp9b|;ey=a+3H}(=?^$G!I|A!ph!3#6--=0dV-(_5n^I2& z9#xa3&OK^=&o@|)#N>sa2I~OLS=f(I32oEEGvY_Oz2GbJ0lt7IX91Q^@EvkQ?=kS- zP<^$bZ^b3x_b2m$tu7>;_<0&$$cB6+_=DJ)`3;a~uVFkiI-nR4cisUQ7aH3X*p45Z zmWoXRZ9LGoo6+7mh)Ezg&H@Z1u=zrTz;^}T%o+F*_1iqxZ_miL>uXRNT3dr}tvf&* z*x&_>{WFHPw)O?mM8nLrQQEh;GzL2AH;Yj$7ttHhsmBTSyFuM=Ec8kRAivO(Xp#1LLcz`sdG>d?Uh9MLVHYT{vrB4 zD11xw743X$QE1D7Y4U~x#0VWA_Tj({Ha`pI`a}#JdmH=}!(UajQCT>w)vC_fkeLQQ z+mLDSz0(W>nhhxw4KOkTUu8fn5$GOHf|vsIf!Y8_msLfxmPJ5YXx-ik;wTV*5I+y? zsbUt4+(+^jY|?Y=bTJxWTSjEEmSw?SE(eH%VZp9+*u`#v1-sG#VvJa@D;?4tTCreP zI^1$=g}t;&4qZO2PH3+U*p{$|7S2q9cc&fIl-7Xl$N+7u0b7#++Q7j6oHbx?V!_r_ z1v^s}>`GOzC&A89Lb709m(B0z%rILU!wCM{BJkhpu#55-!G9Z2W6WCw{#%^`JcIu> z5C+fSztv^HGx%>9@ZAQg81t%nkiEh%q6TX!;I|~+1DZI%xN!j6GMHz`UkL{p{No;3 z>fHL}+;_)NkZ+-YS9I>XJUw-ftQg=G_6<yuR8L+gb?fRi{_mq56oTlBpQ ztUD$nzL_tBVXf)_9YeJTBA|SzJ6hY|%4>peD@u`qg=GmLZhjBpR%K&7TL z!~K%E`z3JCF?Y`a_uO;$+;9(gqn77~dx5!o0ZiHV@50`p+8#p82&Z%BRzX~uh67qW zAH|l{eO6f@A7K*s5BUffEVPB8lQ;l#FkFQCed%T4BA7CC?>M`=^`twb!G4A?#sy*% zjF{^e%E29l?guxi#y?2%{sQbI}RSfn|QU7AVt7z{FdPaO1 z4rc^XE$YKp_^2@0$gOwsl_*HCGf32P`n?(zN; z?I2!@Xa_U{-A$K2N3$tG;ANoM6wqucSp&}M`DhUX^vVT~tSn<8MxL8JtOdoVo@!tp z^k`sXLh0emJ;3!mj%FY}iOOQ&eF<1CDEk?owN%(>bmh()hqCEV2HqWOhVOjEEN55_ zbo@@^b+A?&I!iZ4OWi+cDG2EfeZfg2el;pRKft%9=le%{s5+tDW6&;&TcG-4ur`MF zY9U&nwXON@m;V&&L-SgVE)o0qmw8=9N1N9$?)iEBdKS%V+CBipi)fz$2F>dw-^+AC znJ}TB=XID1&=T;9=6IMRn&X^#@1SnjQ?T=@AYRG>`#b=bt9>Az3byX*FgP~_Vu-)a zOYkp!aWE#Nlfw4kCP~Of1-j9L+;)sutw<01FCCN6)veVr6I~rz9gEP_rq!_qUCmk@ zThLXn)v<52q64hct70+Z=YVICEJeDF9@-Ay<2Z@IqJ0pU#5K@1L)dD?HPALg0=l}j zGGw5uLo34-bhT+^s6tn>R))vus@KZUvs#hvJ#`NNwe2vpwg&Cs95G6C&<@T8UENwS z&<4&Obd5Lcv4H;nSH}hW?$Nl=`Cb33?efyvO+oDnrnIcyw;(q>u!7Rt*hLXkAEnU2 z`y;r)<1OkbS19KmKcVz`ex}eZfV73_E#WPd6m{=zN_FfYg^md`CDe9 zRZ?&YofO>rR}?y4s4IQ2rJ9&Y5zKl{q1!h?p<9WWqGPIRp>xAbp*cX;d5jA0IczEA zTz)GB7dSRT-OZcM;6m{Xd6m^TYRCs$cQ-QA`O`?h-C_$mYyDp}sy0?Ntm->Rz zd%lkbuS<9f-DD+Ks)Aos|Rg6}1_T@|e^;gy0$cp;B}XCkEz^ z5ZGI2?g_!Z1vK}B_AyzYxrc+fhrYv4tqbRRQp-bJ_OHrA-{a@NCjV6~{G&F)Xlv=HZRo%_5oiAY(Sx1U>Cr-t!lvIzq5h) z(fH@=C!{L}Azp&`^hX@jH7pq4zuA$D%bx7z5S5g}T2h|DWvJ@4hkZ>~ZuiWDocO zHOnFX3xD(Hx6;ARz{U=$&n1rNJMVL?h8P_O{QY~ni5p!C`p>8kK%Yb(PUO{}cj}5dKq-)eNBz}fGWJ6cMnW$F)emH06 zYA+feD;;|VD~#_Wv@yeySWOOVIS%>DA)Vy70OGRC^Rj;^ufYQALo86FO)w5 z`Dks*0sP}Ch>O00*q#%d%|qI!cFY3&lrY%qg3gCghcN&>Vb2(PKO(0^X%1d2oPUJk zDJZQ6(lQ_h(F5_Y53sfiW2c@Ei`GQYS_O4n;8UUX5LCVz%7Z;;c=rU}2f%P5 z8#)kR!oZwH?;)V~79gMc-a-x7r?h=SJb6h_CIjB_q{edQ+C%R$Q2W0F@g0DHE=Yb7 zy+exnL-ay@qW6LjeNKb!xeoijV875f?gO0d0PvD)&^}Ghyucz%VsH{BF$no(z?UGS zHtlgldHi{w(0bZ8)s3heqQ3*x&xSF9T-;5)=gkX;^c~cDI1_P6nE7_N2ib;VdgfH$ z3+f6wgqg#-V6rHT8ObD^n}edGyMrRU)9Zl)+M@A;ovk3m2z%c?e3J*7BqjsQf*}wC zgmZ(?Se)l*0B2fnLVHG0tP{m$P#$`J3HT`w`|;a#^lS@dk3)Tg-&z>M>MF3~VVwxA z?^mJcG>Cn}8WGyNa|=DQV|;P&4Cjf*kYVgE>A6OR0InZ>D%v|V;wu&Eb7;*u#ckU5#aU^6MW;$H3gFRAG36?kl%4JOTTg zIyOiT{v|zlu6)@q>1A{2Q@^B7QPUX}scox0R;FHimad*;T&bD6fKwxvo>e^;vp_AE z0fT89UZg%L#738kU5Lr;VOUIs`FCZ32EQ$f>7li+Hg~mja+Nc~6ENx)7TV^P*qy?- z-B@9qsIarxX1FqAEXaNYZ&$3K3RYA!fJku0ii=@o#4yrsL@&IwhaWBo?}abhd{CV_Xoy%il|#d-1+=2I*Pd+=CM9fBW;Ov@Mh zCCdWuMD%u^&-mp-7YH z<%9FXL&A1HoR1IQ54secL)Ut&tQd9+&_gCj=a-+Akr8%1R@6%0#L`4e3r`{wym4d# z(VGUR*gtOK$5D!5^oWiYWSk%Qe`UPDbI=|dEA0XU)b$7U`jyeNaAe#(pUjV05e7*D z+7n%{qS`w8_Ijoo_PSR3TK1NyT^g&R&*lN|J?^uNUvz(@Xm1ak0?+^mNq zx#@e8$T)8&#MP*M>EEOwUU9?8DQx^d?i_mfP4|#W17L%q{Qofk(8F&4fK(a)3bJzl z#{fVNzX1SJ0f4_n<==>_?=#ZE3Fi$@ivNB-&QHSsIV}359e6(?t-bH?SQ5POemZ`5 zU&P}we{aYj)_&w^cvSaua-+6{rsgltfXFT0{+^y#5>+W|#jwpilcDRabN8+=i??D# ze=i#Uz2YzfHAF@*&EM#Ilkt8akpU=C9ipEX?oV)EV|u{{zFaKV3=u& z+8)V0ZF6%|bF3%`WwJjBtAZ8w6Jy2*ii(O-<-e%8wxyN1iM@rTx}}wc*jzC&&>jC) zfrHEjwM-?#{2gGQD!)m8!ajy341q{4I43+Rg!@gQzcm^DllTQlkWHcK7wkhOniKt@ zFRBFiO*()Mpl(+;H_IfyA^H3G5dFw_XDkBU7)SCz zI#xIcv<qT_-_r#N!F=RL3I?&TtPlC4xGLxJM$RNOblc`PopdPS< zIaNUtWd3_o^Dm{5CebJOXX8NK+1U?IB4I_a8^o|Ge_H_jrWbu8;16aOOgIw3Nt*fy zg20;KM+Ov{k$p7%94&pkz(n!Fc{^h*@bKSyEaKZBEJlj@!@|t_1D;KD@cgN!Io=6R z2*B&%an4{wK@*l{#&SR#Gh^UcdvgmjEZ)zLh;oF3nE%}ITy<(iA1^se0_itUL6RJz zvp129^@EOru`bY}6AgAC1vMYI0ZT%|aHQFDWFip@Y~kq%1-9b|WNIC1NkFj=(VK+F zI)hn)MPd&NY$t`a^b1DhClj%tCYkby9l>vY`-f_GqNo3 zo?zYoP~75=iDIT{j#|~Ewg&?LG&-WLbd*3 zSH>Ic{|yG`s{O6bth~R=Y)7282bKTjgZ>MRf96&sbf|8PzYk6Jm}}ZwSZQi%TUfxv z_)Vt1iN2-2x{>}4ZQ8{7qw-(RNNI2$L0OS7;4*-^#`xh~F+>ks@E>0Aym#}HPxq5Y zH)m5JW8{B9haemBCmn*c9+qlWA&rd{6?PTFy5UHm_CV(WxC9a?SiCcB)G(jbJw1s| zI5K`SRtM%Us7>u4@RP{+InA&cI|r{Nh*JwBPUqy(PgVaw8j>|2K#5pSoS!RR5G(Bb zm&O01)cc`z4PXfpNMx{Bk=*$q2k8_)X3X3Oz(cn1cXC4N6VgGCF=HV10J07H!w=;k z>4t(1CV0FvjCbz$V~%N( zfaD4Z>jF_N)QSz#@#qRNhFac)hz%f62~O38I4Uv(v1XolnCxIxfPIJsTag442zgD^ zY-|9|(;rW@D!`sbWJ6HTF@vb6hN-EMwz`R!sEmq=EQB+D;awV$O3Zj2E8lMg;E& zw;5|pAd#qav(VJX($YcK5g~p?4ra!<1vp_yUQX1KR^A@o#6WMX*$*X!gmJK9M@5X4 z4;XmVmVTzs-{ylq^wR%?6)b>zeqazRbqdh$Z`3*C9%lDr|~qEFPJeu+hJxjJM8CVr1gKBf$WvvW+3b0HyOqozNgL; z3^y;c=8YJT$Q}eAA4DwwAIt%;@*((1n{H?d(^y}A&e#R4Arw&OyHfy7Pa(mM)&9Zb zn45QV1!1IA)1Rt%K(PO*C1{goDT91B^(X({%KqLl+*uZ?P4ET=bAN8Hnb99Upy7~k*0 zl~}A1(RD7`M2!ki=i&FT0+@?f?EvKedlFr##?w6Vf8)(L(-!$|)$bUumze3mVD*e~a<^%!AeMkIv zD*cHcyo~1vh%~uQfWEg2@gJ{?P*>@GRM+d()y*~aHp)wDX=_;N+Usg+DoD>K{TRUe zjqOUSBCYOEChFq7LDkO(Ip-pnzm0Q(;f1`jKLTqolYRXOz?CT6f-wxOU zS_Fe@?M2I(?;O+~n1AMTObvNPM9@@J`(&;ObkX+)Ujmj*&48W3;Klo)#2>;U=#lo* zfZB85Axmd2krwd$!$YU0n!pS|Mo;iuP3nba{{PZH4G(61MB2onl?U4gMbiO(>KZwT znrcn-^oL-nCehE&--kTc@LZw}EGf;Uzy;>DG2WRlk0)9NH3jSBhVuqNK3^8WsRNP6 zKN3)eI?a#Q!g~{bEQ!FOns4)!sU3mSiwwu_X&AKhg+jVNB%zXIno|AVB6KvT45`v} zK11D+x`6OgZH&IAvDq((gH1L%mVZt}m?Sz8J%1{#@BQ8L!CK?}NMK)L<|QiDnn3gf zR|S$V7)^7{pK4OU&;|=0$ni5y5p($kfKC*ZQ-WPvwBPr{4Y0#w?l)H*vFUu$cdj!6 zdidj9X*m$~0bdIiRG`^E7+v2CJHHa3N%VH{1P2&{(X;%`*ymaox+L0uN;+EOA%1L4 zqShu~X=UTLkG@nD-|CDCKi^qAtXQn~VP}oC65r#6CF9G+ZBtG8E@wxmCh>-Qbv&_K znXf_5kaa3=(X$Gok2c-T0~|+-`b{bh$*%3Y{_V+~5LPQ<)LsgCcZJ{8libR)SG&U$ zIO>EiGIpgN7a=?%kEd3*7>u8-CZzVi5;j$g)U6mResVPC-kIv9__Tt+#&fJ|{plra ziIT(X5AS1?0bUd1tnV1*>+8Ml$>yjEemQl2 z9mAFWC1VwJp|+JZ@i{6VSbFXWUt~U}n|SdFF@m9In^Oa$kM|O0S1~cp8R-_CL(DhU ziPVeiQWRVvH7Z`aW5!F;_~o?|XO^=mT68;IjTEuXeD!Tio|^X=Jm&NYBHkAsugmn!VqJnudJ3N#ya%bA8Wv;ne-iyCF`@m)NE%7MxOD zwnBI1as?LO6$e8Wtoan!DSB*eo!Z{~2Dw`m^<2yqXSW!!v8UC#uF@>g*!rNN?XHpd ze*8?DSg7sW>8G3Xi4W{~Y;+Bd@@aV@-a~wccnKlKg?I|_6XGSr zM~H_I{~+E$e1muf@eAS=#3zVH5Pu-vKzxCC0`UXl1;hu42N3-c?GfD(%@Ms3tr49O zjS+njZ4q4&O%Xj2EfF0N4H5ki?GW7%%@Dm1tq`3MjSzhhZ4g}$O%Od0Ef5_L4G{hp zz*a@r+Xk-+VKK0W48s9e*rbYK#mK;RML3ZP11Dm__0}8o1iO`~|ARiBdq#E858M_f zVgTOH!pq6Y38ucYKY@&~_=`9w29I&Zcwpo(>oFt@8H2+(Vmu*D4*HeD$ix4NkmG~# zgEU8sKZXFgWDI<$7M{J}SqejhyzipiFmvCVC*6g{Sy7b{`{Pp;tFMmg3s&NE%Q;3c zvU%l7hn3H5S6TkSuyTAwLmiLjI9Ibw#tX~6S_#e+#v>~G8g1A*hhy6&bkn?vYD1oT z)zyS(<6Zh}SiDH}gxZa(!?N4UbV|_pyKVEfQNCuG+;Tc>f8(IkFv5YHbMDxN?iS-q z19C?^|Ki+Hl%5%zBcA$3)lg~cg z!i&2f)m7^oP7xP+pSb6&c~%l9@~P>~B>^GN7MZotMu|SE5417rs^(wPC6=!ss^{#z zb&PE+DMy24V-d-hStIhKPJ>52yMx&UJBMBOdNpo_C7u^A;k^eS{RvJ>Q5rr@&0WoO zY0tlokyo0QzILwMdmY;IulT8zqNRUaN4qA>mHQR9K6B-2=gP^WtjGCbm`~xj6bJ`q4HgGd>@uTD-ZOe zrdQ3Czd!PG`s2BDR2Ti`%lG_}o^sH3%&us&Zsp~{*C9<2wI#3VV)#slbn=g_v~XRK z&`7KOfA>G);duCa4?Uqj6Af9JAA9?6YZm_p{^4AFL&}+IE>>YM4hW!J_T2Zmn0%&u z_I%NNnS8~3vwWL;hy0-Yu>2$W8TmQ+SMu-YKg;jQf1f{@&s4x(fGrR$P%JPjK$ZXV zj}wF8vcx!nM3KXofs7$Q(QoiO_Eqq#UmBOuQNzK|RYmPdHhCk>{($>bitD7`;RMJCx@;eq0~gt_+f{yMeoySvi@W9us=@)sTU-g77U(o#16 z(J|gvH@Gt|%*2cpw_8iz-_v zjK5GxST2wr&D~d=p}u%THT~Y|7C+Ui>JjU(I+9!ui6D>K~l)^;May2L9_0c(upZz-Qt{kFn!kNVs ze!eh52;-lu*?rgMw6)FRM+$$-=xq&| zt0l*oD>Ntf$1i10A>%01$1Y^qp5XZA=|{J$ecQ8m%vMsDz~>V}I%RqI5xa$+t$m28V8?K9Ci;BtHb+l^ zOJ~PeJ1Q@K3pN|$wy%VF&&J!x#ICj zE`7}xGDC}4qf(zA8?*JEp+6~B+yX7pf=ZzYO+;XI;X68fA4l zG9@xm?)a5%K#SDXv2B^^0Tukw-tpu0hGtF^Q_8MHwuFU-)e)K&QJiH5+m$?UoUg6Z z7MOk!**~j(Yw&tvQ}&A2wS){4r|Iqh4((6m9plY=58cCbKGw0x9SZfn7(W!m;wOBe zw4v6cx!{D%j3}mYi~RQER)qL%pFg$R-*RYsJQ7Uz@WOMOjn!n9!e%kE9L~`&sqzoo zq)!Efo<5!{dO0xtZg$`HXYF~1)2vnA5`&WK)0H-PXYc;Ve&nDXa z^R15T5*}>hr))g;HLvV7@6trgT?b+nL|$vuKe*t@LUM_%_4ONz`KTu~X`FU}<(jFw zXT%1RxAFUpcfW3WOCKfvxr#n~eg6Ax?L;+acX`tvNRCW=5zuiy^ntet zSGHJI%qsg(ofy@sh|t)HW7kN_re3}{-8G_89r}tl{)kM-g_~#2yegzvj?_Oscx$w=c5^qo!z-+NqM#r^)`c%#OayJa;W zxZYXmxwhb~IaRcXx=L&H2EvS$a$~A_BKZfl}CB2 zK2bsjs~7I!ef_SMW9ss^{HFsFk^4u*XD(N6Fd|5A5MQme{IcH%H5Ga16HkK&B4>9- zyg%7%XmgU3yyuxX{RS7j*e>?C!}_C1_vlO z=MLGM*PjYs+woXGi0s*4q3ijvFJiJWR%GX_$qc1AKe1~eQT6DG;o8f-)rXaPT-%5t zcB-daw@bYYtQKL=moEvu(jVBt9(;}I+mT%BgAYe?9q)WqBVTf^R><+>bB@t8DZ9_I zkj}bnD(2jy9k=;1NWw4n4NY5f&YEpLI=b3YxPbD~oIgodRKlKb$BK(Hca6*Yc#e2< zoVn^QoTcb1zf|>0Ls#D`&lK@s%hXQgx8`@%?(^QfB(Kqn9 zI}=Z88EvU}A+1AFUauTo^W=5fU;{o#)GXp}cKnlZYgBQVtiej~c74T#<3a~s`uS2;i84P6$!T)rH%ZREyzEh{zo1BF$g*pZFIT;= zAZ!_BdHP@l{R;Zb5cMkW#-NLj$tSY1Dl87{iip&{e9X;#AM3q_H=JM<=(Q*cK?&Y8fXl zRcda)Ir?=sZ<=1+dg;vi8j;0uhnV!$+_Y28*CxKZv*OXZa*mqNAqBR@q6ybp>vq0Q z<$riJhNs0{u%I?U$8}o6S)DJ+Xe%8??^ImhA#X>W)$GaF)(r|ysc*{?`x5B%DKU_c z8(9)7q>+B*lQy5F!ox37l)8N!;maeh1z#DS%5auF^hNsf#+wSGCnIA$Y&Zez58CNlE_2+|w5`3%LxZ`5jg*dA`TnT(zU` zP-0Kc1(zj_9s=6(`R(bW+v?8iC%vv~Us)7W-&?8@pRG}HTVq{z(1GIdbI}K?@{IDz zH*z#5A2&7|-_V?~HI@D4nBy{U`gq7wV#94H;SG{zAk> zVrnNIcQHnnavanPB-0;$CbHGN_G@HequjoRhXx{<5!?wq#H^ZDX2GZ||07nb-j6=z zJNWMOx+3ASi<7=Cr`m6>6CK@i_Ufy;W<1)NoPl{@w?8hXm^{HwfMYftGsJ>Op?k; z?{{QVmcmcV#Gmln-{94|-Z+B{>o0{O3hV`9R z-&hu#ob=9e%v+oM*k$vLDZJ30g>8Yp#JH9r|I%5Fi3=0=3T_V!m+T*T6@J0KQgR0) zxs#!gp(XtCDWS&V)x@OdTc0hvStwyJJ|=%WUZ617r2*q`MmCdIYu(6e=X!?dFP4us z>D_7gygAjoy3o%`C^n(x?YAuRHT&0DSuLesVR!DWr%QyGz?#pF!iV{G_(!aF2wK&! zaJuX0>$kTtt9NoAPJ1NbqSR4o-K@3m@Wz%e)p;x5f5R5ogl~Gu6KPjn^L zSs&?5c=G6#Wsu}}nD7=)tvhmNmu#wTo2Y#qjm_47!TsrKhg`ROaUWxqY4IvouDB8| z0ksk3hioY&E6#k~v@tgO;RMCMer$u-7wpJ~iKS%EE$OvKpSFD4mQS>P$(5sbV)Fj8`xzBW zkMDk=^fVKH8F0}Z3o4fIPPUuyxk!A zz~@uC@YbXqpVzKpyGrVG5sI=DyPqCPTK1%4R_qSvb;j6!rtoLF!InLry&lNA&j|Ao zB{!WI`L?4wzD=e7erG^<=xrBYH^a#YnXB9srZ=DbBiID)ADG#Vt8U*F9q)^okxrc6 z`&wN!-9_i?{T7y`o8F|Q-ah$Jn{}~!gWluELbrLB?{t!8>0YbOxhOO6LV}yD;+IuC zMOzNP-}JR`zeA<;@@LXtc17B6w)#|l$nlNIMb6Pv(+1X$rTULxAbBPTP|#V^FZ=!+}nZG zy#dO1oH8FXI=E!YSFJQ%6U(XQafi_Vx`@QryX01s*0Rdi%f$*`-fr1n7D!0r3O~0Y z?^dxvSQ7(5{lq0@vd_T7k)?slctc9`U&hG{9)9x0V2{d+y5*G<0}HkZecRg-Vjj=` z&G+to0pWB@{9~ST@HRNIk`02S(HLz*un1+^o238*CUO^K)l%Ic-mo2 zehY@JrEca+PabaxUO(KsVJ0WUGh1E;ACPe9B~Cs+)2v+ml*D=e&zVc#=U%{BmDnB* zaPt@yuW`40=5phtvJFwfB#n*u`3JDX!7wY>Kx;^vbKb0ck%(7)%q_E8^_~U zZ!f{LU(oJJ)*?!Bbbcuu+?889sMe8$SzH+;mCDF=xWmbRs)k z|A=R)YRbLxy5zbv(-zLIgV}ULPRbF3;WGzwMyFc_LKmrc4z+$hZlTyEcUIiK|M8JW z3YVG^FGX96y3gblg|pRE-<9*uwFuDA@aH?biK*hqM;}UA^vi>dUpc$2gzfwKHT)XK zG#r}p(!3XTr_|uThTjT)?6!Ak`uHGza^wE?C6rG!vF*&W(i~#0Rs!B*xDHjxY-z9N z%d>s5jaSMn?7cif0{c3aMTkvz)t6{0hJ7y{mZv!N(c8 zdFod_tKFbR3E-CBb=-3{@2Caq%8A(NR!&E!pj#hLyn1soIDh>bp7Q!Yt1VU*%qNA! zeH%4WKGmtIUDkZpuCvM~sK1V`lrrVaNVEz2#&NhZ9T76*kEGsBGRJVjTJ4!pPoerWYAQ zcDJTe7H3rZ-wtr4QySg0-->H5A?O`@hU&Hz{Ce_~_}OWz*I~F_+tw*sHM7=!q_72Y z8t%W$Q&J(#|8-e1*Ts_rMo)cQ;Nq7P)2ujpbElZgWs_Yy-8su|e#u@xvwds8N4A?= zMXqz%a&c?)6jS2IPa7>Vd|u^Hb>!GgTSTdMBE~t(dDk|X{TBr7M?*4Wg`aiqDOFMuVkD9;#l76zJM$@Fw|&|6)tMWQm<@99Z$4{G8Y&3bloO<0W2#;A z40l4(O~d2L>9z=gD`o3HXz#DmysS}Dn7`O4|8m}1lRd|m)61@vG~T!#r!Ek!@F+_? z`!MBQcf7}h=B&Zt{!iR(8^ol_n?_2f1{UHXHyzY{;koh<9EM9E$}YQpe4od}hvTh} z&TYJNdEjeqReyA5&HLHTbrbH*wrzN?K=o6rE_lAJ9liU--l*i@`co(KuQBvEwV%L` zsv4&*RW7j0{@^uR9&DKSDD+SVPs6&|U167t4FsbKo1Gk+Cr_l^*9^UVbGwejUZVKX z+@L2cC8j;okIpWLa68y8#keN+;L-XsYo!O897mTNidKkdA2zWk*sMD>wZ+8sh}(*N zr(0iZCVfcu`4TbuE?ZCS6^k^tEpywJT>)3t?Y~PNuzB&WY}FxcQt}GD11gWLH}S5% z=_{XjQ{iHFAt#Z2vcY;hMqi(@>{frv&9VGPO3U=TOkaD4_6Kf$8M!p-&ANU5_d_Xn zoK5jQe1dYH->}`u3okA4y_KWea`$|N;xU`cq0y)J@GvClHg$gtSy^@P@P&)owGJu| z#g+_r?lO5cS-3oyc*<^utwfhMBT;WS=B@krH;kJyx?9m|H_C`XMGy|t}Y$n$o!sg>Zcj4_V|8;2H8^}Vi)kIFgk$kn0RZ?#^hr1eI~ z%19QkP4a7km{VHHVs@tNS$4-%NNKD_d265YuGxu?f~ALQ2z(~Zw{qpTTuL(b7*Lav@CU(F1zUN)+#sS}Z3WF$9}#TafI%fiq6#!Gk4Y$;$H#2N2jqh+zUwvm|W0cNw4zX48 zZ?ntZjlP*meQzg&6DQe+%hI#(?!@#goC=f3shEj%e7Nds?uCXz!d_9a*X}tQ)$#f`mrjazqn+XPuZB8wOgzX}{8i9SESow!!Kb`AZaqSmst4}DiuX6?R4pW&6f z<*I`b{iXW&NwwbFrsDZ=>y2XHy(T^|icQFfOQ|7nByD4|7Tm4CaV|@_`jDpMI|=@Y z>a6R%TUO_EHym7b))#Lsw|-mynY5O!VX>H-k2b#{X-zq@_D}EY8p%kwnV);};mn|u zp=8;Wv%4yscwZ*OWvVN0uuxiFbUsqYNyG7^z~I4GZ96;DqGOrqEvJ$f?%lNV9h0)< zQmbtP+sob`zShz{&AF2t6|=59@Q~c)S%tz$IjK`u_ptOj+6@}&-F9TUV%HGnZt7CH z?6dCl^)*qR3k__Ri{&0Vd-=;?9h;B8q^UW<#re2eyRpd0q&TaC--3Njq z45Gq}&JF7k9QWBiU@6#r^vs?dt5amr=3tvEOkwLIuH}a{=fl|$%U5p?YIjVzdo~&` zTRElCkgMG2z~_~5E{!jQvx=Tsj^-{P3{mVu|c+y%MDywyM#+ z;g5Eglbuv0cPx5WS~=VJ%-pDGeZ%^i^0qw(hQ^DchBrNtPQV9Ve&Ot)o`!T5#6 z=gdEdSU$=jA*7svUZNRN-8m}BF5r>UrrYlNGkEAlvBisrZ8@pA5SdR%s zwMO19_hjI--JYUVvT1Y52F}@tYl}$J;oA+OR}T%(96FlN?rtHVY#rg6_LyEBgEjZS z1f{m^^cD2YRS4b`y#c!-rRXSkS#fdlm5<9lDb$~QsHeMXU!A4mBVmb;YkAqEaZl;_ zw$|=EwD%R?O2hV@e0iavA1gZ65-La<)1}R+dm{rNIe0HN^ zQ%P|*i=qEu{qjxhbg>;#wOVrbtPfqlTnn~Lp6K7JZIa@@Z|L)(rgW#J%U=!ZOYH2r z*mW~a{nNUO>WtDiBSqv3@0uD|5p}kx1uieS!4W4p@p5AGI;RX(RrU6S8iu7pms-BG zEb(g}Y?hzBAF^rcK+wkYkjj&F$84;+Oka;24rvnDIcgYjSa9UVjHPl8?^leh$%tqB z62(=5k3@`)#-=>CJvB0QdXSm( z;7AGn!vfzjlT-QoSQ-KgMGkPJpUE-URQq{T%D#RUhYPa);&0=MRMa^Gx(*v@=&w1Q za;Wb@SogkD+V|K?IpXe%%!+5<-o5SFlN8o$4n3bXSEIwJN%$1!+aE|t>Xl!v9-Ecg z72cbrW>EE#0~F@0#m&x@hu5wb`tX@mzOP{e*WqVn6$?{(8Vbe-C0~x*2?^SV6PMUG zaM3kCq)fAYw2iPsiocal!+TcB_Mt+UzS;+gdX;PaM{b5BB=9{*9I9U%PI|6Crp_eH zyD{DUY~Y$>dXtVWJWVmzVrP;)12A59Dt7K3JHD>yrALH{#5dx%wJ&k?M9Mw<^5pG@ zotsEZF3Ohd0kI40k18iBtYlG{xVq8$`Nn+}TH?%`iNbtWla zHXW}_i2~ySS@FH8yew-@zu!!JYp(WI^YgvQlY(J}W%NaHebzg>k9e<&iYG|4SG&2a zG4)QpB~ZqGY?rs)YKv^23DvdEDkt8p_Ej^LUfnT@VWLY;C59Vl^_^0X)_BORe&}f) zi#d7Kh4^SK)12K4`fMAUr;0-iyQGR21IMD}KGPtSw_~wQtPIyj4>j zHt{0H6F1cyTe_uu%DV*G@+_>#N&+IC<~0_%0@5aDM?dd8B==YyqZ#|9)pzlzl(&lN z+SaAL`6t~LHQiq_QyYif+IY<}Mek!q#)iiXOK#%IO)ms6oVELqqaQd`m$2Zx*brTL zWr6T}G4adY0z{QHnC&q&cPshz4~27$=$%`Un1o@Sc%Pydt;-}vpfBBBwA5wuqKqMW zmGwC{(-`|&*81>#tJ1$`7t<7_xFj<9adXbDbEnG|HQHv`9=fw*X@H0M(!uc^tBx5s z4b-k``KbBe5SdN6>FG6`)TQYxWxCcFbzbxO%%GAH$Wva)=9b4s@m6vM-oW0VZ;(S$W zXcPO0KS^d^)MnH3beEIaR8*g=IcRco%=rBkzu+dr5VuzXM@+bM^Y#2S3|?K=kf^5A z>2iiXnrb_u^rYvZNKoyn^F=S#eLQtJ{gi>!c4lD}%OwxDb2c)twBC8*6c}*BC#g{X zfR|(_!DQ_@!JPV@JflT#b|fq=o;)y?b^OUk;^~1+pXE#LZuUBsvFj1`!n5usid=LN zXZq1-!tEP)y&dEF>{mojb1S|jnH5RUPhP^i6z6TTSwF}xS~sLyku9v&vVP@gP2n9o zvP;jyuijV63ZhJTJk(>165f@OKIuw*x_vYjqhjm1(xsM*#btxdeR`!zmCD7+OGD~3 zHd0o&i%@t~dfIAKs*NNctzWO(p448k#1`xd@#|kJMBZ@k|)IywR#~9b{?+7 zjOUlE{BmSX!>r?aCaWqfR2o@3N*^~L zA6~H0aPtb~W}&V2Y^M~hf~T*F7T~g<7i62}8QjPUKX@ifZJ;7X=4#nvu5XeBvaD>& z<%L8TlHF>s(T3(1tEE}qNVjHLeEUY>6<~=tQO5JBl4qyPrIlHG__;zqBRaR8*xNX5tniA-c6s3?+zLLycyX?cO@(Dkb(;1r zT$0L~62zLrFWbn@<4V}Sf6MipB14`_E4=O3Yae(gv?5KBi!0J3%4hsxMewClr&<<< z%^qL%CgJqjt7#cq%?%h!zObEUZ!yIuAM7l$<*qT_akgc`MNQ?%{p|J!@zswWuVu3> zJi^K<|AdLDGglGEqB;B`G{G}me8eEjNX=QGGCd`;%4=*%G6!Q#0$qF)|0?8QtNN8%v!MuoYhVMwMUG-NJp{ zac+0g#;}-RAI^Jwau-S6j9vX;^y-Vpd27?-s@u{#1K+u33E72<@g2z$U~4&ATNJrV za>~EIn(!^#_?E!MV{ScaR&G2(<@Ozz7o*GxKiG%|;! z_7$F`L@kYa)^kPLB?u$(RoZCjp5+GaXLMh!ExX6NF*xDV<%08M?u}cwUz8u3>5(i7 zam|Y|x^%IYKkmU!-fu778J3#}Vy#s4%b5>})rEKklJ)kle0=kM!j3a%6Wv4-6s=t& zH%>EGB$aREKJ?`+U6Ewhl`Tyl^gb@!a#Kp#e`OTQ1IY_X6`$@%=QPLJ4=;*uax<3K zEIgDgEZ#^l-Fmf;jecPzQ$V2TiLN#Gd?%WebglP|Jgn-B@Huf|=)yBE*J0w*XX{I+ zm7lM?HW?i+ra1Xzn{?Ezv?F5t&W9DRjBBbpo))Ynj|w!7SQ*ZE z>=JQ&9<^S3(^o^A^Vg#cf{jYcq%)I82ZGXG#@(|WezBgrD`J`)reXY>SLST9i;Zg=nnK8f(+`tfgj_FYLDdLQ>d zc%cTHW`am#huJ;X!_jMA21@z1r4KcXa|CWXt93F(Z=+AY+>Od!dI3)BFCOgPGeHl9 zDz!orII;B)4-R|{QcBXhw{U4lS%hVbKx)pD(n#)(tk>_;N3PjwWU$&83a~}eCtRj~ zdF48TL-f$DIJ+CIHM4GN(;@!0g$0iduv2v5o{iQeS$DmP*Ldk|YBO<2<7#hWF*;)u z&+h$MbY(L(dG|8H#j@eLIE-!o_=4i$I@edtd%Ar)j>r|An3-k@4$E4~wfz18U8O7c zS0zfXPSw8T&6y;V&cFW1n%607i(^Oj=XYm!dVXnS*}p?*sdvB3KKF;UF|UJ-#Dz!6 z!(SUUT`ZRd7!;Zg%p}Tuk?mw^_X=1o$aYLvZA<$0r@JP!()DUKztXvi<+`u=qjxcX%ogWt?5nn_Isj&i#U)Jn8 z{Yd7lw9%_!@fM9$F~#K_hsWh2m^23sUWc*WWYybKD${;|V{%XCxaO_Blm(HSclV6> zU+PgCKJe1XZtD$_(YFA7W%f-U`1lk2&et%oCJ4Xaln(R34@ZdIdzSt5qIOs8YrZ?P zcQ~i?zwGDoCb$GhUq8U)lX^jMv;48eg7S(TRbrmkF1q|b03$%$zaesbn;A~wDsl-( zXu&K2MbC~FvmV;WI>zE>->oVx$EmaEUznI7C$XBFFAHL=L@VYx;ZpHJ6`^fyPF+Jy zM7L*H_KJvJ5u$Fqk`$Pa*m4$n#(xp~a?Cqg89Cvb8qdkLu*ynM{qjzH9W_20i519) zm(%{I%ZlMZuitU|bXL_4usl8_!t44F zWD#qhEL$+V4XLfbx?$);Su_1%(vblFP?O)R-f2}7EL=-V+P*DO^>2V;)YZHE0A7D@ z&y%$lS|~LK7+fs7z%Nv+fe&GYl;u2gWx^tGL&&BTqKS#Dk>``D;|w#tH4|05uS+~U zN27xQu3vkY+)4apfyS15F-+Sbc+R(Coe^Y>w`0M*&sVgf9rFz0lJBO(%Mr5-s^T*~ z(wc=5o4&jc`cVwT08ab7RXV&t26vwbi4W1RJTqkByBE7ZG~4BHL0=&VG>%N%vjrBb zi7AilNoXv``9tD0Wli}r>TIDquqBY%3yPq~B&%K>$OF{)2gfZ1BpBD=4U!s9p` zwtSun|AK|HUpMfs_0qz(snp^a>tBkn?xCpjLGBPEW8wqO=Q8EBd@hhk4G8?)vurc1@Z{l3|iJhlt-Z&`ID!M0NFqdc|}ZGJ}({ zo&Fg!<%XSp_zOIlOPyv#PFR*97^-I^>;JE09LZS@N4M!JHd%5BRqun_#5SE$4`?GMchKSR07_=R`$dX z^}JRf+S~_=YkO?qhX6$o4}tw^&1jNF3bNQ~Qi`qmmezLzvxTU)n*B@7UAG~L8vjaK z@&9n(-Rz$_c)5*ZGNWrJ%YiEk6iHzL{nmn!d6purs^La(0qyMt$EA{Y3yuEEKjtJq z>$Jlq6Z=87{o_P*tZ5KTsGaWE)S1S};@a>x!g(x&OmRNiWibZ$#}L2QT!wPROWz?6 zhW$9LwWFeQj%~;;aO5SYun!DD>`GOq0*`h&BPjI>XJi9)iko3MOGpO}>X`LJO%K0d zt_Hzmt7P!!xS~u{jWwqYm;`$zg|^@4;y^J)R?|<+6`wgEljMXnv}W~cek?kxCrD%P@ue;Np%%G1P0TK%0$-S`z$ zloSOqoe{z4@?NC#*d=b-HkAGb-<&5VNqIqK+mzue%y?3F*5nTZ!eW%U+-IIyklhV^ z4^evp-Y@dPQH zOuK0NoxOYfB~pylamZojf<`%Nnq@|q9GX_Fa0DAl`fG+sA(775_RrRf9!T*!lJEv0 z@K^qF6i%dN+Ap|&_WfjMd)x{=gJ#EG8XTl0*G{uZ?Ms-iOLGNr);ze8?($FPH2mZe ztG}a*^|rBCM#C2;R85p3qsX49h9KDegghRke6po_W_D99$SZ@;_VoS79N0R`npG3A z{yNjcm`LqIoUX|6AXKCF?`)KIsSG8X&eZ&}l>JLSxkWCiVLW%;r0vRDPs*5mQxD9p zL};8ehh6kr!O|`IoqC7-qo`Q$J=JvFMCNr|q0RPBnLbX`6&V8BVPEo;ZFQ(_H5X-dSULz&A)^L$W}Z<^`a+7T`jOZI75oeYBN9vp*W$I zlr$Gef%ro}$B{qv^VfU$;1`WDi$ z)G+e@@1^Ito`3Hs(#{`Qi0_!{-x$L&7Inor5{rn6ybAx7fq#8>$DmIYX1x5gRjY58 zVzx1GG^!5sHTwrFP<%X$h6&kz*hj;bU3Qx-!HoH!%|C?^$=HQc92z}~zL&sm3295% zw;=tZ(X{P*Jl`Cjmr5MgL$IkgKVQ@*31;5=D`UO{nPMFTO|k3i1Dll@lh8#ud~v1s zEj_uI!X=-5TK_j@+LY!Qw`#qVMyOV{8hqv)j^TXDc*hCLvSeN;qt1ZF2*NDs9>^lS zZ@k=3hluvl5t#@`aVJ;;G_L}oqN1HDpKbzffCh8Mv+OUu|25=29dkII%j<)nSUmL^O_cekaPxwwj={>!IK{5Ccgm-xk#Kr*Lr@1QdUV)o3t4v zk>A~c?X=KxEi3m%z{KSGXMC*TyQRPd0#XMvn}%NMcW>+2MaCF)E$(>9nistD?`qIa z=k{NF{B?6X?Cl&v4Oii}0hd%>>boA9R9JM6gS@)yBo4jAxS>EiB zCGAXnYVi``h^q|l6S~RLvkjhKstUyjDb?PR_s@5{Z|NG1qA@dLU(w{UIW0<=gtbuC zP2WgkavjGsiYjS(-k&~Y6_wYaQ@&8>d9*;j{z5NPpfLoTR(1mP`I+FY^`H&hx1(dd z)v??nLI%ivVYcK0Btge8NLyS1CNOuE#>3dd)6C)aO zWc*cu;&X(8jgnFhTagrNV!sa~4;djfo>sf5nG%jKPtJSyu#{0Pc<^}TBG@Y0eEAh$IT^5<2m5VJR@Li5^j!}Aqo&Ym6mn|^DV<=jrEcW+zs)(Cdm z#E=k5)G?TJdGzigYq419HWxo;|0lkmuo*{GcIO)qSE8RB)E02=LY{}Q;n7InHj|Ez zy)2U9NQ>QS-Yea4t1qpZRzneKk;1-Ar%b4UDRuk_9aZQ-PJ|H4pmvvAVW@LBRQy}_sVyd{Y}BCTYUVH1v`sBACdRPYssfMf^T3{v z>Ip>^z2IxEWktggoqGu>*G^Td3h8e38YK9 ziHW5g>>RJowsoB&^H@cZHC_)GM%ax}awU*I5!&BQYFO2^8Z!ycuC1%tqyqjB4J=z{+HiDyc|0(iDwk# zty^Nc0QctN$%yd~l#(I|*yNiDT0c3{f3E`gmV?$Al0%K)X&@xI=GAD0r9TRr z6=AFqgWG*a0$%FGg1HFun4HGSWM%C_B0tYQooEDH^!`0LR?L>uxSjt&H?@btrNy?ui6@A#bliLu*0`J=H&(K6RuP< zjWdsr#_}5DG^yo{jP6zSh-G=hGOZ0PblAp)4rSV9B)Lxp#_R}~!JyP|j_QSrU7-BwyRW9IGZ^=GT4#eAMHE#Am_D7DkLUO0QnnFYsV9 z(A!ZCL)w`3l3haB)TgVbuG54NOF$G8W+2)Fey1$`M6o(WG9S(U2oLcA;jY0mJ=6sG z^U=$WfuY(D$Y_JObrO$-;I;ie0CGdqBq&>P_C7ipQu{>PGLei8=O1n7KtN+6FUxPo z*MC=LEYwMGK4GSB3^Q2ANhG&wO2R9VhMh)q!RpR{%gXX8`tktR< z5^HfnHSU=7Upsl5gd2`Eo)j{s^14*v=#u1clV1$L+Xzd{@+K3pdm)CaG9AdG+q!WT zCm_gq5xw$JrE01AT=se-(3iJ4#*?%aIiqv17}$I;g;}@ttn`B) zVN02sCxNUOSXaYh`b6piYqmyC*gg3n#9$;I#hU>AxDfx^bSh}r+DKWSepj1nU#$;v zi~X!N^h>k=I!}qz7+f=*$r`bPmVZ(OROF-2(u#kC7UgGq&L4Z#tg0OP1B*5-Xcno1 zODV{V?kvxn0FM53U29dyaDr*Lcx(~5@4>tk+nTew2JRG4G2s;;!7k+s)n8%Cf6;oh zlY5sfi@CsL+fckk+}^QWQZ3Ehww`b&4e$lu(nhQVJk((N($pjvB8t0UMlUO3^(0Ap*Me?1LIm_ZvZdZH1c|L$f6FciD1tAs{bj@~N0Ub%zLn(ib zOwX~Cj45=1kwud4IP=_yA+xC%KT3!e&I>a;ic6P2oL2BN5SmM$5eQIGN>I2HfB{PX z1(BFB!Zu1&YGP;tM5UX?!sIOXJ19)nbhCd^)QF6B*n4lU`>)L zX@b8ne=Sh{m2|vg=B;pA=)sN`^WODXj+=wZm*4@Z+tRERL*VF~j0Pl}gpk4bm7inJ zyys5&`0M~4Yhv2}HabC)OxHyCE?BhBBCsLXe7(|M0#zA7Q8 zb$u-0-tm+q<41(yH9hoveQ;Ex7KT5zno(^%G$NiHXumU^Kc1Ydb2o2*GII;yxURhu&`oyEA z9!qjM7wFTh?#*X=;Jr!*J50~My@~Q){(bj6b&a1?-`ac(47*7iJ$T~g$1&03ETM&#i-y7> zQ~{Y`RzZf8Oi?bxPy+FyNv-rvpoLdg$#rbzug1{}-PnXoAZ~tP>&$VF1>xrYWsV7nlE^`iJ1+ zVLV0ar-6&aR!)u#R4RG8&p#xRMk5qSX?!sNeEz4U@SufXKJh!Kw9Hm}D$HaD;siBE zUgxKrR)0;?kSY&?d+;p-gip`NCBS-_bK4^{m*=XOf}%Uhh7MEMbtgV9_RG;zIhQ&@ zjKuiQMBk+WGG5p6OyWP;XPYf1h4>aHjHN(68=iY4@Vh;>uu-m9ooz?3G%mS%3k%1U z^L!i9QxZ>SZEotg+hO@M4#iL<5t$a*$jID>801^&ZA7?4(RX!_(Vk$0`!&^~w)u_P zOmV;rW?0vnEu32`c4i9tUCrzcT1dDzcu7HDLvMzsa7y3~y1A#zgP!-tCG3O`6If9+ z^h=^d`RbDaER!{_%zC`Y`JLiBP|mP6H<>5ZzaqO*y`Q4ys89hmTP( zNP7dJUzji|>!l{)$#C{0a8VaE-BwT_+lE$w(M0BX3q?h$hfzn_obtyWmqcEY zQ9MpQO&jTeO^ppe(EU1xFW%>lkPuxP0Lx!Wmb8Y!8aC&3i|~q{3db%2_30K5#kc~Z zf5oV-T}D~_U@9~CZGZl>bJ;HdbyzPrk;on0_oB$W2uAWLIvut)bH>mq9>)*7J^2XA=2z~Q&+%Z4;dG*+jqMB z>_6eeiN+qieM=B!69V(@uRWS6lWnsK=6htZKu zqVxYWD7iH2gI+YFC@a+Y_~y8mknV@SQ%cw1ZVuItwQWJs2>2y>7g@yffH93Mbjzb} zk2VrPS<5b`SgJKj;k;G$`|YadT|x5HARl`)2`&!9=>7Etc0&-Fz(u5$D3Lmn(W#8T z+;ZO0Z}0*&!jJwN)QlG1tmj@ziM!E~#a*Mz5=`DJj_hrwx*1z?v9|S8b=k9%@GFT5 zE!Fe?pFM30JZl`16!pL@L}MV+7vVI)_3ew25I`|bF_^J*8`9GtZ3b7y8q^2%%ye%} zM86h4DwvmJ^s$p2A{FEm~+=0nkQBt(^`B2S`36H8UibIczKkHf=TQ$+t@h)_BSVQjiE;3jmq zGyaoST4EvIuNAn6AbP#){F5lAxY4i&CRRDfSwU(z4lb{;DG>`nkbh$*;EE8VKL3A^ z@pm5Kl$}&f@lrhORH|Qt$6ze4m#l8ll90&MRL_;FVzH-T_wp|7%Xj%|9rYgnIScaO z!QWFrHClO&cs2V?3dFI+1J`j(^v*)}r3Eb}R@{*UXp0%EY4GcvV)rJ9xIVuW3jUjs1IVD^AA zou4lDkc_*q)&2e;PiIo**$o)frAW7pTn|XH^*wtDVHerF#guRdwK7pl?|;~g=cE%r z?{(k@g9(?NDZV_urCFP;f^(~a@8FM3Gh`MCuE~#!6Bwj{-f^7#E_ue3Dt;6Q5J|uc zstTVLR~&-7vLVic{?6c+|KCH{c^t=Us6=nP@q}CRj0V2Xr;G_LUe`hvyd(#qEfzAN zal!X5iy6+kD@tEU!bV?)<*%9qy1x$yZ0a$vCwf+xX|HAD2CN!uIVir_nx>D z{zym6Xrk9Kat)e0C30(r26^<7leuYHC{!H>uP|8H&WsiKRgww{DiJwbl@wrZ##X1l z+QQ4QSAFSHdNEKfhN9tKb3(EDzy~&}fswkW3IoyAgos^>=njMnizLKN6Sa5t{xBqu zJdFRr&TH~^t!C5g_z@(PVs!;xCXv!sM%~bu&4u;fI8?_Et+qV|EQ6RV$96K#&eWRZ zg1#Bm`JpMftp6&0-S4us`x=CUYhzR-A>)pjlPIGyv{GeQ0|efz2Ph`$1dqm*G4B$4 z2p{A|8i&q5jmYq$ma6O-Lae#A2s6&-NLk#`gCkGo(iI`aI(mkg>XJ46qT2M`xG|eA zzCi&E#Eg^RnH~s(v)Y2u^$)qS8^?ZFjb^|}ExDKb+A$ni}!~5ex{ON^I_-Lm6O2Ma{(x_@SSArbk&)gd^schXm;cwq!1#J`DYL0M+(xWDR!G z0P&xY8-3*F*!wdsC@UoMV(AOs-BBAm+_GYn2v-{p0P_8LkKI1~(w)DJQtP9vY1iunV#IA1x~3NjG@(MCv^jfN ztEVI3ec6eVpeju^@aWhSPbWu|J}xt495CKcZ$UuF9@SlhRui^Ix9ngoTu&5wgnENE zs_=wx4)zh@BnWI4N2yu1?4V^rp7nf4J#Aq*gvkJ;T{OytvX-wIN>0jy0Yo}MK#8j% zFaw+PF34(HT=*=J2JT!Q?(pn_TAlmU8G6RS}Iq zocYMTn>B@mcy^5kIQipt$FARBX&JHl?kEc3%gYDkKPhS+nt~+PwMPKfsnl&fkB}$8xx1+X zLTMBZj%Z28_)WSRFHw}+c!t!Cy9#mf0&01T)ect2zU?@(UjuE+D2{**sFF>fH;J5) zsU505^#V%4`k|3TM6jK1*FGYiRg>r9P~`xeY)za9bsOh~1&W7L{kZ|D_wwV%(hNW1JqF!y7r#!<3t@E?pZ((l_9}5aGOPYouAaJk8C?v~ z?~^jNtW8~6N667EQMIqiV9RL6svhcNL=kDUC?Y*UIxDaAO-_f6kt| zvSCN)rIj-jv7dY$YAQNR?*uW}Fa*+xSJfDi#DP{MJ=5$t=iCG4bZ+}TWBBh=8`o(X z&m^Qo282Trft-9sQnZ&`zV_gdv6!W2Nl8Anaur{?S41Q79pmZ*mlE8Pn%gz(TyeG6 zh#Lj0J%)?x0fTbF9y>;-n7HMKgwKCcK?6?%1e~vwiqyJJ$(B#Z&n<(?v=WR-zV1H!`r;sFcwm zr|Nke!u9zT!8IIhKkeW|k9;#LGtJ0Sr*^$WFsQjf=7#&FT|p%#w(mdrF;P&bF+?!+ zzz?C;KJ%WI2kkKkm!WONbVBG?_*YW8ae(gj&TtLvvF9r^S36ptry?U6t`AvNzSRyY z5Rg}e?@Fnefm%F_BgML+Yh`}V@p0aw-PbVRUjoN>`zR~l730-CN*uM4g=q<5i8obs zx881(Z?JOf^sQTpWyrmpDe#g{Hi=&Gk|~M z6dC3apk@VA+?Lvt*W7@#(eC(WuyLG7o79kj7IF9c*q0}9_M5`xdXtOMy$#LKdhU_h zEv*Ua2Qi*Qx1`AVn}v%Zg=fLlTXDHPszDYcVLVaqDqfZURIp9B+=%Zj2JKV@vCH7v zxuf$fYo>Hh6)Vj%NyU)hKq+1*R5VXQj9iMI#8sV-GTn-*=9h-$Saa?jDfh1!awxEF zoHLOztpMpJRN&?U@rdBG)S-;#SRv zp)$!o^xJ|BKXk|a@fx$nWjHwpU%DNRo+0P}p%c=GU7HhX0e0$h2HLebhsozR8X*ql zvofN?-I!Z5Wi(>>kQ+v(Bxw-PZQi7$kX8;KiTcYlRI##6^~t{_1jL$4&f808`rUVH z;CN+sRnB!X$pp2_qxLoEElBY5XZUYI#-{5j?#(s;^B`nTiO*@{TGwbli z)ul>i4LIVYGjw#_i;&tW(ADaSS`Eb*YR3q*e8(!ak)f@kAihHYnQ4;yRh_BF?Zxj> z`pC8XCe^E#3KNWI*BZ`3Uu=~`C5(kn>`h#3+W(O{mZYP^b}a{p#`t?YeaSAn=)Hf#4 zG#D>SWDm`+;!-&(7?ndclo%pU7mp_HKG`drShjag>?1?X5H<1X7n@Cx73`*5y;YOq z@M;LgH;JE-m9C+yeOHJ#G%iEUoAft@zEIsy&xwZytp>fV6uPl%&w(swauI_v#sMX2#7rO@exKR3> zE#x#MutoSSlST;#xqau84FiXS;tyMt7}Qa6YjtVTx*M+d5EW4}!|!b>mdssL7& zH?c{xwOVtBn1rH(hAaPYswRk@Mk87uUz~9`T)gkTnT2?AKYD;CLEVkRlXL^5V})~) z?s`u8RAGax2Ls=MCMF#PziVcl;6F0@o?!R+caV#_t<9lk^r zWnDDlyHP$)Vbr(V+R=#d(Yk|2monQ8gH-Jk@QP}0w~6Q4wK&EJM;Sgu$(L7#9MqdkcMVC25mNh_sb@r?V%o6@>-Qj7PXIl;b;6a%8} za^f7KiJeE1Luuy2&go`8HVy(TRUD*I)-gp>&KHMA*}t23)Yf3g%&}k_7Bx&6&S0<*3A#YG?e@=QMoQBR~A|VTyT?8nTK`|Fs3w! zlT(A_6>pu7KFhyw^a-+5*nA(w!LZm7qW~1ve3cA9E3gVB)EK6hwS4NeFl~ys)*h zLP8}lYE7+eyas>iB2HS28d7bw&+ser*_N%Yqi90)ExP-Jf7e`FjV%5fs9fQXiExVc zaa{K1y3IUuOCT#nS$)`QV7f#QzK;;cWc%)tCTDVID4TDz;jSkb$7nM5TqDx-ATdNN zJp%sWsPBE!!76+q@!o)KLpgTFk4fk!E6J9Y*w^!$S{J%btmr>WSmA=FqwbV}7HC(ZX%KzI`-hfH*;^ogk}e>D${NKuc9KJ`1tl=d;I}4LK#Uk} zM%Je~k;T1w<2m^TqJZ2Qe-&lNx=OnJQw;A=#5(+!g+%yKgm#9udN3{h^r-`1 z!HI>0!b)s!$`Z_&Tt~LE30oH6Ws7N(N zI&~rh9kM=`MqJWim@mXJS<-xa4u9d0l!Qr5=jFRTMzIGcq+WgJ=yRg)gb|{-HAbI2 zM~)NIzxdLio(7gCnzm%BEPf6hLuz&eK6*AoaKFmU*b#w1u>?P&?z&7>JW+OcmJ5Y!8y zDE8yfu!NnSi+s=lr>zfT@W4-fX;G(vs^Op3bZeT{!9)idTlbK^XS0kkNp4%2 zPH<}X=Yt)&7l^(UYNn+hU({GlhY6S$?}}Ds9$tUHc4Ps4HrcII1>=f3#qcWUyvmpt zpYOoU&wINM-n~d)C(W5M82g0B0{L}GLA+p-KP3~SSXn&d9=^SG!k14My4v%IIUavF z4(sdKiL^QFJixJojaES3)G(G0GsTsm!9mnH?Mz`eXdb7; zbPVx$%$gyQTNl5!BERh|0-RVT$yrQ17zxAF-XtmEX-{1l=kN-#!L|a!D_PG$&>A>D z=5ugJJ9L~*BP!@GUFF$F$DP+$IBi%W7)8V@ zlap%i(6K`P>Ls;6sC6988kJ4YowlM*D(sAhy>(&b7M9b$t_Pf4i#c#xkObLq6o($) zdio?@4Ns#JVQ#KlP$)Eb+z}*X!lu4T9zIn0hucgdmM|q@P#A!ZtUCq2@_g2W4cr6` zWb)!?PKH6|f5SJo3D=;}#ot0?F6%5SIYEV3@mNUJ$Si0y;FeSCbX&sDx z)ei*-LsXn3Oh!VU0wuExu!m0noU=c>Y4BnpeY1BCo_J( z6IaJWT=NTJ98BPB2_i7l5JMVQcL?g(Rk6_QGElnr2SU${foyS8m4Bkj-I*g;EJcm> z6yI~$QW7R+xiE;N^-L7}H z^dYG($%(KK|5+P=9aDfvUC6H95T-OJW6|N7OWdc^)Hkl?A!Ks3U#(>-`Erwno9&xa z%DhLiUJ)HDDSxHGHr{gStt#Vfb?k)WD(Q)|9#fUn#*D; z8wxqY$lK>QhZRYa*R^oi^ujlQkkL&9fg|&~iU6t{CVHRnas-(jh`G#rC(B1Do9qsA zhq%jc@hYR-wOyb=P=)PENd_TF2VCP4)JmhJ_VgyFrH1lLwbHve$c((Ft&3fu^|X3F zR$|WG9f1rgE?aH55MoSAyPkX#3m(=uetwRIn0&5@X9^K) z+5s-U&i9bM@S0Kagj{1ak7|4P6o85!bl$cR0`Q6S|6a9a%_+OHY2?o$6J)3*{I5X{ zNcpa%%G7R_Im3~wxU>n;{81_|IK> z!~Q8pfi>vSH<|-SE3@{7YX|td`00}%N^=)*@}1XTb4Y%_lk&e-Y;VYup#(Nfl*bf- zCL)Ttn|J+1AsP=#H&i#`?)En?zDV>jcj-~4GlRdLi_gI+O)WzhLU-a_8i1&1&B2ct z7Hl)jZI|rC+KIn-c59o6PoU?+mb~FbnL5Ja*xcciOh*xh)-j|K*POisC)x?Rmz5J{ zwR92!J&3!4OB5RIdwy4{3=gj&g$-6=%L*AA%cNlCS3X1K!@YgQ@iV04Dk<$oXS|=l zK%syrDZ<0&oOFG;0&B8fa6)9P#wE`r&sh|B%g-Zh$Bn9R-$3Vz4XQg17OI0LL>LJ> zjYyCYd=>RQEjdZP2Iu8k8OcPfplBIGf&1DriX`|?#ps4s4ET_*i*al-?o2mx)6(Mb ziU{v=#+c2^R+5pSvRkO_Cqk`?yOh`wN7+lA8~g#HCXGOQ+l)5o)aC_FlD#H8BK#fxw+7D(P(-X4>RKu^k~4lF58pS14JM zogX{S95LbW60)w&9YV(b&c7>zJ&|?h+p+$T(DfQjwg_)I?PRR*cwc@tbjJVEz(pf3 zV1==~t2s#N#FWz#)G#sl-z43EMYYcO;Th+io#c*SxxxlgJK1$n@W6D{OFFbyOTc2| z3=Uxps?MFzLbz)N)^U~Ae zw3xdoX13)Iw;(285lY;JeWsf((Xi z`+#?Mco+NL2Ro`aJ(%9|m>suKJppXTBy2=--^q;-Z3~e>oevEe>>R@}XwGSrYdOHl zRLA{EmAH(W{k0B#4A#-8=_Ey(o{6HYs;2BsSI%q{hwWzKKBo;q;8j;o!2Q!M?_Od6 z(7)P-W`6_Yg09^siJDID^7Pk?;pny}m#MK@!cwsl@SaNei3uNtMm$?Zlc=EZC`$3B z9W(}tvxAbk(mry?2g>=%LpB`yLZ2LJ0V8HINj~Bpx%wif5HHkTAqu3=mK5lNI@+VP zbp}9N*lmdC~{cXFQ*6a}&-B=aSa?!tM zM{L*CJ4CZj;IuBWffwx+RDkY{;HAf*y0e3#`tPaYkV0A63$NM)IV$ST&++7W*4Rmv zcL;cNsEQoHbDQ2rhJ%Yp@$F6@k_0ZEo3l&dZ0p;2abXKl^k771ku8POfm$7=7$P%` zTBZo=Ir1&~e|MXCjAJYzYUy+(}{C$Bf9FbJR`egWf4R8C=rZ`w!#K*N`Q^P13%63ikDP`l+(Zmeyb&C+U$BU)*`l7;`=SqBBV;*m84Rw zzgcwS$!L%Xt1LZx**TCT1QgND_{JCGnqa=?p}6g>+L+g~YX@1;xcMV<2)DTRx*%Y? zre$=fG3lkJ)l?)wuP{K8xZ2GyW=dcre6tgvG>4wgc?tM^d*B+Ygd*>azcdE8;|4%a z$tK+}^nMEgVb|lFgUr(6bSFbT_BoM`SqhAd(c@OC1p@qgfR+_cF5sg9Nb_Ce?|>_f zdX6SJt>Klq5y4zuwAg7xLA|~I)@ZGLhx(RJ?QxyZmDxy^j1iY=!eAY!OwtdIw97>F zTbCLKg=4uC=qwJ+N`x3bkqOKo!N~w$7wk_&>OzCcm$!?HFTQAzPHUn#rp3l3yoCw- zwc3r=Wv!c6D!>R^H#h1-%XgIm9bC9!r}TM4BZ`OJxHVpHHw>B7zko&P=b@wno>X?L zNL$|4x*pJaD{x6NwUyctMP)sHMokG~SSr-ex1y|&rSL~7F1qPk6P1`%9(A1HPN`xPzl2o4I zVKcRX_@p;&@KzSl@lc&Z@Mz&~E_3s&{aIX3@9~4MdLES>PEw3W+MMLM)a@>-(K!GB zQ_-~)I`U?8A6`V8Fg7k{)UM$g)t(DD@THMA`Dic1or2rVD+M}U&A$VqXiV}-tO@x} ze1pYmH3F036;r#03)^wO6siRb$l-oMJCi6V@YIXKcJCS)@Y$0^SvVyr3sgAyA#_d> zX2HOfhGx%3jO8xkZY4Hta+1lHG0GKbDTdM+n&pC5XfBqJ^qy}AF4)UkY>(}z1knJ< zH5;Qvr~*mH3SaabQAvjAUDvsQ0exUmi_P>&O6;tuOI1hsZjV8C@3v=3d$HlJX0+Q& zpx*zhi4!lYW+4Dbb8{Ql-ZcqM(V?6I97??voNG$_ugtKFlS+i>Vc4pM+oT_(1;Avd0eD=pcG1b<)n$Ln|gaxAXfcA65%J>?ic1z?ZI z>{hSH(yLh0PX)K2Ufo=_pMNOm*y~+nP0A_AKUZ8Xp*v5W0D7#@6DM$A7R8InddX2| z^N`06v(HWhh7g|#&XR4tB`M|6ru)1|899xI`1~}O_af{#$z=H<+l&Xkw?m;YUaSWP3#42sE9@wI^lpO`|| zX$$3c_5(<)WEjRo4q=pd7ndbR&FfsFq(??}FxQ3`^B~bnDdh#?#3of)Mr;J1CDLlz zNHfLiSQ63>EhYG7)SN>WAMt2`j?AE$ir^jAcc(H$kE)PN+J8XmMJ5bdSJ1P-Xk-E>KEB4tV?)$;$r+gH%*iXS1-hshmg@v zot)a%T2S-LLS))!SH8+QKO%@pN*IJG&>vbqVG51?y{uc2T%xBEChs(j9V*Po zEmo#LgE}<^B*_epCD#4=5sVAnH9BRQC_fg&QZF>%31WUE-D(Pb}E-`VYdl+Aw$E6>` zRwV2&ENmDA0aycl+wNN)2))-xxIc8hFzpdvZAjq0}eAkw_?_vcK0NpLFxN z*}HDkMVSnEexuOM|L2H{`MEuGHi+3&YXoT9PZqWgnNs)x*A7m^hXw~<*-?Sf7ruO} zeoC6Gjsrk3P9gDKGgUH?lGnxJ1^;K;W~ z0$tk9Lc6YJefsX}G&mF8E|QT3M{c%wH}n!Yi1R0BW12Gw>rcnw)%_cG=+mbkzT#z? z!fmEB@W@N#c`ayvpwe6@&aF_J$~DDaYroab8r1Zt?7jOiuq-A#It*2lg5H(?-^Nsc zPpM^UhEV`ABY)_Z&UJ1N{WUq2XD`n?(%>p5>HZdRxfVL^sKl?enR?2GVMer-Cr&~4 zKs=Q_aWHyvxgjMO3-nbQx%0@^Way*|Kz~je2AiE+)pa6rg*O_V^}zW?7?)IbfT1Qr zN8{fxxu#`YI_FTAC%mPSoVeI@s!#bx;3k)xA?^|WLbO>)o8NkzzHqPOfz$Rw5mj<{11*j=5Qi`cR89wu=2)R}h;i09-f}9Nhh?rK=>&%;1HRPe4&mT|oiZhMDK?qm8YQv`Ieipfd*(3h*<={P2_m=F zDhd;`$WxXqWhjt$ev?FAK*=qfS51-EC}{UJ-kcP;CMMkk;f7ry-sD%65ktb@QcQP4 zEf-i?bSA0de{{ftOO{NW<&bZG+M%-7zxzssh352N>XI%#j8Y4vPm{lv)fRyci47j2 z&uzXw`}0yX-|a?VK~DM!wrPja5w}%n9G#D;c0Sz`vAbH!y<(wCgU*2oo9cv_#d_eF zYYV)PmCQtEh>>=R!%x+>BLNvLH4&Js*RFdC08qu>Ww?LLS;7?GV$)z(vJf+Jb7WL{ zNmsM%DLNu$M_JWqsi48UjlRLqYzCbiZ10nC(55j!*@4|2e+ z3=gKkKNhKg#^Qrv=Sk&8w@M^!JYlh!Ft}s5;GvD*1|4VdOuvHi_-5(8hwJK<7U(@L zH#rwGK4u3PdK33Bt_;)-6zb}x z=f8|l(1C&Eg;q_41m{Y)EsVK&vDDY_iUJ#KpMBl+y-!)}KC+iSxWL7fudjFJm%};X zJqgLG&aa~Im4df_&+{dto%1y+|1%HmQi(++J<3oMM~vt4@x#vaj;(x&lj5O?lsnX` z7FyXAkY#d8WQ0%}?&5tNS2iGqJ`L&u2a5HJ?2lA>XUeH19YIRj2Al5CZm{>8LnjxJ zu-C%VxFuEz^^Gc;*C(Ip*1uevRINR%zc_%$#cgT?ex4AH@Da5{RyzIlbc#LL$@Usm zF6PByVX%r30xScpWAxSSB_NOMO7Q|mhF+1F07F2$zoY&=?$+O0v->-6PAncL`VK8u zpSj~30|loA^q9FSJE@vV+WPcQfCDD8$nK4$P2{P5XdR3}#&Je2QVb5Cgy~ z@ca#tGxR zWOJ9DmA$u^Yn9Qt-5a}$7qbk6mRQ7PN9cJ|QAl}%g8>E8>&wSiQFxG+f;DN@6N(s3 zhmq{5CKW}8X2X~wNbhg{cYFn1el=5GeZv6s0na}LsZ9OVldCMfh&LNpcZpFwcobA% zr+U`intlE9f8h-P$o@FSioGajc<&>NPIW#rWB}`zI|aW^RoQBzP2M;a2Aw{+4vYIB zh82>6pc-wl;R+zS4*vivGYA)@(T|dShMW!%L$hE$@>TV>pVIpXoD^Guh9PW^0kP{H7@{|$L`D5&ulp`5uDeF`X2{)Fn zg>pDQ-eh>KI9Wb8B<>yD$E{w;4)O78L;34cXst=>-z@BR&syJjLWUI}-0)NC>YN23 zAa@^?sMyGyA9^iCO*K=0(8;|VNK7AV_csMz6s!Q6>zaGDD7zaHgb(ADP8PoeVR7ee z6VtQg<}<`$a4y}0mhB6XScb0{$fcj5C^*1=dH{!s5AVisZ(UJgEnEo38J7?sn*mrp z9p9!1Z5sepS!`qnozf)^Yy@#79s-)CT*NF~_vX0kAJm4gx}h?bQ%pmeMk&bLvl|Fjh?&5E2_Z(%0T78VeG%ic3M0WUTxRbM2hjv~g#!R@b-`Q*aLacW zE+RKFgwr)#_ZTHHZ$R=|80dMjD9BM!aF=d-Gh)n6EtZln2;%A@_RqqIhISJs7D@*; zl+<=_^m0pKX395e&gK-;TcQnHs|D8DzXDD1IX4nhQO6Hk^De_Tf{*-)=2YPe%w`Mt zg-9JMy{zoH8pi$UJ?}q0z1w1`LURi$6DY@GGJ-Dwy9NT>DqX3G;A2Rki;^EYg6?;% zy)dC0v};vR{e&cO57(uwDrtHvZ2w=Eo$(*@iUpvD6M^>o|*7stKmKtY!r%$_;9=^&OduI z?g}BAkm`;cZGDkpA`ujo|5EX3$SJgcglj*gi2eCoJ%{K1H6&-$Rq<+Cd(-@Jm6!-*+2eJ6HAyDwP`tqDBo)h2< zha#Znbe|Rw=zG51r;3W52VcxRZs!f!`U;qmGFE3fc5wy!?3xI@dj7MW(1@|Zpr#82 zSMvNCL68PMhMzSdM*NgdvJe|;73~RxD!l5Jv?phZg@Oh;w{sgNqgYKGEz}WU6K#$A|X83b#NKK-}~4p4!Y5q;sjzBdO^^b z^cM=Fwzx5kSNbP%xNYx-5O6C5rotZg1NmENp9kIfQu!IR=qMdRdidgd+uIm-Tz<0G zGDGDXs`&)eUhmx=9Iai3?o|abRwJezeMEN)2er zOZue-H-kIsHmJ~i0k?6h@h}Z>;8IGPv$i^xyMO@@k%^=}uOzt6puMVJi!eD{gJQ{k z7R{~=tjn*$2`~4;Pg_9R6%fc4dgMV>?;mcq(LK8mzKTnxFoF z1BVwMkCemnXh3Um3NG2*f1rNX=-vnGl>**j*Ss9Y93<(`%1Or>pjaLlhbM(t38o|N z9RjaYtdJUL;p7lYpL4b6`9`zwQuIodq+F<+2w-g$FvJZT7XLoHb{jz#4)N%oZE ziPlVI_GM8N3yL1XE^6W7U8f`CRd6UT9KssoyIHujj>w(SbhI1aR5|z0>mzXAv!uAgtOyCfbAP}nA zlKt1C*IzN*q8P5@Ahn^k4P9eN$rmB|@iBg+YxfwbkBHuS19`QF2NKrRIeyS-8JrUe zrEQUs#m~sSI8RiFnd&JuI0cY=Q@(1{J@{r5R4Zk;y<<2XTgQ>_O6yJrM<`zbxc+@DM8M*>Si^fC6I3k1_{`4P)ka!A#4PC*6+f@Go80Lr=YRr?$t z`DC`4C=c~=jS6Kjv0^YwBGw(^J4(31IYsMIftZ*673rHx_fj}<>YV8kmFf&F5Nhf6bSpOyN;V`l)RT?c758>4Yy~`r`+m@{EcmZc=dDi3+z_! zOh=pqS=JF1_8wRRRu{S(#s~Hv!7y2dZ9D^-y{Z<}tX68TmzQ9C45k(gvnY+R+f$e$ z#xb~>0j-=ntCJoCP1S_nW0D3r0Uw|wO$rl_UOF18$T2YEe`XA0zGaRp!})87xC1S{ z;uXL<{&@quP9;urv*P8MMOA=v>m~bT6n_H7E@4R5S6x|~@xx9ldY1pvSEvc>E5D!a z!<*BH_x+ckG+Y=m)$3Oq#+-l(JT2@a`f;yny&R-K+Nyxdw2(28@dI#XjGP&S^r%VK z1#IX|$H9j4&P8INv!6lQEI`=Uo{J!u5QLUsn{6qT6=d2Te37oze5=(sGgXH_z zMJq{3rIwlOJRe)!<&=i3u%r*68d+OOj=ig=k0myOAGn}c2`+{nrca=R+CBxwBx7t zpF(II6SMD-3+6wu|D=XIl2s8R4#;x-m3#%h`K979_zFlFzj5}rg5r4EYM-b}!?s@J zsauDlAvrTc6~%J81Cs#KeHXwthQ2X{ zDC^LIv|K8MU{%i3JGwsqgPi83omy`vQ9z^Gtb28k&TCF~zs_@z2Q zgcMCoG9AtA(^Qx}92Em-uHtGhNOF9GYWb4+e&%7VmNclYP-7>CNxtM&+N5t(st&Jp zP|$X_pYUc%&HM0hkvpLCxyV-zdM?O?@n#OrMqVS*+1xY3hhR7!Hr6aks+YN66_fEp)hL7Sl5ERr z3p|Hy10IT{`8PXZnkQW*ghFZ=zefHOCB?lm{@gj)E&|=?3~`4g&Oq}eRh`sP1dY5V zL8yp-c3Mo=oU}%ty5x8eZdGRB^OZ7W)_UqGY-uzV`CXGaV6OLF1x@&))Em_F{xFanLAe374{Pd*AMR``He9$C}NOuFnBjzNy1@bC!J9 z<8l^Ga{+0J{z{aSPDjHoxvR8^eK|0T*BQ2fSnRVN*yP0Yu4Tvo3KTG7e? zTd;=MtZ3Umopa_{kFKN*ii2bD1szZa!KM*Hx`}SaehIw?RWI4`y(pp0%SK2PB|W|N zRx9{t<@dQteov;LQgHV0$6mS-z3&r43k#_tSxSJpK|(~!kTFmqE}ZyJ1}A<(&y=DM zfo=;W|N1gphr#i8?@8$#GV|n{r$iiDh82PJ(vlx5dYI^cH}Cuuy%hnbiwc4%C?|!q zGQ;)2?mG0{)4ELKan+sOh{*qtD8f2jGC#K)#v+}o4$0MEOTtD11M4nxM4(Hh8t(x@ zKTnEZ-I=fD9D&xeBe$LGaNyl@_jiPh-a_#t{zb3p6({PaPDbw_DfJNU2CCT91@Oh< zo`vpD1UC-yOX-s*m{P}yC2NxLhN*{>qIU)CwV(Ksp}rNVt_lLSx-)kU)Kjlj%o2HnE37EH)fT8Zuat{bFW-;$Pr-9j|&Ei@=RnO2s2lD@R z=}cwpC|5=24W1KVB@-OzJxXU-j%D4|wm>YX`Afv#pUR@XQlGcGZUQ7iP)tm-Bkc+}SGLoa0pb!L3YxJ}RMDQXCM7 z5d!>dLBGX<8A<6mp(vGR3SDZgix*)5oDovvecR4?p{fRYx!1_Qpg^S=XEQdYJ&@pR zdl-VX=*bRy)1PJLfD%}$UK+jW6luj!0mDl24rPu+V)Z?fp0v-^3s1JWqXp54#j)>@2{d!>(OP6@4r>iuZVv)RVW$o1BsVzP({@}^ z!|Gd6pHCfh19;$97|Xb0$kkk#9K(}j3BjVh_J+59UcxUQ#X+H}WDy5epZir}&%7_?H|^CGtK+#kTvS$kT+X z{NtTGCj~(1&B$BT4(t)uzN4Bpqd}HJs6gsvF(3vH={`#$BT7AoLc_|;6NA&G&0&NQQ!dq3{^RFlnfm0N>VWsKX@U&V zQZI|ft?bbpx~bQYdL(L-F7_Br+eKD^58l+5Dp5vZHWG4cV5CUwJ0=IfH2PjNpY1In zQ2>a}0>dlQdWxv_U9Hx!4}#A^@s3R=C5tG+$=7|)e0Zu~ zr2oD9aIe!5`buAr98w*E2OEe`D+*UrKo08>)gmYc%D1OOZnp+CJ>%^_j+&5oDf7lD z)4*eRM%$yEeblX9M^t2CICMp;1}&jJ6P`3Zyr?jcaztL|NHNw; z*sp^=J4ht(4$)rHtG^e=9(N5kn_`hVI;*%T=T2IeX*TcqC9cefBsruYen-xi@Gt^& zb|1b*QfnKU5@+@0O_wG)7TiO>eH&^Tk>^LOt~0Ld>ThWSns_~yr^sw)cA1(OeIzl) zAb^>(Zp-4w0l4EyXFsG|l#uCq3#>o_yo{kAqxpPV3r#~vDze@?DhVoOZnr2`qnp3U(7Gqz8S;^c*=2x`mfWqABq1AbkqrHq{laJP+RQHqrlmru3 zT}11#L7SpEp>K5LG_b43Xf0cwb#D?AugqA@Gp~bhlS;(B@w4^pH=9B4?@QyGp|bXyt#zs(P<>&=EHl7S zNS!PRyayG7dyI=#gVC~j*tEiRzo0ocjkgb3B7c?>I!(occ?Lih;>vbzH$OBcikK&1 zdt&P4fFo3goV0B1=|a77LdyoDfSQoVCkrqX%g)d&%FCSC=xF#*JA`$$CL%ToHv&3; z+Yfp%+g6E7$FMA7qD#~Bc3l_hpJvo`OTd547U9Hh5T;=`pBbq2`0RU|#jR}&C#mKI zUr56YB92g#^Z{aF3$}+PC$KA9u(hC)#T&?%1tWZr8(@Uyj`D(#<#LPj*zI1r@?9Mp zPUZ}va9t3r^l%l;Pst?cM%DGLDEvHFg!d9hNZg#^wE-4&l1iyw1K6CrKK$lCE4~S1 z0(&n|#uGkK=zDvPPcFfXt_LLgn1NvGao#)lc}#r3)E41FvXe_r^VG*7*WMK;w`?#! z`_8@MX11%$^U+-NX4gO)+c~lh%;uS5LN$i5W;3c&Ks}>pO}@vKfyrtT;29o{a+7EQ zY)65#p^Dr|MOV}m$&gY@A|@@!Cc#IF4_Jzxz!aa?S6h^y4?)uXMAROyVF433(Bm|t z#p;tbAeKs$Ix)X8P*mK2&msO_W&Wt-qMB+g@6Ye%qN&lzG;Pfpp`f1NKu~hsOW#@^ zo8nM$=v}5Pu3~#rJF;VGP{Y!HzNE{poswLr9+Z>cy&y>%I)%dhvQyQ=waIyBW895-83q_X2`{IEOOKKv+TF*r={ zVayy1^h>3jtk`1Dp~gImX#v*FYd9uC7ikH$@#aQt(zx@aLnfZ5VC@BS#UrZX!K6)G)d0+Kr#Zd9%x ztg;{o#9(pFb3IbG{}%?$wGcQWqIbRzM-Vzl=!k|Ob&Oe-D`e#AepGtGiD3$|s!Cdv zl0S2i{k^d*bP&=*1m-ZTzfR$UU4jB36mC^cLi!I`&!Z&*^d|R0K<*pQmm8=Gc}?u? z1iYmtZQ&-1gG>3_KEC}j3j2nYewc20>`+*0Re6H#bphnDCX&%l2&Q;(=N(5|VuC1H zOn69LGx5Fi6usrwgYS%Z38?Xsb_M9XfiwxU?OG_T)ns=%ve$W`#z?$Vo}bCn>hBHoPdc~IKzQO6ase{vAI1*;KqbiBda6m zFDfP3RCJSefQ`(6%g||Cls#D%@nm}IYB1RH>(CQFEy?4{Y}a4sNax5?18D$=78mM2 zBY%OA*@ssfJF@~^IFy}Yca#K8Hhw!nE-c1{95Jw zueM1K*L`M6hBV=WEnnlePx+p{wj|_IvLD0Sw}EO9$R-V`t)HSm19ccxab-%nb7koa z#d2I}&=kWJmfCr4D2JF{ldjYi=nfzyjwN#Ine+XU_qO~+uxU*3gmgU`n3wQksQ_Qo3_ukh5N zyR^BW_yS+}?@FG5M~b6#mcU;0H#xQUht>jTs|vr|H^&%mixw(zd5$C#x#o=2PgiJmY%N;2Ul(CDY- z?@@}Z1|KdWKPBeR9D%q_PWr%+(v;-2 z3;$S}98EEJO~oYa-MNTmg=L48n5ve1aVI#|C%LYY751j~BvGm3M1<&qPRVdq~r1GtM^fm%#o5MSmEqLWLO-7w8_(b9L_7= z$vegxlns5cHR*DJx)TOy5!O-pgP(r==r44q4Q5s&$*`9)wC63~~lLTkC z>A&lD=Cu!Y+~rc7ee~Qbs;Db^43sedQird2%tT}7vq;%k%wc#@D{YkoN5i|5z-c@cmLE2dZ&J(CW-H#7c# zTsbH4&-+HD_Oqa<)?i3vTk2m~4Wgdo0l@0Wg&abIkyL%T!;tWh;K^}s5f7`GI{POF zoEdednO|}whu?A9o;!dbJn8n_1Bm!qtWa(+U&X~e(@YA3|26CCzyJqo6p`DJo^@Ng z>aLm)*BhL6|1a&U$O|@lb1j_KLP3?2`=A1;0Uw%7W+K?H<@_Ag)33cPqHcNt$*1_Q zOnC40MFZKCp%{k6vA0zWhMILYiv`7d4!&HKpQFIn9vHfA7_XaHCmOcJwVWuB&DnBc z=p2Y@gCS1D)1h4wbjR`NR(>qVd-I!ni>`R5JGob#@tPl~SB1A4iZ{Pq|T zpC$nlRC9UV+e{b*2f%ZgHl#*>B#9htzvX6~}ipEsShy-hyn}Wz%=uz$i zjF~G^EpXgsXRDP$0(%FSjYTlsCctC`URd!m&sOn~4Kd%rAz4sZclLEF=%kK^ob;}8 zI{-sHL@B!78_3t7FZ|yAoM4(b5%AVS@2f)o@6#hC^@v55-N#h!C+&FImcCcw)*}D2 zjJ=33p&50FK0hW$!E=9Nr?3C}@;M#u!7D3MbKwJ~8FyO`Cxotc!M`)DS^Os4S-JIP z$mZVPMn69BjD+W7mb7rtGy-P&In#b#l3LJU;hx`4Rg{~Vr}Bc40grT1q9Dg^acrOe z;^g*aR1kHz{ytrx#%D+L4iPJYU`$4K){(ZK1vC05cGOgJ6eC(aXuzBEmwTCyUJUgf zx?06Njv*O6@zZ_m0mk}P0OImhqciOZl|RRXZp5TYv8cvRtEc5pdvj}0tLvtMK77|YK?zC%ml#Mex%$3 z{oW`?%n~>uUzszh&$?vW-@Yxeui4=RrU$$4EWU<@-j(76lBi1Fh2qS+YLn5APYVzi z@nWCx`yUaqyk)+}OWx9J&ipGC{ zK#S)bckZ2c2dku4QVs*kzc1= zq_9pe{2<3P<38h{m;cPnfQsbJVabEs9tB=kC8UHSk#{2fq!sAv3m9s2cWD?mA?`O- z0yxf}Ekz9M6A7#sG0cob%-6?z;eiUMcYkeO>MVeSEQ??w=5&iat3^%yKCtiHWg9Z& z@fy9WyXt}8b5H)PRSFn21ug%+H%U=`56(k~kR@8f`}NK=z;dl;b9Z{J(Z#hdpypen zW+duBLvnFo)kPD5gm=<^#D@7f`O7Zi$86NyFg#_5DsPyl+gA!NX6Z_331((W)$kR zYO7nULPo#NRss)j6;(#}c0RMUHa2xeQ2091lx#t687Dw;j&?R$Cxaok1g*=&haslq zOS;1kG-ZCEM)Tc9f>Vf~k>g>RK@mm+INk%PuOD2TXmO#KE(XQ^4d4AqiJ{y(hYdHt z-$8J_MH2BxZaYxL$JRXc@V)_dM^$ftQhc`*bEqYlt;91o-&$g*Xe6Ps6%@&#jG50n zO8zg8vVcd(-h}cswT3#xC#(p(M;Tvp84-u=>6&=N*9a34&`>B|X?Zz)N;!ftzlv~) zeF7sVL7tLk96S-v(aQ^v{7Pr?_8V=11%gB=uL$sZQcoJ?>vvM1&A#rVM z_Wt3}=*eJ~kb(t+ByM!jcKYmvU`V36cVWBXZEhA0rYe6+IR>pnWtQYss~)T zw}=GPmn-nJb@^K>FbQ}w&2)+--oIr4^*@2F2@qR9P&%yTJjfgrAY_+lIN-z}H z`y7*nUN?aR>!(__H|tuSzsYmI1vf({!Uo4uQ@x%O&(VB7?wi^I;+k3$5c_PgdzA8^ zTUCfbHuRMCjW=vt9NbeL_eS5wna_MJdcH@<5As}XM4!UaT@hD#%YwL>F10*d&!QRX zfWt|siCmQI%CSz?=IKACQ$kB--9yKp&m|bKi=1H3iLTJ!r4<9ww7l=@4eZRlsoO-1 zHtw^fH&yY9_Qw3KwBCX7Vl?FaB=K1w1slia zgC5%-AJX#s7M2AyKX|GV=?fho!Ov3xWQ7J|3l?CaZ-f>!c2pZC`)=ZxVE?oUFm2t# zs}5q<@{~x_!wFJ~CCr(0I{F-^tnBa-GTmQQ3McN+#RM z;6Iw~L@K3zF$as{tmU1*DXOsAEsUOd30dGMnUyKt@PG{uw{H;jOn(LF^+q+Jm(Bbw zDC)wmi;C zC!+2;rbWpMFW*YmG|*L`M4JA3L@<+~AYZ{Z(Keez$k!6`$F`U=B0SKGVptDIjDQj| z%XbfP+e=6AZWhT=wjX)YZFqzV99-@`o|NRIi?ci@#jSe0X`955rr;M^9LU!|bg zlgy93AwJkb5ev3e9=Xy2I^W){y{UZBn8)08@*&=N_(7@wItAlJHvtlMJ^457fwDDQ zBfa0!FoO_Q0N9oyuSw3V3ZHP_sNiIk2luu|gOnw>T!p%(kuJp?dW>V$tdJFH-RC|a?u;S6#(6pBB zWn)5U))9zriC>Sb^5kD4!)jLT(;Hj+Mm8QpT3%r1zuEM}0yfcchcjq{;nziz=;5*5 z|1MFqV0glvPiBuWs_DsKw7B_OeO0>XytyI|xlCx6tD%mQ3{vc>GRxZccBQci4feR} z)7NjK3xsUf{QHsxbr6zGeU`HX)AQ@do0B(e8(f!O{wTy+TQSS~ zVNwfXK#yBeWnkp74XOt4^oJe?V-ZT;$KOM0vdW8+==ml$m@6Wr}7c>T*~Nv zsZX4;RX%+QE~d)^X9{!vxuJcUouWAQ!e9rv3`_T|ba}V{_Y;*KSS}^;#oV~Q z*8MqrT8K&GR-@ovAC!0Mp^9)0PkI5=Jt7`3f@$)w?Ha{?38Mh67^37YyK8aZbI1-G z>%gAU0!QL`7g7*pmxj`nELdazo~8pD77#WQz&!A>@ZKnlPK;~?;2Wc#9hLO3{Y9Qf z{dFUl8|sWHdZV#&Ol`!6u$=b}5ZGBl$Z?Zj$b(lg6GR`Srwgv^!FSF-^$yX}=2!?q z!L^FhEJ<}6(7suT!n((qKZtZQwz6koXHsz#xk4{ek^Jt6I7iuySHDaK?^vp6%}pBV zWG**`g$xGuoznrRWAmBVXg?q*z8q#EXM)fZG;D$guF_$^#q!IMB1r_jUR1- z9kyqQQH^a4?K)b5f;=MqtRY;(9x7T%<))AJYp?Qt|0RxiD9YTRRq-~_G{K3X$M>W8 zOdcP`1{~&)F7v6zjgduWFsVofYYNWu2RPWpPf>+p{d7M|5y%|mDw&f>QK=i&eSp@I zdl*dZNJu$Nf%W_e^DFTbLgG>2Y;5LM{l`6nyG0f3k(Wz7^i6H`m+>qykn9;|73puj z-IxQA)R1N!tkDyN<>3NqS|?`n45z5-b|76cXBv6rEH5BK|1WQVJHl)Ia$!^OJ(E-% zK#TU_UUqBp~tz?X^mfKjd5e?ozVE%#9H}&yQFUV&sZV#i=qxc&Dh?#%~JIe%%Xh0o9Fjx5{!nKUV#F~Tr}=@ zMnq4b6sXahPJTc|CjFX_tieYRY!%05WNZfYMQOje;WgAb)hV$2Lmjo3?DFpyL8N(L z-iXh{|85nW&4Bjo1z96?O+tS&J|zbwc?x7)E>Bp;uZcy4RU0sj2y#tm$SHOjQ+@|5 z_K{EAU1Gub`iKgFB=HR<)d6qEsQ~je11&>NS7n-++b}hs@G9h1PfkX- z*vfWWu-+3W>zkMCxCc==Zps~bv2hQ)%{&MNOOb8k>f=J;06DfH;W7^(0oV?pf#v1K zAXxdxC6z>p@mhz}IymHsQB8;9S+<(IIO#Wojnmnmi3?r4qF|}4-r8~U!B1KG>#Krw zRhGb(*oS_HiPjxOW~2jCcbXFDdtIad&A-)tkwTE|cJ_cH6 zU7DmQ1gFrZv%I7cvz!s=oBu)`-l%*2wp99dJC1bdll8wwF>QQT?10_>Y6uXTSYek8 zqi0e0#U=(O%pGxI{4AwSaWtl%R5A~G3Rce-d>+HWv)h(z)9N&(*oJ1+-7>a``^_Kg z^0@SULUTq3JcIyB2UE81z5D1g|l3P;=I_tp>G5IQupP*qd)2v*1QX$s@31mEiDYMB;4 z=eEA9?a2b;PrJ5^Fg{%lds^uSq@{;qBKG6ILJJTniCc#wsCV#FL^)XqW&musnM^1I zZrP(jK+yf+5w-;4y#q}C`^9W_bFz*L3;tYPHo2qDUZC(;{Brk@sofv= z;b(G|c8dI2KFZRJSkGrRfI}rLw`^2-nPM5DqbKUSQyAb*fKavniMl=`KD9+yx^7OE z&8Z>8HE31`n6HrBQ)~Y<1SZK7a@zhAU$e==Q}%dV24r7)DBBH;7ec7>)8e!|k7G9- zwaa`%aqfUcmR|g_LOj@bbN{aA%Kke}nVhJOi||BtpAPuE?dD+Ccy))Q<+D&ZL3QN# z;WlilLgbApU!}I%g)F?R;&Tj_EdWa6PV6uaRGv7d?V@rweN;Kh z(Whk~X1(IpIsI^gZ;)1>o4N`NYW04%uNJC14gl6xOmkgDb&+bs`|yQ^$7T74u;?Oc zHmA9;_nymNOz+1Qn7fv*&^iXLoIh-T4w7d|Kav|CgDGkwab(H8mX8F#|kY6Gg?$Ql_)RNxziyUg8^uCK>+<(rP)4~HF2^U z9q3B)geQ1@5>|{Qyb5g`)+|jhutnY#n0hc>%&4Lij1Qf?u*C!~{?G$mlNNQV`b1RN zpHp45z(*S${DYAzXpy6E#7-UM zwMY?7z><=cV99R7G6i^Ms_zu7D!IcVq3{Q~JiSaf-~-p=UG!YM^b#KPMud?%QN+md zFMv|vOe(a07Mi_RxX4|w`fS>Y0h7ha{-LhMdUR^FC{1&X3@Q7C*s?^rg~Q*dAakWR(M@qs2@V^($zgL9TBz>-)`|%TqjG23bT$q<9vM ztN4~)ax<1|u30O3k6=QhO_dwm@jso01l83BI6imPAjxQ@5Y!$r@vCr?58gQH{Btn0 zkD0TI<_RT%;VJFaXopeKLEjXyNlt`0(l-|~7IRI72})M43;{XdsUe5pTtL>1J;ei-N z#09$sEAXXE~(wLYWOe#8J=0l^ZWZ^7Dgjuh+|rN|IWUj9~!;D(h%NwRR!| z+e(a0;!?yH_f3N(#ak?hU+d|$%$p0J%8`f$akJn0Eag|d*0wf?5Ca>eq(?X>q-7+{ z_LNwqaoBepSV;+cw)H*KRG$!8P_3}_izHh1l_C3^JvnZ%F^Afow1;<$A*A|8tO7B1 zH00yis}kVEidw&2Nw5fL^3cv7*);eFSe(a|1}6mhn5D#u*652kXt;>~sIxig$DWC# z7`;Fx%$~AoEqx&Ne_G*bZxrZZL0SBj%mM*IP|=nYS;G{o2j)+5wel;O+3-|^r7vPq z;+~GvV>H`~M4hFM0&1t*a!fkJ&~cH}4wJODch=6fTO)C}PH4n2LN9y#GA*E0Z8^id z=LcVF)i;m^B4@K<`kj?!(n?sXVGC;xoG_sw>M1z59OeaZH+Mwr_fLK*89`AE0$|_N zc1lm(d+?SnK?)2_C2cGhDa{L9g*F<)!{YS^zCKE=BQQiQ@P`{ZUgyyn*HbcDtIk!C zyuQnM1$39r!4xgp%1J~n{|`)6x{)63Mqka-&u|eGn<}h-7yrOYkwTT3*~j4&#M!z0 ztd$!i@NQHT*c4kJt_3gn1x*wXi`v=)mDg_esh{+uF9q4W?-S(Nu-wU8<0DUaqB7$N zXs@W{s-kLZsxRE+PU&7am|N{mv}xb8LR)S*Q=5Lr6oBP)HkA48_TgmJtlubk@*07- z#76V`C6pSv_SDyyup2gv)qKl8-VYBy=13ZD&cj5?5OnV>NXb>EpWl$b!ANFwP{>x{ z04{VF22l02!&V3fu5)QEwnLB%NN;;(ZyABS`h|tlvr0+7V^(zYnX3O}$8s_*tVQL!z*_ z;b_Tt03UksM)k&YzHUqJsa1`aUU!Z>uJbId~@Xk5M0`lZpTZIJ`DM;eS(5$gbG zPb*x+sD~lnDj2txwW3AagXcgX3Wmmrv2~?=jPW$Cziz3b;k0u^K=5U~O);cj@UN$; zyn95KpUb5`y^0g(g)Ef!1Li8&Mt@6fJle)E->Te=fgQ1#h;!0W=4^6)1u>URCZmV#oa&mfWw|DZhu>$ z;29B|zi>rC&!+$EYNTuXmJwz{e0E@CrHJ zaIf5vMh{KQ=rsb=y7MRVIRvogbTVu)lJoz$uw9@A)4%o-tAkeR9Lt;E_EK)L{HB1; zqsUXUH@avEE>E#Vyh{+HdN7o8f}#4pGm%#BJD2}Reodwp*OETgtcQTdlUg;BijQH> z7A@!lt)8+(yewi*48dx=q*HC#<8D?&?bzLK`F=Eo)A1c0W<`0vy9xx|`bu|`$tdO; z>>yqlQYU)VD;dM6=182HBwhn#lAph9Ui+X7@&f>hLmKTSJoBV`7!iwk-nx4x!`vW2*A=$71-1D!F)3U|%+MhwxJVK1d!Fvhke;pAhTcw|yj1*w$JbSj z;fJ!O!Rb~^?EO)ym4h5Iy<_=qk4!tHH)F|=H3c|w#uuz}==qP>9BV$%4Od_c?({#&8`Q zgNU?eGfJ_qWc2zjfd4=vkrz(+X1?-zG()8T68d_=r#PHUHK? zJ>pXDXWvk-+lI6-e=C*x%pI{>@=NWdu z^OtbT0On5*ZX6%zkKF+74DZUv6OQhMGLY0@inUpKJo7mCnL*wMF2}=={uXOI3C-ot z+RX4c{@AXGR=Nkf!uJYS{eri&!k2oUJON-X3c)g|YcM)ct>)Z!c4G?9>uHf5F0bBr zSM$^_9DL=lD`e3R0lvz~mx7<~PNwSW)fiA=V_?zXxT2>OA6`31ZoQ_aj*U0k#Q^cM zUoWrg1Z9A>DNd@RWdN8z{F=j;YtKAxT8#*mIecVNh#%N%ZxAR3`wNGx-fS)8ri6U7 z6XZk>ER(kDH?AXJaS30{zijrIscv1(_3Kq>Db<(SuqBuGXrr@0)vEQ5i>ZCiQ_&lg z?=N+;W527ov?bbzdK~`{haFMT`}l?RDJquTa&Sm`^T|E$-^CII;hHo^0g&wH+y~N$ zdfj4Rf6CV+7m)V1cUW|>wMaM2K3PWaIHw!wb@r3LAB72m0|G7boZ5m)gpKJZwHf%Z z>m%gg&zp(~KC+x)ysF;}&--z5`@Ix3RT=h>s&+xBh)wbJjmyzy08?=fChwT;Svc)Y`p_MQe%4?oS*WCqyU8-9^S-)koCcMwURVO5!!M4%UX9J3Bvj+Mu!GoAXw zkv}ZToL+*goe3r2-?DVm3K3yIa2=pwJbY*08Pd~hrn<86VVG0aSkuJQ`=8Aq%OC$W ztemJ|(HSE69jnOKfQxpD}eTg4aBOyAMS1Mb#=P+vDswY6!c9Om_XM`3wzJ+CRSolZVY>C?^s$yl0kD7_w z7hGChAj4vMS*@n@Rv0H`$@MAx=^N`&yCQlA-0IbbVRY@9BV))^S3P2Z7x&3 z5V@fh!KJxaVkizZ$XRASa#HO|8>{sl^jnu0*-Ev>J{95OZ5)}H005_U<&l;LoZFWF zcCrInfhv3;q>YM1Q7oRS6{kN+aVnZjN%OC1Crt0iS6RV~ta} zYC`#C4e`2oTdz8MViT!Oo{8t@Q>SPX42$LFC=uw^`TLMqEPS!>M2E}-hgWZCRp+~O z>A4lI-Ab8gKn2`v#C><(O?yIK>usXwj(0O;z1~dU$RXQLuio_iH=DbFVi5rt$?a^S zM&l@|@V=Acbv1g%OALb8`7pdYqk4$N2Sdk%l=v?CE3+w%S+?kG{vYz90W5{iv*vzD zs6nPNb1C+2h#OovU5&M6Z=n!(7d#66)vB_S2sA zw@oEjBk5t0=OSD_@XUG#908OK5!)H&mdmwryt6S=zjcOu8guR?Lpwd8)dzUsdj;KQ z*lb#k%tJ~YWQIjxQx-`9b|7+}b(fH=%k98o@b#ojq=GO)&;B))Utg;5q%ASAR+G&PrdCIIQPaMb_*U7JhHaom zEZ`iBlCCAaKi~4{jnYg}#ADsG(iky4^+GiAWz>WI5PGg93IiK<4*OO+k^O;x&j7Al ztwWAbc@mhI(K^cx=fhpa{*M%T&%ku)+Ag^k#tZU$`1UUYW6tg#=$vtn;K7*A+gm5E zHcdXywjIUE5gtW=o@U=4p_|3fI7^*AbZTfZFafFrvVYAwJz@y>-=X@zXT500_L3Gt z(OLTFyI7>~!^Mu+KStaN&wc{if4K7!t>V1qD@Q(Qpb!9dz-3MD_~&XRSO-~Y&PQg9 z?fcMYDE!~S{W-8OL+tYA>&YJD?2(gZ3mfTQK(nIBRI<~I-z^C0`XhD;_0G1g0cE8C z!}-dwfE3wT;0KKgApx`}6O`A7u78m)Z>Kfpskfpd^EVtjwDKVNqqAO}R8+c%QfOco zF4+Vo*?(g3t+ca56y_heg2HPQzl*L^+`$j3L;0QCF+;T5{b|cN41$KUJF>!=Z3^tqgk)1UH5-8h`$D5NbQ) zuWGoSjiN#$4Re~0tsu_Z&e0Y^A=*rniu+};qEsI=jh0~l*aJb9zv#ZOt3{}`r`5*a zU9*t3l@EfOLz>jyIj08);8!mG^GyR!LmR!>UWfV}YCgG77j*cxj+KUh4gYQser! zKOY)r3bqQwam7ouzK3J1YpY_l<^+=%ni~qAE!jTY9VbGBBqnM=N1C<5rFl|Y77i;x zSdj?UsKB%8Q(y@JL?_&uQL?_!yR-$LY8Oc6Og@-EYfY8|DSC@vwe?M099pMKlIKeZ zuJB&fu1gAUr%HA}9d(U>k1nQ9e|B1Ix1jA)QH!WF~BKH=x`+km+#KI{!}k$zzJ@# zSB^9HXI0$AjCoHjWpTjkK?)JnC>X`ttwxNeRg-hWS3_dOsMNVGgk%)_es?0vps z6s+a3_4FR&L`qb4fk598YLkP&G7CFR0gNG z_yRGfBX$%9k0;C>9E_@TsHpea?;O{2QxD=y*ld?D6NFhMgVP9lSf*9{Gg}Jct0}>~ zqMx7Oxpge(hyhkTWXWuJi#OY$sXk)7G{~K{zJ?Qll%uo(qD^}@4PXHGC)+ z&Xn0~GnnX)oUFwj-=;}tRJE%PkJ82r?PaU9YBKoqvaj^~o;Y5-;X6u!(#6|E$o$O2Ho(l9P`9yA(^KUxm;bqfcN% zj`%+e0H5Gb z9j4%Uk*<`Vh6+r$UQll09(<3tiG4KO`uT{g4?b#}pCDrC(RUgv0Jr*#5>A>nmlv$A zptn3IFjx>_9&;yZ(^DSb9D@fDilP#4y*_Dyg zoji;9k}{%K8Pr9cK)^U`>>2=IwYmU`Ye*&#l#ZiGq)q(tE0vn z)u$$Ns>>SwbllT;rDBfJoY}G^QvUEJjaTw$8epCug zZ3AvS~&?gv{nQ`pWH~jH`|oRui{c20kAX zM7&#~^D%0iroBxt9x0F(wfIXwyTC{35Qb`HrxT`MQy@oz*C@JQKjuQ{^G{r#xtgoh zyh0DTkS6Y`Aq3`mhU^C}2*OITXt&49n}4RCV-YRlgfA&mx>i#LIEFd@`t>?RkJ^yT z1G`d6kE~nf!E$E7%B6?4;NpiS z9-KPOL-+FJo_Jd$l=-)ADeWFvBle2!fqiRxhTihyKfLd~3$I&USM;|sYDnDJaN@PV zV*CFs%7qK}1?`+P+`EM|LE(GDLKHqP?t>su@Hj-qChUxErXL+trOhV^4i>2M(yz!7 z070Ict_pIC(XH(~q5^gj0E8$tGluji#g4*Tw^y~!CONiIyyoGgD_TmIN01+VH2Jm8 z>D1rL4{P`4r3d=DtAe=*A^)8oR2%e(ML`|rAC&f33dJQZ0*M1O5;u{Vim>=;tu46X z1)6Hdc{Z7ygH0UK5$%@h`6KcU~rpJFrdNQ~=$NhW{0uqYu(EufYvsupkD<;*-B*;yC=p%E7F6>G8 zYBRDv75F+FRYEJ{*O}nP8TQXTY>t6XDXPZCmro%k=6>b^YE;J2{D$ESp$5kwJ1&PX1&JwEpU3(VrfBzok^!Thza+U(24_jWJMV);7KZ+)~FJqQ1JGr z(1yh$A1nrmK(6oo?;?07HIqt z(9*MdH{R{(_-pg`iT^1y22c-$NdMp>rfc7o04P({SNX zgI{JO|A5;Jq_2VxNabiJm)($4cYB^3(pX=3=Gs8W}DeQo&_pZ7=`$V@1>xu+-(MW#X z9P^$DxPMxB3)g!)zTB6TG*Zhu7&roPIa!tjqgAEn|934i{l;TnG58mGn76piB(^T- z_K>z2hiDvn4tzC7VQl3m!KDb2TkIa9kBaRKkT6w1Cz^$eS51`P+DAKDKI&^z51eIC z-J|x%pC&!@VI|r6N`)W@!w2ucHVhlyv2ALr>Ip#*e}GPovSbd zh7PK=qgSDbU!M4xP2fo-veEH1KHcOzAOwL`akW0jXdxwT7I00M|mv2Bd-7r{w#=l zpgg}5;e?Oxwn>W&;F9C;onj|ND2jS1Yeqz0A>SCWZzTF?y)%^Zi!04KEZcs;o0*(= zMF(&qZD5ZgXXTZ*g^W1=AjdH|i53kk_*Y?NE@HwUP(;uB4MPPdTq|r7VeKmZX^F*? zms27aMcho&v2V_RObK|NcSS}mhf2!R*7E*^+xB2dmnw`H8i3P5uJX(3Gc9HSthw<2 zDVqq7sd06sH}XZ+edz+>;qQt&C+Sw0(}P^g=Ko0CXtpf79aI=A6yviR_?PSwHo0m(lp{O)uPz%Vj3=nz>=2vr8=PQ zA@OnaJ-rj6O;k0LwZ^(UB^E1ljs&4#p#qH$Irmlm;>_tivYFEbyrrd}X)`)jqrY=f zRN~g4MZhh?LxoMZz>n8}3kpP()|E;v6m*p4a&tUJ;L}C!#SzNTOt+yWdZ{$NlV4D& z@loi_%-+3sT)&+?JqY?~7MYocRzbH>q74RK>@F2tba7X}P4P#1?TWDr>#8u*9mEJP z0v6z|)|d3{U+;gyH>hE+ayPoyqQQ$Te zm)BG^8=8I;ocYK7iO(*$F+TCc26qrJRyf42_rMyY<}|qy^?DMj1c)k+(?5NW9r(M! z=<0v$tn0<*W?9o;CRgDtE=#lofRONjf~IBhts1rE!FpS;)wRN%bO-W7GD zC@2X$Cfo@q`d2$29+j7O+_Csl2NkhRrtKL!{}wMcNtjmTi3)w`h$d7Z;QcMcsO_}g zove4TwqlCdx9V!Lp(r#n^Yh&a61@3BO9pQd+Oq_PT}>Admz7I&WIw`Wk1Jhm!XLt| ze<5|0?8ZWF#LqL~=7yiUVc)pwpuHmF;BmUBZkKvAIPU=RckbLu@`0oAZh_P(X-vnM zbcqqKnAzDq^hHZE=MNMlk!qb^cHH8~h(sRArlbMr_-B=>H3fXay;IoRpdDeN4ZRI4 z18)D{jMC03SEkFm><`X#o@&Bul_sKUQ?+`pgYte@o(E2d&Xsrw z&t2H@ljji)G(EkxadoF#3r$f8qmmb4?|wT9zX#-bSklVD!XB(-!L=OU9YHW|>TYpDWnF5x!O%OYuk>;hA}v> z6m0px07#lnxvhPBokw7R*?iF(g1UQIVqYjFHTx3~C|sp_I_b(-Iq>RPx)xN&GOWwD zgeOA`q;%?^Hi3qxQ6n|W*y`y=%sSk=@PK2rce!mI;lT4U;zOk#nyEi$3%71721&*y zDgGf`(cH%v{_()|Rx#iugu<#z<0E9#_=3l_)X*n&e+LvwHIv>AFq}N(8JwY)NU?tV zKGNxw`I_&oOfs5_FKnl731z6-VhojO0%Asu@Aj)(kTQt~3Fm#BAMbT}+f@nn9Aue9 zdaV)sQvxiIINJ!IJnX!9%0tXT>o-pghQ`17#Cnj7%ADMWjL_gfGFYSY`d%Nhqr>EK z3`hYj{?0=q{=6|4lEpFw3$jc~0dQ|LEX~&fxo-4p6F1=9y^pcI6au;_9wHW9I~<739eOQlhvyFyn^lkrTzeItx5r%SzWc|sdyJ9|Y zj9EiaLK+=LD=cCSupbquJ<~;zYMiWEADaq_iAdl^tj+Tkd*Z@U8g=18hq1n^OO%9Zn&oRlpuN>?}%d=;hL z4f8z+fNC1(Y99+`Ze9?^k}^GDUC#9HT+j~<`_vuF1oOR5 zF5^{gJ<^3PywOzP&w7z}y?zC4Dz+p3h_q+t~VOT$s&$(3KhI%DmWZ5@dB9 z{Yl{3xKi@V?y2b%c4BFfvUz070hKwj6^iH|K=!U#`{K$<-wId8-t@84GO!Lime>;0G>qsR*54^kY5VQ zkIfxXw`$p~d-R6mvq04c^?jj53L{_FaoZ8jjDs~j@a`l!6(;=|xz5YF`&04uK8pvIV zc3quJDzYaQ09XGC0cT9R)gF$?PWx!`Sn1Hix=wlu7kqV}TS(-1`x5UZFq<#H zKDh1!%gN``eQ_KcYn6~*4-GQXq`D|MQ>QN2m#4{z|#P5f*?C>_}}PsvFb>=$Hd+UL3^!VAadfyaOyuDPUakGex31dS6U`mX*OX zbD8}e?TzThPW9!J{zZ5w6-tj954?3iyk-A{%*)piQ~`gz!j4io%a!Z7{}%Yo6c5M1nZ zh3B{2H3AAFdqhJix>7@f#V$YY%9>vQ{?c#GluEEk4M|=9Eta|_LR$dmkN^@Cf%|`;7w+~cLyy_fvzMF^<#dz4evE@_&DdixdeMSVNGaYGQlAx> zuOE99|KXFsptUKWO`JkCp`D?zW;mE@mBgAyqH(l@4Bt@=5C(=+qb8md77_{z^G4|xc zRYn<`fvitLJ%-JY(3m6)Wfn4}86bX`m46Hk`+Ym^OQ=7h@h8o!Iq11OK%GS$$AM`h z%tU28N>T>r(g&D-cY$h#{TL2dWxpPlbh@tQU5vSd%iOQ;qngrohO7Y7eR`_=#cc2X zH;qdKAlQ7Ooju9S=8q46bfEpXwG!-VLO6W_K*cNx@BR_04T8N9KL?p$Fk};Q-ez() z3D@KVwRyz$_V4pwQPC!<7{Nv9pB>}$nR^_m>o*|EgA!*44E+cFb!?vxEFDpaFAbMl zrUvB;{aD9R^P>;GUX;JOIM*GEza#-3E84Qoy zGq?oyA{O)flPSzrLU`c!B>4oTbh|u;x&OD>`!1W?6J5Ywn~i5D$>3nri?9bgJo?+# z0NVs0{Dl2%4s4J2l}q{8Wc@#Ir|?ljb9SWTvw+g*@=U!Ie1{IS`-v(ln1C^yh#YF|>IeeES)sGr+1nQShF$#LY!R$GD$+(B*JOlqvofOGsuU#|<0JHCug31%Um6`Vn*Doav90+y8p za$c5PUEq88O|h}6Y#yB%>BU;28dK)@8g9IPv&43Q&m$$Q3eOktLNDMcyr#b@hhrDj z)i=yWlef!3?hYxm4m2r4JFGppnJ}}Mip-GG1S^2hww&F+7lFWs!czasF(8d!_mtqE z#TkE)LsZ)gQh^o|RAV=P%p zylFl=QzzOV)JuPA#Y;XxAe@Kb&6m~~HEg;$5BVg*u)a6(7s+a~zMvKmD@x9<#|^Uu z$D5Y(7T_*@&cES;gD_E@nwm<3y{QbgOGAJ2EOOx~%4yC+5yyQJy%K7-$bMcbL8RA^ zVD6UbD(Sx4kaxoDI~JD+Jb((_ns7aqvdH_&vc4LlNL-T~1*R+|AQ5WHG z!-pPY-P9c;8z$Q}s@%0W*Sr-gVBa&{B)!R-Gi zYt6Bd5zYs76LV9BpH+QMkzHOiaxeX15e7e$R}`t4h=xyD9z@&ysk^y=#Rw4;i0M6Q z9uc1P&`+-+)NGLi&g!R>hSb@KDToobqaq#GZlchnrf7Ym$S_z3IsrnfbuF62B{gbD z?`D1Pxx##aHNKXcbWW=}aGq7mTo$gf28=!P)c z4QXV8C@mhGey zxgx>5qj|c5PyD)QEXEA!x2zoo06*?iabrzduOb%`7-&A&*#TFfe5mP!RbEG({PaC+ z-PIPBp94;M9xzB>-jZx$Pk(qud7#|p@MT?KCF=irl>oh%X7bY29^?~Eq&`HzL<`i@ zAJ(i~T%GJCVO7~$Cz6EOy_@WMQkcis%Q;hY|2JFMyqh}3C@{t3T@$^Lk#SosMu}73 z^#l%Jq|CEQw88jt2)e#hviuw{Gy(wj9hjdw$bVEha_d%BRVf7MZ*!oC)$cDyMTVqO zIyY&|lsUB(UaMcJ(OT#UCt6^W?;xCkt@%nJ31~DMj!8nOWF(y=Vo~9zZ_MF~S;|u-$V8P71dn9_kljz1o_P{3k1t$EhalfLgHe0E=^La)NS+1t$&ofb4Zy|v2wl5NRZ{4Snt!)TFDx|<@UpqigQdC z*j`a1h!~O;OO_cKHsiO`&Rj%_0Xf%R9`pu@oO8BcEmIp!X1FW?1vS-Xg*-bB0sxz4 zF31WyLOi+m`|Ke&ZS=1xp=!3?2c^}WWFEj8KB72@$sUGqD@PldNaSZT6Gzkz7MN@; z`ZSpLYWE72r)vp0DOIqA`>-;S(aLPjMOHYG^*m5YUl|ZMPgLA5=g{JFtC}R93#cus zD%7JtT0SB@{v=nBxJ*|;Bg?mlE{p7`NLxoKTPh--&B_NwV^!vk`+0lW?{Z!|y9m~El4Toe-#s4bu8CMsn>tIZ{ivHQ*A>IKnU zvmlzQ!bI)lU79=O#6jUSVI1Pq?@L?lP?U**c9a^d=)D@mLXE`z^CcV&O z_!z9n7>AL>l`Up%0t@<-IMP2NEWe1H3gp9f#W_>XWp|DVKbc3`l}Rk_z1t~BNYlPz zOT!e)Mv^w%`%B_jOkI#0zv^@5oHf4F>Y2nu$DJ}%S#CxQhf+SBl_Q;$v4DIT zm}yP>fRR@A^RM)v%1Rjn&0)AHsGU20TIn{tIvPgb$eb#^@>5yuI*1#xF5Sm62p4^t zJ3!`C3K@ag>7Nxu*v3=)$+;(aD4jJLuvQ-^>)KvY2lXB^NgwQ^^fmAg`3v zm~HKo%r{)bPSGv-qDks(6S?#4ZfP3gDM!Cf>^}HB@Cjx1QKRRW(;Sr(0I)L84q9s*M?9Y^<396)_|VJr zy=>OmlE6jzL{@qDD~`{XLw_m`jXW6MwEXkOU)!@SGHyWuXg7EtTZ*8hIEDMpnnXdt zfWIfW@Z3Qcg@axOdZhCP@7k%RnP;M4cZzO($}pRprmda1NIgPLke;^;n9mG zJ($w6APAQymMZ)43tN%L?T7TZ<+?~-!ZzWCS10wQhC7!8ev0VQVaPkp<&3^NSr`2! z$!G#;Rt5@jR*JX;K1X%@E9Kl-)7FZdNPl>q-@+p}FjS$BjN$-CopWZ!+?5m2{JX-{pNK9xO@2;d7p(h`YOF z>B5T={#YZFAfYJR(G|Om0T6Vso7CI3gLY8^pN(ccC>XV*S{EQhSC(S3F!p}-uX}XT zpiHG}Qs)9cG;6GptnX*apLvsLlw5;we*Y63I-5oV^@;j!OYXSFvoRJ%sIr%u<=IXN ziZ`n-c#k33 zZ;-(44|$-U*?1e+&@jtHklz}LNQXhrB>6|=+CV)vxvO)VzoN?&aT>Q&+}!oavP{E= zn7;7{l5$WKF^V<;5W`sFgfrimu4WoK*?*gYFyibj)Uwz!YM0%d_I+5*d!JM}w7jbh zZNWNvTB4AtON4&83dXe9q1x`zJ;6WwAsGVmEtw>DdXb+3&9glTVSI3iJojwY zzHO!Q#|ID6i93oGva3Y4h(0aT52T1^%`gYwWQO7t7ZPZ2^eIN{X%?-R*Zr12koCqR zr=)44AL>lBcN2(gSdd^+h5wF-@;BhX)ltKaMA}Cdo$pJ2z2Y4d@eU2^k7d2&;&ktC zY7b$HC|Dk}2f5cE7@31`$RM`J1eWN*2Xw+KDLLQ|oA%7j&%QM8g!LilfJ5F^_iy z28UqIT5(W*-C{KG1Y@^taB)K`%!_Az-Lv}3C``gZV{%L^tEe-+&dfEykr9gOpMH|jR>8jPoVdQQ-7plEkWBb_r^qBrD9}L zA=YBldebjeh#nA&&1x|7FM;e1UdB5$Y#|p{B6KM!@hlwHnm?{$QK|)HaY$4XGlQN! zxT}V>Wi>Uu42utu{y*_o6r>Ie7puu$4wVRCIl%f61yu#KxE-l79(+YDcw=eRot={1 z5p;d7lR^kj|Kt2}PkGtktRPd&jZ8+qhu-Q+AY3~k=cMX{@qRY*vI#9Zvp-~x!TAY$ z3Z&X0pwBw(-S}va$jyZ=^4uW4L;_}fMJ5#IN#pv&c%Jh!)u&vu&E4XMAXk$xW+n{T z1MCS)LL&ZH&a}q-bJ;{#j3g?GT7uaf2$m%IPdnyZ+LoOV`Nq=`e-BjN9_Kom7N$&? z#YdFA^y+zUwE`jfe{I@ptBEISp;h;HC=W3cC4a%g@3+#?Uk~?{c}?(%kAF}U)00-n zUIH2vJM|uxC_<|mh@Sa&1XuqM)*YXly4#4#yM`u0k;2M`tSalA1>uSB!h6P~cSV3~ z`3>VRZ%(9zNi8BiArW4$$gl}M*>1`66<;&VccCW95d~6|qyuqa zgzmM|up8HNvtiti83fhWYdu(CyuE$)<}zOG7winZF0Tg#761s_TzDj72LSgRH*HT^ z#VSMZ)J(7b8&Hxfz71$e|8;qcKq}yKb@ndbV&ge1F|pvgq$ZjX#psuZT6|X}>Q9^) zF8KgI@pgW@ILdw!+zTJBq5f z44w~Z(nbW)TJF#xyLxejU9cfOEY~fibEphW8O^j~iD2TSvchJKEgGE(ch~7OavD{s z+Hz@yp+*^d_8YWj1o>qbVl6=HeQDf;_#4+xrV z4j)r(%5Qo^o|3Rhmne2MR2;VR@wcbIHNiUBE`#*JOc4|D9g#N>zamqhzsbMWR>&rcJDI zA___=qeAgviN?~13CG`}l7-eej=0SSrWw)>buUp}?>ZQ*R{g*bpNUtljdcSrmQ1R( zTi0XCti^JyGN=m27~hHYy*eeA|0~%43p5hpB?@4Crcs0bK7iV+e0_s*YWpd;XIQ^ zM;9QF*(#ith)X_#u}JV(Zx}f)pVCkcWM*y(=`EkM6Us1g_F>y}ukH=lCE3B}NkK5+ z-tq7~=SuvN;E)-Tfjq_*h`v=*-w47n61fmu<{{$n)di3pQG>=fZ{fbGA{G}QxK!}5 znkQ)63ZyfS-~aglYlNjT;mtnC>i<38TV2MC`D$eOC|99a+ro?utK@`-Gt1F^hoERe z^zLbeSxOyS;dvEao1={(el(xbVH7J%%lUko^pOB%zTU<7mmMyUvR%GoH)4)XHUYmz zSQ*ipm&FmQa>EAif~B;=o*xP~B=K2AT_8-;;eoO;znGaEE#y+{0x&4-en496X(o}b zXpqzSyeC(P$7xF=0e3JN-_v9skj`a!A_j`)oe6k@0Pi74Gg6E!HwZB&LSP-1{a+sx zBJUd>b@DG&BI1g!BcsO22DyeROsBk2`ce@eZf`#2_8cg84$ACjn{99N1q;6T7UjYc zxZ!1lj}A!d86fOgpX|-f{)ir^*hvK~Wq|u3j(G54+eHrpGkT`*RZt+4&Lu1~WjkS2 zzQg`U8L<^_y0E`Z?T#y}Cev{`psF(qtuvg*`4YCoBIMJG4d;sF(`WD_!-1bapSu)> z%f0hFGTi)j2XbW!kHe!yRsSfS5-62`N8?aY1$=}}F|eRZSHhm4Wf4{JlZB1e#WAVl zheLQ*F-2vD0(1flv14ADc?N|-(xu88fhqZG`~MrdHb_RkY9c_1yF4Z>bXp9zHChSl z!F7x#;$Q};){E3~H|4wujuOi?J+^yaLteuRZM1)I_ffDO-aHRym^=@YS)9sZ8>qQC zxH}x6=8QG^rHY6^Cr$O7E@nB)%npp$eoK)NJlS=Ll{U@#B9wngO7GPj1y2i4jsjcw z4R55>p3$aGAws>*<2q0ZtGVQ|2a=e|sVUE`3iH&-Z@|w7t~wDB*S9^z-buTq@f$k9ZD!tqrNCOf z;ZEwV=ILn-9rvCRn*v9UX$J%b*e>mSTrguBi6Ei3e8{jfFtV;+)hz#FPu5e$Oq)aO zn@M8HZvIEsbv;XA+4%K3;t#xaDr<1V%2ZErg=Zv`O{HrO6V%Zjsf&c1KnoU{F!GVX z$C2erHlUJyj;kE7|NGaCDb90O!zq^g>-Xw-yl`Iw3ubDaJS_~#1l7667_YeS;+x#o zJUs*g#rIU*!$OI*vySphEpVyI8sNl0u*B>S{-zf2@9b(D`W?BdLtyVmomg4A1ev@U zO(*=OXo5%0@EsZw`RHby3SHkP6S&S!srqbb_R2$3XTZLC&BUuANOeC88cWVQQ%_^)@y)xz-*(v+ ztfAPf_K9K)jpBhxIOWSFmcTp3+uWUDr!8fcff}nRobL$cuFYju|0WFrJcAC?f=?VJ z9sel^_B63BRB;??=eBw#=ws@FKtl^L=f`-EUJ_EKGGqTInc>7)9+vW4$xk7DJ%n55 z^M!nFUfAX0A_@(va0RgnTSn(JK|ZJfPO;=XvGhTcjrZGAPHsIu$Nd>KRaa2jw)tGa zoGDx3**yf{6HiX>_|sPQ{KrHSA}!)ZS<*$JeZu8@Y=M+myCWN#17+YNv4~p~l~B)2 zsa>%yh7>o-cn_R8#{+od?(fO%Bdqn;;$=F9F$|GtT>!}dIr~LjV##7&8|(HL*|uQ= z>PPF!y(~Y1!+K6mzroJdP0)tL#J%eqIUn%aAL?nQe-jI~ zaO;It{L1rMK zR!ZkHtqjZb_lKf|Li#~-DAqJhvXRJl=^nmX5*4iSH+|*&klqp`C;%l8>{M{pp0$)K z7RLNM8BB2z>TNxKhaBMkYR^Z}E(kxrV&Ok^G_zq^&ka_S#Z7le(<+^jth_3CjK=hq zjVRvd0(ndob>&sCEPF;S!mOhaxhc>uzB6mK5|Z7xx>BZ+%Ay=CIHv$iTcJhs6VT5! zeyVYEeJEWH<#%moI!8SOFj8gYAk%cB*B7v7Gl;qrBI}yBtoMc8oIA>T_*gTIbkpet z!9knE6Jq`r^HOXCvESuhZNT357!elC8`qA#MKTQf}9so&^Oy>o$bN5+?9$)==# zvPOmX08zUK+*u9yf_h8RPt;Qc=~*&!#o^ip>coUHaAq>+6rNS0ER=#>-e!01K_XSF z^dV9{GI>8z_W&y!yYJ*29V|$Z<3?TKb`sRO^IGp^pqXn0sKEdF8-PJbnM++hIax(J z!ETcAhq$mrYo3St3$MZyIG2z?8%jb;;kwzDxvl>((7_Zmp?ViAJK>L|Bt z`b;VjvrXHznpFw_?-}jAOYNadohZi^{1$dKflhRo&p55+{q_DTh4MZbJKLnv+w`|? zA#4(tX8P8Eh=HKz1Sq1@v-c7_V5#!?~NdpFv1F#jhWmHLv@u;V~=($DEXx~Vy9 z8KQ$#A%!%{f-}XZWa@srzKoWAU;d@FIaYXx;l9vXi@~pM0f#1-UKCF2D3DzK8_+}O zQQNV-4PD8NHQyackX5M_iS@`1fMs|6;!Iv0US4Ot*PgGQG8DAYI+}5WQu;wNT7-_AVcahIe*BVTK`N1g&kjYxoo|)b8Ub zLtgmyXYD;$<0xXw22!wg0mImVAIZEFsZq#wi3-7=Q;>ZWD{#@W(#UtN!r_;{RM2D)@?d=uka>H*Gxe^Oji9eKT@UF|}_z?CkdD!MWg2kjiJS#?7%Vw8e` zI@t3;2YYVxmS#%2OQ+S{P%)D5zGWi?-nFJXv3=GH-IhJ-6ZE7E7>xxn2I7|Jqn4y(YWBilC=vO|j*@KiO_T^nw5FhlHM35tan~b@Z31SuRHOOCEt4G+pW&7Exa00YDVW>1(ND7h74>Ly zhw70vxP6{S7HZT?lt2*6+R~Gv06Rd$zps=?G*DFYH$T!8^Y42ei@qj~EpDpu?!EmD z#ew%UE(c%I+AWWQ-uhQBc5l$tZZyjY!ojs7D9;q~BEQLxw|{;FI`fdbv7uSM02{8z zfKUp2%qC%J0;rB&=6{VRUKt#pVHF$xt_o#m(-o75V#kxW zlSl1f`}uV^c$+A%sJ$0x0A0RiIz^gX^wRez3p&eX2`k17Hc74sW32R&CxdN{FNA0P z4>M8>&^1-hFx0+ZYaP)e&mW8m?7Ifl7v0F6#5MggK@B!v#xj9@c)=ozEv#9e8lDIR z^NrDwhT1KsH$G|hMniZz_v0O~tff?BckGBPIUc$Y7cU*ZWHubBK~-wxFkP=89h1Je zg0sc$YzaSmgn@ka!>y|5>R}Q-^Ep7L7u7S)6%ArGYr5am$4jp;>ZV(6izhc8FbW*H zGMphkCi&w~Zc@Fmdfp6hh!SQ1y!xE-@ZWAoq|60gbf+bJFw&pb1 z_98MRj`Mk84w$Po%{oQDWRxww8-bb5QjB2^mlIcFd1er4@LBglc?}iH7&KVTtJ+jv z*m9*RvcO{-4A{Kwi-_fYZ_AD^UgLvK%ZQU)qNtiqf}gHy8>eU@)AbI(8sS&mF5v0( zQjvE~rYrZQ#||o@VncUN*2zEw4^f2z92n%N*IDNTfr>7anhgC-c1Z%>Ril*-=G7#J zq-bwXX_$qqk@q3_4`eZ zS&i3p!2WQhNW6#)uZvy6W#C&th)u7sd^N#({IE`ecv zj_piHK~c%0Uaf5r_gCP5cI^XwlQ45i(f)N{KF+dkl~ZX6T2obI0O&H)R-ao1DH~0z zn96|%d$dP;g)hBbIQv;j%d318Qp*iA=Elf!oA`=2JlpWng;W?R+s)?Dyg|0;Ji)E%7ot+&3ou^!w!N z$z@`{!7c?0CB_}&sY09goTQlm$roxT)+9F+zg^H@j94 zDPYrSXiqqlt+p{%0KKXU=Ck)W0STVN+{}g7gth!^wPducnrzC%q9b7DQPGpk^Tsq! zK>ZTwrF-<~(h3fbr6Ezu$M#SP5g7wQ2AG?ec&Uru>y0p&c6+Y&o%jn%E6o_q(&36l z4sjT~7MdvIZ%oueEe0#}v@m6)Lj`3U`ZYlMsjBOmCvfjI$zTfZc@lT}tJTCgIC?j& zv*KzNr&Tq2A(*sqrr6SNxL4DV?7L&C^hV!$al^d9j^0kr(SxH6I|Ys5Ve>kvQ1Pk=%8R$V)7<*Ypu9>j^Vu zGb)QHDh4P*8>(o77hE{5fUgyE+SDOF7GA1AD$kW5uYAwFxbq~Qpe(keX0#dShPRxL z=YzrEHmZcFAtr290up5sB!#i?RTFT$uP2)@;);p$<+BukPacP( zbY0wTWoR*1m9e)NXRh6Dqr@fpqEzl~<=X#~at9}1hI9h+VTk!xESg|rLtat%qK-1? z%jpGy-ITe`lI*y#*46)X_t=Ct+o&$~`f4dohiXD#8APz0UJ7AAORRI7>o2HrtngWm zv9phZ<7UJ_+s}KpwyQnIj1W~Fi0%i~w1A{Z_9j_M6@C~yNJTzMYG}Q$Gd}@i1Ot2r z{RV|EB-?aqg5f3FhTN37V&BnGmxCyQbF(~D>RDNqbQff|%eX&Hv}aH>Q=f^ZiBxCV@u``(Zx;TMFck@|(aCI{9%R!Q zc|AkP88crGYm1&jb$Vo4NY`1;>f_4`?)omXrPw)?Ffv@8ZV_jxkJRG}P2(l&7~)FZ z&+nKsLs|e)L54Cmb?uxWBQzM#1UWR02@A-P1N5f;Ji_MrWY=@i9l=@!*}H7n$_#rk zaeBF)U@fx=Nm$}PqzIypI>wjBK)wN{4z>Z&KB%)}T-{LJ@)5k|cc7v{pk*wt2n4|Pl$Y61}jktKQytYx- zC8Jeni&>BW^(E8%f}k@*+Z^K)bh*b$Jy!WlsQLA?I^Wdgj3UTGKZ4ixg7P56oig&A zO};wDw5Y(9dnwZ+fNEMzAqLkn)T?&TU<3UopP+_H*|!xta>nijNSY|mY&}XRt-dfA zM&kK0&P9%@wsyw4d49VMX*4^t+`w_k3^_T|Er(m1hcAyPRxE>A2HbgU%WNtdYn3ra z|F}P|fry{$ed&_?2B(lujpBW^+AW@wWEX{jHsYKH?yJ5*WMVNv>IF6S%{yE-}uaq(t0oC zl1;!QQ;5`YfOdBR=-zyC5;^~267V4tbM5rjI8fjFwqJ~>XR&i-A8;3Baj;+H16J`Aot-ahL%w@zD1uz8*3gs*+#y43P3g$*>3LK z6hh#p@!cP`BYOmgv=S<=sUG9F_G3ZC`HrUAT1h%5ILu^x#oQaLv94hTrG=IdN+*V( zZ0n6tdij~tG4XC=qCZ{!G=%4WAuWhH9mL{C$1@>){JJIYKGipzw+mki&%;X0vY>$2 zX$0e&W-~xJ!x>$XiMST)yNKy&C$z)}_r|o!ww3EmWi&G9KoGm5x*r z(6!#sQj{>d=RhA-;1_?hxR_d7u#V8WXXjK`cm-n5*V8;WqEQMy>5; zlsw$o-{KNn`nSaCx*wl&MKSQ|)3EzZWd!PvP5UfOW$&=BtU2G0+gM_nmM1JJ6#{AQ znzxE2>4sx2VBftb0fxrar4reT4NCtfT7p?$;h!L!P(4w#pXcMeXemOlS1&7=t#}Xc z#f#T2bCx^GQBd(%g#^h%oxCr)d@K-?qbVPXt4A&8v=gilBGl_yu~ExPN+ zcE~c1GJ>Qc)i{kep@y+tAz(UGrF3qj=*S6mkRVq_V=<%U2Q=CM-5{ zH{+odk5NIjcgH%rdB2!PKQH5#@w^7!fx(px9EW=G#-g|AJl|qcN3p)H;N#{`u+4{9INcJf# zq?I#8r2>fnQG9%=vy_#7OKf4%#(c8hM5?|IEY$j(|6Lm$A1hwmrTpK)>RuRWoTuGi zYJ+g)*tFntY%i*awUqD-B-a#ZGTFyBkF7OQ`0^KAKS z{+;(b6Fv%HISEa>)32D#Y}?2zRxea!QfX=={^}A5$I&Wg7*$13o!|jjmnZV@;JA6e zOvko1c|h^|vB5$=s{C7xRoVLlL$~nl)%K~eNU*wrkg}Z5=~ZLKf1lJc_U=uJv#f!2 zbIxA>wN*j^9$mIkh1TRt?T3H!;wCn9(5{aC>6+R8{s@3fcNlTZoJdR96~=WJWD%*j zezaxjDnA@7Xsy{XbA36 z%{+l+hh8FTdWPrBSznT$a(zOIuoc$Y_^CfVfKKQ)$|hu+hpGdVXUGptc%!)&5xxOL zDt_0z2BWxAL_qLGj_X8UpA2>ra!WQn$j{i>&%6DxyJ@Yw_*9LX*XPh-!9`KtQ`?KF zN|Pbq>!9VIdr%2g8{Rf#YiNk=5e4%4_e{rAh{yG*{Tev1=Ss>_`hfj?imj%-lLpg? zAKM8|qC6TrNg*ryNaPmQ97Lc!*R}^Tl-l5s)yvxFxYr!j8DHdL1ZlI?DD={k4A4zZ@1gYMO%324cD}TBq0x3s z#-w4n&xvvl;vLs48WG;I3{c2c$2AXIPbiJKS&upObN&m&rpbbZ@BYXn;*O$d`qS6~ z6?sl;svxsgd_UgB=A9PX&bldyv3lh{Uq}J?^)o0HG4x+q@bUn-<&`UDe zLwT#8!kkI`r8?>r?4KF87NkpDGjesN85wj!{YBLRJF9aA?bqMKJhJzwKQ{@@`D-c^IWuY?l!LKAjG!MvzCDVQ&;T^B zpCVem%*VN0`{atf!OvOl)7yH!!|RBTysKy1^kk7nULO$QmqMON^A9JCx}?SyO=wTf z0Yq*GsUvd5@*UD8a0v*t@pxHv)1(_X*n}stUt34t8TLpyM*Bfvc7r{Ej?BHnSlLrgp z^M>chs#Yw5)wGTU_}N{^R$be@*3EvVYVftAs%toM5Bjhg7O@faZ z=QKm~EmV~y;?~u;OI|4Z)%c6?2y#%`jt0Er7GTr<6}33&P~FO1_q&(K3WL(wU8KwG zMbhSrKZv}lG|i!WPFBnR0@|(kUdWLtgTk6f$iI`F0GD_kE%=Eb-ra~5TdPcc!d1md z*FWNogVFSrz`XNYhSV7LAY=}QRc_F5WOA<8{b#L$ykI=2kRo%30{qdMjBhP3DP%G^ zrjAXtB`4qx>blJWVgAo58{{L96o*dlXH&t-{@oZ6n(x1UmCKNy705pQJim{(x|(r9 z1zh3GmiQc%PddX{vI&X+o*kSDvTbIC2=w;$d1@OQy~S88{I-b@ffgf|}ieQ?;$E`X3zTmxn$^F_&|NCNKBxyNZRr})j91?_L15!v5 zIdCFB6g-^0Z(wcAGw2|<9Lr{wSOz$Ca)z%OJ$DL7a*A93#~w|veZu0ncsrN;7;qd{D0p{Te3M+Zlz&%b;G`&iOyOB2q?8^RR; zX+|<;c!ms{ujhR)lBffc7Fvo{oYJ$zh|d`;7-T1_Zbr{MR9%vfp&8s3gSfQ~ow)Jx zQF9H0Wo!zA;K`A;IwU+Qx@x$R8?GoB9U2o+N>ZFJEn$^q_!97Bt?cja-ht(NhroPW zP)s^oricDwI4okt5*U1#NU*p`CvB&-6%@|`bZI?k*x}|38Q_JpkAteUPL{VOB<4#r zO|N4kCP^uDD#dFY3C6|~czuuTgu4Li@v4UEQuK;@T6C4;6uaw0az42+4Rs{6Bx>Hz z^^0hs^9Ypf!*o9Kn-$mos1M!UPSV%mOnCaut(O^ecFc!O{9MtJ^o_?7)T>~pTS~Z# zmC>x%9Ww6`Sn(}`7m~x8=hX;&qb)ppV`TKL(h7uIy)RrE%p2|tG%1U3>HpqmR-s%U z^6mWmA&3iAfLeF4@LbR*2~x80Fhmo+2}SIS{=|Qj?&rCHt^V}oP6)WZdZ?TS=UxM^ z8O$R-@z^FhJ0-L9z?I}BAGMbW%ARvPw1_D#<&`9`FQ4%6DetZ3@Op19v6<9i&GQaS z(w=7dW&K7hcX;=1c!G-W}laeW}RINd%02ei9ZAn@K-9{J@V#BbW zq_gCJ4qtjgVc#`HOy@`Bh(;4j+Y${XDfok&_=i<6hE&PE&Yh3!?NCBAL+*^??b<8K zzdHXrH-IUVJC9qOgXdELzdQ0|E;onV+kc4nSRW-d$%h#%&WHkSNXoIui;W-WGWpZ` z#C=9u5IapCDlWTN&(u4CQcieV%H4Lb1R zUg?z}V9;LpNzKUfJQbgNe;c4i=!Wbn42WFxVO^~^2EA+hPqXwUrpOO**#4;NSTILLyq9w0o}tCr zvILJ=$kH@5`r4Db}hQ6>Dem4eEY-* zOiCb-lCL#M#J7MOc?<>V(8IKg$Kk`S5#?~2&u-!lr;-RcoqJE-11Lj*{IahjBqf^< zj73soKCPGK?=MG4BGkW@Wi{nUn7q;m_UWWcKKAWs63VMW%q=tXfi!^2a*;w?T(h6}tWG9Z2OX1|Olv>&$5$GL_fd>`a&>5_bvn#aj` z=1XG7*62|8{rlVIu8?r((WAIjSd)UV_tWbZqKz-W-Mrc?S5;3w?0J`kzWT+DCYvFe ze1EU>m_K|qZ1syDl4wl9&e33~S=O`bBRG=fDqRC>peudtOZK1#L9Qyrh4lul%woR+ zEZo~C0FCe#Iy+~0DS5kSAYrEWRP2?t&te#4Rl#holC)0SX{5}S}@nAv=ho851SQ3z`@~Vd#zmG13o!N2Z+Q znQqP)>wx#AO8>7(^1?FN*K=&74l)P-g%A6-3R>I^PFDhKLYw5?S(k$NM?ttBUXv5A z74O3Cg3R^2lgR_4X04;3oz$+9U(~{yv+LPW>=&o{YkcJ2f=YZ24m)8t$+6#Q8KaLH zJ1i@kCu?9F6oR#_Cb;dgTDWgoAx1IFPVzKO6h<*WLsls^POKFcIgg3h&x0Un$#LGkzDT=zD|pD2@o-5zF8rqaL~VzXpLr=1Yh-Yaq5!`n;FR{{ELX7Ogf zp#LT@T<5ev>Z0Konk88POqiT%65-DsQ-N66gAq%;g?BX#$+$2(W`N7T4ag$HJb|fxHHRTW&{CA|gv9eg+!A*J8Lx|C#nn9X1G6#+r_RlbwjRwBO!2t<_2vnBT zPzEoU50pG~f>1R^haxloS@I0Yk8H_l=0Lhy5OnM%Q)!3> zn^*;~kn2f8Ma8aqw+aR-ekWo6J)2D~&!Na#BNC<-d?vCpiz{lTo|!u>cT5`>)+kV% zc{C*E?;5XQOr3;JYy{t79I;$=c|TQ@Rd@{bvrDnio~w_vmG@%aS~2s=+7uApEa@SP zRU=ei-t4KHINz%Hd=&}(a@u=s#NR~fxm?JOV3`Cu>H85Yy5aXujvPw#OgIf;pitmt zVhxgZkU`uL?SfYSHw39^*$ix@iFR>>@s{31e4ht#EY^w)`pnd}u0`mawk|3F_~vO- zSUgR*f}0nX)`F7a*$=IT4vcAsPh{f)Yer$W^16Y>6NJuRox~SBbZF71l~j#&gD3^7 z5Mk^ysJg*wd*TerB76PUPwiR_It%nHATK(n@g#G$oH=a2a%`G5@YU78BNVNNi0D9j ztZ(?G&qyjL;xAa8lwK5L&w5M>VR2t>wcC6L9EHF`jn$g3Wd>zYu4urkc)F%px6?Ce zKyJMW!CAP|t>QHtIiPO@-TVPB((k!l)g;K!TLf0MliJhUEY!!TRU8V{LLd{1E4sF-q1w0-H(zCD=Je|Q#q zNs!Jl`s9hNpS!?7?Er|VYOeOZ;PH+0&LVDJa9PII&O)~1P>F~Dh zYLWGW2;+L2fI zB8Sy@N(*I@3k|6*^DG2?NJwP#>k>Dj4NhA4ArqfDlEI0NmTh|Aq6RbSraN%;h1?{wGOyO!q6WSD( ziD5R^S!@37BBTGfJizt=YQQqhR+i^-ycp+dm9n;8LWa};B=EI{%{bU+)3i7%Q?8-Y z-96|SMd+U13`X+NlkYcsT8&OgX5iXlGTuffA00!{3uCr#WH6x9*>;m7Y{nAr?Zv@! zbm>4tf7O$;+S`AodKM~M!dJS1ETP`q}-E}q@r$5yH{b+A|N+o|hj z>UMM)8y*!W%frvC2(f{FG7mQ8OSm=7&U();~4=I>M5?B3G|Vuu9f?|aX7 z>~D?7^`riH5B&FM7z)SV!~h2eQkUOUOZ})60D(ZyqCL;GnZO%n-C7Q-B_utTz6Z_6 z*?K)@)G@4hH9Zt$J;PWiPhjBL{#j9KE^&cf{s)RPNLT7Ze_b}r`f<4L^Bcee= zRFh99$dzc$ENrNSe>9i0LK#;Nxxm473mxDnN&{TnoLc*>kEUFoDk0D*&vMS$fOB<{ z=@gtF9jHF3^z%Sad6zpxq$TLIOjls}p)w~St={IxP8{(DHN9O3h-5}12#yt*?69?O zv^lZLJJ0CUlY}3MhZoRWk`3h-(t;KiqC@lH$`Cy>XD_hjIWE4^ z#&v5X?-~SXQ*$_QJ{f=rqExc*y&#$2Ch5sm&PpySP}k(CqC9DH@Kcw%!0|fJ7?3v; zA^?Z)ee|>GP$g^;t^h!Ed$=!~`sGjbf^*|^?KLTSvO9*F04^aEV!YSG=5$EN5{^p{ zwWo}gQa;TE;fCGnF0M`)(mBWF=C!BsJJ%oqAIA9CR|g*gOk^Y+A!;c@QV)d)M|J5=7s^~>!IQP1 zA{fNV@G8G}{Xkgfg+HM}aHXyR?3|)ypUZI;;l{_Y(eggS28VVE5F%9qi41AuEt?*e zn*18;sIL#M*UYKDWG7rh%EebMy-ZJ~%@!A|EuMckLs+b4Z=-2rjXNE9SEaWmJcVyV z;i(-(&*1UUldq!eHV=Iu=yvAsP*>QWQp72zo`90PDlhQ3tQX_xFcjW;+ZPN_^-`gB zYfH&55CiI)VYFUYW0MUSdyd-EusJ%6KI@!bzdvG>u*8zz{^?22aXY%nBtCi7tnon5 z(XXXuYpL5{4Eq<}Kf;2JO-OUKXx_$r`uC9?Vkz3n zx4q(@FfwqheBBL_^mFksH_HUX0=aS(EY-#>CWvq|PHMbtjrLQI4_ zd&4DvnuH|B2Ko{wR#2Li0qz@q3*+~Y7jP?wE5pI4AAGK$pG zmTT+{X&-4#;3Pesb9kKD=gZMFcG~Y7~V0dWj zb^rxgye}-U!Nd(gB(_3Ou(TPEhbVGqAg!msA`s>Tx`Jxf)tr^+x?+s%KMC^KvCFQt zax198f)}r2d&)ibJx>((-~pynz9w0S0iRM9nv_K7TJWfg9O1+}(>$ephaEaSRu8ge z!|WdVPqOSSJ-hF{WUqZ^vhcJPX8@!!{XC%ilgpJ>Qd4C3GPRf#jumdp5oia;Z;haG zRpH~?RkL6xdDf1^z4)<)W5BFpl50HJTeQw~UW&gj z1RcNsxq>{mK4YZ4v;Ob-WY}Ut>U-k&y5RWDTe{BQEsI7m_c`R4d`Qo)Rk)WiF-<-_ z0MUqWovvsn`X0>a5B?PZi37h5J*@oX8Kezjd?sRA8!E$Kyt|kXFLYo@9jyB(^^l&W z6SkM1e-jajt|YLbND%mh9zVzD3SYxJE7cR==X>~RO-EtPWIyF&yfZF@+!{TrRHLE5@pQVS2T&TtHk2Guu=kO2oxag& zJd1szPA<`r^zteoyp!&OJ7|y)&81)Dcrb6}7OmaH(h`kM`S~fZVLa5`D#D^9l_Ufe z>qtPql6zN}j>&MIy~{P7MXLzhaS<6PH)n~rB9|WsBk&?h_@J`t&kMN(D=)z|{UmyY zeCb@bzp9J76$I@aVhFy|G7O{r07>c43>Ihw_LuF5Vo-kO%-`oYm;cU!N)x#oHyTl= z7YIXeM#2C`QX&oCc?rBwfZeS^Fin3rI5%t`;aPJEoxetUA5C z{1{??g`e3rbQoHPr({GeZ+}aU#T5FomsY{-kORJi-?4UhLe`ccxL&J}rf@?2w)bns zm`y6Yw=EYF6CDJ-@(Q7$eDnl1AjryZJ@BMZ?kdnY)q0qp%H@l=cZmonqPfS&Pvo1z z;M+2T#R;HXJ5(<^JlI@?O|8bO?;ON-oUV%Xp8DQo`XfcspX_Tx_o3ca0cxw6H@$7n zYl{VK(wIT5mH01DIti((B&5<`h=>H!+l((z=d2KN_}t169inFp0V;&Sf`tV@>SvP7 zn0%2GntMl7s{p56a;6C3%|;PVCQET$wJ5N2yBu1*rxM&4(u5{E=>_eomRc61W$5 zYZ@MD6(NdmDwP-k(k*1wuK7Nvv2P5sKt+ApNd@7@Inut&;K?T;?r`B@RT6s<#ywtH z^Ci^G0xzfwi5V!8;0By=j?8*eh zWDMrgrg;FZ_(5#C6M?TY6NmCSrLS~P&VMc(oFVL{-rjf_CpapQ2o{F))ca&+_klb^ z*XHdt!wNh7i?z`q$WHHY2Rd`_KJF8B76zjM583aS${=g)QDb0C*)-J~$0;6cL*{eh zY2=huS_My}_g%_QX3YK*zxg(y9JVVH6(|^cA?liRDoKN~`v*900D{*ppfu~t3r7So zUM$F=?E-*!k)vW>J;NWqWVE{72>dzeY*LV0|Gz~?l$jH&Kx6NDXo4DDr3ENsR;(&Sbd;ynv;L&CtS3j;rq$X6-A)dIY?%*#U4!*=sQ0Laui-)3w3S*iX zIj+`!r3vg@mu+}NO4XHOxGlov6lUsiSAru3Qr~dJHUM=Yex%&jssy&~*6yt2!Zf$n z={DWytKudV@We5+J7*O|`)>yDjk71Rak2Fic9XgSdUl{q zOVC8lR1@iSpy5~kn>^&>rpc#YFP`~JBxf65PYOG_+NOJ~YQul(nXh)6nzPx<8QfHr=F6Z zpU#O+D`VutCxLg|7s%PTQQW&TkH{YmH?pg{r<~q2aBY=*^NN9aK!_gVJKBB5#VX!B zCeZ*yE(e~T7lihyeg6&rF06`rL1p4A1V=a?J_Gs!M^8kAQL>2%W@Q-AVkqgDy5F5n zbETe$_aElnrzuldInm_pqs0zjb}#b%>L2m({Qp5kSIiSxV9K*+ZSDYGlJeShwAu-V zdZtwpy;wWsP2iBrcxm0C;NlCLR&jx+W*ZTWQGAV72z`Xwq+H!Bc+T?$GdOGpm+n@B|i=y znLHvKgk7fFpqkZRD75Ssi0RJb__#h(FDVU0e#^aTvg8*bz+$h102WJsa~%cvJ+Qg` zwrvEF5+W#P#|SGv4B>{<)+m;zE3<*-@^6Y7kC&68$Ci%F_f(|BG2qD6XIMBL3k^V`|_j_ z@=-*qtkua3WICwMpzFz=uG!Z4ao{e^Ez^0anv6Nt#X7vN0g0o^lvGn3YC!v*)7F0e z{IA**r|zn@dx*B+3WjDjx~IZ72`YT zAOgn(K4vbVG&m$H-qpuvZxb$mIfE^lL6F8&4d^D7a*^GAsQ3Z;6}z$Nv4qVA%mdBW zrq2YYLeGDXXNr#pYSnlIRv#3DnxxLz@G0%i8w3lL`+x)VJEXc>TWmI+-eg>urYRmt zZWI* zvJt$fu6LIS6Grqc5aub8fTlPWtueo6*Fw^W<{fQ$BqV5*620PeSsv@pkJ$tzw{oW@_NN}Br%|i1tf_Jk9;+ZN;n`vifV>42 z%pt1~ilnXR62sEp@Su+p+})Cey-+qP%AHq&Q0GoMxWxt$VBL1vpmPi!@>T~Ln;BV^*J>>yi$DB)*-`6^{20i zy}fJDoOJ>&A^!aRPg0TwT@uiRF|e;w=KFH59(E%owSQT^;EMX{xIZ++tPp8p2ywv1 z7@nYe}=aw1ojSY;L>$g)lF)cXSH;}JR4_6t8p6ME?TOP|40jsQv_ z86YvWt)n|47|0O$WbeIrzMYaZ9ba%CZ{w|nWD+lvV#FC3T1m>rTJ;q}Y&Y{1bqaA2 zBca&o0QCaJLR#WDCPx4*yOevAG0`N`VjvRe388ZSz|WMxx=ev?uU=z7;r7kHk+6r& zUf9_)RS~aaEP$Ox3Mq5#*Tvv<=OeIdGktJ&!ZnZzmFX4fc0-$SA zI&YN&X`q8nOb&J=kVW3_v&L3@U>~N>CC62W z%G$t+?Fl_iE@0OzF-y_e3iQ4y=WQ*J4eX6dGb|gec=IObfJN%THWm(;oVOYdf060> z62i;f>oNsKHT>v2{MGnxr`eK43u)VyfEEmLS$zvV{n7>(TRHX1Ql$KD`-q`0vi2bP z-C76Ca`s*6;sDb{lIEaN8D6A_=mo1=%yg515uu4ZNMi?jU@7EtMZGcdtB#0B*J7LN z9BdYGbYal%E1YoT-S+wzN`&Ug zO^|IIl|$sGUztw4#1ERK0pv2NcRxqEfaLdWVI446VX!*Bju_kocR~qrruT7W{=aKk zLE)7~N_6?CO5`!8!cx_}?hXDVRpG5fGERBhVVy_$Vh{0O+1`RZ06X~^>%&Lf*JAK%ZwDX;@%2VlmrbxY>UG^e%Q+-X_t!ls<)rK^P3{$V8f3jtIBj zb0*+5439lRtTFNlM{}JK+;eiOtvM-JTp?&PqU3cxh`Y*5eC5DIs;_+vr$Ekf);2I$ zfX(2O+8@Se(*M?KzQsW0MwXYs9#qh0PE!3qs&U0-Y;qYv@-dPy&}MxB!u2bzvjs~K z2L9N2ZF!PdgW}XeFz83$x!@<~SMqQsUZ~{cyrpGzm*XraD6a6!;Gye?a-#VI_%dK~ z`L#|MiQ&ItGI?%}x2})K7&ZZxfO62xlM5Q8eZ{dzrpigxJKRoVfT>i?=Vc~Y)zZl#jHPaA-YTV24Q)L_wIZS5Wq2QJ2kv@dsY`ZOYs`Iwl=ENIa*o+l+ASX zery%AR_;qCf1iIK77GDYomn~E(*Q=uXduy;=jJ%uc0lMS z^eCA7GB7B+aledkJs(mWUH5I<{z0Lp6ox=XnDL2tyek`KqIr(lB`NT?>i;nJXT7Eop*IX&g}N4?y~-&ZqW zN2(JoNBAyJWkAxvY2NcdZil0rk)Am`7*hl`S~35zsv`rvP=#C806jp$zrz*CY5J=!_5<8^ z#UvTT<3ffJzp6w2=oukAo3CIkjsztp&atve>d(D4*_%nK!Wj@&-d6eyJ;K*d8*idDo0ed%thg)lkY>V#2RB8%8sQ75MpQeJ=u--rC_5v+zGW z&@tu)WotZ8rCbhMrwf=-njcy^?2OI?KOm->;(4jLr1meSW~O}H|={j**c zWQpfh{iA1_Sk0^n#7$uJr11bvL>jiN0ztJ@pUR;wYiCnk%63oSiD~I82djahzlFH? zP0?q9tE_*ZkBwvxD&{Z%aK5wVC*I&-OXRt zhGq^j4QHBnobUm6d76J30=6o1r6N#OP%KpqWg1I~Uf{{;@pL$t#Cc|rA70TA`waXS zDLUYc!BN0XR?M`(IZHMmFybpez98D0XOW1Fp-F@Ko;(W``ohyfI$4cw6gk^34~_mB z=+aS7UOkdenRjc-118IVZq?A5MA5N2-2c86>_RI+=yF7o$E)Z9v1O34@yh@0<@Fvi zQ!w)dfig-weF8MyFLhsDe=|pi99XVwSjqPP1C6;_`x0(^$ih0+p3wYc^CHmF_eN9Q zh9Smwab^Xsc2a|2S@iP8;Uli4jeiUNG|@=@1~Zg|=NiU&-RMVhGc`3?iXA>vVb+Yg zD~hYBu;L{a;-uG7czB^#RH1kU0T2VM&fVKhWaZW8xO3c!GWizE5hi(u>4=Dfn{^VT zQ;dFnK?^&+Oc(nSyvVEWhySFF;oX&t&1gup4+|~b?-sT&i!j`2X-qZ=&MNtPrH5g! zZ1C;PDu7Ax%LZ5y=RThL~uo&&(04sc;{*~k`Q*{_}$P(Y^$pSEOeG%(>L%2e&o zp7qDN&|ey3w(@XL{pn@kEGpCan*d1aGTmpkCKl%gUR8veb>Px8QS@GbfeOX?`a&e9 z64%0Dsrq&rSBf87$DsAw2EK0lQ3<|^nIK*w3i|MygZ_M%yt57H4|?5?z8EMoC!}V; zcc-@+N>SWBhj5Ou7!QXb8490jfys#SJ?HAa-e*h$h~wP#Y?Lm;8&^4H8H^UFTY1u4 zVgJW28qih>ZQ4!ZMwH4i3kPGp9qauQ;tpKpl;DLvC0dwjfLN&&(Bxa7R($Q$UOxt2 zwWvthh(t&1LKDcd z@>`RgKA1oFh`G}yUs;Um{hLe9nqF5A+*MuSsQl)|6!OOm4{fmZl^B~9krk@w;t{A^nT8=r9betF;22nm42~VH?d*MF1 zP2sKK1LprRU`;>60_uohnXlGZ0X^wJ@>Ax&s|P|#$oINB9`g(`ro*yn1&~w`M{=T$ zFxG5Q8$AqxP&1D42H9BIWAYR+M#2W}6x+E-EW->RHyWvwu|_M#JuV=HjQ&2Kr5s|h zaQkd@l?irY>X(DWIaQ( zI)Jh%i?X;q%on|4%$eUUrpmYF`0^Iku8*OWEhq7%6|E7wJv_b$00wdeBs>tqI9=ua zzqvF2VAcR~+Bsk&s0rSZy5!6~OiX{0q~M;O1?Duh$Pi!$`S2eZM8)IurzheNW3I5% zq`S`O3757iAnxGKo?O7GR!LIjYHXHg_I>bOMALUmC(pmTHW2od+aDu+u5LM~JN@X8 z7(MN9y_R|)-+UL;$*Cq9w#=uA>lJzgbEBJYx?eP{1LW*)3M72zg)t$!{Q1vHa`PIU z^AByvt#!_oT;1X6%`36Tk6+i2%B)NLe41@6oHa#jYZ_ScA1iFRs%y&@3XDsCX%o`g z@-D3dzVWLY*tRP;b+>TFsSWOG;-l%u+|Q(DR>(}S9n;}4D)|5bqpKfO!mgMt%BMu zu0&3tLkr7W_l5PtK+nM8zg{e4_YWjzYfrlDZ2U6IG)urKG7u*dTWBQ^5S44Vu`%U7 z(A2%u`Wd$f-MIP&{z=Fcq8OfPi7(!ZrBz+ys3?UFoB4Kjw@$m1jxuq<(^&ihwJT%{ zfZ2I5L=30UQ4Z$S7KEJ*t26);S(VDfD>`eGzCP9GE^$TGb017tjGencv{E=VH z0nwg74=7gJ@7)kEPm9DV{#WcvSz7}Xk%W70$Hzj(XyhS7uzc)vgpPLB8 zSgrHmwMv(Vk-U7TZ@nUJl*H)dNfn05T!K;jf6W&z>wTcKC|Ch&mmiQ&Q!2^qgb5_~ z|38xCUG;Gd5u-^1f0UY9b$D-p7lMQ1Xs=)8Y zzVCo&b|!TX! z8xDm_7lBt<&K4*g<82^L^*pritzo(hQsJx?%rMiN-rl$UYhsOvQpeM9zXp#eSQ9v7 zm4m(1>MZFz+;;%N>?eEUanSrgsL(*na(%GPzGIKpK=M7aMKx+MmmFOK1Jk`pfvq$)Ey7GV^?Ug9^rj+>EZz2bcWT=ZXbj8P>ja z*6B)aRfkc7uym-nAP((%r^^PCC$gJ1QGfCg}`u zb_g~RU>T1{gr$9rd01Y|*ar-nJ4Eb)w!4Gn`_D(Ix}gD&wh_fJYtAI<{nyCI#m>gw z4%<_q_ggz&b2FX-sRA?B*S&tWr=N}TaPJ%^oLtWT``>t(eiuPEw`ivRlh)#;u^~j zuzJ(WrigtVJ5!u6qG_k6p5RtP8XeXeJG^D5nsRqF?w z@vSXHJZ+PnA!UHsC(#L#C9c|`j^&o!#jG#UeW0Rm$a57v0rZO*k%ESf$-2)k3;><4 zE)t4z%wuK=QA+$QsSyezt;Ci#%Yw7y68Zlw+Wh|G=k;xYz)<>Yqv4sJvx^i1HU626 zd1QKT8Ar4qpVP+2JdTh_dmOwGo9 zkW)>LBaG-D>@h|0_%Vi?COi`Np}7O3DY3;5=vfq^BGc&3cOYET1L%Yo=GgKy{6+?( zn#VvH1b*6q5v{g{S;xXAtn1GPd<2YAC#}7t^rMFm$GMFvu=oyCv2^T4Y?)O#FeIa= zpzOy2kX%@=c*`pH-op<}C4o^oadA$0(Bzr*1}C3!n{w$UymTSOA-^i!Ra6dZ_&W2+ z9~q0AcaNkrxn%t$=>g4sksUCZ&xv(^UNG z8oAN_W=dK`Ec#-6;k`%qqeyX9YNVdK$kOZGq1$vGE;&}#Me5D5C?gYAY0o6BEM~_; zOQoE>c}St{7n~nQP=-eUChS)w$_6ql6N?o@e{VJH%l@PMErlbP^{)QC*tE3)d_m-! z**Py>B|yvK#l}Tx*PUim*5QGz+T5zC0NP8Yhxs!AIa^y@hOSmb&}MU)_hvkzANlTr z6qV&){QI1&PH<0!#jDc@09*6L#Ph0F2a!tLp*Sd^`q#s(0p|GSw+t~+G)6vV1V%x1 zRru01d-65CH{*(?;3o4<7%y^keOlX=il(R)1JzbLfEVFnC%-|@yC5A@n512L+ES1e z#I7O$Z6jE$^sSF!$kxLB6LRVdllFRO6yiQ6&W!0Y`}p5BiueM^-_>Ks zCX^Qic7}CPF1ljQwUBWbGd$1*7Eb+3O5iVK$vV6SckvWj_xMJmzVr$o4O{6qMx*G4yvT7g9D zn+aM+HQm2PcIVtTM4Ymk<9D*qj9yY$*n0Gd$_=adQ8>aI?+!K~nhJKRj-hFs5Th%5 zA^PwR?fKb4Q~{J95zX||(9B?v-5DA?47(2)(-ZjkyFLvW*sW%TkaYyOMa{>Sph9;o zNB3qxWNKUoU|6`bJ>cVnN;BIdnjd({Ca*-|0{4Fq&R_E-cYQ9n`EZd?D-7F&Rjwc0 zZ|wqfj36DcbGo+Vv9turrk3-)6d70E0t_7EJIN%P^=_4dB0Y|(OT`_ zjD=({y=r&R+(-3IAXU3fAojx-^FW26xN1$r29_7jP})5QND>$QMZ1USww*glCZOB! z_1kPhpC8S@u25QNJ$iGIepA>jp`p`o^Ib1?i*8Ytu8@=?<6Y1d*(jpOAV@FP1W5T`iv!d8gd~Yd|_z^fzKT<8q zQr1z2@H64d_&ZXnkWSzP1u)vzWJ8oqi{c>y&4G#-w=XB%nMdwdG&>ZmyUbC5Md6PE zJL+ZRMP{{fUM;ZZkfh+|PFRq;WsDE__hD9{(-N=UTOMO<<+OW$4H7c>&3{qiy;TF| z(w#hd1;eu6-~5@1d6t;|#K-gqi%8Zi%fmFSRiidXAUIl^*tgk)u3DHeb!c0B%)%2yKzdWM512c3|O~`8oJ9GF_!hY27*D8@oC|;i0 zT|vCH&k-p>)t1XDm8FmkKr$SVs2ge#w1@&He1Al~QQ6D4%D84Iq9FimK#X>R7Bc+W zW>R9PY<=zy_ZrG zW@V|R7=Mf|&lyjpE%~jiz3{ofo<&5TB^(i-yx)Q-v^RrJC5{g(HMG?lox}u0Ee_c> zmqq~=0#8`+G{%D2JX8^6|LEJn+fTjoiE;#`F#wd`MNj0M7f-Bx{KTe!H*>)- zANI~@kULVKt>tj3H6R?)VU!M3G@m1-hvLF|F@y&kNoj+yJmswU3cng?<3OK?V3Qc! z5C_|ZRB0YMdoUM*6%hHWvr22=B26Sgu6;eRiX+Y@X*e#k8!n6Wp+gYxwZ!L2<>Xj= z=TJ2RgFO{>=${>x4=+-Vq(m=vDx1r#;2RW-97rwgsd0#>{KzeuU%#j+9qG!}nK*ul zR96uB3at0VkA~AR&!~J*7F~z$Uf&>L(1O?x;@0M;uYt9F(90A-mqASB*Qggmg?T|C zKmZ}0i>!^g4kAmqY=b|X!8J#o&2H-z(*Sby-!MR&2dgr8$*bUkcNZe*zT$g~SUgOd zIxgwiAulEcL;T{Wc-vp=7}N;%N8LG~l8@A=SnxdOEU;w4$1X->Zix-emBX9WZX%Aj zFNB4EM(^_|7U|Vmh!ot(P^Ja9gt(o)b(f_@_kgbGn95wwK6|I~m_6Q;Vx;vC1qtgF z)GsK|iq8{Io)9dUcikH`=Uakk`<-J1>#|3>IpMg3@DCphzN zP<8*cs{ue`o#Vw@s+dYI8i=hk=i38b)D%X1k&nAfl2=Y(MdIr1_6pfe4fVBQ>0-q} zXfG^T{Gm{xfE3EabkX(0>1kF~bmT?&_U}T?rQ7)`n+|2E7Srm=wmwV!to9H3Jew@i?;Tbkw$iMiH)f!0%%eTE2s zJC2NL7BlYq@~`PZ#SSlx8rZ3h2N@N4=k@||57;>NvNaaz22jqwRQ?neSor1oH;XCK z`_{3ZufZHM=S0(eXphdcw&GHZ4Ij9ubI1!qA%bf=BkKLK6Joe@Emm?78qTN-0#s*4 z?XY6~q`Qmp64#3vVYJq*_vkR%yuQ#Q8v{!Y>lk+MYN1*73a@XDms#@D)*1QmeFq`S2+6sU36pSpILOgTL`U-^sOC8v&H&FJ^u|3i zWG{@>py61-g9=!=Hb%r+?5NGsxfWh(>qFi;&3%=KD)=k+2_;9mG)4+?F?}5pxe^A-mi0^MfYT6zre%qxlCl!EPu;wF3{l(q&451)z)5Fv@OG4_crM93^t<7$$X0ac~ilX z;trOJa|}9s9*d_G_>rp;#g0uM?fRGc{F7;iMi1h*g5F6(zW6e{%yao1vj2~8lI7Ov zK~zWRS#1YH?r+g3U2V&c`C^G!KJ)oK$9k}i$|B^BCN|lS?Cqc#w}|k(G@Aw95~-R3 z7#L^{B90nPD2&HXj@AJHC)bvCiIvK6U@*zO1QdAtZ7%_&*YC$RwLnw<#S<`IQ2nCs zTw|KOf?-!lk$1$zPBy)6q+L&|bFM!O5o-iq=(7vNNIZNkW5ybt>gR0iLk%6_ZsS{dVW z7b+f>a7T5t$^|PXm^TGplb*+y{0#zw@Od?cz|CY0c!7#dC8NDufTFjxr2?5ZnsXW=Qjm|eC~=K z9L~KcwJ11(64l!^pc2E;!Fv==A)Sy~bs1V_P@Z1UR#A^e2THXKEBKj%!6i$28>n9& zy=eeewAbFxTnS?`LMdzkOAFJOo6Q|*L4FX=sF$p;p(th_yv6Z{U}(A><7F4z3R9v7 z9Q5T^W%F_x^<@5u(Sb7Ab?53x9u347ioUk~yB^U%qK zFdr`CH0oYsUzLH?tFtC$pz>w%ZUaE{;(zFAO#dW$>GbymC?2JO@ zNyR~!xOQP`0X`e4RI*1u>$SMjx@`PS%I(#7?Jwh>uqT*EbsnH{=XQ{ok$;Jy_@Mt# z88UO9kFYwmw?T!gNl$%QBKxO4&M#4gko~hAVYVn(cOJisIv-)_Yjop)Xnx!aDz5m8 zs&FqIUyqyW=7rVoxla$l+s~o!*`Gf`*24==~R5&Z)29=}Wug%`_=aT&1N!BNl>9KSf3|3 M?`qu`Edmr6 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 KU;sx2Le6V2= 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≷I=8FO-49}&3&)l!EfCsRS>%xao<( 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π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[jeU2PdzQ{ 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 +pler$A zemjMcSv3jd$EFP2pn4T<%I68LqaYpci7yAP z&``zD$-T*_0^k2vtyl0k8sve5ZLo`^S3pr$-P|>wfFO;ZTD5LyD96C6x<6nUy+(E^ zDxOj{?)$87MQYBwK5?w9Q?Emh0EBIV*Nf>=jAwhLs+zEx$I-+80Tps&A2$A;U$5L+ zMJZ^lf1mB*0*}%fOQIu;g8h3i24Yq}Oduh?-jwAGlB~sPSp2pZmvN1ftv?w)NZVO| zaw?1XLKe)h2`K3Xt_TBLm^&peFUek?IN=195*tPFq1oQkcuhy$O%cJ2zo6YGx*{1i zqpo+!%%dC^=!~9W?tH*@#*av;UY@+o5Emku7E#Q|O?iE_QOpK>HvpwxisH&*VV_}| zA#o9b#N@fR>zlUl6{d?mJQP10r8kDW$Y+%FZ6O{zZR_Iz zLaXZ^ODP7N0-d8K31nrISWg$OxzivA$nkUHR3z!8 z6>JuHXZBJDLohg?dQ1%8*1m7U$L>^xaqKL5D400p3n9-^fuAZUBm3|6pNz}q1oS0N zwM>Vna0^oIKL4?RrN9;eV1|gQ2TPKV&-*aRvEs<0W3htPkbaK$R(fuJhNDbL$sPw# z^gmLAQ$v9#LEDb;DygXe{Wumy@Y7I;2Ze)*BR4|S(A!8k1W-Pzq_ERJ&avG+)mVH5 zQO0c%Zs65}J%x{$1m~TXgF1#U7fyJi43yLKz#ZrT$ z^VX80W`Da{J-;`XCn%YTC2*7lvK!}I_egvXCzF&7ypf<0n1ahPsOIQ0M zPCNAZ!_3A|_?16EFOwkW#9MhY^k$9*?8_`0?d4@&(u2wy|5O{xvUQFL>d<=B}xlFF%B{wWLC{Rq0{qktlFtoja$rtqcMY!DrfKh2Jv0Kv?53}U;#>PNy63! zrWkL&(hwb5tjo}G8Ll`X1SNGFEnHkU^o!3*4azA%UM7{Hyj>nCDl~W9|0!qHI0koOm95y@9yIJRdF@ z(fZn=j~T$lpfWc}_tz^C6GaE#6?3TGZ<+>lc-g(3rS{a5mAjh$fCj>zOXp+>aBUrK z?jhQyPz-Z<9XCIazS#L&jeKo<2|p3vSh#O$B`&e`vKlMLsMshI9{8ErSedsEbzcWI z-v9s~jqAV)(MW^cEI4q5 zjAjX5c2O^mU^Q|gTr~kAmeyftVuHACkGbEH`<4J*%^b*GtB{-`h&fqB{+Ovfsx<&F z@iPQ*N7(aVO==Y_CXmWf0Cg(eVVjs86j&KnarXO}y;qO0O(v5_JQoCzyP)+Fz=Uh` zP^?|3-Atn2m|?oL<{pa+D5**1hMSH8=6RUdr7Sxg zsLxMNNx&!~AX4T)1o`1`9X-Jem6Z};r0o_2;SRIcoe@wj6Ywvj0+H ztV`$YR9S`|@)Oh`h%hROZ@HD?yodZJ>|b@+jHI zzw34)EB*^{m@^Z|r~(#!%c5$Sgys)R*A~Y!<{!b!6HczytA@7)(

{2;}P^r~T;d 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

KVmthMgK*_#u;9IKmVeXsYXGud^-v-v5-9Q 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 z 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%0Dlb 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 z

    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

    $%{E6Uo@MT%jL*M*2%k62 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 z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_p1wttT z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBly@PF*kfdBvi005BxYa=8$aNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M%C|4g>%I004me zUmGF8fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB)i;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?utNs|00000K>n|dkl?_90|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zfE_vz000000P=rrgaii;95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=0qoF$000000FeJ{BP2L* z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4q%541ONa40D$~o8zI4g0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KZ~!}WAOHXW0089w+6V~_95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fdkl~0|5X4001EW z*G5Qi;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jjM^9S8sb0002_zcxaG0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNq!T=s*Af0002U|Fsbk95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddD$L&pLD z0001k{H;f^uMjd|z<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA ez<>b*1`HT5V8DO@0|pEjFkrxd0RsjM>;nN19(VTu literal 0 HcmV?d00001 diff --git a/aavmf/AAVMF_VARS.fd b/aavmf/AAVMF_VARS.fd new file mode 100644 index 0000000000000000000000000000000000000000..a71658f98825efe5a564a64edfd3a73fca82c92c GIT binary patch literal 67108864 zcmeFtze+-J6bJA_SBRjotp_MEdWoQJ5auMILzB=GXiz~*EzuI?(2zCO6SNDBJ%d}b zGh}`2Lb>9002P#uZ@u4z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95{d-IuHN=0002;e{F;W2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J^Xw(18E| z0001x|7#;8IB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yRZhYkb)0001h{9hX(!GQw@4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`?QJ9Hob00000%I004meUmGF8fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB)YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK cfB^#r3>YwAz<>b*1`HT5V8DO@0|s^j0SBU01poj5 literal 0 HcmV?d00001 diff --git a/src/arch.rs b/src/arch.rs index 61dc034ef80..59e8f6f27dc 100644 --- a/src/arch.rs +++ b/src/arch.rs @@ -119,6 +119,22 @@ impl Arch { } } + /// The two `-drive` values that give a guest its firmware, from the + /// repository at `root`. The store is never written back: OVMF boots from a + /// read-only one, and AAVMF's `DEBUG` build asserts on one, so it writes a + /// snapshot QEMU discards. + pub fn pflash(self, root: &Path) -> [String; 2] { + let (code, vars) = self.firmware(); + let store = match self { + Arch::X86_64 => "readonly=on", + Arch::Aarch64 => "snapshot=on", + }; + [ + format!("if=pflash,format=raw,unit=0,file={},readonly=on", root.join(code).display()), + format!("if=pflash,format=raw,unit=1,file={},{store}", root.join(vars).display()), + ] + } + /// How this host provides a guest of this architecture: its own /// hypervisor when the host is the same architecture and will open it, /// and emulation otherwise. diff --git a/src/qemu.rs b/src/qemu.rs index ced024232bc..ee5da078501 100644 --- a/src/qemu.rs +++ b/src/qemu.rs @@ -142,7 +142,7 @@ pub fn launch(opts: &Options) { } qemu.arg("-cpu").arg(arch.cpu(accel)); - let (code, vars) = arch.firmware(); + let [code, vars] = arch.pflash(std::path::Path::new(".")); qemu.arg("-machine") .arg(machine(arch, shape.iommu)) .arg("-smp") @@ -150,9 +150,9 @@ pub fn launch(opts: &Options) { .arg("-m") .arg("2G") .arg("-drive") - .arg(format!("if=pflash,format=raw,unit=0,file={code},readonly=on")) + .arg(code) .arg("-drive") - .arg(format!("if=pflash,format=raw,unit=1,file={vars},readonly=on")); + .arg(vars); // Before every other `-device`: a PCI function created ahead of the unit // gets QEMU's bypassing address space and is never decoded by it. diff --git a/src/sourcegate.rs b/src/sourcegate.rs index d954374c5a4..3983033e7f0 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -980,6 +980,16 @@ const COMMITTED_FILES: &[(&str, &str, &str)] = &[ "e1bea9791e07a0e2509196c6cb4563d44cafca1f19b0ef660319b0fa53546a3e", "NOTICE", ), + ( + "aavmf/AAVMF_CODE.fd", + "47765fe344818cbc464b1c14ae658fb4b854f5c2ceffa982411731eb4865594d", + "NOTICE", + ), + ( + "aavmf/AAVMF_VARS.fd", + "b3b855c5a80310168051164986855692d1bdb06e67619856177965cd87c6774f", + "NOTICE", + ), ( "ovmf/DEBUGX64_OVMF.fd", "800ff5af1220d1232d4da7173ccddbb74a9217600bd8935903d9d534801778b4", diff --git a/tests/common/qemu.rs b/tests/common/qemu.rs index 66bf911f72a..cccd4f57016 100644 --- a/tests/common/qemu.rs +++ b/tests/common/qemu.rs @@ -4247,7 +4247,7 @@ fn qemu_command( ); let repo = compile::repo_root(); - let (firmware_code, firmware_vars) = SUITE_ARCH.firmware(); + let [firmware_code, firmware_vars] = SUITE_ARCH.pflash(&repo); let mut qemu = Command::new(SUITE_ARCH.qemu()); @@ -4290,15 +4290,9 @@ fn qemu_command( .arg("-m") .arg("4G") .arg("-drive") - .arg(format!( - "if=pflash,format=raw,unit=0,file={},readonly=on", - repo.join(firmware_code).display() - )) + .arg(firmware_code) .arg("-drive") - .arg(format!( - "if=pflash,format=raw,unit=1,file={},readonly=on", - repo.join(firmware_vars).display() - )) + .arg(firmware_vars) .arg("-drive") .arg(format!( "if=none,id=stick,{}{}", From d9ba4dfcb75c1f9ae94ba8efce0464ba03e83448 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 14:02:58 +0200 Subject: [PATCH 06/50] kernel: the PC's own devices, the page tables and the Hw boundary live under arch/x86_64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Code that is x86 whatever else changes moves under the architecture that has it, unchanged, so the next architecture does not compile it: - The PC platform's devices: the i8042, the I/O APIC, the CMOS RTC, the chipset's TCO watchdog and VT-d. Generic code reaches each by the concept it serves — `arch::keyboard_controller`, `arch::watchdog`, `arch::rtc`, `arch::iommu_unit` — and never by its name; `iommu`'s backend-neutral front (`crate::iommu`) calls `unit::` where it called `vtd::`, and its identifiers' constructors are `pub(crate)` rather than `pub(in crate::iommu)`, since the backend is no longer inside it. - `mm::paging` is the x86 PTE format, PCID and CR3 through and through; it moves to `arch/x86_64/paging.rs` and `crate::mm::paging` re-exports the architecture's. - `hw.rs` is the scheduler core's `Machine`/`Hw` implementation — x2APIC, the TSC, the `context_switch` frame and SYSRET's SS erratum — and moves to `arch/x86_64/hw.rs`; `crate::hw` names it. - `nmi_gate`, the `boot-actuators` harness for the SYSCALL entry's user-stack window, is about an x86 window that an AArch64 exception entry does not have. The gates that name files by path (sourcegate, kernelkeys, kernel-loom's tally include) follow them. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel-loom/src/lib.rs | 4 +- kernel/Cargo.toml | 2 +- kernel/src/{ => arch/x86_64}/hw.rs | 0 .../src/{drivers => arch/x86_64}/i8042/mod.rs | 0 .../{drivers => arch/x86_64}/i8042/tally.rs | 0 kernel/src/arch/x86_64/idt/i8042.rs | 2 +- kernel/src/arch/x86_64/idt/nmi.rs | 4 +- kernel/src/{drivers => arch/x86_64}/ioapic.rs | 2 +- kernel/src/arch/x86_64/mod.rs | 19 +++++++- kernel/src/{ => arch/x86_64}/nmi_gate.rs | 1 + kernel/src/{mm => arch/x86_64}/paging.rs | 37 +++++++-------- kernel/src/arch/x86_64/percpu.rs | 2 +- kernel/src/{ => arch/x86_64}/rtc.rs | 0 kernel/src/arch/x86_64/syscall.rs | 8 ++-- kernel/src/{iommu => arch/x86_64}/vtd/dmar.rs | 0 .../src/{iommu => arch/x86_64}/vtd/domain.rs | 1 + .../src/{iommu => arch/x86_64}/vtd/fault.rs | 1 + .../{iommu => arch/x86_64}/vtd/interrupt.rs | 1 + kernel/src/{iommu => arch/x86_64}/vtd/mod.rs | 3 +- .../src/{iommu => arch/x86_64}/vtd/queue.rs | 0 .../src/{iommu => arch/x86_64}/vtd/table.rs | 0 .../src/{drivers => arch/x86_64}/watchdog.rs | 0 kernel/src/clock.rs | 2 +- kernel/src/drivers/mod.rs | 3 -- kernel/src/drivers/panic_console/mod.rs | 4 +- kernel/src/heartbeat.rs | 2 +- kernel/src/iommu/mod.rs | 46 +++++++++---------- kernel/src/main.rs | 10 ++-- kernel/src/mm/mmio.rs | 2 +- kernel/src/mm/mod.rs | 4 +- kernel/src/pcidev/mod.rs | 2 +- kernel/src/sched/driver.rs | 8 ++-- kernel/src/syscall/dispatch.rs | 2 +- kernel/src/syscall/machine.rs | 2 +- src/kernelkeys.rs | 4 +- src/sourcegate.rs | 6 +-- tests/common/power.rs | 2 +- tests/common/serial.rs | 4 +- toyos-ps2/src/key.rs | 2 +- toyos-ps2/src/lib.rs | 2 +- 40 files changed, 107 insertions(+), 87 deletions(-) rename kernel/src/{ => arch/x86_64}/hw.rs (100%) rename kernel/src/{drivers => arch/x86_64}/i8042/mod.rs (100%) rename kernel/src/{drivers => arch/x86_64}/i8042/tally.rs (100%) rename kernel/src/{drivers => arch/x86_64}/ioapic.rs (99%) rename kernel/src/{ => arch/x86_64}/nmi_gate.rs (99%) rename kernel/src/{mm => arch/x86_64}/paging.rs (97%) rename kernel/src/{ => arch/x86_64}/rtc.rs (100%) rename kernel/src/{iommu => arch/x86_64}/vtd/dmar.rs (100%) rename kernel/src/{iommu => arch/x86_64}/vtd/domain.rs (99%) rename kernel/src/{iommu => arch/x86_64}/vtd/fault.rs (99%) rename kernel/src/{iommu => arch/x86_64}/vtd/interrupt.rs (99%) rename kernel/src/{iommu => arch/x86_64}/vtd/mod.rs (99%) rename kernel/src/{iommu => arch/x86_64}/vtd/queue.rs (100%) rename kernel/src/{iommu => arch/x86_64}/vtd/table.rs (100%) rename kernel/src/{drivers => arch/x86_64}/watchdog.rs (100%) diff --git a/kernel-loom/src/lib.rs b/kernel-loom/src/lib.rs index d6cfdc8a9ee..1e4afcf8b78 100644 --- a/kernel-loom/src/lib.rs +++ b/kernel-loom/src/lib.rs @@ -1,7 +1,7 @@ //! Loom harness for the kernel's memory-ordering primitives. //! //! `kernel/src/sync.rs`, `kernel/src/shootdown.rs`, -//! `kernel/src/sched/reap_gate.rs` and `kernel/src/drivers/i8042/tally.rs` are +//! `kernel/src/sched/reap_gate.rs` and `kernel/src/arch/x86_64/i8042/tally.rs` are //! compiled into this crate with `feature = "loom"` on, so their atomics and //! cells resolve to loom's instrumented ones and the models drive the real //! primitives rather than transliterations of them — a transliteration is @@ -350,7 +350,7 @@ pub mod sleeplock; /// subject is a *driver*, and it is here for the reason the others are: the /// property is "no reader ever sees this pair disagree", which is a claim about /// instants that no guest test can express and that x86's TSO hides. -#[path = "../../kernel/src/drivers/i8042/tally.rs"] +#[path = "../../kernel/src/arch/x86_64/i8042/tally.rs"] pub mod i8042_tally; /// The panic snapshot's owner and access state, driven together by diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index c101265898c..657997f0dad 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -268,7 +268,7 @@ stack-witness = [] # lands eight bytes below the frame, so the frame has to be inside a real stack # before the call happens. `stack-witness`'s third test is what establishes that. switch-witness = ["stack-witness"] -# The negative controls — `kernel/src/hw.rs`'s `switch_witness_mutate` carries +# The negative controls — `kernel/src/arch/x86_64/hw.rs`'s `switch_witness_mutate` carries # what each stages. One write per boot, at the ninth switch (`MUTATE_AT`, and # small because it was measured): `frame` writes the `rbx` slot of a frame the # check has just validated, and is the control for the instrument — a witness that diff --git a/kernel/src/hw.rs b/kernel/src/arch/x86_64/hw.rs similarity index 100% rename from kernel/src/hw.rs rename to kernel/src/arch/x86_64/hw.rs diff --git a/kernel/src/drivers/i8042/mod.rs b/kernel/src/arch/x86_64/i8042/mod.rs similarity index 100% rename from kernel/src/drivers/i8042/mod.rs rename to kernel/src/arch/x86_64/i8042/mod.rs diff --git a/kernel/src/drivers/i8042/tally.rs b/kernel/src/arch/x86_64/i8042/tally.rs similarity index 100% rename from kernel/src/drivers/i8042/tally.rs rename to kernel/src/arch/x86_64/i8042/tally.rs diff --git a/kernel/src/arch/x86_64/idt/i8042.rs b/kernel/src/arch/x86_64/idt/i8042.rs index cc05ed01f4b..e6e223ef52f 100644 --- a/kernel/src/arch/x86_64/idt/i8042.rs +++ b/kernel/src/arch/x86_64/idt/i8042.rs @@ -2,5 +2,5 @@ use super::device_irq::device_irq_entry; device_irq_entry! { /// The kernel's only reader of port 0x60 for both PS/2 lines. - pub(super) fn i8042_entry => crate::drivers::i8042::handler + pub(super) fn i8042_entry => crate::arch::i8042::handler } diff --git a/kernel/src/arch/x86_64/idt/nmi.rs b/kernel/src/arch/x86_64/idt/nmi.rs index 51e0f7cea4a..cedfa1dcf6c 100644 --- a/kernel/src/arch/x86_64/idt/nmi.rs +++ b/kernel/src/arch/x86_64/idt/nmi.rs @@ -96,7 +96,7 @@ extern "sysv64" fn note(rip: u64, cs: u64, rsp: u64, rflags: u64) { #[cfg(not(feature = "boot-actuators"))] let _ = cs; #[cfg(feature = "boot-actuators")] - crate::nmi_gate::observe(rip, cs, rsp); + crate::arch::nmi_gate::observe(rip, cs, rsp); crate::sched::dump::note_nmi(rip); // After the probe's store and before the nested-NMI staging: a hard lockup // ends the machine from here, so the sibling asking where this CPU is still @@ -104,7 +104,7 @@ extern "sysv64" fn note(rip: u64, cs: u64, rsp: u64, rflags: u64) { // sealing a record. crate::hardlockup::sample(rip, rsp, rflags); #[cfg(feature = "boot-actuators")] - crate::nmi_gate::stage_nested_if_armed(); + crate::arch::nmi_gate::stage_nested_if_armed(); } /// A second NMI on a stack the first is still standing on. diff --git a/kernel/src/drivers/ioapic.rs b/kernel/src/arch/x86_64/ioapic.rs similarity index 99% rename from kernel/src/drivers/ioapic.rs rename to kernel/src/arch/x86_64/ioapic.rs index be7a818f618..fdfd4aa9de1 100644 --- a/kernel/src/drivers/ioapic.rs +++ b/kernel/src/arch/x86_64/ioapic.rs @@ -16,7 +16,7 @@ use crate::mm::paging::MmioPolicy; use crate::log; use crate::mm::Mmio; use crate::sync::Lock; -use super::acpi::MadtInfo; +use crate::drivers::acpi::MadtInfo; const IOREGSEL: u64 = 0x00; const IOWIN: u64 = 0x10; diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs index 7ef14a8d161..9681dfb7e22 100644 --- a/kernel/src/arch/x86_64/mod.rs +++ b/kernel/src/arch/x86_64/mod.rs @@ -1,8 +1,13 @@ #![warn(clippy::undocumented_unsafe_blocks)] -//! The machine, and the only part of this kernel that knows which one. +//! x86-64: the PC this kernel was first written for. //! //! Every `unsafe` block here carries a one-line `SAFETY:` comment, enforced by the lint above. //! [`percpu`] owns every `gs:` access; nothing outside this directory writes one. +//! +//! The PC platform's own devices live here too, because no other architecture +//! has them: the i8042, the I/O APIC, the CMOS RTC, the chipset's TCO +//! watchdog and VT-d. Generic code reaches each through the concept it serves +//! (`keyboard_controller`, `watchdog`, `iommu_unit`, …), never by its name. pub mod apic; pub mod barrier; @@ -11,13 +16,25 @@ pub mod control_regs; pub mod cpu; pub mod entry; pub mod fpu; +pub mod hw; +pub mod i8042; pub mod idt; +pub mod ioapic; pub mod mtrr; +#[cfg(feature = "boot-actuators")] +pub mod nmi_gate; +pub mod paging; pub mod pat; pub mod percpu; +pub mod rtc; pub mod smp; pub mod syscall; pub mod tlb; +pub mod vtd; +pub mod watchdog; + +pub use i8042 as keyboard_controller; +pub use vtd as iommu_unit; pub use apic::{msi_message, MSI_DOORBELL}; diff --git a/kernel/src/nmi_gate.rs b/kernel/src/arch/x86_64/nmi_gate.rs similarity index 99% rename from kernel/src/nmi_gate.rs rename to kernel/src/arch/x86_64/nmi_gate.rs index b41e55b9784..42b47045fde 100644 --- a/kernel/src/nmi_gate.rs +++ b/kernel/src/arch/x86_64/nmi_gate.rs @@ -28,6 +28,7 @@ //! itself with [`hold::EXPIRED`] in its word, and [`note_syscall`] is where it //! says so. +use crate::log; use core::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use crate::arch::{apic, percpu}; diff --git a/kernel/src/mm/paging.rs b/kernel/src/arch/x86_64/paging.rs similarity index 97% rename from kernel/src/mm/paging.rs rename to kernel/src/arch/x86_64/paging.rs index b2a494c77c2..3fd1391d982 100644 --- a/kernel/src/mm/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -6,6 +6,7 @@ // No mapping here is global, which is what makes a single-address // invalidation (INVPCID or INVLPG) complete. +use crate::log; use alloc::boxed::Box; use alloc::collections::BTreeMap; use alloc::vec::Vec; @@ -13,7 +14,7 @@ use crate::hasher::HashMap; use toyos_pcid::{Alloc, Pcid, PcidPool}; -use super::{UserAddr, PAGE_2M}; +use crate::mm::{UserAddr, PAGE_2M}; use crate::arch::control_regs::PcidActive; use crate::arch::cpu::Invpcid; use crate::sync::Lock; @@ -161,20 +162,20 @@ struct PageTablePage([u64; 512]); impl PageTablePage { fn phys(&self) -> u64 { - super::DirectMap::phys_of(self) + crate::mm::DirectMap::phys_of(self) } /// # Safety /// `phys` must be a `PageTablePage` this module built and linked in; /// the returned reference must not outlive its address space. unsafe fn from_phys<'a>(phys: u64) -> &'a PageTablePage { - &*super::DirectMap::from_phys(phys).as_ptr::() + &*crate::mm::DirectMap::from_phys(phys).as_ptr::() } /// # Safety /// Same as [`from_phys`], plus exclusivity: hold the only live reference. unsafe fn from_phys_mut<'a>(phys: u64) -> &'a mut PageTablePage { - &mut *super::DirectMap::from_phys(phys).as_mut_ptr::() + &mut *crate::mm::DirectMap::from_phys(phys).as_mut_ptr::() } fn child(&self, index: usize) -> Option<&PageTablePage> { @@ -426,7 +427,7 @@ pub struct AddressSpace { root: Box, children: Vec>, /// Physical data pages mapped into user space, keyed by physical address. Freed on drop. - pages: HashMap, + pages: HashMap, /// All virtual memory regions, keyed by start address. regions: BTreeMap, /// Owned for this space's life: dropping the space returns a user tag, so two @@ -627,7 +628,7 @@ impl AddressSpace { /// Checked here, not at the callers: a user space shallow-copies the /// kernel PML4 half, so a kernel address would otherwise walk to a writable kernel page. - pub fn translate(&self, vaddr: UserAddr) -> Option { + pub fn translate(&self, vaddr: UserAddr) -> Option { let va = vaddr.raw(); if !toyos_userbound::is_user_addr(va) { return None; @@ -646,11 +647,11 @@ impl AddressSpace { if pte & PAGE_PRESENT == 0 { return None; } - return Some(super::DirectMap::from_phys((pte & ADDR_MASK) + (va & 0xFFF))); + return Some(crate::mm::DirectMap::from_phys((pte & ADDR_MASK) + (va & 0xFFF))); } let page_phys = pde & ADDR_MASK_2M; let offset = va & (PAGE_2M - 1); - Some(super::DirectMap::from_phys(page_phys + offset)) + Some(crate::mm::DirectMap::from_phys(page_phys + offset)) } /// Find a free gap of at least `size` bytes (2MB-aligned), searching top-down. @@ -769,7 +770,7 @@ impl AddressSpace { } /// Private: not safe to use until every CPU is told — the free fn [`map_mmio`] is the whole operation. - fn map_mmio(&mut self, phys: u64, size: u64, cache: CachePolicy) -> super::Mmio { + fn map_mmio(&mut self, phys: u64, size: u64, cache: CachePolicy) -> crate::mm::Mmio { let start = phys & !(PAGE_2M - 1); let end = (phys + size + PAGE_2M - 1) & !(PAGE_2M - 1); let mut cur = start; @@ -777,7 +778,7 @@ impl AddressSpace { self.map_2m(cur, PAGE_PRESENT | PAGE_WRITE | cache.pde_bits()); cur += PAGE_2M; } - super::Mmio::new(super::DirectMap::from_phys(phys), size) + crate::mm::Mmio::new(crate::mm::DirectMap::from_phys(phys), size) } /// Read from the table rather than remembered, or `None` if unmapped. @@ -803,7 +804,7 @@ impl AddressSpace { } pub fn direct_map_policy(&self, phys: u64) -> Option { - self.policy_at(super::DirectMap::from_phys(phys).as_ptr::() as u64) + self.policy_at(crate::mm::DirectMap::from_phys(phys).as_ptr::() as u64) } pub fn user_policy(&self, addr: UserAddr) -> Option { @@ -814,7 +815,7 @@ impl AddressSpace { /// handing the enclosing 2 MiB page back to the PMM would reissue memory with a hole. pub fn guard_4k(&mut self, phys: u64) { assert!(phys & 0xFFF == 0, "guard_4k: phys {phys:#x} not 4 KiB-aligned"); - let virt = super::DirectMap::from_phys(phys).as_ptr::() as u64; + let virt = crate::mm::DirectMap::from_phys(phys).as_ptr::() as u64; let (pml4_idx, pdpt_idx, pd_idx) = indices(virt); let pd_phys = { let pdpt = self.root.child(pml4_idx).expect("guard_4k: no PDPT over the direct map"); @@ -865,7 +866,7 @@ impl AddressSpace { /// address, so an MMIO window's target is pre-mapped by the time its /// driver asks; a page `guard_4k` already split must not reach here. fn map_2m(&mut self, phys: u64, flags: u64) { - let virt = super::DirectMap::from_phys(phys).as_ptr::() as u64; + let virt = crate::mm::DirectMap::from_phys(phys).as_ptr::() as u64; let pd_idx = indices(virt).2; let pd = self.ensure_table(virt, flags); let entry = phys | flags | PAGE_SIZE_BIT; @@ -965,7 +966,7 @@ pub fn load_kernel_flush() { /// Free function (not a method): the lock and the shootdown are separate /// statements. Not optional — `map_2m` may change memory type under a /// sibling's stale entry, which is SDM Vol. 3A §11.12.4 undefined behaviour. -pub fn map_mmio(phys: u64, size: u64, policy: MmioPolicy) -> super::Mmio { +pub fn map_mmio(phys: u64, size: u64, policy: MmioPolicy) -> crate::mm::Mmio { let mmio = kernel().lock().map_mmio(phys, size, policy.cache()); crate::arch::tlb::shootdown(crate::arch::tlb::Origin::Mmio); // Read back off the table and logged beside firmware's MTRR verdict: the @@ -984,12 +985,12 @@ pub fn map_mmio(phys: u64, size: u64, policy: MmioPolicy) -> super::Mmio { /// Take the 4 KiB page holding `addr` out of the kernel direct map; `addr`'s /// page must be owned by the caller forever (see [`AddressSpace::guard_4k`]). pub fn guard_kernel_page(addr: u64) { - assert!(super::is_kernel_addr(addr), "guard_kernel_page: {addr:#x} is not a kernel address"); - kernel().lock().guard_4k(super::DirectMap::phys_of(addr as *const u8)); + assert!(crate::mm::is_kernel_addr(addr), "guard_kernel_page: {addr:#x} is not a kernel address"); + kernel().lock().guard_4k(crate::mm::DirectMap::phys_of(addr as *const u8)); } /// Build kernel page tables: map all physical memory in the high half using 2MB large pages. -pub(super) fn init(memory_map: &[MemoryMapEntry]) { +pub(crate) fn init(memory_map: &[MemoryMapEntry]) { let mut max_addr: u64 = MIN_PHYS_MAP; for entry in memory_map { if entry.end > max_addr { @@ -1082,7 +1083,7 @@ pub fn present_in_current_cr3(addr: u64) -> bool { /// map into and [`map_mmio`] is the way. pub fn boot_map_write_combining(phys: u64, size: u64) -> bool { for pass in [Pass::Prove, Pass::Switch] { - for base in [phys, super::PHYS_OFFSET + phys] { + for base in [phys, crate::mm::PHYS_OFFSET + phys] { let mut at = base & !(PAGE_2M - 1); let end = base.saturating_add(size); while at < end { diff --git a/kernel/src/arch/x86_64/percpu.rs b/kernel/src/arch/x86_64/percpu.rs index a1072d3df73..0d54089f0d3 100644 --- a/kernel/src/arch/x86_64/percpu.rs +++ b/kernel/src/arch/x86_64/percpu.rs @@ -383,7 +383,7 @@ fn alloc_percpu(cpu_id: u32) -> *mut PerCpu { // Published before the CPU it belongs to runs an instruction — no window where the census misses it. crate::irq_census::publish(cpu_id, percpu.irq_counts.as_ptr()); #[cfg(feature = "boot-actuators")] - crate::nmi_gate::publish(cpu_id, &raw const percpu.nmi_hold, &raw const percpu.user_rsp); + crate::arch::nmi_gate::publish(cpu_id, &raw const percpu.nmi_hold, &raw const percpu.user_rsp); ptr } diff --git a/kernel/src/rtc.rs b/kernel/src/arch/x86_64/rtc.rs similarity index 100% rename from kernel/src/rtc.rs rename to kernel/src/arch/x86_64/rtc.rs diff --git a/kernel/src/arch/x86_64/syscall.rs b/kernel/src/arch/x86_64/syscall.rs index 58c208d89cb..0a49d29b8f9 100644 --- a/kernel/src/arch/x86_64/syscall.rs +++ b/kernel/src/arch/x86_64/syscall.rs @@ -161,13 +161,13 @@ extern "sysv64" fn syscall_entry() { #[cfg(feature = "boot-actuators")] nmi_hold = const percpu::OFF_NMI_HOLD, #[cfg(feature = "boot-actuators")] - asked = const crate::nmi_gate::hold::ASKED, + asked = const crate::arch::nmi_gate::hold::ASKED, #[cfg(feature = "boot-actuators")] - held = const crate::nmi_gate::hold::HELD, + held = const crate::arch::nmi_gate::hold::HELD, #[cfg(feature = "boot-actuators")] - spin = const crate::nmi_gate::hold::SPIN, + spin = const crate::arch::nmi_gate::hold::SPIN, #[cfg(feature = "boot-actuators")] - expired = const crate::nmi_gate::hold::EXPIRED, + expired = const crate::arch::nmi_gate::hold::EXPIRED, ); } diff --git a/kernel/src/iommu/vtd/dmar.rs b/kernel/src/arch/x86_64/vtd/dmar.rs similarity index 100% rename from kernel/src/iommu/vtd/dmar.rs rename to kernel/src/arch/x86_64/vtd/dmar.rs diff --git a/kernel/src/iommu/vtd/domain.rs b/kernel/src/arch/x86_64/vtd/domain.rs similarity index 99% rename from kernel/src/iommu/vtd/domain.rs rename to kernel/src/arch/x86_64/vtd/domain.rs index 125ca21d308..c04083280d1 100644 --- a/kernel/src/iommu/vtd/domain.rs +++ b/kernel/src/arch/x86_64/vtd/domain.rs @@ -15,6 +15,7 @@ //! //! Lock order here is `DOMAINS`, `REMAP`, `UNITS`, `TABLES`, never the reverse. +use crate::log; use alloc::vec::Vec; use crate::iommu::{AddressWidth, DomainId, IommuError, Iova, StreamId}; diff --git a/kernel/src/iommu/vtd/fault.rs b/kernel/src/arch/x86_64/vtd/fault.rs similarity index 99% rename from kernel/src/iommu/vtd/fault.rs rename to kernel/src/arch/x86_64/vtd/fault.rs index 98847659627..680dea046be 100644 --- a/kernel/src/iommu/vtd/fault.rs +++ b/kernel/src/arch/x86_64/vtd/fault.rs @@ -15,6 +15,7 @@ //! machine goes on, because one process's bug taking the machine down is the //! thing moving a driver out of the kernel was for. +use crate::log; use core::sync::atomic::{AtomicU32, AtomicU64, Ordering}; use crate::drivers::pci::{self, PciDevice}; diff --git a/kernel/src/iommu/vtd/interrupt.rs b/kernel/src/arch/x86_64/vtd/interrupt.rs similarity index 99% rename from kernel/src/iommu/vtd/interrupt.rs rename to kernel/src/arch/x86_64/vtd/interrupt.rs index 88a9bca9691..8d86b74c860 100644 --- a/kernel/src/iommu/vtd/interrupt.rs +++ b/kernel/src/arch/x86_64/vtd/interrupt.rs @@ -28,6 +28,7 @@ //! This module's lock is taken before `UNITS` and before `TABLES`, never after //! either. +use crate::log; use alloc::vec::Vec; use crate::iommu::{Refused, StreamId}; diff --git a/kernel/src/iommu/vtd/mod.rs b/kernel/src/arch/x86_64/vtd/mod.rs similarity index 99% rename from kernel/src/iommu/vtd/mod.rs rename to kernel/src/arch/x86_64/vtd/mod.rs index 2d8f63ecb1b..aa589e0e576 100644 --- a/kernel/src/iommu/vtd/mod.rs +++ b/kernel/src/arch/x86_64/vtd/mod.rs @@ -15,6 +15,7 @@ pub mod interrupt; mod queue; mod table; +use crate::log; use alloc::vec::Vec; use crate::drivers::acpi::TableError; @@ -259,7 +260,7 @@ fn remappable(ready: &[(Unit, Plan)], described: usize) -> Option { ); return None; } - let apics = crate::drivers::ioapic::ids(); + let apics = crate::arch::ioapic::ids(); if !interrupt::apics_are_named(&apics) { log!( "iommu: firmware named a requester id for only some of this machine's {} I/O APICs, \ diff --git a/kernel/src/iommu/vtd/queue.rs b/kernel/src/arch/x86_64/vtd/queue.rs similarity index 100% rename from kernel/src/iommu/vtd/queue.rs rename to kernel/src/arch/x86_64/vtd/queue.rs diff --git a/kernel/src/iommu/vtd/table.rs b/kernel/src/arch/x86_64/vtd/table.rs similarity index 100% rename from kernel/src/iommu/vtd/table.rs rename to kernel/src/arch/x86_64/vtd/table.rs diff --git a/kernel/src/drivers/watchdog.rs b/kernel/src/arch/x86_64/watchdog.rs similarity index 100% rename from kernel/src/drivers/watchdog.rs rename to kernel/src/arch/x86_64/watchdog.rs diff --git a/kernel/src/clock.rs b/kernel/src/clock.rs index 98e649b5ce6..66392bb650c 100644 --- a/kernel/src/clock.rs +++ b/kernel/src/clock.rs @@ -225,7 +225,7 @@ pub fn init_wall(century_reg: Option, utc_offset_minutes: Option) { let utc_offset_minutes = if crate::actuator::rtc_zone_east() { Some(-120) } else { utc_offset_minutes }; - let civil = match crate::rtc::read(century_reg) { + let civil = match crate::arch::rtc::read(century_reg) { Ok(civil) => civil, Err(fault) => { log!("clock: this machine will not say what time it is — {fault}"); diff --git a/kernel/src/drivers/mod.rs b/kernel/src/drivers/mod.rs index 22058591658..7b85806128e 100644 --- a/kernel/src/drivers/mod.rs +++ b/kernel/src/drivers/mod.rs @@ -6,8 +6,6 @@ pub mod serial; pub mod acpi; -pub mod i8042; -pub mod ioapic; pub mod pci; pub mod nvme; pub mod xhci; @@ -19,7 +17,6 @@ pub mod virtio_sound; pub mod gop; pub mod hda; pub mod panic_console; -pub mod watchdog; /// The pool every driver here allocates its DMA out of. pub use crate::mm::DmaPool; diff --git a/kernel/src/drivers/panic_console/mod.rs b/kernel/src/drivers/panic_console/mod.rs index bc72af1d307..d9a5d583214 100644 --- a/kernel/src/drivers/panic_console/mod.rs +++ b/kernel/src/drivers/panic_console/mod.rs @@ -745,9 +745,9 @@ pub fn hold_the_panel(mut bound: Bound) -> ! { /// anything that does not skip them. [`i8042::poll_byte`] is an `inb` — no /// lock, no MMIO. /// -/// [`i8042::poll_byte`]: crate::drivers::i8042::poll_byte +/// [`i8042::poll_byte`]: crate::arch::keyboard_controller::poll_byte fn read_key(keys: &mut KeyDecoder, bound: &mut Bound) -> Option { - let (byte, false) = crate::drivers::i8042::poll_byte()? else { + let (byte, false) = crate::arch::keyboard_controller::poll_byte()? else { return None; }; let outcome = keys.feed(byte); diff --git a/kernel/src/heartbeat.rs b/kernel/src/heartbeat.rs index 4a58bcab903..30d21b1920f 100644 --- a/kernel/src/heartbeat.rs +++ b/kernel/src/heartbeat.rs @@ -97,7 +97,7 @@ pub fn poll() { ); // Must not block: report_line uses try_lock and prints `rte=busy` rather than waiting. - crate::drivers::i8042::report_line(); + crate::arch::keyboard_controller::report_line(); for (cpu, &stamp) in stamps.iter().enumerate().take(cpus) { if mask & (1 << cpu) != 0 { diff --git a/kernel/src/iommu/mod.rs b/kernel/src/iommu/mod.rs index 06c8029d607..8a3ffe99d1f 100644 --- a/kernel/src/iommu/mod.rs +++ b/kernel/src/iommu/mod.rs @@ -9,7 +9,7 @@ // CI runs kernel clippy with `-D warnings`, so an undocumented `unsafe` block anywhere in this module tree fails the build. #![warn(clippy::undocumented_unsafe_blocks)] -pub mod vtd; +use crate::arch::iommu_unit as unit; /// The address width a device's translations cover. /// @@ -37,21 +37,21 @@ pub struct StreamId(u32); impl StreamId { /// Named `pci`, not `new`: an SMMU StreamID is not always a bus/device/function triple. - pub(in crate::iommu) const fn pci(bus: u8, device: u8, function: u8) -> Self { + pub(crate) const fn pci(bus: u8, device: u8, function: u8) -> Self { Self(((bus as u32) << 8) | ((device as u32) << 3) | function as u32) } /// The bus half of the id. - pub(in crate::iommu) const fn bus(self) -> u8 { + pub(crate) const fn bus(self) -> u8 { (self.0 >> 8) as u8 } - pub(in crate::iommu) const fn devfn(self) -> u8 { + pub(crate) const fn devfn(self) -> u8 { (self.0 & 0xFF) as u8 } /// The 16-bit requester id a source-id check compares against; `pci` is the only constructor, so it always fits. - pub(in crate::iommu) const fn requester(self) -> u16 { + pub(crate) const fn requester(self) -> u16 { self.0 as u16 } } @@ -65,12 +65,12 @@ impl Iova { /// The domain every kernel driver that has not moved is still on maps a device address to the physical address it equals. /// /// The single site that policy is stated in, so the stage that moves the last driver deletes it and the compiler flags every site that assumed it. - pub(in crate::iommu) const fn identity(phys: u64) -> Self { + pub(crate) const fn identity(phys: u64) -> Self { Self(phys) } /// An address a domain's allocator handed out, which is nothing else's address. - pub(in crate::iommu) const fn translated(at: u64) -> Self { + pub(crate) const fn translated(at: u64) -> Self { Self(at) } @@ -84,12 +84,12 @@ impl Iova { pub struct DomainId(u16); impl DomainId { - pub(in crate::iommu) const fn new(id: u16) -> Self { + pub(crate) const fn new(id: u16) -> Self { assert!(id != 0); Self(id) } - pub(in crate::iommu) const fn raw(self) -> u16 { + pub(crate) const fn raw(self) -> u16 { self.0 } } @@ -160,13 +160,13 @@ impl DeviceSpace { /// machine out of domains are both answers its caller refuses the claim /// with rather than degrading past. pub fn own() -> Result { - vtd::domain::create().map(Self::Own) + unit::domain::create().map(Self::Own) } /// One of a device's own, or the machine's own with the reason. For a /// driver **in this kernel**, whose addresses are the kernel's either way. pub fn create() -> Self { - match vtd::domain::create() { + match unit::domain::create() { Ok(id) => Self::Own(id), Err(why) => { log!("iommu: no domain of its own for a device: {why}"); @@ -185,7 +185,7 @@ impl DeviceSpace { pub fn map(self, phys: u64, bytes: u64) -> Result { match self { Self::Untranslated => Ok(phys), - Self::Own(id) => vtd::domain::map(id, phys, bytes).map(Iova::raw), + Self::Own(id) => unit::domain::map(id, phys, bytes).map(Iova::raw), } } @@ -195,7 +195,7 @@ impl DeviceSpace { pub fn map_at(self, at: u64, phys: u64, bytes: u64) -> Result<(), IommuError> { match self { Self::Untranslated => panic!("iommu: an untranslated space was asked to place {phys:#x} at {at:#x}"), - Self::Own(id) => vtd::domain::map_at(id, Iova::translated(at), phys, bytes), + Self::Own(id) => unit::domain::map_at(id, Iova::translated(at), phys, bytes), } } @@ -203,7 +203,7 @@ impl DeviceSpace { pub fn unmap(self, at: u64, bytes: u64) -> Result<(), IommuError> { match self { Self::Untranslated => Ok(()), - Self::Own(id) => vtd::domain::unmap(id, Iova::translated(at), bytes), + Self::Own(id) => unit::domain::unmap(id, Iova::translated(at), bytes), } } @@ -211,7 +211,7 @@ impl DeviceSpace { /// in place: the device is translating the moment this returns. pub fn attach(self, bus: u8, device: u8, function: u8) { if let Self::Own(id) = self { - vtd::domain::attach(StreamId::pci(bus, device, function), id); + unit::domain::attach(StreamId::pci(bus, device, function), id); } } } @@ -229,9 +229,9 @@ impl core::fmt::Display for StreamId { /// /// The device list must be the complete enumeration: enabling translation with an unenumerated device left off it can brick the machine's own boot disk. /// -/// Calls `vtd::init` directly rather than through a dispatch, because x86-64 has one backend and the dispatch is not yet a real seam. +/// Calls `unit::init` directly rather than through a dispatch, because x86-64 has one backend and the dispatch is not yet a real seam. pub fn init(rsdp_addr: u64, devices: &[crate::drivers::pci::PciDevice]) { - vtd::init(rsdp_addr, devices); + unit::init(rsdp_addr, devices); } /// How a source must address its interrupt. Not a yes/no: a caller that folded @@ -291,20 +291,20 @@ pub fn remap_msi( vector: u8, dest: u32, ) -> Delivery { - if !vtd::interrupt::is_armed() { + if !unit::interrupt::is_armed() { return Delivery::Direct; } - match vtd::interrupt::msi(StreamId::pci(bus, device, function), vector, dest) { + match unit::interrupt::msi(StreamId::pci(bus, device, function), vector, dest) { Ok(msi) => Delivery::Remapped(MsiMessage { address: msi.address, data: msi.data }), Err(why) => Delivery::Refused(why), } } pub fn remap_pin(apic_id: u8, vector: u8, dest: u32, level: bool) -> Delivery { - if !vtd::interrupt::is_armed() { + if !unit::interrupt::is_armed() { return Delivery::Direct; } - match vtd::interrupt::pin(apic_id, vector, dest, level) { + match unit::interrupt::pin(apic_id, vector, dest, level) { Ok(pin) => Delivery::Remapped(PinRedirect { low: pin.low, high: pin.high }), Err(why) => Delivery::Refused(why), } @@ -319,12 +319,12 @@ pub fn remap_pin(apic_id: u8, vector: u8, dest: u32, level: bool) -> Delivery) { - vtd::fault::user_owned(StreamId::pci(bus, device, function), slot); + unit::fault::user_owned(StreamId::pci(bus, device, function), slot); } /// Reached from the IDT gate the unit's own `FEDATA` names. /// /// Fires when a device has been told no, so what it reports is a bug in whoever owns that device, not in the IOMMU. pub fn fault_interrupt() { - vtd::fault::service(); + unit::fault::service(); } diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 4e14a6450ff..398f5b9484a 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -45,8 +45,6 @@ mod usb_gate; mod nvme_gate; #[cfg(feature = "boot-actuators")] mod sched_gate; -#[cfg(feature = "boot-actuators")] -mod nmi_gate; mod block; mod durability; mod gpt; @@ -74,7 +72,6 @@ mod process; mod loader; mod scheduler; mod sched; -mod hw; mod iommu; mod preempt; mod irq_census; @@ -82,7 +79,6 @@ mod irq_ring; mod trace; mod time; mod clock; -mod rtc; mod watch; mod iod; @@ -118,7 +114,9 @@ use crate::mm::paging::MmioPolicy; use alloc::boxed::Box; use alloc::sync::Arc; use arch::{apic, cpu, idt, pat, percpu, smp}; -use drivers::{acpi, gop, i8042, ioapic, nvme, pci, serial, virtio_console, virtio_gpu, virtio_sound, xhci}; +use arch::{i8042, ioapic}; +pub(crate) use arch::hw; +use drivers::{acpi, gop, nvme, pci, serial, virtio_console, virtio_gpu, virtio_sound, xhci}; use toyos_abi::boot::{KernelArgs, MemoryMapEntry}; #[panic_handler] @@ -476,7 +474,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { iommu::init(kernel_args.rsdp_addr, &pci_devices); // Before storage and everything under it: what it covers is the rest of this // boot, and a wedge down there is the reason to have one. - drivers::watchdog::init(&pci_devices); + arch::watchdog::init(&pci_devices); file_cache::init(); gpt::init(kernel_args); i8042::init(kernel_args.rsdp_addr); diff --git a/kernel/src/mm/mmio.rs b/kernel/src/mm/mmio.rs index 6e248808676..3613e32a541 100644 --- a/kernel/src/mm/mmio.rs +++ b/kernel/src/mm/mmio.rs @@ -34,7 +34,7 @@ unsafe impl Send for Mmio {} unsafe impl Sync for Mmio {} impl Mmio { - pub(super) fn new(base: DirectMap, size: u64) -> Self { + pub(crate) fn new(base: DirectMap, size: u64) -> Self { Self { base: base.as_mut_ptr(), size } } diff --git a/kernel/src/mm/mod.rs b/kernel/src/mm/mod.rs index ee4e5145411..7ec0dcfb6c4 100644 --- a/kernel/src/mm/mod.rs +++ b/kernel/src/mm/mod.rs @@ -2,7 +2,9 @@ #![warn(clippy::undocumented_unsafe_blocks)] pub mod pmm; -pub mod paging; +/// The architecture's page tables: `crate::arch::paging`, named here because +/// every caller asks it as memory management. +pub use crate::arch::paging; mod alloc; mod dma; mod mmio; diff --git a/kernel/src/pcidev/mod.rs b/kernel/src/pcidev/mod.rs index dd430bd217d..4bc81f3e674 100644 --- a/kernel/src/pcidev/mod.rs +++ b/kernel/src/pcidev/mod.rs @@ -152,7 +152,7 @@ static IRQ: [Interrupt; MAX_FUNCTIONS] = [const { Interrupt::new() }; MAX_FUNCTI /// One address space per slot, made on that slot's first claim and kept. /// -/// Kept because a domain id is never given back (`iommu/vtd/domain.rs`), so a +/// Kept because a domain id is never given back (`arch/x86_64/vtd/domain.rs`), so a /// domain per claim would let a process spawn and die its way through every id /// the units report. [`release`] empties it, so the next holder attaches to one /// that maps nothing. diff --git a/kernel/src/sched/driver.rs b/kernel/src/sched/driver.rs index f550b11f43c..e43c0218f68 100644 --- a/kernel/src/sched/driver.rs +++ b/kernel/src/sched/driver.rs @@ -510,7 +510,7 @@ pub fn pass(dispose: Dispose) { // posts is in the run queue by the time the pass chooses. crate::object::drain_zero_handles(); let now = HW.now(); - crate::drivers::watchdog::feed(now.0); + crate::arch::watchdog::feed(now.0); #[cfg(feature = "heap-sweep")] maybe_sweep(now); #[cfg(feature = "pass-spin")] @@ -643,7 +643,7 @@ fn execute(action: Action) { || crate::irq_ring::any_pending_self() || !with_cpu(|c| c.mailbox_is_empty()) // The i8042 verdict needs a pass to notice its deadline; a quiet machine after boot runs none otherwise. - || crate::drivers::i8042::verdict_due() + || crate::arch::keyboard_controller::verdict_due() // No log condition here: a log to write means a runnable process, covered above. A pending // root-hub port needs a pass too — no interrupt is coming. || crate::drivers::xhci::port_work_pending(); @@ -664,7 +664,7 @@ fn drain_irqs(entered: super::dump::Entered) { #[cfg(feature = "boot-actuators")] crate::heartbeat::note_pass(); crate::drivers::xhci::poll_if_pending(); - crate::drivers::i8042::service(); + crate::arch::keyboard_controller::service(); // Here, not at the keystroke: the keystroke's decoding driver's guard is done by this point. super::dump::serve_request(entered); // A CPU cannot read a sibling's `CpuSched`, so the dump reaches every CPU @@ -723,7 +723,7 @@ extern "C" fn idle_loop() -> ! { // while the one under observation spins on `syscall` from Ring 3. #[cfg(feature = "boot-actuators")] if crate::actuator::syscall_window_nmi() { - crate::nmi_gate::storm(); + crate::arch::nmi_gate::storm(); } // Here, not from a syscall: the panic handler recovers, not paints, when a userland // thread is current, and the idle loop has none. diff --git a/kernel/src/syscall/dispatch.rs b/kernel/src/syscall/dispatch.rs index aef1f880b33..487ed9f40f2 100644 --- a/kernel/src/syscall/dispatch.rs +++ b/kernel/src/syscall/dispatch.rs @@ -99,7 +99,7 @@ retired_syscalls! { pub(crate) fn syscall_dispatch(num: u64, a1: u64, a2: u64, a3: u64, a4: u64) -> u64 { // Placed first so `nmi_gate` counts the call whatever it turns out to be. #[cfg(feature = "boot-actuators")] - crate::nmi_gate::note_syscall(); + crate::arch::nmi_gate::note_syscall(); let t0 = crate::clock::nanos_since_boot(); process::with_current_data(|data| { diff --git a/kernel/src/syscall/machine.rs b/kernel/src/syscall/machine.rs index 17bbb6109c3..b19ec54515f 100644 --- a/kernel/src/syscall/machine.rs +++ b/kernel/src/syscall/machine.rs @@ -88,7 +88,7 @@ fn quiesce(last: &str) -> Result<(), SyscallError> { crate::usb_gate::sweep_under_load(); } // First: what follows outlasts a feed cadence, and no pass runs to feed again. - crate::drivers::watchdog::disarm(); + crate::arch::watchdog::disarm(); // **Before the sync, because the sync is a claim about a machine.** A // process that issues a `write` after `sync_all` returns has dirty pages // nothing will flush. The log's holders run on until `wait_for_durable` diff --git a/src/kernelkeys.rs b/src/kernelkeys.rs index c99d3e8eab9..bc54b91b578 100644 --- a/src/kernelkeys.rs +++ b/src/kernelkeys.rs @@ -59,8 +59,8 @@ pub const DECLARED: &[Declared] = &[ keys: "`IdKey`, which no integer implements: every key is an id this kernel issued", }, Declared { - file: "kernel/src/mm/paging.rs", - ty: "HashMap", + file: "kernel/src/arch/x86_64/paging.rs", + ty: "HashMap", keys: "a physical address the page allocator returned", }, Declared { diff --git a/src/sourcegate.rs b/src/sourcegate.rs index 3983033e7f0..223b18062f4 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -198,7 +198,7 @@ const BANS: &[Ban] = &[ // A device's TX buffer. ("kernel/src/drivers/virtio_console.rs", 1), // A VT-d table is 4 KiB by the specification, not by this kernel. - ("kernel/src/iommu/vtd/table.rs", 1), + ("kernel/src/arch/x86_64/vtd/table.rs", 1), // Ring entries. ("kernel/src/trace.rs", 1), // A path length, in bytes. @@ -210,7 +210,7 @@ const BANS: &[Ban] = &[ why: "as above, in the other width", allowed: &[ // A VT-d register window, by the specification. - ("kernel/src/iommu/vtd/mod.rs", 1), + ("kernel/src/arch/x86_64/vtd/mod.rs", 1), // The export itself, and the one place the literal lives. ("kernel/src/mm/mod.rs", 1), // One PCIe function's extended config space, by PCI 3.0 §7.2.2 and @@ -463,7 +463,7 @@ const AUTO_TRAIT_IMPLS: &[(&str, usize)] = &[ ("kernel/src/drivers/panic_console/mod.rs", 3), ("kernel/src/drivers/virtio_console.rs", 1), ("kernel/src/drivers/virtio_sound.rs", 2), - ("kernel/src/hw.rs", 1), + ("kernel/src/arch/x86_64/hw.rs", 1), ("kernel/src/mm/mmio.rs", 2), ("kernel/src/mm/region.rs", 2), ("kernel/src/pipe.rs", 1), diff --git a/tests/common/power.rs b/tests/common/power.rs index 5c6bebdd497..96a13b6f80f 100644 --- a/tests/common/power.rs +++ b/tests/common/power.rs @@ -685,7 +685,7 @@ pub fn watchdog_fed( } /// The kernel's read-back above its own arm, in -/// `kernel/src/drivers/watchdog.rs`: whole clauses, one per branch. +/// `kernel/src/arch/x86_64/watchdog.rs`: whole clauses, one per branch. const ARMED_ON_ARRIVAL: &str = "so the bootloader had already armed the timer"; /// Unreachable from this suite: every guest that reaches the kernel's arm /// passed the parameter, and the loader read the same one first. diff --git a/tests/common/serial.rs b/tests/common/serial.rs index b8e7270cb7c..04d5c870347 100644 --- a/tests/common/serial.rs +++ b/tests/common/serial.rs @@ -103,7 +103,7 @@ const DEATHS: &[(&str, Died, Died)] = &[ // `machine_check_handler`, the one exception a Ring 3 frame does not make // the process's fault. Also `-> !`. ("MACHINE CHECK", Died::Kernel, Died::Kernel), - // kernel/src/iommu/vtd/fault.rs — a fault on a stream this kernel drives + // kernel/src/arch/x86_64/vtd/fault.rs — a fault on a stream this kernel drives // has nobody to hand it to, so the handler halts. One a *process* drives // says `owner=slot` and the machine goes on, which is why the needle is // the owner rather than the fault. @@ -405,7 +405,7 @@ impl Serial { /// all — so the only capture allowed to hold one is the capture of the test /// that staged it, and every other boot in the estate reds. const NEVER_CLEAN: &[&str] = &[ - // kernel/src/iommu/vtd/fault.rs — a function a *process* drives reached an + // kernel/src/arch/x86_64/vtd/fault.rs — a function a *process* drives reached an // address its own domain does not map. The machine goes on and the claim // refuses every later call, so this is not a death; it is a driver whose // descriptors are wrong, and a netd that did it on every boot would diff --git a/toyos-ps2/src/key.rs b/toyos-ps2/src/key.rs index 48160f25ab3..0930f87c6c1 100644 --- a/toyos-ps2/src/key.rs +++ b/toyos-ps2/src/key.rs @@ -180,7 +180,7 @@ impl KeyDecoder { // Shift *release*, which is accidentally the right direction // for the one state that could stick. Untested on metal. If it // does bite, the answer is a controller-side reconnect probe — - // `0xF2` identify on a timer, from `kernel/src/drivers/i8042/` + // `0xF2` identify on a timer, from `kernel/src/arch/x86_64/i8042/` // — and never a wire heuristic, because no wire heuristic // exists. 0x00 | 0xFF => KeyOutcome::Lost, diff --git a/toyos-ps2/src/lib.rs b/toyos-ps2/src/lib.rs index 916c44a057f..f95b8175088 100644 --- a/toyos-ps2/src/lib.rs +++ b/toyos-ps2/src/lib.rs @@ -8,7 +8,7 @@ //! a bug that is invisible in QEMU and un-single-steppable on the laptop //! this exists for. //! -//! The kernel side of the driver (`kernel/src/drivers/i8042/`) owns the +//! The kernel side of the driver (`kernel/src/arch/x86_64/i8042/`) owns the //! controller, the interrupt and the queues. Nothing in here touches //! hardware, allocates, or knows what a lock is. From 662724e7fee3fe4a393e901f995c9106fe0032f5 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 14:19:01 +0200 Subject: [PATCH 07/50] kernel: generic code names the machine by concept, and carries no x86 instruction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No `asm!`, no `extern "sysv64"` and no x86 register name is left outside `kernel/src/arch/`. What each place asked of x86-64 it now asks of the architecture by what it is: - `arch::boot`: the loader's entry (`_start`, moved out of `main.rs`) and the steps `kernel_main` takes at the points where one architecture differs from another — the memory type before the panel, CR0 and the PAT after the console, the AP trampoline's reserved page, interrupt bring-up (MADT, reset register, local APIC, per-CPU block, I/O APIC, IDT, syscall gate), the HPET-calibrated clock and the CMOS wall clock, the timer, the i8042, starting the APs, and the interrupt-controller selftests. `kernel_main` is `extern "C"` now that assembly calls it. - `arch::irqchip` is the APIC and `arch::trap` the IDT to every generic caller; `trap::report_panic`, `trap::kernel_backtrace` and `trap::frame_interrupts_enabled` replace reads of `rbp` and `RFLAGS.IF`. - `arch::cpu::{counter, frame_pointer, undefined_instruction, thread_pointer, stated_counter_hz, run_on_stack}` replace `rdtsc`, `mov rbp`, `ud2`, the FS base, CPUID leaves 15H/16H and the idle loop's stack switch. - `arch::entropy` is the CPU's random source (`RDRAND` here) for the hasher's seed and `sys_random`. - `arch::console_uart` is the 16550 at COM1; `drivers::serial` keeps the lock, the backends and the line discipline, and `serial::init` takes the RSDP an architecture that places its UART by table needs. - `arch::pio` is the I/O port space, and ACPI refuses a SystemIO reset or PM1a register on an architecture that has none. - `arch::pmu` is the counter that samples a CPU by NMI; `hardlockup` keeps the decision. - `arch::percpu` carries the preempt count, the reschedule flag, the fault state and the interrupt counters behind functions, not `gs:` offsets; `irq_took!` lives with the handlers that use it. - `arch::entry::initial_frame` lays out a new stack's first frame and the three trampolines live beside it; `context_switch` is `arch/x86_64/switch.rs`; the HPET calibration is `arch/x86_64/hpet.rs` and `clock::set_counter` is what it hands the clock. - The mapping vocabulary (`Prot`, `WindowProt`, `CachePolicy`, `MmioPolicy`) is `mm::policy`, each architecture's page tables encode it, and `CachePolicy::DeferToMtrr` is `Normal`. The GOP's memory-type line asks `paging::scanout_memory_type`. Behaviour on x86-64 is unchanged; every line the boot writes is the same. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/arch/aarch64/mod.rs | 23 ++++ kernel/src/arch/x86_64/boot.rs | 131 ++++++++++++++++++ kernel/src/arch/x86_64/console_uart.rs | 71 ++++++++++ kernel/src/arch/x86_64/cpu.rs | 103 ++++++++++++++ kernel/src/arch/x86_64/entropy.rs | 20 +++ kernel/src/arch/x86_64/entry.rs | 105 +++++++++++++- kernel/src/arch/x86_64/hpet.rs | 97 +++++++++++++ kernel/src/arch/x86_64/hw.rs | 4 +- kernel/src/arch/x86_64/i8042/mod.rs | 2 +- kernel/src/arch/x86_64/idt/dma_fault.rs | 2 +- kernel/src/arch/x86_64/idt/hda.rs | 2 +- kernel/src/arch/x86_64/idt/mod.rs | 35 +++++ kernel/src/arch/x86_64/idt/nmi.rs | 2 +- kernel/src/arch/x86_64/idt/spurious.rs | 2 +- kernel/src/arch/x86_64/idt/timer.rs | 6 +- kernel/src/arch/x86_64/idt/tlb.rs | 2 +- kernel/src/arch/x86_64/idt/unclaimed.rs | 2 +- kernel/src/arch/x86_64/idt/user_dev.rs | 2 +- kernel/src/arch/x86_64/idt/virtio_sound.rs | 2 +- kernel/src/arch/x86_64/idt/xhci.rs | 2 +- kernel/src/arch/x86_64/mod.rs | 9 ++ kernel/src/arch/x86_64/mtrr.rs | 2 +- kernel/src/arch/x86_64/paging.rs | 109 +++++---------- kernel/src/arch/x86_64/percpu.rs | 94 +++++++++++++ kernel/src/arch/x86_64/pio.rs | 7 + kernel/src/arch/x86_64/pmu.rs | 109 +++++++++++++++ kernel/src/arch/x86_64/switch.rs | 57 ++++++++ kernel/src/clock.rs | 152 ++------------------- kernel/src/deadline.rs | 14 +- kernel/src/drivers/acpi.rs | 11 +- kernel/src/drivers/gop.rs | 10 +- kernel/src/drivers/hda.rs | 4 +- kernel/src/drivers/panic_console/mod.rs | 6 +- kernel/src/drivers/serial.rs | 63 +++------ kernel/src/drivers/virtio_gpu.rs | 4 +- kernel/src/drivers/virtio_sound.rs | 4 +- kernel/src/drivers/xhci/mod.rs | 6 +- kernel/src/drivers/xhci/wait/mod.rs | 6 +- kernel/src/hardlockup/mod.rs | 116 ++-------------- kernel/src/hardlockup/probe.rs | 8 +- kernel/src/hasher.rs | 21 ++- kernel/src/irq_census.rs | 57 ++------ kernel/src/loader/mod.rs | 5 +- kernel/src/loader/start.rs | 92 +------------ kernel/src/log/nested.rs | 4 +- kernel/src/main.rs | 120 ++++------------ kernel/src/mm/mod.rs | 1 + kernel/src/mm/policy.rs | 79 +++++++++++ kernel/src/object/shm.rs | 6 +- kernel/src/panic.rs | 2 +- kernel/src/panic_reboot.rs | 6 +- kernel/src/preempt.rs | 25 ++-- kernel/src/process.rs | 6 +- kernel/src/quiesce.rs | 2 +- kernel/src/sched/driver.rs | 81 +---------- kernel/src/sched/dump.rs | 10 +- kernel/src/scheduler.rs | 2 +- kernel/src/syscall/dispatch.rs | 17 +-- kernel/src/syscall/io.rs | 5 +- kernel/src/syscall/vm.rs | 4 +- kernel/src/usb_gate.rs | 2 +- tests/toyos.rs | 6 +- 62 files changed, 1166 insertions(+), 793 deletions(-) create mode 100644 kernel/src/arch/aarch64/mod.rs create mode 100644 kernel/src/arch/x86_64/boot.rs create mode 100644 kernel/src/arch/x86_64/console_uart.rs create mode 100644 kernel/src/arch/x86_64/entropy.rs create mode 100644 kernel/src/arch/x86_64/hpet.rs create mode 100644 kernel/src/arch/x86_64/pio.rs create mode 100644 kernel/src/arch/x86_64/pmu.rs create mode 100644 kernel/src/arch/x86_64/switch.rs create mode 100644 kernel/src/mm/policy.rs diff --git a/kernel/src/arch/aarch64/mod.rs b/kernel/src/arch/aarch64/mod.rs new file mode 100644 index 00000000000..2d602efa5bc --- /dev/null +++ b/kernel/src/arch/aarch64/mod.rs @@ -0,0 +1,23 @@ +//! AArch64. +pub mod barrier {} +pub mod boot {} +pub mod cache {} +pub mod cpu {} +pub mod entry {} +pub mod fpu {} +pub mod hw {} +pub mod irqchip {} +pub mod keyboard_controller {} +pub mod iommu_unit {} +pub mod paging {} +pub mod percpu {} +pub mod rtc {} +pub mod smp {} +pub mod syscall {} +pub mod tlb {} +pub mod trap {} +pub mod watchdog {} +pub mod control_regs {} + +/// The machine every program image this kernel loads must be built for. +pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::Aarch64; diff --git a/kernel/src/arch/x86_64/boot.rs b/kernel/src/arch/x86_64/boot.rs new file mode 100644 index 00000000000..da39936af57 --- /dev/null +++ b/kernel/src/arch/x86_64/boot.rs @@ -0,0 +1,131 @@ +//! The x86-64 steps of the boot: the entry the loader jumps to, and what +//! `kernel_main` asks of this architecture at the points where one differs +//! from another. + +use toyos_abi::boot::KernelArgs; + +use super::{apic, control_regs, idt, ioapic, pat, percpu}; +use crate::drivers::acpi::{self, MadtInfo}; +use crate::log; +use crate::mm::Region; + +/// Entry point: the bootloader jumps here at `PHYS_OFFSET` with `rdi = &KernelArgs`, +/// switches to the kernel's own stack, and calls `kernel_main`. +/// # Safety +/// Only the bootloader may call this, fresh from firmware, with `rdi` holding a live [`KernelArgs`]. +#[unsafe(naked)] +#[no_mangle] +pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { + core::arch::naked_asm!( + "mov rax, [rdi + 16]", // kernel_memory_addr + "add rax, [rdi + 32]", // + kernel_stack_addr + "add rax, [rdi + 40]", // + kernel_stack_size + "movabs rbx, {phys_offset}", + "add rax, rbx", + "mov rsp, rax", + "call {kernel_main}", + phys_offset = const crate::PHYS_OFFSET, + kernel_main = sym crate::kernel_main, + ); +} + +/// Before the panel is armed. +/// +/// **Before the panel and not after it**: the loader maps the scanout +/// uncacheable, and `panic_console::arm`'s own record is the panel's first +/// paint, so there is no window between arming the panel and painting +/// through it in which to establish a memory type. The write alone, and it +/// logs nothing: the read-back is `pat::check`, in [`after_console`], where a +/// refusal has a channel to reach. +pub fn before_panel() { + pat::init(); +} + +/// Once the console and the boot parameter exist. +pub fn after_console() { + // After actuator::init, whose table the `control-regs-bench` probe inside + // this call reads. `pat::init` restored the `CR0` it found, so a firmware + // `CD` — which would make every mapping uncacheable whatever the PAT + // says — ends here. + control_regs::init_cr0(0); + + // The read-back `pat::init` owes, on a boot that now has three channels to + // carry a refusal. + pat::check(); + + log!("PAT: IA32_PAT={:#018x}, entry {} = {}", + pat::msr(), pat::WC_ENTRY, pat::entry_name(pat::WC_ENTRY)); +} + +/// Physical memory only this architecture's boot uses, kept from the +/// allocator: the AP trampoline page. +pub fn reserved() -> Region { + Region { start: 0x8000, end: 0x9000 } +} + +/// What the boot learns bringing interrupts up and hands later steps. +pub struct Platform { + madt: MadtInfo, +} + +/// Interrupt delivery, this CPU's per-CPU block and the syscall gate. +pub fn interrupts(rsdp_addr: u64) -> Platform { + // `init_bsp` loads the IDT partway through, as early as this CPU's `gs:` + // allows: a fault in any later phase then diagnoses instead of stopping in + // a handler the firmware left behind. + let madt = acpi::parse_madt(rsdp_addr).expect("ACPI: MADT not found"); + // Off the same tables as the MADT, and before the IDT below makes a panic + // reportable: a panic that can be reported but not ended leaves the machine + // holding its panel for a hand that may not be in the room. + acpi::init_reset(rsdp_addr); + apic::init(); + percpu::init_bsp(apic::id()); + ioapic::init(&madt); + idt::enable_interrupts(); + super::syscall::init(); + Platform { madt } +} + +/// The clock: the TSC, calibrated against the HPET, and the CMOS wall clock. +pub fn clock(args: &KernelArgs) { + // HPET clock — enables profiling for everything from here on + let hpet_base = acpi::find_hpet_base(args.rsdp_addr) + .expect("ACPI: HPET not found"); + super::hpet::calibrate_counter(hpet_base); + // Century register and time zone both come from ACPI/firmware, not the RTC's own registers. + let century_reg = match acpi::rtc_century_register(args.rsdp_addr) { + Ok(reg) => reg, + Err(e) => { + log!("ACPI: the FADT is unreadable ({e:?}), so where the RTC keeps its century is unknown too"); + None + } + }; + crate::clock::init_wall(century_reg, args.rtc_utc_offset()); +} + +/// The per-CPU timer, once the clock converts its bound. +pub fn timer() { + apic::init_timer(); +} + +/// The platform's own devices that are not PCI functions. +pub fn platform_devices(rsdp_addr: u64) { + super::i8042::init(rsdp_addr); +} + +/// Every other CPU, running. +pub fn start_other_cpus(platform: &Platform, args: &KernelArgs) { + super::smp::boot_aps(&platform.madt, args.boot_pml4_addr); +} + +/// The interrupt-controller selftests an actuator asks for, once the timer ticks. +#[cfg(feature = "boot-actuators")] +pub fn interrupt_selftests() { + // Needs interrupts on and the timer already ticking: its last assertion is that the interrupt after the spurious one arrives. + if crate::actuator::lapic_spurious_selftest() { + idt::spurious::selftest(); + } + if crate::actuator::unclaimed_vector_selftest() { + idt::unclaimed::selftest(); + } +} diff --git a/kernel/src/arch/x86_64/console_uart.rs b/kernel/src/arch/x86_64/console_uart.rs new file mode 100644 index 00000000000..cdc1b0d66cc --- /dev/null +++ b/kernel/src/arch/x86_64/console_uart.rs @@ -0,0 +1,71 @@ +//! The console UART: the 16550 at COM1's I/O ports, where every PC this +//! kernel boots puts one if it has one. + +use super::cpu::{inb, outb}; +use crate::log; + +const PORT: u16 = 0x3f8; // COM1 + +/// Line status register bits: a received byte waits, and the transmitter +/// holding register is empty. +const LSR: u16 = PORT + 5; +const LSR_DATA_READY: u8 = 0x01; +const LSR_THR_EMPTY: u8 = 0x20; + +/// Program the 16550 and answer whether it is there: hardware with no SuperIO +/// reads 0xFF on every access, indistinguishable from a ready UART, so a +/// loopback probe latches the answer once. +// Every register is `PORT + n`; the identity op keeps that pattern uniform +// across all eight lines instead of special-casing the data register. +#[allow(clippy::identity_op)] +pub fn init(_rsdp_addr: u64) -> bool { + // SAFETY: `outb`/`inb` require the caller to own the port and the byte; + // every port here is `PORT + n` for `n` in 0..=4, inside COM1's own + // register block, and the writes are the 16550's documented init sequence. + // Order matters: DLAB must precede the divisor writes and loopback mode + // must precede the probe, or the sequence misprograms the chip. + let loopback = unsafe { + outb(PORT + 1, 0x00); // Disable all interrupts + outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) + outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud + outb(PORT + 1, 0x00); // (hi byte) + outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit + outb(PORT + 2, 0xC7); // Enable FIFO, clear them, with 14-byte threshold + outb(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set + outb(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip + outb(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check if serial returns same byte) + let seen = inb(PORT + 0); + outb(PORT + 4, 0x0F); // Normal operation mode + seen + }; + // Logs the raw byte, not just the verdict: distinguishes "no SuperIO" + // (0xFF) from a wrong response and a right chip at the wrong port. + log!( + "serial: 16550 loopback read {:#04x} ({})", + loopback, + if loopback == 0xAE { "present" } else { "absent or wrong port" } + ); + loopback == 0xAE +} + +/// Whether a received byte waits. +pub fn rx_ready() -> bool { + inb(LSR) & LSR_DATA_READY != 0 +} + +/// The received byte; only after [`rx_ready`] said one waits. +pub fn read_byte() -> u8 { + inb(PORT) +} + +/// Whether the transmitter will take a byte. +pub fn tx_ready() -> bool { + inb(LSR) & LSR_THR_EMPTY != 0 +} + +/// Put one byte in the transmitter; only after [`tx_ready`], or the byte may be lost. +pub fn write_byte(byte: u8) { + // SAFETY: `outb` requires ownership of the port and the byte; `PORT` is + // COM1's own data register, and the byte is console output only. + unsafe { outb(PORT, byte) }; +} diff --git a/kernel/src/arch/x86_64/cpu.rs b/kernel/src/arch/x86_64/cpu.rs index 7fafa16a443..00cdb324c33 100644 --- a/kernel/src/arch/x86_64/cpu.rs +++ b/kernel/src/arch/x86_64/cpu.rs @@ -356,3 +356,106 @@ pub fn io_wait() { // SAFETY: port 0x80 is the unused POST diagnostic port, so this commands nothing. unsafe { outb(0x80, 0) }; } + +/// The CPU's free-running counter: the TSC, which counts from reset. +#[inline] +pub fn counter() -> u64 { + rdtsc() +} + +/// This function's caller's frame pointer: `rbp`, which `-Cforce-frame-pointers=yes` makes one. +#[inline(always)] +pub fn frame_pointer() -> u64 { + let rbp: u64; + // SAFETY: register-to-register mov only. + unsafe { asm!("mov {}, rbp", out(reg) rbp, options(nomem, nostack, preserves_flags)) }; + rbp +} + +/// Raise the architecture's undefined-instruction exception here: `ud2`, whose `#UD` the IDT catches as the kernel's own fault. +pub fn undefined_instruction() { + // SAFETY: ud2 reads and writes nothing and raises #UD, caught by the installed IDT. + unsafe { asm!("ud2", options(nomem, nostack)) }; +} + +/// The TSC's frequency in hertz as CPUID *states* it, for the one caller that +/// may run before the clock is calibrated — the panic path, which has to bound a wait on a +/// machine that never reached the HPET. Nothing calibrates against it and no +/// third source is guessed at: a CPU that states neither leaf answers `None` +/// and its caller says so rather than inventing a rate. +pub fn stated_counter_hz() -> Option { + let max_leaf = cpuid(0, 0).0; + tsc_hz_from( + (max_leaf >= 0x15).then(|| cpuid(0x15, 0)), + (max_leaf >= 0x16).then(|| cpuid(0x16, 0)), + ) +} + +/// SDM Vol. 2A, CPUID leaf 15H: EAX is the denominator and EBX the numerator of +/// the core crystal's ratio to the TSC, ECX the crystal's hertz — any of the +/// three reading zero means the leaf states nothing. Leaf 16H's EAX is the +/// processor base frequency in MHz, which an invariant TSC counts at. +const fn tsc_hz_from( + leaf15: Option<(u32, u32, u32, u32)>, + leaf16: Option<(u32, u32, u32, u32)>, +) -> Option { + if let Some((denominator, numerator, crystal_hz, _)) = leaf15 { + if denominator != 0 && numerator != 0 && crystal_hz != 0 { + return Some(crystal_hz as u64 * numerator as u64 / denominator as u64); + } + } + if let Some((base_mhz, _, _, _)) = leaf16 { + if base_mhz != 0 { + return Some(base_mhz as u64 * 1_000_000); + } + } + None +} + +const _: () = { + // The ratio, then the fall-through to the base frequency when the crystal + // is not enumerated, then the CPU that states neither. + assert!(matches!(tsc_hz_from(Some((2, 4, 25_000_000, 0)), None), Some(50_000_000))); + assert!(matches!(tsc_hz_from(Some((0, 0, 0, 0)), Some((2_400, 0, 0, 0))), Some(2_400_000_000))); + assert!(tsc_hz_from(None, Some((0, 0, 0, 0))).is_none()); + assert!(tsc_hz_from(None, None).is_none()); +}; + + +/// The thread pointer this CPU is running with: the FS base, which user TLS is addressed from. +#[inline] +pub fn thread_pointer() -> u64 { + read_fs_base() +} + +/// Leave the current stack for good and run `func` on the one ending at `top`, +/// with a zeroed frame chain so a panic there backtraces instead of walking off +/// the top. +/// # Safety +/// Nothing on the current stack is live past this call, and `top` is the end of +/// a stack this CPU owns. +pub unsafe fn run_on_stack(top: u64, func: extern "C" fn() -> !) -> ! { + // SAFETY: the caller's contract; `push` leaves `rsp` where a function entry + // expects it. + unsafe { + asm!( + "mov rsp, {sp}", + "xor ebp, ebp", + "push rbp", + "jmp {func}", + sp = in(reg) top, + func = in(reg) func as *const () as usize, + options(noreturn), + ); + } +} + +/// `df-witness-mutate`'s staging: set `DF` one instruction before the reader +/// that must refuse it. +#[cfg(feature = "df-witness-mutate")] +pub fn df_witness_mutate() { + // SAFETY: a build that exists to stage the defect, and the reader after it + // panics before any `rep movs` can run. Nothing runs in between, so no + // string op ever executes with it set. + unsafe { asm!("std", options(nomem, nostack)) }; +} diff --git a/kernel/src/arch/x86_64/entropy.rs b/kernel/src/arch/x86_64/entropy.rs new file mode 100644 index 00000000000..9f8ca1149a0 --- /dev/null +++ b/kernel/src/arch/x86_64/entropy.rs @@ -0,0 +1,20 @@ +//! The CPU's own random source: `RDRAND`. + +use super::cpu; + +/// How often a caller may ask before taking "no data" as the answer. +pub const ATTEMPTS: u32 = cpu::RDRAND_ATTEMPTS; + +/// Whether this CPU can draw at all, or why not. +pub fn available() -> Result<(), &'static str> { + if cpu::has_rdrand() { + Ok(()) + } else { + Err("CPUID.01H:ECX[30] is clear, so this CPU has no RDRAND") + } +} + +/// One drawn `u64`, or `None` when the source had nothing to give; never waits. +pub fn draw() -> Option { + cpu::rdrand() +} diff --git a/kernel/src/arch/x86_64/entry.rs b/kernel/src/arch/x86_64/entry.rs index 2335c239bfe..e2187ed1fc4 100644 --- a/kernel/src/arch/x86_64/entry.rs +++ b/kernel/src/arch/x86_64/entry.rs @@ -159,6 +159,105 @@ macro_rules! restore_user_state { }; } -pub(crate) use { - initial_user_state, restore_user_state, ring3_naked_asm, ring3_trampoline_asm, save_user_state, -}; +pub(crate) use {restore_user_state, ring3_naked_asm, save_user_state}; + +/// Entry point for new processes, reached through `context_switch`'s `ret`. r12 = entry point, r13 = user stack pointer. +// State loads after `unlock`, not before: earlier, registers hold the previous tenant's kernel context. +#[unsafe(naked)] +pub(crate) extern "C" fn process_start() { + ring3_trampoline_asm!( + "push r12", + "push r13", + "call {unlock}", + "pop r13", + "pop r12", + initial_user_state!(), + "push {user_ss}", + "push r13", // RSP: user stack + "push 0x202", // RFLAGS: IF=1 + "push {user_cs}", + "push r12", // RIP: entry point + "iretq", + unlock = sym crate::sched::driver::trampoline_entry, + user_ss = const crate::arch::percpu::USER_DS, + user_cs = const crate::arch::percpu::USER_CS, + ); +} + +/// Entry point for new threads. r14 carries the argument, which lands in rdi. +#[unsafe(naked)] +pub(crate) extern "C" fn thread_start() { + ring3_trampoline_asm!( + "push r12", + "push r13", + "push r14", + "call {unlock}", + "pop r14", + "pop r13", + "pop r12", + initial_user_state!(), + "mov rdi, r14", + "sub r13, 8", // ABI: RSP must be 16n+8 at function entry + "push {user_ss}", + "push r13", + "push 0x202", + "push {user_cs}", + "push r12", + "iretq", + unlock = sym crate::sched::driver::trampoline_entry, + user_ss = const crate::arch::percpu::USER_DS, + user_cs = const crate::arch::percpu::USER_CS, + ); +} + +/// Entry point for a kernel thread: r12 = body, r14 = argument. Never reaches Ring 3. +// The `sti` is load-bearing: `alloc_kernel_stack` leaves `IF` clear, and `trampoline_entry` requires it clear on entry. +#[unsafe(naked)] +pub(crate) extern "C" fn kernel_start() { + core::arch::naked_asm!( + "call {unlock}", + "sti", + "mov rdi, r14", + "call r12", + "call {returned}", + unlock = sym crate::sched::driver::trampoline_entry, + returned = sym kernel_thread_returned, + ); +} + +/// What [`kernel_start`] calls when a kernel thread's body returns: panics rather than halting silently. +extern "C" fn kernel_thread_returned() -> ! { + panic!("a kernel thread's body returned; nothing runs on this stack now"); +} + + +/// Lay out, just below `top`, the frame `context_switch` restores a new +/// context from, and answer the stack pointer that names it: `trampoline` is +/// where its `ret` lands, with the entry, the stack and the argument where the +/// trampolines read them (`r12`, `r13`, `r14`). +/// # Safety +/// `top` is the end of a fresh kernel stack nothing else references, at least +/// 64 bytes deep. +pub unsafe fn initial_frame( + top: u64, + trampoline: unsafe extern "C" fn(), + user_entry: u64, + user_sp: u64, + arg: u64, +) -> u64 { + // Layout must match context_switch's pop sequence: pushfq, rbp..r15, return address. + let frame = (top - 8 * 8) as *mut u64; + // SAFETY: the eight writes cover `[frame, frame + 64)`, the top 64 bytes of + // the stack the caller owns. + unsafe { + *frame.add(0) = 0; // r15 + *frame.add(1) = arg; // r14 + *frame.add(2) = user_sp; // r13 + *frame.add(3) = user_entry; // r12 + *frame.add(4) = 0; // rbx + *frame.add(5) = 0; // rbp + *frame.add(6) = 0x002; // RFLAGS (IF=0, AC=0) + *frame.add(7) = trampoline as usize as u64; // return address + } + frame as u64 +} diff --git a/kernel/src/arch/x86_64/hpet.rs b/kernel/src/arch/x86_64/hpet.rs new file mode 100644 index 00000000000..5a49311540a --- /dev/null +++ b/kernel/src/arch/x86_64/hpet.rs @@ -0,0 +1,97 @@ +//! The TSC, calibrated against the HPET: x86-64's free-running counter has no +//! stated rate every part can be trusted for, so the boot measures it. + +use crate::log; +use crate::mm::paging::MmioPolicy; +use crate::time::{Delay, Duration}; + +use super::cpu; + +const HPET_CAP: u64 = 0x000; +const HPET_CFG: u64 = 0x010; +const HPET_COUNTER: u64 = 0x0F0; + +/// Measure the TSC against the HPET at `hpet_base` and start the clock on it. +pub fn calibrate_counter(hpet_base: u64) { + let hpet = crate::mm::paging::map_mmio(hpet_base, 0x1000, MmioPolicy::Uncacheable); + + let cap = hpet.read_u64(HPET_CAP); + let hpet_period_fs = cap >> 32; + assert!(hpet_period_fs > 0, "HPET: invalid counter period"); + + let cfg = hpet.read_u64(HPET_CFG); + hpet.write_u64(HPET_CFG, cfg | 1); + + const CALIBRATION: Delay = Delay::to_measure( + Duration::from_millis(50), + "TSC ticks counted against the HPET; longer is a better ratio and boot time is what it costs", + ); + let calibration_ns = CALIBRATION.nanos(); + let calibration_hpet_ticks = calibration_ns * 1_000_000 / hpet_period_fs; + + let hpet_start = hpet.read_u64(HPET_COUNTER); + let tsc_start = cpu::counter(); + let hpet_target = hpet_start + calibration_hpet_ticks; + log!( + "clock: HPET at {:#x} enabled, period={}fs, counter reads {}, calibrating over {} ticks", + hpet_base, + hpet_period_fs, + hpet_start, + calibration_hpet_ticks, + ); + + // A main counter that does not advance would spin here forever, and this is + // the boot's last wait before it has a clock: the only unit available to + // bound it is the TSC's own, so the budget is the calibration converted at + // a frequency no x86-64 part reaches, which makes it an over-estimate of + // the cycles the calibration can legitimately take on any machine. + const TSC_CEILING_HZ: u64 = 10_000_000_000; + // Times two, so a machine merely slower than the ceiling is not refused for it. + let stall_budget_cycles = 2 * calibration_ns * (TSC_CEILING_HZ / 1_000_000_000); + while hpet.read_u64(HPET_COUNTER) < hpet_target { + assert!( + cpu::counter().wrapping_sub(tsc_start) <= stall_budget_cycles, + "clock: the HPET main counter at {:#x} did not reach {} in {} TSC cycles (it started \ + at {} and reads {}), so this machine offers no clock to calibrate against", + hpet_base, + hpet_target, + stall_budget_cycles, + hpet_start, + hpet.read_u64(HPET_COUNTER), + ); + } + let tsc_end = cpu::counter(); + let hpet_end = hpet.read_u64(HPET_COUNTER); + + let hpet_elapsed_fs = (hpet_end - hpet_start) as u128 * hpet_period_fs as u128; + let tsc_delta = tsc_end - tsc_start; + let tsc_period_fs = (hpet_elapsed_fs / tsc_delta as u128) as u64; + + crate::clock::set_counter(tsc_start, tsc_period_fs); + + let tsc_freq_mhz = 1_000_000_000_000_000u64 / tsc_period_fs / 1_000_000; + log!("TSC: {}MHz (period={}fs, calibrated over {}ms)", tsc_freq_mhz, tsc_period_fs, calibration_ns / 1_000_000); + + // **The one cross-source check this machine offers.** Everything else the + // kernel times is derived from the measurement just taken, so it could only + // agree with itself; CPUID 15H/16H is the part's own statement of the same + // frequency, arrived at by neither the HPET nor this counting loop, and the + // parts-per-million between the two is what a metal profile can hold a + // ceiling against. + let measured_hz = 1_000_000_000_000_000u64 / tsc_period_fs; + match cpu::stated_counter_hz() { + Some(stated) => { + let apart = measured_hz.abs_diff(stated); + log!( + "clock: TSC measured {measured_hz}Hz against the HPET, CPUID states {stated}Hz, \ + {}ppm apart", + apart * 1_000_000 / stated, + ); + } + None => log!( + "clock: TSC measured {measured_hz}Hz against the HPET; CPUID leaves 15H and 16H \ + stating no frequency, so nothing independent confirms it" + ), + } +} + diff --git a/kernel/src/arch/x86_64/hw.rs b/kernel/src/arch/x86_64/hw.rs index 93673c91c64..d14ac5979ca 100644 --- a/kernel/src/arch/x86_64/hw.rs +++ b/kernel/src/arch/x86_64/hw.rs @@ -13,7 +13,7 @@ use toyos_sched::hw::{CpuId, Hw, Kicker, Machine, Nanos, TraceEvent}; use toyos_sched::task::{TaskAccounting, TaskKey}; use crate::arch::{apic, cpu, percpu}; -use crate::sched::driver::context_switch; +use super::switch::context_switch; use crate::sched::payload::{KernelCtx, KernelPayload}; /// The one instance; zero-sized, holds no per-CPU state. @@ -290,7 +290,7 @@ fn switch_witness_capture(ctx: &KernelCtx, token: &RunToken, rsp: /// Compares the frame about to be popped against the one [`check_switch_frame`] validated. /// # Safety -/// Must run from [`crate::sched::driver::context_switch`], with `rsp` equal to the live stack +/// Must run from [`super::switch::context_switch`], with `rsp` equal to the live stack /// pointer and this CPU's shadow already filled by [`switch_witness_capture`]. #[cfg(feature = "switch-witness")] pub(crate) unsafe extern "C" fn switch_witness_verify(rsp: u64) { diff --git a/kernel/src/arch/x86_64/i8042/mod.rs b/kernel/src/arch/x86_64/i8042/mod.rs index 9567ad3d155..44abd8fc377 100644 --- a/kernel/src/arch/x86_64/i8042/mod.rs +++ b/kernel/src/arch/x86_64/i8042/mod.rs @@ -488,7 +488,7 @@ fn buffer_full(status: u8) -> bool { /// Rust half of the pin-interrupt handler. Read the module doc before adding /// anything to it. pub extern "sysv64" fn handler() { - crate::irq_census::irq_took!(I8042); + crate::arch::percpu::irq_took!(I8042); let timestamp = crate::clock::nanos_since_boot(); // No compare-exchange: this handler cannot nest, so there's no second writer. let first = FIRST_IRQ_NS.load(Ordering::Relaxed) == 0; diff --git a/kernel/src/arch/x86_64/idt/dma_fault.rs b/kernel/src/arch/x86_64/idt/dma_fault.rs index ee1e54c72aa..e4ccf7b0cfe 100644 --- a/kernel/src/arch/x86_64/idt/dma_fault.rs +++ b/kernel/src/arch/x86_64/idt/dma_fault.rs @@ -3,7 +3,7 @@ use super::device_irq::device_irq_entry; // Reports the IOMMU blocking a device, not device work finished: the one wake // it owes is a claim holder's, which `pcidev::note_fault` posts itself. extern "sysv64" fn dma_fault_handler() { - crate::irq_census::irq_took!(DmaFault); + crate::arch::percpu::irq_took!(DmaFault); crate::iommu::fault_interrupt(); } diff --git a/kernel/src/arch/x86_64/idt/hda.rs b/kernel/src/arch/x86_64/idt/hda.rs index 56344884d4c..579bebedfc6 100644 --- a/kernel/src/arch/x86_64/idt/hda.rs +++ b/kernel/src/arch/x86_64/idt/hda.rs @@ -2,7 +2,7 @@ use super::device_irq::device_irq_entry; // Lock-free, heap-free: may interrupt a CPU holding the controller lock (preemption disabled, not interrupts). extern "sysv64" fn hda_handler() { - crate::irq_census::irq_took!(Hda); + crate::arch::percpu::irq_took!(Hda); crate::drivers::hda::isr_complete(); crate::arch::apic::eoi(); } diff --git a/kernel/src/arch/x86_64/idt/mod.rs b/kernel/src/arch/x86_64/idt/mod.rs index 1e4417a0b84..790392f1ed2 100644 --- a/kernel/src/arch/x86_64/idt/mod.rs +++ b/kernel/src/arch/x86_64/idt/mod.rs @@ -519,3 +519,38 @@ fn install_actuator_gates(idt: &mut Idt) { pub fn enable_interrupts() { cpu::enable_interrupts(); } + +pub(crate) use exceptions::try_recover_from_panic; +#[cfg(feature = "boot-actuators")] +pub(crate) use exceptions::kernel_backtrace; + +/// The crash report for a panic, from the frame pointer the panic handler stood on. +pub(crate) fn report_panic(message: &core::panic::PanicInfo, frame: u64) { + exceptions::crash_report(&exceptions::CrashInfo::Panic { message, rbp: frame }); +} + +/// Whether the interrupted context a trap frame's flags word describes could +/// have taken an interrupt: `RFLAGS.IF`. +pub(crate) const fn frame_interrupts_enabled(rflags: u64) -> bool { + rflags & (1 << 9) != 0 +} + +/// A real `#DF`, not simulated: pushing to a non-canonical `rsp` raises `#SS`, +/// and delivering that needs another push to the same `rsp` — the `#DF` +/// condition. Non-canonical rather than unmapped: on a bigger machine an +/// unmapped address can fall inside the direct map and simply get written to. +/// Only `#DF` has an IST, so every fault on the way there lands on this same +/// unusable stack. `SYS_DEBUG`'s alone. +#[cfg(feature = "test-actuators")] +pub(crate) fn provoke_double_fault() -> ! { + // SAFETY: unsound by design, like `SYS_DEBUG`'s null read; the #DF this + // raises never returns here. + unsafe { + core::arch::asm!( + "mov rsp, {bad}", + "push 0", + bad = in(reg) 0x0000_8000_0000_0000u64, + options(noreturn), + ); + } +} diff --git a/kernel/src/arch/x86_64/idt/nmi.rs b/kernel/src/arch/x86_64/idt/nmi.rs index cedfa1dcf6c..61d6277e9d3 100644 --- a/kernel/src/arch/x86_64/idt/nmi.rs +++ b/kernel/src/arch/x86_64/idt/nmi.rs @@ -92,7 +92,7 @@ pub(super) extern "sysv64" fn nmi_entry() { /// Loads all four words in both builds so the observer and shipping handler share one frame layout. extern "sysv64" fn note(rip: u64, cs: u64, rsp: u64, rflags: u64) { - crate::irq_census::irq_took!(Nmi); + crate::arch::percpu::irq_took!(Nmi); #[cfg(not(feature = "boot-actuators"))] let _ = cs; #[cfg(feature = "boot-actuators")] diff --git a/kernel/src/arch/x86_64/idt/spurious.rs b/kernel/src/arch/x86_64/idt/spurious.rs index e536dfcb074..06fdd73d23a 100644 --- a/kernel/src/arch/x86_64/idt/spurious.rs +++ b/kernel/src/arch/x86_64/idt/spurious.rs @@ -52,7 +52,7 @@ pub(super) extern "sysv64" fn spurious_entry() { /// Counts one delivery and acknowledges it if the ISR bit shows it needed one. extern "sysv64" fn took() { - crate::irq_census::irq_took!(Spurious); + crate::arch::percpu::irq_took!(Spurious); if apic::in_service(SPURIOUS_VECTOR) { apic::eoi(); } diff --git a/kernel/src/arch/x86_64/idt/timer.rs b/kernel/src/arch/x86_64/idt/timer.rs index 372d6b8b5ba..574e4a68713 100644 --- a/kernel/src/arch/x86_64/idt/timer.rs +++ b/kernel/src/arch/x86_64/idt/timer.rs @@ -82,15 +82,15 @@ pub(super) extern "sysv64" fn timer_entry() { armed_ticks = const crate::arch::percpu::OFF_LAST_ARMED_TICKS, need_resched = const crate::arch::percpu::OFF_NEED_RESCHED, ring0_fires = const crate::arch::percpu::OFF_RING0_TIMER_FIRES, - irq_total = const crate::irq_census::slot_offset(crate::irq_census::TOTAL), - irq_timer = const crate::irq_census::slot_offset( + irq_total = const crate::arch::percpu::irq_slot_offset(crate::irq_census::TOTAL), + irq_timer = const crate::arch::percpu::irq_slot_offset( 1 + crate::irq_census::Source::Timer as usize ), ); } extern "sysv64" fn timer_handler() { - crate::irq_census::irq_took!(Timer); + crate::arch::percpu::irq_took!(Timer); // Before anything that can take a lock: a CPU running userland is the other // half of the coverage the Ring 0 branch above gives a CPU holding one. crate::deadline::poll(); diff --git a/kernel/src/arch/x86_64/idt/tlb.rs b/kernel/src/arch/x86_64/idt/tlb.rs index 7eaee1207da..fa5a147aa24 100644 --- a/kernel/src/arch/x86_64/idt/tlb.rs +++ b/kernel/src/arch/x86_64/idt/tlb.rs @@ -51,6 +51,6 @@ pub(super) extern "sysv64" fn tlb_flush_entry() { } fn flush() { - crate::irq_census::irq_took!(Tlb); + crate::arch::percpu::irq_took!(Tlb); crate::arch::tlb::serve_ipi(); } diff --git a/kernel/src/arch/x86_64/idt/unclaimed.rs b/kernel/src/arch/x86_64/idt/unclaimed.rs index 875043d293f..9ca9f4b6dcf 100644 --- a/kernel/src/arch/x86_64/idt/unclaimed.rs +++ b/kernel/src/arch/x86_64/idt/unclaimed.rs @@ -57,7 +57,7 @@ pub(super) extern "sysv64" fn unclaimed_entry() { /// Counts the delivery, remembers the vector, and EOIs only if the ISR needs one. extern "sysv64" fn took() { - crate::irq_census::irq_took!(Unclaimed); + crate::arch::percpu::irq_took!(Unclaimed); match apic::in_service_highest() { Some(vector) => { TAKEN[(vector >> 6) as usize].fetch_or(1 << (vector & 63), Ordering::Relaxed); diff --git a/kernel/src/arch/x86_64/idt/user_dev.rs b/kernel/src/arch/x86_64/idt/user_dev.rs index d3feb90804c..18142f94df5 100644 --- a/kernel/src/arch/x86_64/idt/user_dev.rs +++ b/kernel/src/arch/x86_64/idt/user_dev.rs @@ -13,7 +13,7 @@ use super::device_irq::device_irq_entry; use crate::irq_ring::IrqSource; fn took(slot: usize) { - crate::irq_census::irq_took!(UserDev); + crate::arch::percpu::irq_took!(UserDev); crate::pcidev::isr(slot); crate::irq_ring::isr_publish(IrqSource::UserDev, crate::clock::nanos_since_boot()); // Force resched now, so `drain_irqs` turns the record into a wake before diff --git a/kernel/src/arch/x86_64/idt/virtio_sound.rs b/kernel/src/arch/x86_64/idt/virtio_sound.rs index b6f388b841c..98060824d62 100644 --- a/kernel/src/arch/x86_64/idt/virtio_sound.rs +++ b/kernel/src/arch/x86_64/idt/virtio_sound.rs @@ -2,7 +2,7 @@ use super::device_irq::device_irq_entry; // Lock-free and heap-free: may interrupt a CPU holding the controller lock, which disables preemption but not interrupts. extern "sysv64" fn virtio_sound_handler() { - crate::irq_census::irq_took!(Sound); + crate::arch::percpu::irq_took!(Sound); crate::drivers::virtio_sound::isr_complete(); crate::arch::apic::eoi(); } diff --git a/kernel/src/arch/x86_64/idt/xhci.rs b/kernel/src/arch/x86_64/idt/xhci.rs index baef2d74905..6ecce39df01 100644 --- a/kernel/src/arch/x86_64/idt/xhci.rs +++ b/kernel/src/arch/x86_64/idt/xhci.rs @@ -3,7 +3,7 @@ use crate::irq_ring::IrqSource; // Lock-free and heap-free — the event ring is polled by drivers::xhci::poll_if_pending, never here. extern "sysv64" fn xhci_handler() { - crate::irq_census::irq_took!(Xhci); + crate::arch::percpu::irq_took!(Xhci); let timestamp = crate::clock::nanos_since_boot(); crate::irq_ring::isr_publish(IrqSource::Xhci, timestamp); // Forces a scheduler entry on IRQ return so drain_irqs polls now, not at the next quantum tick. diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs index 9681dfb7e22..e44661ba2fb 100644 --- a/kernel/src/arch/x86_64/mod.rs +++ b/kernel/src/arch/x86_64/mod.rs @@ -11,11 +11,15 @@ pub mod apic; pub mod barrier; +pub mod boot; pub mod cache; pub mod control_regs; +pub mod console_uart; pub mod cpu; +pub mod entropy; pub mod entry; pub mod fpu; +pub mod hpet; pub mod hw; pub mod i8042; pub mod idt; @@ -26,14 +30,19 @@ pub mod nmi_gate; pub mod paging; pub mod pat; pub mod percpu; +pub mod pio; +pub mod pmu; pub mod rtc; pub mod smp; +pub mod switch; pub mod syscall; pub mod tlb; pub mod vtd; pub mod watchdog; +pub use apic as irqchip; pub use i8042 as keyboard_controller; +pub use idt as trap; pub use vtd as iommu_unit; pub use apic::{msi_message, MSI_DOORBELL}; diff --git a/kernel/src/arch/x86_64/mtrr.rs b/kernel/src/arch/x86_64/mtrr.rs index fd33c9eaf3e..7d25220f4ce 100644 --- a/kernel/src/arch/x86_64/mtrr.rs +++ b/kernel/src/arch/x86_64/mtrr.rs @@ -1,7 +1,7 @@ //! What memory type firmware gave a physical range. //! //! Read-only: firmware owns these registers, the kernel programs none. A -//! mapping with [`CachePolicy::DeferToMtrr`](crate::mm::paging::CachePolicy) +//! mapping with [`CachePolicy::Normal`](crate::mm::paging::CachePolicy) //! selects PAT entry 0 (WB), so what this module reports is the effective //! type; the exception is [`effective_under_wc`], where WC outvotes the MTRR //! instead of deferring to it. diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index 3fd1391d982..8745a2eabdd 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -15,6 +15,7 @@ use crate::hasher::HashMap; use toyos_pcid::{Alloc, Pcid, PcidPool}; use crate::mm::{UserAddr, PAGE_2M}; +pub use crate::mm::policy::{CachePolicy, MmioPolicy, Prot, WindowProt}; use crate::arch::control_regs::PcidActive; use crate::arch::cpu::Invpcid; use crate::sync::Lock; @@ -40,22 +41,6 @@ const ADDR_MASK_2M: u64 = 0x000F_FFFF_FFE0_0000; /// Every upper-level table entry's flags: present, writable, user. const TABLE_FLAGS: u64 = PAGE_PRESENT | PAGE_WRITE | PAGE_USER; -/// 4 KiB pages in one 2 MiB page. -const PAGES_PER_2M: usize = (PAGE_2M / 4096) as usize; - -/// What a user mapping may be used for: no variant is both writable and -/// executable, and every variant implies read since `PAGE_USER` grants it -/// unconditionally. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub enum Prot { - /// Read-only: neither writable nor executable. - Read, - /// Data: readable and writable, never executable. - ReadWrite, - /// Code. Never writable. - ReadExec, -} - impl Prot { /// The permission bits a leaf entry carries; address and cache policy stay the caller's. fn leaf_bits(self) -> u64 { @@ -68,45 +53,14 @@ impl Prot { } } -/// What each 4 KiB page of a 2 MiB window may be used for: split because -/// `toyos-ld` can align a window across the end of `.text` and start of `.data`. -pub struct WindowProt([Prot; PAGES_PER_2M]); - -impl WindowProt { - /// A window whose pages all say the same thing. - pub const fn uniform(prot: Prot) -> Self { - Self([prot; PAGES_PER_2M]) - } - - /// Sets the 4 KiB page `offset` bytes in; an out-of-window offset panics. - pub fn set(&mut self, offset: u64, prot: Prot) { - self.0[(offset / 4096) as usize] = prot; - } - - /// The one protection every page carries, or `None` where they disagree. - fn agreed(&self) -> Option { - let first = self.0[0]; - self.0.iter().all(|&p| p == first).then_some(first) - } -} - -/// Which PAT entry a 2 MiB mapping selects, out of the three this kernel -/// ever writes. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub enum CachePolicy { - /// PAT entry 0 (WB); the range's actual type is the MTRR's (SDM Vol. 3A Table 11-7). - DeferToMtrr, - /// PAT entry [`pat::UC_ENTRY`](crate::arch::pat::UC_ENTRY): UC under - /// every MTRR type (Table 11-7), whatever firmware set or forgot. - Uncacheable, - /// PAT entry [`pat::WC_ENTRY`](crate::arch::pat::WC_ENTRY). - WriteCombining, -} - +/// Which PAT entry a 2 MiB mapping selects: `Normal` is entry 0 (WB), whose +/// type for a range is the MTRR's (SDM Vol. 3A Table 11-7); `Uncacheable` is +/// [`pat::UC_ENTRY`](crate::arch::pat::UC_ENTRY), UC under every MTRR type; +/// `WriteCombining` is [`pat::WC_ENTRY`](crate::arch::pat::WC_ENTRY). impl CachePolicy { fn pde_bits(self) -> u64 { match self { - Self::DeferToMtrr => 0, + Self::Normal => 0, Self::Uncacheable => PAGE_CACHE_DISABLE | PAGE_WRITE_THROUGH, Self::WriteCombining => PAGE_PAT_2M, } @@ -115,7 +69,7 @@ impl CachePolicy { /// Any other combination is an entry this code never wrote. fn from_pde(pde: u64) -> Self { match (pde & PAGE_PAT_2M != 0, pde & (PAGE_CACHE_DISABLE | PAGE_WRITE_THROUGH)) { - (false, 0) => Self::DeferToMtrr, + (false, 0) => Self::Normal, (true, 0) => Self::WriteCombining, (false, low) if low == PAGE_CACHE_DISABLE | PAGE_WRITE_THROUGH => Self::Uncacheable, _ => panic!( @@ -136,26 +90,6 @@ const _: () = assert!( "Uncacheable sets PCD and PWT and leaves the PAT bit clear, which is entry 3", ); -/// What an MMIO window may select — never PAT entry 0: device registers -/// deferred to firmware's MTRR coverage were cacheable wherever an MTRR was -/// missing, and this type removes that as a possibility. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub enum MmioPolicy { - /// Registers. - Uncacheable, - /// The scanout alone. - WriteCombining, -} - -impl MmioPolicy { - fn cache(self) -> CachePolicy { - match self { - Self::Uncacheable => CachePolicy::Uncacheable, - Self::WriteCombining => CachePolicy::WriteCombining, - } - } -} - /// A 4KB-aligned page of 512 entries, matching the hardware page table format. #[repr(C, align(4096))] struct PageTablePage([u64; 512]); @@ -556,8 +490,8 @@ impl AddressSpace { ); let mut table = Box::new(PageTablePage([0; 512])); - for (i, &page_prot) in prot.0.iter().enumerate() { - // No cache bits: `DeferToMtrr` is the zero pattern at both granularities. + for (i, page_prot) in prot.pages().enumerate() { + // No cache bits: `Normal` is the zero pattern at both granularities. table.init_entry(i, (phys + i as u64 * 4096) | page_prot.leaf_bits()); } let table_phys = table.phys(); @@ -789,7 +723,7 @@ impl AddressSpace { return None; } if pde & PAGE_SIZE_BIT == 0 { - // A split table: leaves have cache bits clear (`DeferToMtrr`), + // A split table: leaves have cache bits clear (`Normal`), // asserted since the two granularities put the PAT bit at different offsets. let pte = self.root.child(pml4_idx)?.child(pdpt_idx)?.child(pd_idx)? [((virt >> 12) & 0x1FF) as usize]; @@ -798,7 +732,7 @@ impl AddressSpace { "policy_at: the 4 KiB entry {pte:#x} at {virt:#x} selects a PAT entry \ outside 0", ); - return Some(CachePolicy::DeferToMtrr); + return Some(CachePolicy::Normal); } Some(CachePolicy::from_pde(pde)) } @@ -875,7 +809,7 @@ impl AddressSpace { existing & PAGE_PRESENT == 0 || existing & !(PAGE_ACCESSED | PAGE_DIRTY) == entry || (existing & PAGE_SIZE_BIT != 0 - && CachePolicy::from_pde(existing) == CachePolicy::DeferToMtrr), + && CachePolicy::from_pde(existing) == CachePolicy::Normal), "map_2m: {phys:#x} is mapped {existing:#x} and cannot also be {entry:#x}" ); // Neither caller wants the single address: [`map_mmio`] flushes every @@ -1217,3 +1151,22 @@ pub fn debug_page_walk(addr: u64) { } log!(" -> 4KB page at {:#x}", pte & ADDR_MASK); } + +/// What a write-combining scanout at `[addr, addr + size)` actually is, as the +/// GOP driver reports it: the effective type under PAT entry WC, the MTRRs' +/// type for the range, and the entry. +pub fn scanout_memory_type(addr: u64, size: u64) -> impl core::fmt::Display { + struct Report(crate::arch::mtrr::Effective); + impl core::fmt::Display for Report { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!( + f, + "{} (MTRR {}, PAT entry {})", + crate::arch::mtrr::effective_under_wc(&self.0).map_or("unknown", |t| t.name()), + self.0.name(), + crate::arch::pat::WC_ENTRY, + ) + } + } + Report(crate::arch::mtrr::range_type(addr, size)) +} diff --git a/kernel/src/arch/x86_64/percpu.rs b/kernel/src/arch/x86_64/percpu.rs index 0d54089f0d3..5637b06a687 100644 --- a/kernel/src/arch/x86_64/percpu.rs +++ b/kernel/src/arch/x86_64/percpu.rs @@ -804,3 +804,97 @@ pub fn swap_fault_state(new: CpuFaultState) -> CpuFaultState { pub fn set_fault_state(new: CpuFaultState) { gs::write_u8::(new as u8); } + +/// The `gs:` displacement of interrupt counter `index` in this CPU's block. +pub const fn irq_slot_offset(index: usize) -> u32 { + OFF_IRQ_COUNTS + (index as u32) * 8 +} + +/// Records one delivery of `$source` as two lock-free `add`s to this CPU's own gs: slots. +/// A macro, not a function: the two offsets must be asm immediates, not const-generic values an optimiser could relax. +macro_rules! irq_took { + ($source:ident) => {{ + // SAFETY: both slots are this CPU's own counter block per `arch::percpu`, and the caller is an interrupt handler, so `GS_BASE` already points at this CPU's `PerCpu`. + unsafe { + ::core::arch::asm!( + "add qword ptr gs:[{total}], 1", + "add qword ptr gs:[{source}], 1", + total = const $crate::arch::percpu::irq_slot_offset($crate::irq_census::TOTAL), + source = const $crate::arch::percpu::irq_slot_offset( + 1 + $crate::irq_census::Source::$source as usize + ), + // no `nomem` because both instructions write; no `preserves_flags` because `add` clobbers flags. + options(nostack), + ); + } + }}; +} + +pub(crate) use irq_took; + +/// Two of this CPU's interrupt counters, read straight off `gs:` with one load +/// each — the form a CPU inside an NMI may use. +pub fn irq_counts_here(first: usize, second: usize) -> (u64, u64) { + let a: u64; + let b: u64; + // SAFETY: both slots are this CPU's own counter block, and `GS_BASE` points + // at the running CPU's `PerCpu` in every context this is read from; both + // indices are below `irq_census::SLOTS`, asserted by the callers' constants. + unsafe { + core::arch::asm!( + "mov {a}, qword ptr gs:[{first}]", + "mov {b}, qword ptr gs:[{second}]", + a = out(reg) a, + b = out(reg) b, + first = in(reg) u64::from(irq_slot_offset(first)), + second = in(reg) u64::from(irq_slot_offset(second)), + options(nostack, readonly, preserves_flags), + ); + } + (a, b) +} + +/// This CPU's preempt count: the per-CPU word `crate::preempt` keeps, read and +/// written only through the five functions below. +#[inline] +pub fn preempt_count() -> u32 { + gs::read_u32::() +} + +#[inline] +pub fn set_preempt_count(value: u32) { + gs::write_u32::(value); +} + +/// One increment, atomic against an interrupt on this CPU. +#[inline] +pub fn preempt_count_up() { + gs::lock_inc_u32::(); +} + +/// One decrement, atomic against an interrupt on this CPU. +#[inline] +pub fn preempt_count_down() { + gs::lock_dec_u32::(); +} + +/// Whether this CPU owes a reschedule. +#[inline] +pub fn resched_owed() -> bool { + gs::read_u8::() != 0 +} + +#[inline] +pub fn set_resched_owed(owed: bool) { + if owed { + gs::write_u8_imm::(); + } else { + gs::write_u8_imm::(); + } +} + +/// Whether this CPU is inside a fault or panic ([`CpuFaultState`] not `Normal`). +#[inline] +pub fn faulting() -> bool { + gs::read_u8::() != 0 +} diff --git a/kernel/src/arch/x86_64/pio.rs b/kernel/src/arch/x86_64/pio.rs new file mode 100644 index 00000000000..5a29539bbb2 --- /dev/null +++ b/kernel/src/arch/x86_64/pio.rs @@ -0,0 +1,7 @@ +//! The I/O port space: x86-64 has one, reached by `in` and `out`. + +/// Whether this architecture has an I/O port space at all. Firmware tables +/// that name a port are only honoured where it does. +pub const EXISTS: bool = true; + +pub use super::cpu::{outb, outw}; diff --git a/kernel/src/arch/x86_64/pmu.rs b/kernel/src/arch/x86_64/pmu.rs new file mode 100644 index 00000000000..31dd45c4110 --- /dev/null +++ b/kernel/src/arch/x86_64/pmu.rs @@ -0,0 +1,109 @@ +//! The performance-monitoring counter that samples a CPU with an NMI: fixed +//! counter 2, counting the reference clock, overflowing into the local APIC's +//! performance-counter LVT (SDM Vol. 3B §20.2.2 for the counters, Vol. 3A +//! §12.5.1 for the LVT, Vol. 2A CPUID leaf 0AH for whether there are any). +//! `crate::hardlockup` decides what a sample means; this is how one arrives. +//! +//! Every path here runs from an NMI or on the CPU it arms: no lock, no log. + +use core::sync::atomic::{AtomicU64, Ordering::Relaxed}; + +use super::{apic, cpu}; + +/// The architectural performance-monitoring MSRs this file writes, SDM Vol. 3B +/// §20.2.2 and Vol. 4 Table 2-2. Nothing else in this kernel programs the PMU, +/// which is why each control register below is declared whole and written +/// whole rather than read, modified and written back. +const IA32_FIXED_CTR2: u32 = 0x30B; +const IA32_FIXED_CTR_CTRL: u32 = 0x38D; +const IA32_PERF_GLOBAL_STATUS: u32 = 0x38E; +const IA32_PERF_GLOBAL_CTRL: u32 = 0x38F; +const IA32_PERF_GLOBAL_OVF_CTRL: u32 = 0x390; + +/// Fixed counter 2's nibble of `IA32_FIXED_CTR_CTRL` is bits 11:8: enable in +/// ring 0 (bit 8) and ring 3 (bit 9), no AnyThread (bit 10), and PMI on +/// overflow (bit 11). Counting in both rings, because a CPU that stops taking +/// interrupts in either is the same defect. +const FIXED_CTR2_ARMED: u64 = 0b1011 << 8; + +/// The fixed counters live in the high half of `IA32_PERF_GLOBAL_CTRL` and of +/// the status and overflow-clear registers beside it, so counter 2 is bit 34. +const GLOBAL_FIXED_CTR2: u64 = 1 << 34; + +/// The counter's width as CPUID states it, as a mask: bits above it may not be +/// written back. +static WIDTH_MASK: AtomicU64 = AtomicU64::new(0); + +/// The counter's width, or `None` on a CPU with no architectural performance +/// monitoring — which is every QEMU TCG guest. +/// +/// SDM Vol. 2A, CPUID leaf 0AH: EAX[7:0] is the version, and version 2 is where +/// the fixed-function counters and `IA32_PERF_GLOBAL_CTRL` appear; EDX[4:0] is +/// how many fixed counters there are and EDX[12:5] how wide they are. Fixed +/// counter 2 needs three of them. +fn architectural_pmu() -> Option { + if cpu::cpuid(0, 0).0 < 0x0A { + return None; + } + let (eax, _, _, edx) = cpu::cpuid(0x0A, 0); + let version = eax & 0xff; + let counters = edx & 0x1f; + let width = (edx >> 5) & 0xff; + if version < 2 || counters < 3 || width == 0 || width > 64 { + return None; + } + Some(width) +} + +const fn mask_of(width: u32) -> u64 { + match width >= 64 { + true => u64::MAX, + false => (1u64 << width) - 1, + } +} + +/// Start this CPU's counter overflowing into an NMI every `period` reference +/// cycles — which are TSC ticks — or answer `false` for a CPU that has none. +pub fn arm(period: u64) -> bool { + let Some(width) = architectural_pmu() else { return false }; + WIDTH_MASK.store(mask_of(width), Relaxed); + // Stopped, then set up, then started: a counter enabled while its control + // register is half written can overflow into an LVT that is not armed yet. + write_msr(IA32_PERF_GLOBAL_CTRL, 0); + write_msr(IA32_FIXED_CTR_CTRL, FIXED_CTR2_ARMED); + write_msr(IA32_PERF_GLOBAL_OVF_CTRL, GLOBAL_FIXED_CTR2); + reload(period); + apic::arm_perf_nmi(); + write_msr(IA32_PERF_GLOBAL_CTRL, GLOBAL_FIXED_CTR2); + true +} + +/// Whether this CPU's counter is the reason this NMI arrived: +/// `IA32_PERF_GLOBAL_STATUS` bit 34 is its overflow. +pub fn overflowed() -> bool { + cpu::rdmsr(IA32_PERF_GLOBAL_STATUS) & GLOBAL_FIXED_CTR2 != 0 +} + +/// After an overflow's sample: clear it, reload, and unmask the LVT hardware +/// masked on delivery. +pub fn rearm(period: u64) { + write_msr(IA32_PERF_GLOBAL_OVF_CTRL, GLOBAL_FIXED_CTR2); + reload(period); + apic::arm_perf_nmi(); +} + +/// Set the counter one period below its own overflow. +fn reload(period: u64) { + let mask = WIDTH_MASK.load(Relaxed); + // Masked to the width CPUID stated: a fixed counter refuses a write of the + // bits above it, and the negative count is what makes the overflow land a + // period from here. + write_msr(IA32_FIXED_CTR2, 0u64.wrapping_sub(period) & mask); +} + +fn write_msr(msr: u32, value: u64) { + // SAFETY: every MSR here is an architectural performance-monitoring counter + // or its control register, enumerated by CPUID leaf 0AH before this file + // writes any of them, and each value is that register's own field encoding. + unsafe { cpu::wrmsr(msr, value) }; +} diff --git a/kernel/src/arch/x86_64/switch.rs b/kernel/src/arch/x86_64/switch.rs new file mode 100644 index 00000000000..4795ec86928 --- /dev/null +++ b/kernel/src/arch/x86_64/switch.rs @@ -0,0 +1,57 @@ +//! `context_switch`: the callee-saved registers a context stands on, pushed +//! onto the outgoing stack and popped off the incoming one. + +use core::arch::naked_asm; + +/// The outgoing half of [`context_switch`]. A macro, not inlined twice, so both builds share one instruction sequence. +macro_rules! switch_save { + () => { + "pushfq + push rbp + push rbx + push r12 + push r13 + push r14 + push r15 + mov [rdi], rsp + mov rsp, rsi" + }; +} + +/// The incoming half: the seven words a resumed context stands on, ending in `ret`. +macro_rules! switch_restore { + () => { + "pop r15 + pop r14 + pop r13 + pop r12 + pop rbx + pop rbp + popfq + ret" + }; +} + +/// Callee-saved register save/restore. +#[cfg(not(feature = "switch-witness"))] +#[unsafe(naked)] +pub(crate) unsafe extern "C" fn context_switch(old_rsp: *mut u64, new_rsp: u64) { + naked_asm!(switch_save!(), switch_restore!()); +} + +/// The same switch with [`super::hw::switch_witness_verify`] between the stack move and the first `pop`; never fired. +/// +/// Placed after `mov rsp, rsi`, reading the incoming frame through the register the machine will use. Sound +/// to `call`: the return lands inside the incoming task's own stack, and every register `verify` may clobber +/// is caller-saved and already dead here. +#[cfg(feature = "switch-witness")] +#[unsafe(naked)] +pub(crate) unsafe extern "C" fn context_switch(old_rsp: *mut u64, new_rsp: u64) { + naked_asm!( + switch_save!(), + "mov rdi, rsp", + "call {verify}", + switch_restore!(), + verify = sym super::hw::switch_witness_verify, + ); +} diff --git a/kernel/src/clock.rs b/kernel/src/clock.rs index 66392bb650c..66fa4bbba19 100644 --- a/kernel/src/clock.rs +++ b/kernel/src/clock.rs @@ -1,103 +1,23 @@ -//! The machine's clocks: monotonic since boot, calibrated from the HPET at -//! boot and read off the TSC after; and wall-clock, read from the CMOS RTC -//! exactly once — a CMOS read can block for up to a second — in -//! [`init_wall`], and answered after as that reading plus [`nanos_since_boot`]. +//! The machine's clocks: monotonic since boot, read off the CPU's free-running +//! counter at the period the architecture's boot gives [`set_counter`] (on +//! x86-64, measured against the HPET); and wall-clock, read from the +//! architecture's RTC exactly once — a CMOS read can block for up to a +//! second — in [`init_wall`], and answered after as that reading plus +//! [`nanos_since_boot`]. use core::sync::atomic::{AtomicBool, AtomicI64, AtomicU64, Ordering::{Acquire, Relaxed, Release}}; -use crate::mm::paging::MmioPolicy; use crate::arch::cpu; -use crate::time::{Delay, Duration, Instant}; - -const HPET_CAP: u64 = 0x000; -const HPET_CFG: u64 = 0x010; -const HPET_COUNTER: u64 = 0x0F0; +use crate::time::Instant; static TSC_BOOT: AtomicU64 = AtomicU64::new(0); static TSC_PERIOD_FS: AtomicU64 = AtomicU64::new(0); -pub fn init(hpet_base: u64) { - let hpet = crate::mm::paging::map_mmio(hpet_base, 0x1000, MmioPolicy::Uncacheable); - - let cap = hpet.read_u64(HPET_CAP); - let hpet_period_fs = cap >> 32; - assert!(hpet_period_fs > 0, "HPET: invalid counter period"); - - let cfg = hpet.read_u64(HPET_CFG); - hpet.write_u64(HPET_CFG, cfg | 1); - - const CALIBRATION: Delay = Delay::to_measure( - Duration::from_millis(50), - "TSC ticks counted against the HPET; longer is a better ratio and boot time is what it costs", - ); - let calibration_ns = CALIBRATION.nanos(); - let calibration_hpet_ticks = calibration_ns * 1_000_000 / hpet_period_fs; - - let hpet_start = hpet.read_u64(HPET_COUNTER); - let tsc_start = cpu::rdtsc(); - let hpet_target = hpet_start + calibration_hpet_ticks; - log!( - "clock: HPET at {:#x} enabled, period={}fs, counter reads {}, calibrating over {} ticks", - hpet_base, - hpet_period_fs, - hpet_start, - calibration_hpet_ticks, - ); - - // A main counter that does not advance would spin here forever, and this is - // the boot's last wait before it has a clock: the only unit available to - // bound it is the TSC's own, so the budget is the calibration converted at - // a frequency no x86-64 part reaches, which makes it an over-estimate of - // the cycles the calibration can legitimately take on any machine. - const TSC_CEILING_HZ: u64 = 10_000_000_000; - // Times two, so a machine merely slower than the ceiling is not refused for it. - let stall_budget_cycles = 2 * calibration_ns * (TSC_CEILING_HZ / 1_000_000_000); - while hpet.read_u64(HPET_COUNTER) < hpet_target { - assert!( - cpu::rdtsc().wrapping_sub(tsc_start) <= stall_budget_cycles, - "clock: the HPET main counter at {:#x} did not reach {} in {} TSC cycles (it started \ - at {} and reads {}), so this machine offers no clock to calibrate against", - hpet_base, - hpet_target, - stall_budget_cycles, - hpet_start, - hpet.read_u64(HPET_COUNTER), - ); - } - let tsc_end = cpu::rdtsc(); - let hpet_end = hpet.read_u64(HPET_COUNTER); - - let hpet_elapsed_fs = (hpet_end - hpet_start) as u128 * hpet_period_fs as u128; - let tsc_delta = tsc_end - tsc_start; - let tsc_period_fs = (hpet_elapsed_fs / tsc_delta as u128) as u64; - - TSC_BOOT.store(tsc_start, Relaxed); - TSC_PERIOD_FS.store(tsc_period_fs, Relaxed); - - let tsc_freq_mhz = 1_000_000_000_000_000u64 / tsc_period_fs / 1_000_000; - log!("TSC: {}MHz (period={}fs, calibrated over {}ms)", tsc_freq_mhz, tsc_period_fs, calibration_ns / 1_000_000); - - // **The one cross-source check this machine offers.** Everything else the - // kernel times is derived from the measurement just taken, so it could only - // agree with itself; CPUID 15H/16H is the part's own statement of the same - // frequency, arrived at by neither the HPET nor this counting loop, and the - // parts-per-million between the two is what a metal profile can hold a - // ceiling against. - let measured_hz = 1_000_000_000_000_000u64 / tsc_period_fs; - match cpuid_tsc_hz() { - Some(stated) => { - let apart = measured_hz.abs_diff(stated); - log!( - "clock: TSC measured {measured_hz}Hz against the HPET, CPUID states {stated}Hz, \ - {}ppm apart", - apart * 1_000_000 / stated, - ); - } - None => log!( - "clock: TSC measured {measured_hz}Hz against the HPET; CPUID leaves 15H and 16H \ - stating no frequency, so nothing independent confirms it" - ), - } +/// Start the clock on the counter: its reading at boot and its measured period. +/// The architecture's boot calls this once, after it has the period. +pub fn set_counter(boot: u64, period_fs: u64) { + TSC_BOOT.store(boot, Relaxed); + TSC_PERIOD_FS.store(period_fs, Relaxed); } /// Whether [`nanos_since_boot`] measures anything yet; false before [`init`]. @@ -105,54 +25,12 @@ pub fn calibrated() -> bool { TSC_PERIOD_FS.load(Relaxed) != 0 } -/// The TSC's frequency in hertz as CPUID *states* it, for the one caller that -/// may run before [`init`] — the panic path, which has to bound a wait on a -/// machine that never reached the HPET. Nothing calibrates against it and no -/// third source is guessed at: a CPU that states neither leaf answers `None` -/// and its caller says so rather than inventing a rate. -pub fn cpuid_tsc_hz() -> Option { - let max_leaf = cpu::cpuid(0, 0).0; - tsc_hz_from( - (max_leaf >= 0x15).then(|| cpu::cpuid(0x15, 0)), - (max_leaf >= 0x16).then(|| cpu::cpuid(0x16, 0)), - ) -} - -/// SDM Vol. 2A, CPUID leaf 15H: EAX is the denominator and EBX the numerator of -/// the core crystal's ratio to the TSC, ECX the crystal's hertz — any of the -/// three reading zero means the leaf states nothing. Leaf 16H's EAX is the -/// processor base frequency in MHz, which an invariant TSC counts at. -const fn tsc_hz_from( - leaf15: Option<(u32, u32, u32, u32)>, - leaf16: Option<(u32, u32, u32, u32)>, -) -> Option { - if let Some((denominator, numerator, crystal_hz, _)) = leaf15 { - if denominator != 0 && numerator != 0 && crystal_hz != 0 { - return Some(crystal_hz as u64 * numerator as u64 / denominator as u64); - } - } - if let Some((base_mhz, _, _, _)) = leaf16 { - if base_mhz != 0 { - return Some(base_mhz as u64 * 1_000_000); - } - } - None -} - -const _: () = { - // The ratio, then the fall-through to the base frequency when the crystal - // is not enumerated, then the CPU that states neither. - assert!(matches!(tsc_hz_from(Some((2, 4, 25_000_000, 0)), None), Some(50_000_000))); - assert!(matches!(tsc_hz_from(Some((0, 0, 0, 0)), Some((2_400, 0, 0, 0))), Some(2_400_000_000))); - assert!(tsc_hz_from(None, Some((0, 0, 0, 0))).is_none()); - assert!(tsc_hz_from(None, None).is_none()); -}; /// Nanoseconds since boot; lock-free, no MMIO, and never panics — `log::emit` /// reads it from inside a bracket where panicking would reenter the log. /// Saturating, not wrapping: a trailing CPU reads as oldest, not lying newest after a 584-year wrap. pub fn nanos_since_boot() -> u64 { - let delta = cpu::rdtsc().saturating_sub(TSC_BOOT.load(Relaxed)); + let delta = cpu::counter().saturating_sub(TSC_BOOT.load(Relaxed)); let period_fs = TSC_PERIOD_FS.load(Relaxed); ((delta as u128 * period_fs as u128) / 1_000_000) as u64 } @@ -166,7 +44,7 @@ pub fn now() -> Instant { /// The [`cpu::rdtsc`] value `nanos` in the future, for a wait loop that must /// not call the nanosecond clock. pub fn tsc_deadline(nanos: u64) -> u64 { - cpu::rdtsc().saturating_add(tsc_ticks(nanos)) + cpu::counter().saturating_add(tsc_ticks(nanos)) } /// `nanos` as a count of TSC ticks: a span converted once and then compared @@ -203,7 +81,7 @@ pub fn settles(nanos: u64, ready: impl Fn() -> bool) -> bool { } let until = tsc_deadline(nanos); while !ready() { - if cpu::rdtsc() >= until { + if cpu::counter() >= until { return false; } core::hint::spin_loop(); diff --git a/kernel/src/deadline.rs b/kernel/src/deadline.rs index 078d3293e6e..f7120a5ed73 100644 --- a/kernel/src/deadline.rs +++ b/kernel/src/deadline.rs @@ -28,7 +28,7 @@ //! that can name where the core is standing. Whichever fires takes the //! machine's one seal through [`claim_the_reset`]. //! - **A panic in progress**, which is not a gap but a stand-down: -//! `apic::halt_all_cpus` calls [`stand_down`] before it holds the panel, so a +//! `irqchip::halt_all_cpus` calls [`stand_down`] before it holds the panel, so a //! panic report is never replaced by an expiry. use core::sync::atomic::{AtomicBool, AtomicU64, AtomicU8, Ordering::Relaxed}; @@ -72,7 +72,7 @@ pub fn claim_the_reset() -> bool { /// Stand this bound down for the rest of the machine's life. /// -/// Called from `apic::halt_all_cpus` beside [`crate::hardlockup::stand_down`]: +/// Called from `irqchip::halt_all_cpus` beside [`crate::hardlockup::stand_down`]: /// from there this machine holds a panic report under a bound of its own, and an /// expiry would seal a `WEDGED` record over it. Disarms rather than latching a /// second flag, so [`poll`] stays one relaxed load. @@ -189,11 +189,11 @@ pub fn start() { /// pays a caller-saved prologue on every tick of every CPU armed or not, and /// that cost is the entry's rather than this function's. /// -/// `extern "sysv64"` because the Ring 0 half of the timer entry calls it from +/// `extern "C"` because the Ring 0 half of the timer entry calls it from /// naked assembly, where the ABI is written out rather than inferred. -pub extern "sysv64" fn poll() { +pub extern "C" fn poll() { let at = AT_TSC.load(Relaxed); - if at == 0 || crate::arch::cpu::rdtsc() < at { + if at == 0 || crate::arch::cpu::counter() < at { return; } expire() @@ -243,7 +243,7 @@ pub fn stage_a_wedge() -> ! { log!("{WEDGE_STAGED}: every CPU stops taking scheduler passes from here"); STAGED.store(true, Relaxed); // A core still asleep is not a core this control has wedged. - crate::arch::apic::kick_all_but_self(); + crate::arch::irqchip::kick_all_but_self(); this_cpu() } @@ -278,7 +278,7 @@ fn this_cpu() -> ! { // claims. crate::preempt::disable(); let arrived_awake = crate::arch::cpu::interrupts_enabled(); - crate::arch::apic::arm_within(toyos_sched::fair::QUANTUM_NS); + crate::arch::irqchip::arm_within(toyos_sched::fair::QUANTUM_NS); crate::arch::cpu::enable_interrupts(); log!( "wedge: cpu{} {}", diff --git a/kernel/src/drivers/acpi.rs b/kernel/src/drivers/acpi.rs index ac094425d58..00d674e5255 100644 --- a/kernel/src/drivers/acpi.rs +++ b/kernel/src/drivers/acpi.rs @@ -188,6 +188,10 @@ pub fn init_power(rsdp_addr: u64) { return; }; let pm1a = pm1a as u16; + if pm1a != 0 && !crate::arch::pio::EXISTS { + log!("ACPI: FADT puts PM1a control at port {pm1a:#x}, and this machine has no I/O port space — no soft-off"); + return; + } // Prefer X_DSDT over DSDT; a revision claiming 2.0 doesn't prove the field is present, so the length is checked rather than trusting the revision alone. let dsdt_addr = toyos_acpi::dsdt_address(&fadt.0); @@ -271,6 +275,9 @@ pub fn init_reset(rsdp_addr: u64) { } }; match toyos_acpi::reset_register(&fadt.0) { + Reset::Port { port, .. } if !crate::arch::pio::EXISTS => { + log!("ACPI: the reset register is SystemIO {port:#x}, and this machine has no I/O port space — no reboot"); + } Reset::Port { port, value } => { RESET_PORT.store(port, Ordering::Relaxed); RESET_VALUE.store(value, Ordering::Relaxed); @@ -322,7 +329,7 @@ pub fn reset_now() -> ! { crate::arch::cpu::halt(); } // SAFETY: the port is non-zero only where `init_reset` decoded an 8-bit System I/O register, and the value is that register's. - unsafe { crate::arch::cpu::outb(port, RESET_VALUE.load(Ordering::Relaxed)) }; + unsafe { crate::arch::pio::outb(port, RESET_VALUE.load(Ordering::Relaxed)) }; crate::arch::cpu::halt(); } @@ -342,7 +349,7 @@ pub fn shutdown() -> ! { if pm1a != 0 { let val = (slp_typ << 10) | SLP_EN; // SAFETY: pm1a and slp_typ come only from the validated FADT parse via PM1A_CNT_PORT/SLP_TYPA, and the zero check above confirms that parse happened. - unsafe { crate::arch::cpu::outw(pm1a, val) }; + unsafe { crate::arch::pio::outw(pm1a, val) }; } crate::arch::cpu::halt(); diff --git a/kernel/src/drivers/gop.rs b/kernel/src/drivers/gop.rs index 7c15c56c9d0..8c4ce15260e 100644 --- a/kernel/src/drivers/gop.rs +++ b/kernel/src/drivers/gop.rs @@ -2,7 +2,6 @@ use alloc::boxed::Box; use toyos_abi::syscall::SyscallError; -use crate::arch::{mtrr, pat}; use crate::mm::paging::{CachePolicy, MmioPolicy}; use crate::mm::{PAGE_2M, align_2m_checked, DirectMap}; use crate::gpu::{Gpu, GpuInfo}; @@ -61,7 +60,7 @@ pub fn init( width, height, stride, pixel_format, addr); // Reads the cache policy actually installed, not the one requested. - let mtrr = mtrr::range_type(addr, aligned_size); + let memory_type = crate::mm::paging::scanout_memory_type(addr, aligned_size); let installed = crate::mm::paging::kernel() .lock() .direct_map_policy(addr) @@ -70,10 +69,7 @@ pub fn init( installed == CachePolicy::WriteCombining, "GOP: the scanout is mapped {installed:?}" ); - log!("GOP: scanout memory type {} (MTRR {}, PAT entry {})", - mtrr::effective_under_wc(&mtrr).map_or("unknown", |t| t.name()), - mtrr.name(), - pat::WC_ENTRY); + log!("GOP: scanout memory type {memory_type}"); let cursor_pages = crate::mm::pmm::alloc_contiguous(1, crate::mm::pmm::Category::Framebuffer).expect("GOP: cursor alloc failed"); let cursor_phys = cursor_pages[0].direct_map().phys(); @@ -81,7 +77,7 @@ pub fn init( let cursor = Region { phys: DirectMap::from_phys(cursor_phys), size: PAGE_2M, - cache: CachePolicy::DeferToMtrr, + cache: CachePolicy::Normal, pages: None, }; core::mem::forget(cursor_pages); // lives forever (GPU is never torn down) diff --git a/kernel/src/drivers/hda.rs b/kernel/src/drivers/hda.rs index 5f041465459..daf8f95b3d6 100644 --- a/kernel/src/drivers/hda.rs +++ b/kernel/src/drivers/hda.rs @@ -436,7 +436,7 @@ pub fn init(devices: &[PciDevice]) { let pcm_region = Region { phys: crate::DirectMap::from_phys(pcm_view.host_phys()), size: crate::mm::PAGE_2M, - cache: CachePolicy::DeferToMtrr, + cache: CachePolicy::Normal, pages: None, }; @@ -644,7 +644,7 @@ fn reset_stream(stream: Mmio) -> bool { /// Arm the completion interrupt, or say why this machine has no HDA audio; a refusal, never a /// panic, over a peripheral. fn arm_interrupt(pci: &PciDevice) -> bool { - let vector = crate::arch::idt::HDA_VECTOR; + let vector = crate::arch::trap::HDA_VECTOR; if pci.enable_msix(vector).is_ok() || pci.enable_msi(vector) { return true; } diff --git a/kernel/src/drivers/panic_console/mod.rs b/kernel/src/drivers/panic_console/mod.rs index d9a5d583214..93fe68fd354 100644 --- a/kernel/src/drivers/panic_console/mod.rs +++ b/kernel/src/drivers/panic_console/mod.rs @@ -813,7 +813,7 @@ pub mod stall { return; } crate::log!("{HELD}"); - crate::arch::apic::halt_all_cpus(); + crate::arch::irqchip::halt_all_cpus(); } } @@ -1148,7 +1148,7 @@ pub fn log_census() { /// Charge one paint to the census. fn spent(began: u64, pixels: u64) { - let ticks = crate::arch::cpu::rdtsc().saturating_sub(began); + let ticks = crate::arch::cpu::counter().saturating_sub(began); PAINTS.fetch_add(1, Ordering::Relaxed); PIXELS.fetch_add(pixels, Ordering::Relaxed); TICKS.fetch_add(ticks, Ordering::Relaxed); @@ -1163,7 +1163,7 @@ fn paint(fill: Fill, view: View, page: Page, watch: Watch, stop: impl Fn() -> bo return; } let Some((cols, grid_rows)) = geometry(&fb) else { return }; - let began = crate::arch::cpu::rdtsc(); + let began = crate::arch::cpu::counter(); let mut pixels = 0u64; let text = view.text; let (total, pages, per) = pagination(text, cols, grid_rows); diff --git a/kernel/src/drivers/serial.rs b/kernel/src/drivers/serial.rs index 0677f658671..41d2f92502c 100644 --- a/kernel/src/drivers/serial.rs +++ b/kernel/src/drivers/serial.rs @@ -1,4 +1,6 @@ -//! The 16550 and the virtio-console, and the one lock that serialises them. +//! The console UART and the virtio-console, and the one lock that serialises +//! them. Where the UART is and what it is are the architecture's +//! (`arch::console_uart`). //! Every writer takes [`BackendGuard`] once per whole unit (a record, a //! userland `write`, a panic report) and holds it for that whole unit; that //! is the only source of line atomicity. Every unit taken under the guard is @@ -6,47 +8,18 @@ //! kernel lock formats here. use core::sync::atomic::{AtomicBool, Ordering}; -use crate::arch::cpu::{inb, outb}; use crate::arch::IrqGuard; -use crate::log; -const PORT: u16 = 0x3f8; // COM1 +use crate::arch::console_uart as uart; -// Latched once from `init`'s loopback probe: hardware with no SuperIO -// reads 0xFF on every access, indistinguishable from a ready UART. +// Latched once from `init`: the architecture's own answer about whether a UART +// is there, since one that is not may still read as ready. static UART_PRESENT: AtomicBool = AtomicBool::new(false); -// Every register is `PORT + n`; the identity op keeps that pattern uniform -// across all eight lines instead of special-casing the data register. -#[allow(clippy::identity_op)] -pub fn init() { - // SAFETY: `outb`/`inb` require the caller to own the port and the byte; - // every port here is `PORT + n` for `n` in 0..=4, inside COM1's own - // register block, and the writes are the 16550's documented init sequence. - // Order matters: DLAB must precede the divisor writes and loopback mode - // must precede the probe, or the sequence misprograms the chip. - let loopback = unsafe { - outb(PORT + 1, 0x00); // Disable all interrupts - outb(PORT + 3, 0x80); // Enable DLAB (set baud rate divisor) - outb(PORT + 0, 0x03); // Set divisor to 3 (lo byte) 38400 baud - outb(PORT + 1, 0x00); // (hi byte) - outb(PORT + 3, 0x03); // 8 bits, no parity, one stop bit - outb(PORT + 2, 0xC7); // Enable FIFO, clear them, with 14-byte threshold - outb(PORT + 4, 0x0B); // IRQs enabled, RTS/DSR set - outb(PORT + 4, 0x1E); // Set in loopback mode, test the serial chip - outb(PORT + 0, 0xAE); // Test serial chip (send byte 0xAE and check if serial returns same byte) - let seen = inb(PORT + 0); - UART_PRESENT.store(seen == 0xAE, Ordering::Relaxed); - outb(PORT + 4, 0x0F); // Normal operation mode - seen - }; - // Logs the raw byte, not just the verdict: distinguishes "no SuperIO" - // (0xFF) from a wrong response and a right chip at the wrong port. - log!( - "serial: 16550 loopback read {:#04x} ({})", - loopback, - if loopback == 0xAE { "present" } else { "absent or wrong port" } - ); +/// Find and program the console UART, off the firmware tables at `rsdp_addr` +/// where the architecture places it by them. +pub fn init(rsdp_addr: u64) { + UART_PRESENT.store(uart::init(rsdp_addr), Ordering::Relaxed); console_changed(); } @@ -64,7 +37,7 @@ pub fn has_console() -> bool { !matches!(backend(), Backend::None) } -/// Which channel a write goes to right now; virtio-console is preferred over a 16550. +/// Which channel a write goes to right now; virtio-console is preferred over the UART. #[derive(Clone, Copy, PartialEq, Eq)] #[repr(u8)] pub enum Backend { @@ -130,15 +103,15 @@ impl BackendGuard { if super::virtio_console::is_ready() { super::virtio_console::has_data_locked() } else { - uart_present() && inb(PORT + 5) & 0x01 != 0 + uart_present() && uart::rx_ready() } } pub fn try_read_byte(&mut self) -> Option { if super::virtio_console::is_ready() { super::virtio_console::try_read_byte_locked() - } else if uart_present() && inb(PORT + 5) & 0x01 != 0 { - Some(inb(PORT)) + } else if uart_present() && uart::rx_ready() { + Some(uart::read_byte()) } else { None } @@ -342,18 +315,16 @@ fn uart_write_bytes(bytes: &[u8]) { } for &b in bytes { for _ in 0..THRE_SPIN_LIMIT { - if inb(PORT + 5) & 0x20 != 0 { + if uart::tx_ready() { break; } core::hint::spin_loop(); } - // SAFETY: `outb` requires ownership of the port and the byte; `PORT` - // is COM1's own data register, and the byte is console output only. - unsafe { outb(PORT, b) }; + uart::write_byte(b); } } -/// Writes straight to the 16550, bypassing the ring, the lock and virtio-console: no allocation, bounded per byte. +/// Writes straight to the UART, bypassing the ring, the lock and virtio-console: no allocation, bounded per byte. pub fn panic_raw(bytes: &[u8]) { uart_write_bytes(bytes); } diff --git a/kernel/src/drivers/virtio_gpu.rs b/kernel/src/drivers/virtio_gpu.rs index 8f15446a564..d81f73c42cb 100644 --- a/kernel/src/drivers/virtio_gpu.rs +++ b/kernel/src/drivers/virtio_gpu.rs @@ -426,7 +426,7 @@ impl GpuController { Region { phys: crate::DirectMap::from_phys(phys), size: fb_aligned, - cache: CachePolicy::DeferToMtrr, + cache: CachePolicy::Normal, pages: Some(alloc::sync::Arc::new(Pages::new(pages))), } }); @@ -658,7 +658,7 @@ pub fn init(devices: &[PciDevice]) -> Option<(Box, GpuInfo)> { gpu.cursor = Region { phys: crate::DirectMap::from_phys(cursor_phys), size: PAGE_2M, - cache: CachePolicy::DeferToMtrr, + cache: CachePolicy::Normal, pages: Some(alloc::sync::Arc::new(Pages::new(cursor_pages))), }; let cursor_backing = AttachedBacking::take(space, cursor_phys, PAGE_2M) diff --git a/kernel/src/drivers/virtio_sound.rs b/kernel/src/drivers/virtio_sound.rs index dab81c8621f..befdb9b15d8 100644 --- a/kernel/src/drivers/virtio_sound.rs +++ b/kernel/src/drivers/virtio_sound.rs @@ -354,7 +354,7 @@ pub fn init(devices: &[PciDevice]) { let dma_region = Region { phys: crate::DirectMap::from_phys(shared.host_phys()), size: crate::mm::PAGE_2M, - cache: CachePolicy::DeferToMtrr, + cache: CachePolicy::Normal, pages: None, }; let multiplier = device.notify_off_multiplier(); @@ -464,7 +464,7 @@ fn build_chains( /// handler is the TX used ring's only consumer, so an unarmed device leaves /// every period in flight forever. fn arm_interrupt(pci: &PciDevice, device: &VirtioDevice) -> bool { - let vector = crate::arch::idt::VIRTIO_SOUND_VECTOR; + let vector = crate::arch::trap::VIRTIO_SOUND_VECTOR; if pci.enable_msix(vector).is_err() { log!( "virtio-sound: NOT INITIALISED at PCI {:02x}:{:02x}.{} — its MSI-X could not be \ diff --git a/kernel/src/drivers/xhci/mod.rs b/kernel/src/drivers/xhci/mod.rs index 8dab3e83475..a5201eb36b8 100644 --- a/kernel/src/drivers/xhci/mod.rs +++ b/kernel/src/drivers/xhci/mod.rs @@ -676,7 +676,7 @@ pub(super) fn look_for(index: usize) -> Option { /// caller that waits for a device on a CPU it holds with `IF` clear: the /// interrupt a connect raises may be this CPU's, and it takes none. `kick` /// wakes every other CPU, since a halted one has stopped its own timer; the -/// kick is refused only before `apic::init`, and no other CPU has been started +/// kick is refused only before `irqchip::init`, and no other CPU has been started /// before it. pub(super) fn ports_wanted(kick: bool) { PORT_WORK_AT.store(crate::clock::nanos_since_boot().max(1), Ordering::Relaxed); @@ -686,7 +686,7 @@ pub(super) fn ports_wanted(kick: bool) { let me = crate::arch::percpu::cpu_id(); for cpu in 0..crate::arch::smp::cpu_count() { if cpu != me { - crate::arch::apic::kick_cpu(cpu); + crate::arch::irqchip::kick_cpu(cpu); } } } @@ -1726,7 +1726,7 @@ fn take_within(bound: u64) -> Option= until { + if crate::arch::cpu::counter() >= until { return None; } core::hint::spin_loop(); diff --git a/kernel/src/drivers/xhci/wait/mod.rs b/kernel/src/drivers/xhci/wait/mod.rs index 28c0b1d5b3c..7eb275f5b79 100644 --- a/kernel/src/drivers/xhci/wait/mod.rs +++ b/kernel/src/drivers/xhci/wait/mod.rs @@ -31,10 +31,8 @@ mod depth_probe { "io-depth: a disk transfer is being waited for at preempt depth {depth}, task {:?}", crate::arch::percpu::current_tid().map(|t| t.raw()) ); - let rbp: u64; - // SAFETY: reads the frame pointer; `kernel_backtrace` stops at the first unreadable frame. - unsafe { core::arch::asm!("mov {}, rbp", out(reg) rbp, options(nomem, nostack)) }; - crate::arch::idt::exceptions::kernel_backtrace(rbp, 20); + // `kernel_backtrace` stops at the first unreadable frame. + crate::arch::trap::kernel_backtrace(crate::arch::cpu::frame_pointer(), 20); } } diff --git a/kernel/src/hardlockup/mod.rs b/kernel/src/hardlockup/mod.rs index fd0ef484162..2cb08bf6eae 100644 --- a/kernel/src/hardlockup/mod.rs +++ b/kernel/src/hardlockup/mod.rs @@ -47,7 +47,7 @@ //! is not spinning on anything, and one that is woken takes the interrupt //! that wakes it. //! - **The span before `clock::init`,** which has no TSC period to convert a -//! bound with, and before `apic::init`, which has no LVT to arm. The same +//! bound with, and before `irqchip::init`, which has no LVT to arm. The same //! floor `crate::deadline` states. //! - **A CPU with `IF` set that no timer ever interrupts.** Nothing resets it, //! deliberately, and what keeps that from being a hole is @@ -59,7 +59,7 @@ use core::fmt; use core::sync::atomic::{AtomicBool, AtomicU64, Ordering::Relaxed}; -use crate::arch::{apic, cpu, percpu, smp}; +use crate::arch::{cpu, percpu, pmu, smp, trap}; use crate::sched::MAX_CPUS; /// The negative control, in a file of its own because it says what it staged @@ -72,10 +72,6 @@ pub mod probe; /// line and nothing links the two crates (`src/bootlog.rs`). pub const LOCKED_UP: &str = "a cpu locked up with interrupts off"; -/// `RFLAGS.IF` in the frame the NMI pushed: whether the CPU this landed on -/// could have taken any other interrupt at that instant. -const RFLAGS_IF: u64 = 1 << 9; - /// How often an armed CPU samples itself, in nanoseconds of unhalted time. /// /// A second: the bound is measured in tens of them, so a sample period this @@ -99,10 +95,6 @@ static TICKS_PER_MS: AtomicU64 = AtomicU64::new(0); /// since fixed counter 2 counts the reference clock (SDM Vol. 3B §20.2.2). static PERIOD: AtomicU64 = AtomicU64::new(0); -/// The counter's width as CPUID states it, as a mask: bits above it may not be -/// written back. -static WIDTH_MASK: AtomicU64 = AtomicU64::new(0); - /// Whether the panic path has taken this machine. A panicked kernel holds its /// panel with `IF` clear for [`toyos_tco::PANIC_BOUND_MS`] and is not wedged — /// somebody is reading it — so the detector stands down rather than resetting a @@ -126,26 +118,6 @@ static ARMED_PMU: [AtomicBool; MAX_CPUS] = [const { AtomicBool::new(false) }; MA static SPIN_LOCK: [AtomicU64; MAX_CPUS] = [const { AtomicU64::new(0) }; MAX_CPUS]; static SPIN_AT: [AtomicU64; MAX_CPUS] = [const { AtomicU64::new(0) }; MAX_CPUS]; -/// The architectural performance-monitoring MSRs this file writes, SDM Vol. 3B -/// §20.2.2 and Vol. 4 Table 2-2. Nothing else in this kernel programs the PMU, -/// which is why each control register below is declared whole and written -/// whole rather than read, modified and written back. -const IA32_FIXED_CTR2: u32 = 0x30B; -const IA32_FIXED_CTR_CTRL: u32 = 0x38D; -const IA32_PERF_GLOBAL_STATUS: u32 = 0x38E; -const IA32_PERF_GLOBAL_CTRL: u32 = 0x38F; -const IA32_PERF_GLOBAL_OVF_CTRL: u32 = 0x390; - -/// Fixed counter 2's nibble of `IA32_FIXED_CTR_CTRL` is bits 11:8: enable in -/// ring 0 (bit 8) and ring 3 (bit 9), no AnyThread (bit 10), and PMI on -/// overflow (bit 11). Counting in both rings, because a CPU that stops taking -/// interrupts in either is the same defect. -const FIXED_CTR2_ARMED: u64 = 0b1011 << 8; - -/// The fixed counters live in the high half of `IA32_PERF_GLOBAL_CTRL` and of -/// the status and overflow-clear registers beside it, so counter 2 is bit 34. -const GLOBAL_FIXED_CTR2: u64 = 1 << 34; - /// Turn the bound this boot named into a bound on one CPU, and arm the BSP. /// /// Called from `deadline::start` with the deadline's own bound: one parameter @@ -222,23 +194,16 @@ pub fn arm_this_cpu() { // is still sampled by any NMI that reaches it, and a sample against an // unwritten baseline would read as a CPU that has been stuck since boot. PROGRESS[me].store(crate::irq_census::taken_here(), Relaxed); - STILL_SINCE[me].store(cpu::rdtsc(), Relaxed); - let Some(width) = architectural_pmu() else { return }; - WIDTH_MASK.store(mask_of(width), Relaxed); - // Stopped, then set up, then started: a counter enabled while its control - // register is half written can overflow into an LVT that is not armed yet. - write_msr(IA32_PERF_GLOBAL_CTRL, 0); - write_msr(IA32_FIXED_CTR_CTRL, FIXED_CTR2_ARMED); - write_msr(IA32_PERF_GLOBAL_OVF_CTRL, GLOBAL_FIXED_CTR2); - reload(); - apic::arm_perf_nmi(); - write_msr(IA32_PERF_GLOBAL_CTRL, GLOBAL_FIXED_CTR2); + STILL_SINCE[me].store(cpu::counter(), Relaxed); + if !pmu::arm(PERIOD.load(Relaxed)) { + return; + } ARMED_PMU[me].store(true, Relaxed); } /// Stand the detector down for the rest of this machine's life. /// -/// Called from `apic::halt_all_cpus`, which is every fatal path's one funnel: a +/// Called from `irqchip::halt_all_cpus`, which is every fatal path's one funnel: a /// panicked kernel pages its panel with `IF` clear, under a bound of its own, /// and a reader holding the machine open is not a machine to reset. One relaxed /// store, and the LVT then stays masked of its own accord — hardware masks it @@ -257,7 +222,7 @@ pub fn bound_ms() -> u64 { /// One sample of the CPU this NMI landed on: where it is, whether it has taken /// anything since the last one, and whether that has gone on too long. /// -/// Called from `arch::idt::nmi`'s `note` and nowhere else. Returns on every NMI +/// Called from `arch::trap::nmi`'s `note` and nowhere else. Returns on every NMI /// that is not this CPU's own overflow, so the diagnostic senders — the blocked /// task dump's probe, the syscall-window storm — cost one load and one compare. pub fn sample(rip: u64, rsp: u64, rflags: u64) { @@ -268,14 +233,14 @@ pub fn sample(rip: u64, rsp: u64, rflags: u64) { if me >= MAX_CPUS { return; } - let mine = ARMED_PMU[me].load(Relaxed) && overflowed(); + let mine = ARMED_PMU[me].load(Relaxed) && pmu::overflowed(); // A machine with no PMU has this bound only under the actuator that sends // the NMI the counter would have, which is how QEMU's guest reaches this // decision at all. if !mine && !crate::actuator::hard_lockup_probe() { return; } - let now = cpu::rdtsc(); + let now = cpu::counter(); AT_RIP[me].store(rip, Relaxed); AT_RSP[me].store(rsp, Relaxed); AT_RFLAGS[me].store(rflags, Relaxed); @@ -286,7 +251,7 @@ pub fn sample(rip: u64, rsp: u64, rflags: u64) { // `IF` set is the whole difference between this bound and the deadline's: a // CPU that can still take an interrupt is one the timer entry's poll // reaches, and this mechanism is not about it. - if moved || rflags & RFLAGS_IF != 0 { + if moved || trap::frame_interrupts_enabled(rflags) { STILL_SINCE[me].store(now, Relaxed); } else if now.wrapping_sub(STILL_SINCE[me].load(Relaxed)) >= BOUND_TSC.load(Relaxed) { locked_up(me, rip, rsp, now) @@ -294,12 +259,10 @@ pub fn sample(rip: u64, rsp: u64, rflags: u64) { // **After the decision and never before it.** Re-arming clears the mask // hardware set on delivery; leaving it set is what stops a second NMI // landing on the stack this one is still standing on while it seals, which - // `arch::idt::nmi`'s `nested_nmi` would answer by stopping the machine + // `arch::trap::nmi`'s `nested_nmi` would answer by stopping the machine // without resetting it. if mine { - write_msr(IA32_PERF_GLOBAL_OVF_CTRL, GLOBAL_FIXED_CTR2); - reload(); - apic::arm_perf_nmi(); + pmu::rearm(PERIOD.load(Relaxed)); } } @@ -369,57 +332,6 @@ pub fn spinning_on_nothing(was: Spinning) { } } -/// The counter's width, or `None` on a CPU with no architectural performance -/// monitoring — which is every QEMU TCG guest. -/// -/// SDM Vol. 2A, CPUID leaf 0AH: EAX[7:0] is the version, and version 2 is where -/// the fixed-function counters and `IA32_PERF_GLOBAL_CTRL` appear; EDX[4:0] is -/// how many fixed counters there are and EDX[12:5] how wide they are. Fixed -/// counter 2 needs three of them. -fn architectural_pmu() -> Option { - if cpu::cpuid(0, 0).0 < 0x0A { - return None; - } - let (eax, _, _, edx) = cpu::cpuid(0x0A, 0); - let version = eax & 0xff; - let counters = edx & 0x1f; - let width = (edx >> 5) & 0xff; - if version < 2 || counters < 3 || width == 0 || width > 64 { - return None; - } - Some(width) -} - -const fn mask_of(width: u32) -> u64 { - match width >= 64 { - true => u64::MAX, - false => (1u64 << width) - 1, - } -} - -/// Whether fixed counter 2 is the reason this NMI arrived, SDM Vol. 3B §20.2.2: -/// `IA32_PERF_GLOBAL_STATUS` bit 34 is its overflow. -fn overflowed() -> bool { - cpu::rdmsr(IA32_PERF_GLOBAL_STATUS) & GLOBAL_FIXED_CTR2 != 0 -} - -/// Set the counter one period below its own overflow. -fn reload() { - let period = PERIOD.load(Relaxed); - let mask = WIDTH_MASK.load(Relaxed); - // Masked to the width CPUID stated: a fixed counter refuses a write of the - // bits above it, and the negative count is what makes the overflow land a - // period from here. - write_msr(IA32_FIXED_CTR2, 0u64.wrapping_sub(period) & mask); -} - -fn write_msr(msr: u32, value: u64) { - // SAFETY: every MSR here is an architectural performance-monitoring counter - // or its control register, enumerated by CPUID leaf 0AH before this file - // writes any of them, and each value is that register's own field encoding. - unsafe { cpu::wrmsr(msr, value) }; -} - /// Milliseconds, from a TSC span. One `div`, and only on the path that has /// already decided to end the machine. struct Ms(u64); @@ -518,7 +430,7 @@ impl fmt::Display for Report { " cpu{cpu} irqs={irqs} (={} when sampled {} ago) if={} at {}{}", PROGRESS[cpu].load(Relaxed), Ms(now.wrapping_sub(at)), - u8::from(AT_RFLAGS[cpu].load(Relaxed) & RFLAGS_IF != 0), + u8::from(trap::frame_interrupts_enabled(AT_RFLAGS[cpu].load(Relaxed))), At(AT_RIP[cpu].load(Relaxed)), Waiting(cpu), )?; diff --git a/kernel/src/hardlockup/probe.rs b/kernel/src/hardlockup/probe.rs index a6761c367ae..87e6b23721b 100644 --- a/kernel/src/hardlockup/probe.rs +++ b/kernel/src/hardlockup/probe.rs @@ -25,7 +25,7 @@ use core::sync::atomic::{AtomicBool, AtomicU32, Ordering}; -use crate::arch::{apic, cpu, percpu, smp}; +use crate::arch::{irqchip, cpu, percpu, smp}; /// What the staged CPU says before it stops answering, and the witness a sealed /// record carries in its tail: a `WEDGED` page whose text does not hold this @@ -112,9 +112,9 @@ fn hold_and_sample(victim: usize) -> ! { SEND_EVERY_NS / 1_000_000, ); loop { - apic::send_nmi(victim as u32); + irqchip::send_nmi(victim as u32); let until = crate::clock::tsc_deadline(SEND_EVERY_NS); - while cpu::rdtsc() < until { + while cpu::counter() < until { core::hint::spin_loop(); } } @@ -136,7 +136,7 @@ fn go_deaf(me: usize, bound_ms: u64) -> ! { STAGE.store(DEAF, Ordering::Release); // Not an `IrqGuard`: nothing here re-enables them, which is the point. cpu::disable_interrupts(); - while cpu::rdtsc() < until { + while cpu::counter() < until { core::hint::spin_loop(); } // Never acquires. The detector's NMI is what ends this CPU, and its `rip` diff --git a/kernel/src/hasher.rs b/kernel/src/hasher.rs index 28b6b5818f9..e47153c9a74 100644 --- a/kernel/src/hasher.rs +++ b/kernel/src/hasher.rs @@ -1,5 +1,5 @@ //! The `BuildHasher` every kernel hash container is built on, seeded from -//! `RDRAND` before any container exists — `kernel/Cargo.toml` takes hashbrown +//! the CPU's own random source before any container exists — `kernel/Cargo.toml` takes hashbrown //! without `default-hasher`, so a container must name a hasher. //! //! **A container built before [`seed`], or on a constant, is the wrong answer @@ -12,7 +12,7 @@ use core::hash::{BuildHasher, Hasher}; use core::sync::atomic::{AtomicU64, Ordering}; -use crate::arch::cpu; +use crate::arch::entropy; /// `0` until [`seed`] runs, and a value it refuses to draw. static SEED: AtomicU64 = AtomicU64::new(0); @@ -24,19 +24,18 @@ pub const UNSEEDED: &str = /// Two seeds in one boot means a container was built against the first. const RESEEDED: &str = "kernel hasher: seed() ran twice in one boot"; -pub const NO_RDRAND: &str = - "kernel hasher: CPUID.01H:ECX[30] is clear, so this CPU has no RDRAND and the seed has no \ - source"; - pub const NO_ENTROPY: &str = - "kernel hasher: RDRAND gave no usable value, so the seed would be a constant on every boot"; + "kernel hasher: the CPU's random source gave no usable value, so the seed would be a \ + constant on every boot"; /// Called once, before any container. `0` and all-ones are what a failing -/// `RDRAND` leaves behind, so neither may become a seed. +/// source leaves behind, so neither may become a seed. pub fn seed() { - assert!(cpu::has_rdrand(), "{NO_RDRAND}"); - let drawn = (0..cpu::RDRAND_ATTEMPTS) - .filter_map(|_| cpu::rdrand()) + if let Err(why) = entropy::available() { + panic!("kernel hasher: {why}, and the seed has no other source"); + } + let drawn = (0..entropy::ATTEMPTS) + .filter_map(|_| entropy::draw()) .find(|&v| v != 0 && v != u64::MAX) .unwrap_or_else(|| panic!("{NO_ENTROPY}")); assert_eq!(SEED.swap(drawn, Ordering::Release), 0, "{RESEEDED}"); diff --git a/kernel/src/irq_census.rs b/kernel/src/irq_census.rs index 6a6305bfadc..8b20389ba2e 100644 --- a/kernel/src/irq_census.rs +++ b/kernel/src/irq_census.rs @@ -15,7 +15,7 @@ use crate::scheduler::MAX_CPUS; #[derive(Clone, Copy, PartialEq, Eq, Debug)] #[repr(usize)] pub enum Source { - /// Vector 0x20: shared by this CPU's LAPIC one-shot and every `apic::kick_cpu` IPI. + /// Vector 0x20: shared by this CPU's LAPIC one-shot and every `irqchip::kick_cpu` IPI. Timer, /// Vector 0x21, xHCI MSI-X (or MSI). Xhci, @@ -38,7 +38,7 @@ pub enum Source { /// Vector 0xFF, the local APIC's spurious vector. /// A non-zero count on a machine that staged nothing is an interrupt-routing defect. Spurious, - /// Every vector no `idt_vectors!` row claims — `arch::idt::unclaimed`. + /// Every vector no `idt_vectors!` row claims — `arch::trap::unclaimed`. /// A non-zero count a boot staged nothing for is a routing defect the gate kept off `#DF`. Unclaimed, } @@ -53,38 +53,14 @@ impl Source { ]; } -/// One `u64` per source plus the total; `percpu::OFF_IRQ_COUNTS` is where the block starts. +/// One `u64` per source plus the total, in each CPU's own per-CPU block. pub const SLOTS: usize = 1 + Source::COUNT; /// Index of the machine's own total inside a CPU's block. pub const TOTAL: usize = 0; -/// The `gs:` displacement of slot `index` in this CPU's block. -pub const fn slot_offset(index: usize) -> u32 { - percpu::OFF_IRQ_COUNTS + (index as u32) * 8 -} - -/// Records one delivery of `$source` as two lock-free `add`s to this CPU's own gs: slots. -/// A macro, not a function: the two offsets must be asm immediates, not const-generic values an optimiser could relax. -macro_rules! irq_took { - ($source:ident) => {{ - // SAFETY: both slots are this CPU's own counter block per `arch::percpu`, and the caller is an interrupt handler, so `GS_BASE` already points at this CPU's `PerCpu`. - unsafe { - ::core::arch::asm!( - "add qword ptr gs:[{total}], 1", - "add qword ptr gs:[{source}], 1", - total = const $crate::irq_census::slot_offset($crate::irq_census::TOTAL), - source = const $crate::irq_census::slot_offset( - 1 + $crate::irq_census::Source::$source as usize - ), - // no `nomem` because both instructions write; no `preserves_flags` because `add` clobbers flags. - options(nostack), - ); - } - }}; -} - -pub(crate) use irq_took; +/// Counted where each is taken, by the architecture's handlers +/// (`arch::percpu::irq_took!`), into this CPU's own block. /// Each CPU's counter-array address; only the array is published, so a reader never touches the rest of the block the owning CPU writes through raw pointers. static BLOCKS: [AtomicU64; MAX_CPUS] = [const { AtomicU64::new(0) }; MAX_CPUS]; @@ -148,26 +124,11 @@ pub fn taken_by(cpu: u32) -> Option { read(cpu).map(|counts| counts[TOTAL].saturating_sub(counts[1 + Source::Nmi as usize])) } -/// [`taken_by`] for the CPU asking, read straight off `gs:` — the one form a CPU -/// inside an NMI may use, since it needs neither the published pointer array nor -/// a bounds check on a `cpu_id` it is standing on. +/// [`taken_by`] for the CPU asking, read straight off its own block — the one +/// form a CPU inside an NMI may use, since it needs neither the published +/// pointer array nor a bounds check on a `cpu_id` it is standing on. pub fn taken_here() -> u64 { - let total: u64; - let nmis: u64; - // SAFETY: both slots are this CPU's own counter block per `arch::percpu`; - // `GS_BASE` points at the running CPU's `PerCpu` in every context this is - // read from. - unsafe { - core::arch::asm!( - "mov {total}, qword ptr gs:[{at}]", - "mov {nmis}, qword ptr gs:[{nmi_at}]", - total = out(reg) total, - nmis = out(reg) nmis, - at = const slot_offset(TOTAL), - nmi_at = const slot_offset(1 + Source::Nmi as usize), - options(nostack, readonly, preserves_flags), - ); - } + let (total, nmis) = percpu::irq_counts_here(TOTAL, 1 + Source::Nmi as usize); total.saturating_sub(nmis) } diff --git a/kernel/src/loader/mod.rs b/kernel/src/loader/mod.rs index 5fc93ed5132..97de66a7124 100644 --- a/kernel/src/loader/mod.rs +++ b/kernel/src/loader/mod.rs @@ -15,7 +15,8 @@ mod symbols; mod tls; pub use start::{build_child_handles, PendingHandles, SLOT_PAIR_LEN}; -pub(crate) use start::{alloc_kernel_stack, kernel_start, process_start, thread_start}; +pub(crate) use start::alloc_kernel_stack; +pub(crate) use crate::arch::entry::{kernel_start, process_start, thread_start}; pub use tls::{setup_combined_tls, setup_tls, DTV_INITIAL_CAPACITY}; pub(crate) use tls::rebase_block; @@ -502,7 +503,7 @@ pub fn spawn( // `Prot::ReadWrite`, never executable: a fixed-address W+X stack is the // shape stack-smashing payloads target. pt.map_range(stack_vaddr, stack_pages.phys(), USER_STACK_SIZE as u64, - Prot::ReadWrite, CachePolicy::DeferToMtrr); + Prot::ReadWrite, CachePolicy::Normal); pt.insert_region(stack_vaddr, crate::vma::Region { size: USER_STACK_SIZE as u64, kind: crate::vma::RegionKind::Anonymous { prot: Prot::ReadWrite }, diff --git a/kernel/src/loader/start.rs b/kernel/src/loader/start.rs index 8cc176aa76f..57686d5b93a 100644 --- a/kernel/src/loader/start.rs +++ b/kernel/src/loader/start.rs @@ -1,10 +1,9 @@ //! Loads a built process onto a CPU and builds the handle table it starts -//! with. The two trampolines below are the loader's only per-architecture -//! code; everything else here is architecture-neutral. +//! with. The frame a new stack starts from and the trampolines it returns into +//! are the architecture's (`arch::entry`). use alloc::vec::Vec; -use crate::arch::entry::{initial_user_state, ring3_trampoline_asm}; use crate::object::{HandleTable, Refusal}; use crate::process::{ process_data, Endowments, OwnedAlloc, ENDOW_ENTRY_LEN, KERNEL_STACK_SIZE, @@ -27,90 +26,9 @@ pub(crate) fn alloc_kernel_stack( let alloc = OwnedAlloc::new(KERNEL_STACK_SIZE, 4096)?; scheduler::write_stack_canary(&alloc); let top = alloc.ptr() as u64 + KERNEL_STACK_SIZE as u64; - // Layout must match context_switch's pop sequence: pushfq, rbp..r15, return address. - let frame = (top - 8 * 8) as *mut u64; - // SAFETY: `alloc` is fresh and exclusively owned; the eight writes cover - // `[frame, frame + 64)`, the top 64 bytes of that allocation. - unsafe { - *frame.add(0) = 0; // r15 - *frame.add(1) = arg; // r14 - *frame.add(2) = user_sp; // r13 - *frame.add(3) = user_entry; // r12 - *frame.add(4) = 0; // rbx - *frame.add(5) = 0; // rbp - *frame.add(6) = 0x002; // RFLAGS (IF=0, AC=0) - *frame.add(7) = trampoline as usize as u64; // return address - } - Some((alloc, frame as u64)) -} - -/// Entry point for new processes, reached through `context_switch`'s `ret`. r12 = entry point, r13 = user stack pointer. -// State loads after `unlock`, not before: earlier, registers hold the previous tenant's kernel context. -#[unsafe(naked)] -pub(crate) extern "C" fn process_start() { - ring3_trampoline_asm!( - "push r12", - "push r13", - "call {unlock}", - "pop r13", - "pop r12", - initial_user_state!(), - "push {user_ss}", - "push r13", // RSP: user stack - "push 0x202", // RFLAGS: IF=1 - "push {user_cs}", - "push r12", // RIP: entry point - "iretq", - unlock = sym crate::sched::driver::trampoline_entry, - user_ss = const crate::arch::percpu::USER_DS, - user_cs = const crate::arch::percpu::USER_CS, - ); -} - -/// Entry point for new threads. r14 carries the argument, which lands in rdi. -#[unsafe(naked)] -pub(crate) extern "C" fn thread_start() { - ring3_trampoline_asm!( - "push r12", - "push r13", - "push r14", - "call {unlock}", - "pop r14", - "pop r13", - "pop r12", - initial_user_state!(), - "mov rdi, r14", - "sub r13, 8", // ABI: RSP must be 16n+8 at function entry - "push {user_ss}", - "push r13", - "push 0x202", - "push {user_cs}", - "push r12", - "iretq", - unlock = sym crate::sched::driver::trampoline_entry, - user_ss = const crate::arch::percpu::USER_DS, - user_cs = const crate::arch::percpu::USER_CS, - ); -} - -/// Entry point for a kernel thread: r12 = body, r14 = argument. Never reaches Ring 3. -// The `sti` is load-bearing: `alloc_kernel_stack` leaves `IF` clear, and `trampoline_entry` requires it clear on entry. -#[unsafe(naked)] -pub(crate) extern "C" fn kernel_start() { - core::arch::naked_asm!( - "call {unlock}", - "sti", - "mov rdi, r14", - "call r12", - "call {returned}", - unlock = sym crate::sched::driver::trampoline_entry, - returned = sym kernel_thread_returned, - ); -} - -/// What [`kernel_start`] calls when a kernel thread's body returns: panics rather than halting silently. -extern "C" fn kernel_thread_returned() -> ! { - panic!("a kernel thread's body returned; nothing runs on this stack now"); + // SAFETY: `alloc` is fresh and exclusively owned, and `top` is its end. + let frame = unsafe { crate::arch::entry::initial_frame(top, trampoline, user_entry, user_sp, arg) }; + Some((alloc, frame)) } /// The last path component, truncated to what a process entry can hold. diff --git a/kernel/src/log/nested.rs b/kernel/src/log/nested.rs index 10b3ae8bcae..5e80f015d60 100644 --- a/kernel/src/log/nested.rs +++ b/kernel/src/log/nested.rs @@ -72,7 +72,7 @@ mod armed { return false; } OWED.store(true, Ordering::Relaxed); - crate::arch::apic::send_self(crate::arch::idt::LOG_NEST_VECTOR); + crate::arch::irqchip::send_self(crate::arch::trap::LOG_NEST_VECTOR); true } @@ -92,7 +92,7 @@ mod armed { return; } OWED.store(true, Ordering::Relaxed); - crate::arch::apic::send_self(crate::arch::idt::LOG_NEST_VECTOR); + crate::arch::irqchip::send_self(crate::arch::trap::LOG_NEST_VECTOR); for _ in 0..WINDOW { core::hint::spin_loop(); } diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 398f5b9484a..aa0799930c3 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -113,8 +113,7 @@ mod late_panic { use crate::mm::paging::MmioPolicy; use alloc::boxed::Box; use alloc::sync::Arc; -use arch::{apic, cpu, idt, pat, percpu, smp}; -use arch::{i8042, ioapic}; +use arch::{cpu, irqchip, percpu, smp}; pub(crate) use arch::hw; use drivers::{acpi, gop, nvme, pci, serial, virtio_console, virtio_gpu, virtio_sound, xhci}; use toyos_abi::boot::{KernelArgs, MemoryMapEntry}; @@ -147,7 +146,7 @@ fn panic(info: &core::panic::PanicInfo) -> ! { alert!("EARLY PANIC: {}", info); // Before the capture, so the arm line is the panel's last one. let bound = panic_reboot::arm(true); - // Halts directly instead of via halt_all_cpus: idt::init hasn't run yet, so a renderer fault would triple-fault. + // Halts directly instead of via halt_all_cpus: the exception table is not loaded yet, so a renderer fault would find firmware's. drivers::panic_console::capture(); // SAFETY: no other writer can be mid-transmission — IF is clear here and every other CPU is about to halt. unsafe { drivers::serial::panic_flush(); } @@ -162,16 +161,10 @@ fn panic(info: &core::panic::PanicInfo) -> ! { if prev != percpu::CpuFaultState::Normal { // Escalate: reentry depth is zero here, so this landed on a fatal exception or page fault no handler was inside. panic::last_words("DOUBLE PANIC", Some(prev), info, true); - apic::halt_all_cpus(); + irqchip::halt_all_cpus(); } - let rbp: u64; - // SAFETY: register-to-register mov only (nomem, nostack); -Cforce-frame-pointers=yes makes rbp a real frame pointer. - unsafe { core::arch::asm!("mov {}, rbp", out(reg) rbp, options(nomem, nostack)); } - - arch::idt::exceptions::crash_report( - &arch::idt::exceptions::CrashInfo::Panic { message: info, rbp } - ); + arch::trap::report_panic(info, cpu::frame_pointer()); // Captures now: recovery below may re-enter a scheduler this panic left locked, so a later drain isn't guaranteed. drivers::panic_console::capture(); @@ -190,29 +183,10 @@ fn panic(info: &core::panic::PanicInfo) -> ! { depth.store(0, core::sync::atomic::Ordering::SeqCst); // Discarded here: a stale capture would blame this panic for the next fatal one. drivers::panic_console::discard_capture(); - arch::idt::exceptions::try_recover_from_panic(); + arch::trap::try_recover_from_panic(); } - apic::halt_all_cpus(); -} - -/// Entry point: the bootloader jumps here with `rdi = &KernelArgs`, switches to the kernel's own stack, calls `kernel_main`. -/// # Safety -/// Only the bootloader may call this, fresh from firmware, with `rdi` holding a live [`KernelArgs`]. -#[unsafe(naked)] -#[no_mangle] -pub unsafe extern "sysv64" fn _start(_kernel_args: &KernelArgs) -> ! { - core::arch::naked_asm!( - "mov rax, [rdi + 16]", // kernel_memory_addr - "add rax, [rdi + 32]", // + kernel_stack_addr - "add rax, [rdi + 40]", // + kernel_stack_size - "movabs rbx, {phys_offset}", - "add rax, rbx", - "mov rsp, rax", - "call {kernel_main}", - phys_offset = const PHYS_OFFSET, - kernel_main = sym kernel_main, - ); + irqchip::halt_all_cpus(); } fn register_gpu(driver: Box, info: gpu::GpuInfo) { @@ -265,7 +239,11 @@ fn report_log_destination() { } } -unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { +/// The architecture's entry calls this once, on the kernel's own stack, with +/// the loader's arguments. +/// # Safety +/// `kernel_args` is the loader's live [`KernelArgs`], and nothing has run before this. +pub(crate) unsafe extern "C" fn kernel_main(kernel_args: &KernelArgs) -> ! { // Copied onto the kernel stack: the original lives on the UEFI stack, unreachable once mm::init drops the identity map. let kernel_args = *kernel_args; @@ -275,13 +253,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { entry_count, ); - // **Before the panel and not after it**: the loader maps the scanout - // uncacheable, and `panic_console::arm`'s own record is the panel's first - // paint, so there is no window between arming the panel and painting - // through it in which to establish a memory type. The write alone, and it - // logs nothing: the read-back is `pat::check`, below, where a refusal has - // a channel to reach. - pat::init(); + arch::boot::before_panel(); // Before serial::init: the screen may be the only surviving channel if serial::init itself faults. drivers::panic_console::arm(&kernel_args, maps); @@ -298,7 +270,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { ) }); - serial::init(); + serial::init(kernel_args.rsdp_addr); // After both channels exist, before the first actuator site. // cmdline_len==0 is checked first: an empty bootloader Vec has no backing allocation to point at. @@ -318,24 +290,13 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { actuator::init(cmdline); let root_image = rootfs::init(cmdline, &kernel_args, maps); - // Armed here so the next record — `PAT:` — reaches the console and the panel keeps the one before it. + // Armed here so the next record — the architecture's first — reaches the console and the panel keeps the one before it. #[cfg(feature = "boot-actuators")] if actuator::test_early_halt() { log::halt_before_the_next_repaint(); } - // After actuator::init, whose table the `control-regs-bench` probe inside - // this call reads. `pat::init` above restored the `CR0` it found, so a - // firmware `CD` — which would make every mapping uncacheable whatever the - // PAT says — ends here. - arch::control_regs::init_cr0(0); - - // The read-back `pat::init` owes, on a boot that now has three channels to - // carry a refusal. - pat::check(); - - log!("PAT: IA32_PAT={:#018x}, entry {} = {}", - pat::msr(), pat::WC_ENTRY, pat::entry_name(pat::WC_ENTRY)); + arch::boot::after_console(); // percpu, the allocator and our own paging aren't up yet, so a fault here only reaches the early-panic branch. if actuator::test_early_panic() { @@ -390,7 +351,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { mm::Region { start: kernel_args.kernel_memory_addr, end: kernel_args.kernel_memory_addr + kernel_args.kernel_memory_size }, mm::Region { start: kernel_args.kernel_elf_addr, end: kernel_args.kernel_elf_addr + kernel_args.kernel_elf_size }, mm::Region { start: kernel_args.kernel_stack_addr, end: kernel_args.kernel_stack_addr + kernel_args.kernel_stack_size }, - mm::Region { start: 0x8000, end: 0x9000 }, // AP trampoline page + arch::boot::reserved(), // The loader's black-box page, which is ordinary `LoaderData` and so // memory the allocator would otherwise hand out. Empty on a boot whose // parameter line names none. @@ -416,39 +377,15 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { // reads off a refusal below is which tables the firmware published at all. acpi::inventory(kernel_args.rsdp_addr); - // `init_bsp` loads the IDT partway through, as early as this CPU's `gs:` - // allows: a fault in any later phase then diagnoses instead of stopping in - // a handler the firmware left behind. - let madt = acpi::parse_madt(kernel_args.rsdp_addr).expect("ACPI: MADT not found"); - // Off the same tables as the MADT, and before the IDT below makes a panic - // reportable: a panic that can be reported but not ended leaves the machine - // holding its panel for a hand that may not be in the room. - acpi::init_reset(kernel_args.rsdp_addr); - apic::init(); - percpu::init_bsp(apic::id()); - ioapic::init(&madt); - idt::enable_interrupts(); - arch::syscall::init(); + let platform = arch::boot::interrupts(kernel_args.rsdp_addr); symbols::set_kernel_base(kernel_args.kernel_memory_addr); if !kernel_elf.is_empty() { symbols::load_kernel(kernel_elf, mm::PHYS_OFFSET + kernel_args.kernel_memory_addr); } - // HPET clock — enables profiling for everything from here on - let hpet_base = acpi::find_hpet_base(kernel_args.rsdp_addr) - .expect("ACPI: HPET not found"); - clock::init(hpet_base); - // Century register and time zone both come from ACPI/firmware, not the RTC's own registers. - let century_reg = match acpi::rtc_century_register(kernel_args.rsdp_addr) { - Ok(reg) => reg, - Err(e) => { - log!("ACPI: the FADT is unreadable ({e:?}), so where the RTC keeps its century is unknown too"); - None - } - }; - clock::init_wall(century_reg, kernel_args.rtc_utc_offset()); + arch::boot::clock(kernel_args); trace::enable(); - apic::init_timer(); + arch::boot::timer(); // After both halves of what it needs: a TSC period to convert its bound // with, and a timer whose every tick polls it. deadline::start(); @@ -477,14 +414,14 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { arch::watchdog::init(&pci_devices); file_cache::init(); gpt::init(kernel_args); - i8042::init(kernel_args.rsdp_addr); + arch::boot::platform_devices(kernel_args.rsdp_addr); acpi::init_power(kernel_args.rsdp_addr); boot_phase!("peripherals ready", t_periph); let t_subsys = clock::nanos_since_boot(); - smp::boot_aps(&madt, kernel_args.boot_pml4_addr); + arch::boot::start_other_cpus(&platform, kernel_args); vfs::init(); process::init(); scheduler::init(); @@ -651,16 +588,8 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { drivers::virtio::used_selftest(); } - // Needs interrupts on and the timer already ticking: its last assertion is that the interrupt after the spurious one arrives. #[cfg(feature = "boot-actuators")] - if actuator::lapic_spurious_selftest() { - arch::idt::spurious::selftest(); - } - - #[cfg(feature = "boot-actuators")] - if actuator::unclaimed_vector_selftest() { - arch::idt::unclaimed::selftest(); - } + arch::boot::interrupt_selftests(); virtio_console::init(&pci_devices); @@ -702,7 +631,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { } report_log_destination(); - let complete_tsc = cpu::rdtsc(); + let complete_tsc = cpu::counter(); boot_phase!("complete", 0); report_power_on(kernel_args, complete_tsc); @@ -716,8 +645,7 @@ unsafe fn kernel_main(kernel_args: &KernelArgs) -> ! { // Same no-current-task window as above: blame is Kernel, so fatal_exception halts the machine. if actuator::test_kernel_fault() { - // SAFETY: ud2 reads and writes nothing (nomem, nostack) and raises #UD, caught by the already-installed IDT. - unsafe { core::arch::asm!("ud2", options(nomem, nostack)) }; + cpu::undefined_instruction(); } // Last thing before enter_idle_loop: nothing can run before it, and a klogd spawned earlier would idle through phases 5-7 with no drainer. diff --git a/kernel/src/mm/mod.rs b/kernel/src/mm/mod.rs index 7ec0dcfb6c4..830ebb78843 100644 --- a/kernel/src/mm/mod.rs +++ b/kernel/src/mm/mod.rs @@ -8,6 +8,7 @@ pub use crate::arch::paging; mod alloc; mod dma; mod mmio; +pub mod policy; mod region; mod unmapped; diff --git a/kernel/src/mm/policy.rs b/kernel/src/mm/policy.rs new file mode 100644 index 00000000000..a95e65629dd --- /dev/null +++ b/kernel/src/mm/policy.rs @@ -0,0 +1,79 @@ +//! What a mapping is for and what memory type it gets, named by concept: each +//! architecture's page tables encode these (x86-64's PAT bits, AArch64's +//! `MAIR` indices), and nothing above them spells a bit. + +use super::PAGE_2M; + +/// 4 KiB pages in one 2 MiB page. +pub const PAGES_PER_2M: usize = (PAGE_2M / 4096) as usize; + +/// What a user mapping may be used for: no variant is both writable and +/// executable, and every variant implies read. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Prot { + /// Read-only: neither writable nor executable. + Read, + /// Data: readable and writable, never executable. + ReadWrite, + /// Code. Never writable. + ReadExec, +} + +/// What each 4 KiB page of a 2 MiB window may be used for: split because +/// `toyos-ld` can align a window across the end of `.text` and start of `.data`. +pub struct WindowProt([Prot; PAGES_PER_2M]); + +impl WindowProt { + /// A window whose pages all say the same thing. + pub const fn uniform(prot: Prot) -> Self { + Self([prot; PAGES_PER_2M]) + } + + /// Sets the 4 KiB page `offset` bytes in; an out-of-window offset panics. + pub fn set(&mut self, offset: u64, prot: Prot) { + self.0[(offset / 4096) as usize] = prot; + } + + /// The one protection every page carries, or `None` where they disagree. + pub(crate) fn agreed(&self) -> Option { + let first = self.0[0]; + self.0.iter().all(|&p| p == first).then_some(first) + } + + /// Every 4 KiB page's protection, in order. + pub(crate) fn pages(&self) -> impl Iterator + '_ { + self.0.iter().copied() + } +} + +/// The memory type a mapping gets, out of the three this kernel ever writes. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum CachePolicy { + /// Ordinary memory: RAM, write-back. + Normal, + /// Uncached and unbuffered, whatever the firmware set or forgot: device + /// registers. + Uncacheable, + /// Uncached with stores gathered: a scanout. + WriteCombining, +} + +/// What an MMIO window may select — never [`CachePolicy::Normal`]: a device +/// register mapped cacheable is one a speculative or combined access can +/// reach, and this type removes that as a possibility. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum MmioPolicy { + /// Registers. + Uncacheable, + /// The scanout alone. + WriteCombining, +} + +impl MmioPolicy { + pub fn cache(self) -> CachePolicy { + match self { + Self::Uncacheable => CachePolicy::Uncacheable, + Self::WriteCombining => CachePolicy::WriteCombining, + } + } +} diff --git a/kernel/src/object/shm.rs b/kernel/src/object/shm.rs index 738d2819f32..cc6614d3fb8 100644 --- a/kernel/src/object/shm.rs +++ b/kernel/src/object/shm.rs @@ -46,7 +46,7 @@ impl Region { /// A placeholder for a driver struct built before its buffers exist: /// size zero maps nothing. pub fn empty() -> Self { - Self { phys: DirectMap::from_phys(0), size: 0, cache: CachePolicy::DeferToMtrr, pages: None } + Self { phys: DirectMap::from_phys(0), size: 0, cache: CachePolicy::Normal, pages: None } } } @@ -88,7 +88,7 @@ impl SharedMemObject { Ok(Self::over(Region { phys, size: aligned as u64, - cache: CachePolicy::DeferToMtrr, + cache: CachePolicy::Normal, pages: Some(Arc::new(Pages(pages))), })) } @@ -130,7 +130,7 @@ impl SharedMemObject { // Logged only for a non-default policy: this process is the one // paying for it. Read back the installed policy, not the request, // so the line describes the mapping. - if self.region.cache != CachePolicy::DeferToMtrr { + if self.region.cache != CachePolicy::Normal { let installed = pt.lock().user_policy(addr).expect("shm: just mapped"); crate::log!( "shm: {:#x} mapped {:?} into pid {}", diff --git a/kernel/src/panic.rs b/kernel/src/panic.rs index a3820895781..777176440a7 100644 --- a/kernel/src/panic.rs +++ b/kernel/src/panic.rs @@ -24,7 +24,7 @@ static PANIC_DEPTH: [AtomicU32; SLOTS] = [const { AtomicU32::new(0) }; SLOTS]; /// This CPU's APIC id, from CPUID. /// -/// Not `rdmsr(IA32_X2APIC_APICID)`: that MSR is `#GP` before `apic::init_ap` +/// Not `rdmsr(IA32_X2APIC_APICID)`: that MSR is `#GP` before `irqchip::init_ap` /// has run, and a panic an AP takes before then must not fault inside the /// reentry guard. pub fn apic_id() -> u32 { diff --git a/kernel/src/panic_reboot.rs b/kernel/src/panic_reboot.rs index 3662dbcf795..13e39f10764 100644 --- a/kernel/src/panic_reboot.rs +++ b/kernel/src/panic_reboot.rs @@ -57,7 +57,7 @@ impl Bound { /// calls this, and it is the only place that decides the reset has come due. pub fn check(self) { if let Self::At(cycles) = self { - if cpu::rdtsc() >= cycles { + if cpu::counter() >= cycles { reboot_now(); } } @@ -95,10 +95,10 @@ fn deadline(bound: Budget) -> Option<(u64, Source)> { if crate::clock::calibrated() { return Some((crate::clock::tsc_deadline(bound.nanos()), Source::Calibrated)); } - let hz = crate::clock::cpuid_tsc_hz()?; + let hz = crate::arch::cpu::stated_counter_hz()?; // Nanoseconds first, so a bound under a second is not rounded to nothing. let cycles = (u128::from(bound.nanos()) * u128::from(hz) / 1_000_000_000) as u64; - Some((cpu::rdtsc().saturating_add(cycles), Source::Cpuid)) + Some((cpu::counter().saturating_add(cycles), Source::Cpuid)) } /// Arm the reboot and say so in one line — the panel's last, because the panic diff --git a/kernel/src/preempt.rs b/kernel/src/preempt.rs index bee08a94f08..8b13fe1e9aa 100644 --- a/kernel/src/preempt.rs +++ b/kernel/src/preempt.rs @@ -1,13 +1,14 @@ //! Deferred preemption: per-CPU `preempt_count` and `need_resched` words in -//! `arch::percpu::PerCpu`, touched only through `arch::percpu::gs`. `enable()` +//! the architecture's per-CPU block, touched only through `arch::percpu`'s +//! accessors. `enable()` //! calls `scheduler::do_preempt()` when the count drops to zero and //! `need_resched` is set; every accessor no-ops before `PERCPU_READY`. use core::sync::atomic::Ordering; -use crate::arch::percpu::{gs, OFF_FAULT_STATE, OFF_NEED_RESCHED, OFF_PREEMPT_COUNT}; +use crate::arch::percpu; -// Before `percpu::init_bsp`, `gs:[N]` reads low identity-mapped memory — corruption, not a fault. +// Before `percpu::init_bsp` the per-CPU block is not there to read — corruption, not a fault. #[inline] fn percpu_ready() -> bool { crate::log::PERCPU_READY.load(Ordering::Relaxed) @@ -16,38 +17,38 @@ fn percpu_ready() -> bool { #[inline] pub fn count() -> u32 { if !percpu_ready() { return 0; } - gs::read_u32::() + percpu::preempt_count() } /// Sets the raw preempt-depth word; `Hw::switch` uses this to swap in the incoming context's saved depth. #[inline] pub fn set_count(v: u32) { if !percpu_ready() { return; } - gs::write_u32::(v); + percpu::set_preempt_count(v); } #[inline] pub fn need_resched() -> bool { if !percpu_ready() { return false; } - gs::read_u8::() != 0 + percpu::resched_owed() } #[inline] pub fn set_need_resched() { if !percpu_ready() { return; } - gs::write_u8_imm::(); + percpu::set_resched_owed(true); } #[inline] pub fn clear_need_resched() { if !percpu_ready() { return; } - gs::write_u8_imm::(); + percpu::set_resched_owed(false); } #[inline] pub fn disable() { if !percpu_ready() { return; } - gs::lock_inc_u32::(); + percpu::preempt_count_up(); } /// Drops the count without polling `need_resched`, for a caller about to reschedule anyway (see `sched::driver::pass_block`). @@ -55,13 +56,13 @@ pub fn disable() { pub fn enable_no_resched() { if !percpu_ready() { return; } // The request stays set; the imminent reschedule serves it. - gs::lock_dec_u32::(); + percpu::preempt_count_down(); } #[inline] pub fn enable() { if !percpu_ready() { return; } - gs::lock_dec_u32::(); + percpu::preempt_count_down(); // `do_preempt` clears `need_resched` itself; clearing here would drop a request racing a nested schedule. if count() == 0 && need_resched() && !faulting() { crate::scheduler::do_preempt(); @@ -72,5 +73,5 @@ pub fn enable() { #[inline] fn faulting() -> bool { if !percpu_ready() { return false; } - gs::read_u8::() != 0 + percpu::faulting() } diff --git a/kernel/src/process.rs b/kernel/src/process.rs index 569cdd4eeec..2942bc6ed85 100644 --- a/kernel/src/process.rs +++ b/kernel/src/process.rs @@ -49,7 +49,7 @@ pub fn vma_map( size: u64, prot: Prot, ) -> Option<(UserAddr, u64)> { - pt.lock().alloc_and_map(phys, size, prot, CachePolicy::DeferToMtrr) + pt.lock().alloc_and_map(phys, size, prot, CachePolicy::Normal) } @@ -955,7 +955,7 @@ fn teardown_resources( crate::irq_census::log_census(); // After the irq lines: the tlb conservation check reads deliveries first, issues second. crate::arch::tlb::log_census(); - crate::arch::idt::unclaimed::log_vectors(); + crate::arch::trap::unclaimed::log_vectors(); ops::close_all(&mut data.handles); data.elf.elf_alloc.take(); @@ -1536,7 +1536,7 @@ pub fn dump_crash_diagnostics(fault_addr: u64, rip: u64) { } dump_region("rip", rip); - let fs_base = crate::arch::cpu::read_fs_base(); + let fs_base = crate::arch::cpu::thread_pointer(); if fs_base != 0 { log!(" FS base: {:#x}", fs_base); if let Some(self_ptr) = read_user(fs_base) { diff --git a/kernel/src/quiesce.rs b/kernel/src/quiesce.rs index 39fd939a4c4..cf15f01cacc 100644 --- a/kernel/src/quiesce.rs +++ b/kernel/src/quiesce.rs @@ -192,7 +192,7 @@ pub fn stop(stage: Stage) -> Record { let armed = watch::arm(&PROGRESS, 0, WaitClass::Other) .expect("quiesce::stop: the caller holds no task to park"); // The kick is the timer vector, whose return to Ring 3 is the gate. - crate::arch::apic::kick_all_but_self(); + crate::arch::irqchip::kick_all_but_self(); let cpus = crate::arch::smp::cpu_count(); let began = crate::clock::now(); diff --git a/kernel/src/sched/driver.rs b/kernel/src/sched/driver.rs index e43c0218f68..7385ff45e6c 100644 --- a/kernel/src/sched/driver.rs +++ b/kernel/src/sched/driver.rs @@ -7,7 +7,6 @@ use alloc::boxed::Box; use alloc::sync::Arc; use alloc::vec::Vec; -use core::arch::{asm, naked_asm}; use core::cell::UnsafeCell; use core::ptr; use core::sync::atomic::{AtomicBool, AtomicPtr, AtomicU64, Ordering}; @@ -490,12 +489,7 @@ fn env(preempt: &PreemptOff) -> Env<'_, crate::hw::KernelHw, PreemptOff> { pub fn pass(dispose: Dispose) { // The witness's negative control: sets DF one instruction before the reader that must refuse it. #[cfg(feature = "df-witness-mutate")] - // SAFETY: a build that exists to stage the defect, and the reader below - // panics before any `rep movs` can run. Nothing runs in between, so no - // string op ever executes with it set. - unsafe { - core::arch::asm!("std", options(nomem, nostack)) - }; + crate::arch::cpu::df_witness_mutate(); #[cfg(feature = "df-witness")] crate::arch::cpu::df_witness("a scheduler pass"); // Read before this pass's own level goes on top of it. @@ -694,21 +688,8 @@ pub fn enter_idle_loop() -> ! { unsafe { percpu::set_kernel_stack(percpu::idle_stack_top()) }; // SAFETY: `kernel_cr3` is the space this function's own code and stack already run in, so the write cannot unmap what executes it. unsafe { crate::mm::paging::kernel_cr3().activate() }; - let sp = percpu::idle_stack_top(); - // SAFETY: nothing on the outgoing stack is live past this — the function returns `!`, and `sp` is this CPU's own idle stack top. - unsafe { - asm!( - "mov rsp, {sp}", - // Zeroes the frame chain, so a panic here can backtrace instead of walking off the top of this stack; - // `push` also leaves `rsp` where a function entry expects it. - "xor ebp, ebp", - "push rbp", - "jmp {func}", - sp = in(reg) sp, - func = in(reg) idle_loop as *const () as usize, - options(noreturn), - ); - } + // SAFETY: nothing on the outgoing stack is live past this — the function returns `!`, and the stack is this CPU's own idle stack. + unsafe { crate::arch::cpu::run_on_stack(percpu::idle_stack_top(), idle_loop) } } extern "C" fn idle_loop() -> ! { @@ -878,9 +859,9 @@ pub fn for_each_parked(mut f: impl FnMut(ParkedInfo)) -> bool { /// Tail of the first switch into a fresh task. No lock to release, no outgoing task to park: only the /// preempt-count bracket's other half is owed. -pub extern "sysv64" fn trampoline_entry() { +pub extern "C" fn trampoline_entry() { crate::preempt::enable_no_resched(); - crate::arch::idt::kernel_exit_to_user_check(); + crate::arch::trap::kernel_exit_to_user_check(); } const STACK_CANARY: u64 = 0xDEAD_BEEF_CAFE_BABE; @@ -1004,55 +985,3 @@ fn stack_depth(payload: &KernelPayload) { DEEPEST.fetch_max(used, Ordering::Relaxed); } -/// The outgoing half of [`context_switch`]. A macro, not inlined twice, so both builds share one instruction sequence. -macro_rules! switch_save { - () => { - "pushfq - push rbp - push rbx - push r12 - push r13 - push r14 - push r15 - mov [rdi], rsp - mov rsp, rsi" - }; -} - -/// The incoming half: the seven words a resumed context stands on, ending in `ret`. -macro_rules! switch_restore { - () => { - "pop r15 - pop r14 - pop r13 - pop r12 - pop rbx - pop rbp - popfq - ret" - }; -} - -/// Callee-saved register save/restore. -#[cfg(not(feature = "switch-witness"))] -#[unsafe(naked)] -pub(crate) unsafe extern "C" fn context_switch(old_rsp: *mut u64, new_rsp: u64) { - naked_asm!(switch_save!(), switch_restore!()); -} - -/// The same switch with [`crate::hw::switch_witness_verify`] between the stack move and the first `pop`; never fired. -/// -/// Placed after `mov rsp, rsi`, reading the incoming frame through the register the machine will use. Sound -/// to `call`: the return lands inside the incoming task's own stack, and every register `verify` may clobber -/// is caller-saved and already dead here. -#[cfg(feature = "switch-witness")] -#[unsafe(naked)] -pub(crate) unsafe extern "C" fn context_switch(old_rsp: *mut u64, new_rsp: u64) { - naked_asm!( - switch_save!(), - "mov rdi, rsp", - "call {verify}", - switch_restore!(), - verify = sym crate::hw::switch_witness_verify, - ); -} diff --git a/kernel/src/sched/dump.rs b/kernel/src/sched/dump.rs index 72a7dbba06e..10cdc57dab1 100644 --- a/kernel/src/sched/dump.rs +++ b/kernel/src/sched/dump.rs @@ -17,7 +17,7 @@ use core::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use super::dump_request::{DumpRequest, Left}; -use crate::arch::{apic, percpu, smp}; +use crate::arch::{irqchip, percpu, smp}; use crate::sched::payload::{SCHED_BLOCKED, SCHED_READY, SCHED_RUNNING}; use crate::time::{Budget, Duration, Floor}; @@ -270,7 +270,7 @@ fn report(_proof: &UnderNothing) { // Every flag set before any kick, so an instant answer can't race its own flag. for cpu in 0..cpus { if cpu != me { - apic::kick_cpu(cpu as u32); + irqchip::kick_cpu(cpu as u32); } } @@ -321,7 +321,7 @@ fn probe_silent(asked: &[bool; MAX_CPUS], cpus: usize) { #[allow(clippy::needless_range_loop)] for cpu in 0..cpus { if asked[cpu] { - apic::send_nmi(cpu as u32); + irqchip::send_nmi(cpu as u32); } } @@ -387,7 +387,7 @@ pub(super) fn deaf_window() { // Not an `IrqGuard`: this must unconditionally set IF on exit, and // panic recovery may already have left IF clear. crate::arch::cpu::disable_interrupts(); - while crate::arch::cpu::rdtsc() < until { + while crate::arch::cpu::counter() < until { core::hint::spin_loop(); } crate::arch::cpu::enable_interrupts(); @@ -406,7 +406,7 @@ pub(super) fn deaf_window() { } // Driven from here, not idle-loop iterations: cpu0 may halt between them. STAGE.store(ASKED, Ordering::Release); - apic::kick_cpu(victim as u32); + irqchip::kick_cpu(victim as u32); let deadline = crate::clock::nanos_since_boot().saturating_add(ACK_BUDGET_NS); while STAGE.load(Ordering::Acquire) != DEAF { if crate::clock::nanos_since_boot() >= deadline { diff --git a/kernel/src/scheduler.rs b/kernel/src/scheduler.rs index a3104c51840..ce50ea88baa 100644 --- a/kernel/src/scheduler.rs +++ b/kernel/src/scheduler.rs @@ -651,7 +651,7 @@ pub(crate) fn reap_poisoned() { pub fn schedule_no_return() -> ! { if in_schedule_self() { crate::log!("schedule_no_return: panicked inside a pass, cannot rejoin"); - crate::arch::apic::halt_all_cpus(); + crate::arch::irqchip::halt_all_cpus(); } if percpu::current_tid().is_none() { enter_idle_loop(); diff --git a/kernel/src/syscall/dispatch.rs b/kernel/src/syscall/dispatch.rs index 487ed9f40f2..c7ef1f7f106 100644 --- a/kernel/src/syscall/dispatch.rs +++ b/kernel/src/syscall/dispatch.rs @@ -541,23 +541,10 @@ pub(crate) fn syscall_dispatch(num: u64, a1: u64, a2: u64, a3: u64, a4: u64) -> } // Unlike every other action, this costs the machine, not just the caller's // process: one call is already a permanent halt. - DA::FATAL_HALT => { log!("{}", FATAL_HALT_NONCE); crate::arch::apic::halt_all_cpus(); } - // A real #DF, not simulated: pushing to a non-canonical rsp raises #SS, - // and delivering that needs another push to the same rsp — the #DF condition. - // Non-canonical rather than unmapped: on a bigger machine an unmapped - // address can fall inside the direct map and simply get written to. - // Only #DF has an IST, so every fault on the way there lands on this same unusable stack. + DA::FATAL_HALT => { log!("{}", FATAL_HALT_NONCE); crate::arch::irqchip::halt_all_cpus(); } DA::DOUBLE_FAULT => { log!("SYS_DEBUG: provoking a double fault"); - // SAFETY: unsound by design like NULL_READ; the #DF this raises never returns here. - unsafe { - core::arch::asm!( - "mov rsp, {bad}", - "push 0", - bad = in(reg) 0x0000_8000_0000_0000u64, - options(noreturn), - ); - } + crate::arch::trap::provoke_double_fault() } // Both sides of MAX_HEAP_ALLOC plus the alignment corner: the page-aligned // case pads past one page and must error, not panic inside the allocator's lock. diff --git a/kernel/src/syscall/io.rs b/kernel/src/syscall/io.rs index d21632a4e99..20560cc0cdc 100644 --- a/kernel/src/syscall/io.rs +++ b/kernel/src/syscall/io.rs @@ -12,7 +12,6 @@ use crate::time::{Cadence, Deadline, Duration}; use crate::user_ptr::{UserBytes, UserBytesMut}; use crate::{device, pipe, process}; -use crate::arch::cpu; use toyos_abi::handle::{RawHandle, Rights}; use toyos_abi::syscall::*; use toyos_sched::task::WaitClass; @@ -279,13 +278,13 @@ pub(super) fn sys_write_nonblock(h: RawHandle, buf: &UserBytes) -> u64 { pub(super) fn sys_random(out: &mut UserBytesMut) -> u64 { let mut i = 0; while i + 8 <= out.len() { - let Some(drawn) = cpu::rdrand() else { return SyscallError::Io.to_u64() }; + let Some(drawn) = crate::arch::entropy::draw() else { return SyscallError::Io.to_u64() }; out.write_at(i, &drawn.to_ne_bytes()); i += 8; } let remaining = out.len() - i; if remaining > 0 { - let Some(drawn) = cpu::rdrand() else { return SyscallError::Io.to_u64() }; + let Some(drawn) = crate::arch::entropy::draw() else { return SyscallError::Io.to_u64() }; out.write_at(i, &drawn.to_ne_bytes()[..remaining]); } 0 diff --git a/kernel/src/syscall/vm.rs b/kernel/src/syscall/vm.rs index 0f0d007e316..4c1956d6a1e 100644 --- a/kernel/src/syscall/vm.rs +++ b/kernel/src/syscall/vm.rs @@ -122,7 +122,7 @@ pub(super) fn sys_mmap(req_addr: u64, size: u64, prot: MmapProt, flags: MmapFlag pages.phys(), aligned as u64, mapping_prot, - CachePolicy::DeferToMtrr, + CachePolicy::Normal, ); } data.mmap_regions.push(process::MmapRegion { @@ -146,7 +146,7 @@ pub(super) fn sys_mmap(req_addr: u64, size: u64, prot: MmapProt, flags: MmapFlag let pt = process::current_address_space(); let vaddr = process::with_process_data(|data| { let placed = match &pages { - Some(pages) => pt.lock().alloc_and_map(pages.phys(), aligned as u64, mapping_prot, CachePolicy::DeferToMtrr).map(|(v, _)| v), + Some(pages) => pt.lock().alloc_and_map(pages.phys(), aligned as u64, mapping_prot, CachePolicy::Normal).map(|(v, _)| v), None => pt.lock().alloc_region(aligned as u64, crate::vma::RegionKind::Mapped), }; let Some(vaddr) = placed else { return Err(()) }; diff --git a/kernel/src/usb_gate.rs b/kernel/src/usb_gate.rs index 51717872174..159da5dc04a 100644 --- a/kernel/src/usb_gate.rs +++ b/kernel/src/usb_gate.rs @@ -458,7 +458,7 @@ pub fn sweep_under_load() { // than about this function. let interrupts_were_on = crate::arch::cpu::interrupts_enabled(); crate::preempt::disable(); - crate::arch::apic::arm_within(toyos_sched::fair::QUANTUM_NS); + crate::arch::irqchip::arm_within(toyos_sched::fair::QUANTUM_NS); crate::arch::cpu::enable_interrupts(); let mut buf = vec![0u8; WEDGE_CHUNK as usize * BLOCK]; let mut at = first; diff --git a/tests/toyos.rs b/tests/toyos.rs index 712879bf4c7..2f0846e5b14 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -12767,9 +12767,9 @@ fn run_machine_test( "hash_seed_precedes_every_map" => { // `kernel/src/hasher.rs`'s `UNSEEDED`, as a prefix: the wrong seed // the compiler cannot reach, because the container works. Its other - // two are unrepresented here — both CPU models carry `+rdrand` - // (`src/lib.rs:73-76`) and QEMU's DRNG always answers — so - // `NO_RDRAND` and `NO_ENTROPY` are mutation-measured. + // two are unrepresented here — both x86-64 CPU models carry `+rdrand` + // (`Arch::cpu`) and QEMU's DRNG always answers — so + // the no-source refusal and `NO_ENTROPY` are mutation-measured. const UNSEEDED: &str = "kernel hasher: a hash container was built before hasher::seed()"; let qemu = QemuInstance::boot_with_options( test_config, From e83a2041c70f5ec7cdfc95839a8da41e6836d91f Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 14:28:17 +0200 Subject: [PATCH 08/50] Architecture rules: assembly, target_arch and arch paths live where the owner put them The owner's rulings of 2026-09-26, written as tests: `src/sourcegate.rs` gains `ARCH_RULES`, a table of rules each stated as the only places its spellings may appear, beside the scans already there. It reads code only, over every `.rs` file outside the rust fork. 1. Assembly lives in an architecture's own module: `asm!`, `global_asm!`, `naked_asm!`, naked functions and `core::arch`/`std::arch` intrinsics appear only in `kernel/src/arch//`, the loader's `src/arch/` and `toyos-abi`'s per-architecture syscall entry. 2. An architecture is selected in one place: `target_arch` appears only in the kernel's selector and its arch modules, the loader's arch module, toyos-abi's syscall entry, the build system's one reading of its host (`src/arch.rs`) and `toyos-cc`'s default target. 3. Generic kernel code reaches the machine through the arch interface: no path into `arch::x86_64` or `arch::aarch64` outside `kernel/src/arch/`. 4. A pure crate names no architecture: none of the above in any of the eleven crates `CLAUDE.md`'s layout marks pure, `toyos-sched` among them. Each rule has a fixture test that plants a violation and reds, naming the rule and its places, and the whole-repository test refuses a declared file exception that no longer holds a needle. No existing scan was folded in: the `BANS` table's rows are per-file counts, which a place rule does not express. To make rule 1 true of the loader, its x86 instructions move into `bootloader/src/arch/x86_64.rs`: the TSC read and the `IA32_TSC_ADJUST` line, the black box's `CLFLUSH`/`SFENCE` write-back, the TCO block's port I/O (refused by name on an architecture with no I/O port space) and the CR3 switch and entry jump. The `sysv64` the jump names stays there, because this target's own `"C"` is the Microsoft convention. `src/release.rs` asks `Arch::HOST` instead of spelling `target_arch`. What is left outside an arch module is declared, row by row, and filed at `issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md`: libc's square roots, string moves and `_start`, two userland framebuffer `sfence`s, and seventeen x86 guest probes. Every site in the kernel is gone. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/src/arch/x86_64.rs | 99 +++++- bootloader/src/blackbox.rs | 27 +- bootloader/src/main.rs | 50 +-- bootloader/src/watchdog.rs | 38 +-- ...rch-module-in-userland-and-guest-probes.md | 41 +++ kernel/src/arch/x86_64/cpu.rs | 26 +- kernel/src/arch/x86_64/hw.rs | 4 +- kernel/src/arch/x86_64/idt/mod.rs | 2 + kernel/src/arch/x86_64/paging.rs | 23 +- kernel/src/arch/x86_64/percpu.rs | 6 +- kernel/src/drivers/panic_console/mod.rs | 2 +- kernel/src/drivers/xhci/wait/msc.rs | 2 +- kernel/src/loader/mod.rs | 4 +- kernel/src/panic.rs | 34 +-- kernel/src/process.rs | 2 +- kernel/src/sched/driver.rs | 12 +- kernel/src/sched/payload.rs | 4 +- src/release.rs | 2 +- src/sourcegate.rs | 287 +++++++++++++++++- 19 files changed, 513 insertions(+), 152 deletions(-) create mode 100644 issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md diff --git a/bootloader/src/arch/x86_64.rs b/bootloader/src/arch/x86_64.rs index 0523e32a242..c1aaf91af08 100644 --- a/bootloader/src/arch/x86_64.rs +++ b/bootloader/src/arch/x86_64.rs @@ -1,4 +1,101 @@ -//! x86-64. +//! x86-64: the loader's every instruction Rust has no portable spelling for. + +use toyos_abi::boot::KernelArgs; /// The machine the kernel image must be built for: the loader's own. pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::X86_64; + +/// The time-stamp counter, which counts from reset. +pub fn counter() -> u64 { + // SAFETY: RDTSC reads a counter and nothing else; every x86-64 has it. + unsafe { core::arch::x86_64::_rdtsc() } +} + +/// What the loader's report says beside the counter: `IA32_TSC_ADJUST`, +/// where CPUID says the CPU has it — every write to the TSC since reset is +/// added to it (Intel SDM Vol. 3B, "Time-Stamp Counter Adjustment"), so zero +/// is a counter firmware never wrote and the TSC is time since power-on. +pub fn counter_origin() -> alloc::string::String { + let max = core::arch::x86_64::__cpuid(0).eax; + // Leaf 7 exists when the maximum leaf reaches it. + if max < 7 || core::arch::x86_64::__cpuid_count(7, 0).ebx & (1 << 1) == 0 { + return alloc::string::String::from("IA32_TSC_ADJUST not on this CPU"); + } + let (lo, hi): (u32, u32); + // SAFETY: the loader runs at CPL 0, and CPUID.07H:EBX[1] says the MSR exists. + unsafe { + core::arch::asm!("rdmsr", in("ecx") 0x3bu32, out("eax") lo, out("edx") hi, options(nomem, nostack)) + }; + alloc::format!("IA32_TSC_ADJUST {}", ((u64::from(hi) << 32) | u64::from(lo)) as i64) +} + +/// `CLFLUSH`'s line on every x86-64 part. +const LINE: u64 = 64; + +/// Every line of `[at, at + len)` written back out of this CPU's caches and +/// every other CPU's, before this returns. +pub fn write_back(at: u64, len: usize) { + let mut line = at & !(LINE - 1); + while line < at + len as u64 { + // SAFETY: `CLFLUSH` writes back and invalidates the line containing the + // address and touches nothing else; the caller names memory it + // allocated, and the instruction faults on nothing a canonical address + // can be. + unsafe { + core::arch::asm!("clflush [{addr}]", addr = in(reg) line as *const u8, options(nostack, preserves_flags)); + } + line += LINE; + } + // SAFETY: `SFENCE` orders those writebacks ahead of whatever ends this + // machine; it touches no memory or register. + unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; +} + +/// The I/O port space the chipset's TCO block answers in. +pub mod pio { + /// Whether this architecture has an I/O port space at all. + pub const EXISTS: bool = true; + + /// # Safety + /// No fault in Ring 0; the caller owns which device answers at `port` and + /// what the word commands it to do. `kernel/src/arch/x86_64/cpu.rs` states + /// the same contract for the same instruction. + pub unsafe fn outw(port: u16, value: u16) { + // SAFETY: the caller's contract. + unsafe { + core::arch::asm!("out dx, ax", in("dx") port, in("ax") value, options(nomem, nostack, preserves_flags)) + }; + } + + /// One word from an I/O port; safe because a read has no value a caller can + /// get wrong, as `kernel/src/arch/x86_64/cpu.rs`'s `inw` is. + pub fn inw(port: u16) -> u16 { + let value: u16; + // SAFETY: one instruction into the declared output, no memory operand. + unsafe { + core::arch::asm!("in ax, dx", out("ax") value, in("dx") port, options(nomem, nostack, preserves_flags)); + } + value + } +} + +/// Switch to the loader's page tables at `root` and jump to the kernel at its +/// high-half `entry`, handing it `args`. +/// +/// # Safety +/// `root` identity-maps the memory this code and its stack run from and maps +/// the kernel image at `PHYS_OFFSET`; `entry` is that image's entry point +/// through the high half, and `args` stays where it is until the kernel copies +/// it. +pub unsafe fn enter_kernel(root: u64, entry: u64, args: &KernelArgs) -> ! { + // SAFETY: the caller's contract: the switch keeps this code and stack + // mapped, and the jump lands in the image it mapped. + unsafe { core::arch::asm!("mov cr3, {}", in(reg) root, options(nostack)) }; + // SAFETY: `kernel.elf`'s entry point takes `&KernelArgs` in `rdi` by the boot + // protocol `toyos-abi::boot` and the kernel side of it define between them — + // `sysv64`, because this target's own `"C"` is the Microsoft convention — + // and this bootloader has no way to check the callee's signature, only to + // keep its own side of that contract. + let entry: extern "sysv64" fn(&KernelArgs) -> ! = unsafe { core::mem::transmute(entry) }; + entry(args) +} diff --git a/bootloader/src/blackbox.rs b/bootloader/src/blackbox.rs index 589c8e0dcfb..6aee3c9fcc7 100644 --- a/bootloader/src/blackbox.rs +++ b/bootloader/src/blackbox.rs @@ -245,30 +245,11 @@ fn when(stamp: u64) -> String { alloc::format!("{HEAD} the record below is from the boot armed at {}", Civil::from_unix_secs(stamp).stem()) } -/// Write the page back out of this CPU's caches, and every other CPU's. -/// -/// The kernel's `blackbox::flush` is the same loop for the same reason; the -/// instruction is each binary's because `toyos-blackbox` forbids unsafe code, -/// and `toyos_blackbox::CACHE_LINE` is the one decision they share. +/// Write the page back out of every CPU's caches, as the kernel's +/// `blackbox::flush` does and for the same reason: a reset does not write dirty +/// lines back. fn flush(page: Page) { - let mut line = 0usize; - while line < BYTES { - // SAFETY: `CLFLUSH` writes back and invalidates the line containing the - // address and touches nothing else; the address is inside the page this - // image allocated, and the instruction faults on nothing a canonical - // address can be. - unsafe { - core::arch::asm!( - "clflush [{addr}]", - addr = in(reg) (page.0 + line as u64) as *const u8, - options(nostack, preserves_flags), - ); - } - line += toyos_blackbox::CACHE_LINE; - } - // SAFETY: `SFENCE` orders those writebacks ahead of whatever ends this - // machine; it touches no memory or register. - unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; + crate::arch::write_back(page.0, BYTES); } /// A sealed [`toyos_blackbox::Fault`] as lines for the log. diff --git a/bootloader/src/main.rs b/bootloader/src/main.rs index 54da41ef3d9..3de0f3a72fb 100644 --- a/bootloader/src/main.rs +++ b/bootloader/src/main.rs @@ -578,26 +578,9 @@ fn report_reach(what: &str, at: u64, len: u64) { ); } -/// The time-stamp counter, which counts from reset. +/// The CPU's free-running counter, which counts from reset. fn tsc() -> u64 { - // SAFETY: RDTSC reads a counter and nothing else; every x86-64 has it. - unsafe { core::arch::x86_64::_rdtsc() } -} - -/// `IA32_TSC_ADJUST`, where CPUID says the CPU has it: every write to the TSC -/// since reset is added to it (Intel SDM Vol. 3B, "Time-Stamp Counter -/// Adjustment"), so zero is a counter firmware never wrote and the TSC is time -/// since power-on. -fn tsc_adjust() -> Option { - let max = core::arch::x86_64::__cpuid(0).eax; - // Leaf 7 exists when the maximum leaf reaches it. - if max < 7 || core::arch::x86_64::__cpuid_count(7, 0).ebx & (1 << 1) == 0 { - return None; - } - let (lo, hi): (u32, u32); - // SAFETY: the loader runs at CPL 0, and CPUID.07H:EBX[1] says the MSR exists. - unsafe { core::arch::asm!("rdmsr", in("ecx") 0x3bu32, out("eax") lo, out("edx") hi, options(nomem, nostack)) }; - Some(((u64::from(hi) << 32) | u64::from(lo)) as i64) + arch::counter() } #[allow(clippy::too_many_arguments)] @@ -715,12 +698,9 @@ fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: v kernel_args.loader_handoff_tsc = tsc(); println!( - "Loader TSC: {entry_tsc} at entry, {} at the handoff; IA32_TSC_ADJUST {}", + "Loader TSC: {entry_tsc} at entry, {} at the handoff; {}", kernel_args.loader_handoff_tsc, - match tsc_adjust() { - Some(adjust) => alloc::format!("{adjust}"), - None => alloc::string::String::from("not on this CPU"), - } + arch::counter_origin(), ); // Last, and after every line above: a console write, a FAT write and a @@ -762,13 +742,6 @@ fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: v kernel_args.memory_map_size = memory_map.len() as u64 * mem::size_of::() as u64; - // Switch to new page tables. SAFETY: `pml4_phys` is the table built above, - // identity-mapping low memory (so the code and stack this instruction - // itself runs from stay mapped across the switch) and high-half-mapping - // the same range at `PHYS_OFFSET` for the jump below. The assert before the - // exit proved the whole kernel image is inside that range. - unsafe { core::arch::asm!("mov cr3, {}", in(reg) pml4_phys, options(nostack)) }; - let entry_virt = PHYS_OFFSET + kernel_phys + kernel.entry_offset as u64; mem::forget(memory_map); @@ -776,15 +749,12 @@ fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: v mem::forget(kernel_elf_bytes); mem::forget(cmdline); - // SAFETY: `entry_virt` is `kernel_phys + entry_offset` read through the - // high-half mapping just switched to, which the assert above proved - // covers the whole kernel image. `kernel.elf`'s entry point is `extern - // "sysv64" fn(&KernelArgs) -> !` by the boot protocol `toyos-abi::boot` - // and the kernel side of it define between them — this bootloader has no - // way to check the callee's signature, only to keep its own side of that - // contract. - let entry: extern "sysv64" fn(&KernelArgs) -> ! = unsafe { mem::transmute(entry_virt) }; - entry(&kernel_args); + // SAFETY: `pml4_phys` is the table built above, identity-mapping low memory + // (so the code and stack the switch itself runs from stay mapped across it) + // and high-half-mapping the same range at `PHYS_OFFSET`; the assert before + // the exit proved the whole kernel image is inside that range, so + // `entry_virt` is `kernel_phys + entry_offset` read through it. + unsafe { arch::enter_kernel(pml4_phys, entry_virt, &kernel_args) } } /// When this pass armed the page, in Unix seconds, or 0 where firmware would diff --git a/bootloader/src/watchdog.rs b/bootloader/src/watchdog.rs index 46a5e770ac2..798a0f15b18 100644 --- a/bootloader/src/watchdog.rs +++ b/bootloader/src/watchdog.rs @@ -54,6 +54,9 @@ pub fn arm(system_table: &SystemTable, rsdp_addr: u64, cmdline: &str) { if !toyos_abi::boot::actuators(cmdline).any(|token| token == toyos_tco::PARAM) { return; } + if !crate::arch::pio::EXISTS { + return refused(format_args!("this architecture has no I/O port space, where a TCO block answers")); + } let ecam = match toyos_acpi::ecam_base(Identity, rsdp_addr) { Ok((_, base)) => base, Err(e) => return refused(format_args!("this machine's tables name no ECAM ({e:?})")), @@ -81,14 +84,14 @@ pub fn arm(system_table: &SystemTable, rsdp_addr: u64, cmdline: &str) { // SAFETY: `port` is `toyos_tco`'s answer for the row this machine's own PCI // ids matched, and every offset written is inside that row's block. unsafe { - outw(port + TCO_TMR, toyos_tco::TIMER); - outw(port + TCO1_CNT, TCO1_CNT_RUN); + crate::arch::pio::outw(port + TCO_TMR, toyos_tco::TIMER); + crate::arch::pio::outw(port + TCO1_CNT, TCO1_CNT_RUN); // Reloading is also what returns the expiry count to zero. - outw(port + TCO_RLD, 1); + crate::arch::pio::outw(port + TCO_RLD, 1); } // `TCO1_CNT` is judged whole apart from `TCO1_CNT_LOCK`, which the datasheet // says no write clears: one bit of it is not the register. - let cnt = inw(port + TCO1_CNT); + let cnt = crate::arch::pio::inw(port + TCO1_CNT); if !toyos_tco::cnt_took_the_write(cnt) { return refused(format_args!( "{port:#x} did not take TCO1_CNT={TCO1_CNT_RUN:#06x}, it reads {cnt:#06x}" @@ -107,10 +110,10 @@ pub fn arm(system_table: &SystemTable, rsdp_addr: u64, cmdline: &str) { /// What the block holds once it is armed, as whole words. fn report(port: u16, cnt: u16) { - let rld = inw(port + TCO_RLD); - let tmr = inw(port + TCO_TMR); - let sts1 = inw(port + TCO1_STS); - let sts2 = inw(port + TCO2_STS); + let rld = crate::arch::pio::inw(port + TCO_RLD); + let tmr = crate::arch::pio::inw(port + TCO_TMR); + let sts1 = crate::arch::pio::inw(port + TCO1_STS); + let sts2 = crate::arch::pio::inw(port + TCO2_STS); println!( "watchdog: read back TCO_RLD={rld:#06x} TCO_TMR={tmr:#06x} TCO1_CNT={cnt:#06x} \ TCO1_STS={sts1:#06x} TCO2_STS={sts2:#06x}" @@ -187,25 +190,6 @@ fn config_u32(ecam: u64, device: u8, function: u8, offset: u16) -> u32 { unsafe { read_volatile(at as *const u32) } } -/// # Safety -/// No fault in Ring 0; the caller owns which device answers at `port` and what -/// the word commands it to do. `kernel/src/arch/x86_64/cpu.rs` states the same -/// contract for the same instruction. -unsafe fn outw(port: u16, value: u16) { - core::arch::asm!("out dx, ax", in("dx") port, in("ax") value, options(nomem, nostack, preserves_flags)); -} - -/// One word from an I/O port; safe because a read has no value a caller can get -/// wrong, as `kernel/src/arch/x86_64/cpu.rs`'s `inw` is. -fn inw(port: u16) -> u16 { - let value: u16; - // SAFETY: one instruction into the declared output, no memory operand. - unsafe { - core::arch::asm!("in ax, dx", out("ax") value, in("dx") port, options(nomem, nostack, preserves_flags)); - } - value -} - /// Why this machine is not watched, and that the boot goes on anyway. fn refused(why: core::fmt::Arguments) { println!("watchdog: {why}. This boot is unwatched until the kernel arms its own"); diff --git a/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md b/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md new file mode 100644 index 00000000000..8570c1e652f --- /dev/null +++ b/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md @@ -0,0 +1,41 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# Assembly outside an arch module: userland's libc, two framebuffers, and the guest probes + +The owner's ruling of 2026-09-26 puts every `asm!`, `global_asm!`, +`naked_asm!`, naked function and `core::arch::*` intrinsic inside an +architecture's own module: `kernel/src/arch//`, the bootloader's +`src/arch/`, and `toyos-abi`'s per-arch syscall entry. `src/sourcegate.rs`'s +`ARCH_RULES` enforces it. The kernel and the loader now hold none outside +those; what is left is declared in that table as an exception, each row +pointing here: + +- `userland/libc/src/math.rs` (`sqrtsd`/`sqrtss` and their AArch64 `fsqrt`), + `userland/libc/src/memory.rs` (three `rep` string operations) and + `userland/libc/src/lib.rs` (the naked `_start`). `userland/libc/src` is + only changed under an ABI brief. +- `userland/toyos-window/src/framebuffer.rs` and `userland/metalprobe/src/fb.rs`: + `_mm_sfence` after writing a write-combining framebuffer. Userland has no + portable way to say "drain my stores to the scanout"; the SDK (`toyos/src`) + owes one, and it is also only changed under an ABI brief. +- Seventeen guest probes in `tests/toyos-rust-tests/src/bin/`, whose subject + is an x86 instruction (`rdgsbase`, `fxsave64`, `int1`, x87 control words) + or the raw `syscall` gate with arguments no SDK call will pass. They run in + the x86-64 suite, which is the only suite until the harness gains its arch + axis (the port's stage 8). +- The userland drivers `netd` (`virtio_net.rs`, `i219.rs`) and `soundd` + (`virtio.rs`) order their DMA rings with `fence(Release)`/`fence(Acquire)`. + That is not assembly and no rule reds on it, but it is the same missing + interface: on AArch64 a `fence` is `dmb ish`, which orders nothing a device + outside the inner-shareable domain observes (the kernel's `arch::barrier` + says why, and `Mmio` carries `writel`/`readl` ordering there). + +**Exit condition**: the SDK and libc gain per-architecture modules (as +`toyos-abi`'s syscall entry is one) holding a scanout flush, DMA barriers, the +square roots and the string moves; the guest probes move under a per-arch +directory the harness selects by `Arch`; and every row in `ARCH_RULES` that +cites this file is deleted. diff --git a/kernel/src/arch/x86_64/cpu.rs b/kernel/src/arch/x86_64/cpu.rs index 00cdb324c33..e93f86e0322 100644 --- a/kernel/src/arch/x86_64/cpu.rs +++ b/kernel/src/arch/x86_64/cpu.rs @@ -77,7 +77,7 @@ pub fn rdrand() -> Option { } #[inline] -pub fn read_rsp() -> u64 { +pub fn stack_pointer() -> u64 { let rsp: u64; // SAFETY: register-to-register mov into the declared output; nostack holds because rsp is read, not used. unsafe { @@ -107,7 +107,7 @@ pub fn df_witness(site: &str) { } // SAFETY: the observation is already made; only core::fmt and the log follow, which must not run with DF set. unsafe { asm!("cld", options(nomem, nostack)) }; - crate::hw::report_contexts(read_rsp(), None); + crate::hw::report_contexts(stack_pointer(), None); panic!( "DF WITNESS: cpu{} reached {site} with the direction flag set. \ `compiler_builtins::mem::memmove`'s overlapping-copy path holds it across \ @@ -459,3 +459,25 @@ pub fn df_witness_mutate() { // string op ever executes with it set. unsafe { asm!("std", options(nomem, nostack)) }; } + +/// This CPU's APIC id, from CPUID: the id the hardware gives it, readable +/// before any per-CPU state exists. +/// +/// Not `rdmsr(IA32_X2APIC_APICID)`: that MSR is `#GP` before `irqchip::init_ap` +/// has run, and a panic an AP takes before then must not fault inside the +/// reentry guard. +pub fn hardware_id() -> u32 { + let (max_leaf, _, _, _) = cpuid(0, 0); + for leaf in [0x1F, 0x0B] { + if max_leaf >= leaf { + let (_, ebx, _, edx) = cpuid(leaf, 0); + // SDM Vol. 2A, CPUID leaf 0BH: EBX[15:0] == 0 means unimplemented, + // not id 0, so the leaf-1 fallback below must still run. + if ebx & 0xFFFF != 0 { + return edx; + } + } + } + let (_, ebx, _, _) = cpuid(1, 0); + ebx >> 24 +} diff --git a/kernel/src/arch/x86_64/hw.rs b/kernel/src/arch/x86_64/hw.rs index d14ac5979ca..f0a5dc201f8 100644 --- a/kernel/src/arch/x86_64/hw.rs +++ b/kernel/src/arch/x86_64/hw.rs @@ -455,13 +455,13 @@ impl Hw for KernelHw { #[cfg(feature = "boot-actuators")] crate::heartbeat::note_dispatch(); percpu::set_kernel_stack(incoming.kernel_stack_top); - incoming.cr3.activate(); + incoming.root.activate(); cpu::write_fs_base(incoming.fs_base); } // idle's stack top is per-CPU, unknowable at boot-time init, so it is read here instead. None => { percpu::set_kernel_stack(percpu::idle_stack_top()); - incoming.cr3.activate(); + incoming.root.activate(); } } RUNNING_CTX[percpu::cpu_id() as usize] diff --git a/kernel/src/arch/x86_64/idt/mod.rs b/kernel/src/arch/x86_64/idt/mod.rs index 790392f1ed2..9133bbaecec 100644 --- a/kernel/src/arch/x86_64/idt/mod.rs +++ b/kernel/src/arch/x86_64/idt/mod.rs @@ -554,3 +554,5 @@ pub(crate) fn provoke_double_fault() -> ! { ); } } + +pub(crate) use unclaimed::log_vectors as log_unclaimed; diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index 8745a2eabdd..316c81ea531 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -275,6 +275,9 @@ pub fn flush_tlb_all() { #[derive(Clone, Copy)] pub struct Cr3(u64); +/// The address space a CPU runs in, as the architecture names its root: CR3. +pub type Root = Cr3; + impl Cr3 { pub fn current() -> Self { Self(crate::arch::cpu::read_cr3()) @@ -408,7 +411,7 @@ impl AddressSpace { }) } - pub fn cr3(&self) -> Cr3 { + pub fn root(&self) -> Cr3 { Cr3(self.root.phys() | self.pcid.value() as u64) } @@ -465,7 +468,7 @@ impl AddressSpace { ); let pd_idx = indices(va).2; - let target = self.cr3(); + let target = self.root(); let pd = self.ensure_table(va, TABLE_FLAGS); pd.write_pde(pd_idx, va, phys | prot.leaf_bits() | PAGE_SIZE_BIT) .discharge(target); @@ -498,7 +501,7 @@ impl AddressSpace { self.children.push(table); let pd_idx = indices(va).2; - let target = self.cr3(); + let target = self.root(); let pd = self.ensure_table(va, TABLE_FLAGS); // No `Prot` here: `NX` would make the whole window non-executable // whatever the leaves say. @@ -534,7 +537,7 @@ impl AddressSpace { ); let (pml4_idx, pdpt_idx, pd_idx) = indices(va); - let target = self.cr3(); + let target = self.root(); if let Some(pdpt) = self.root.child_mut(pml4_idx) { if let Some(pd) = pdpt.child_mut(pdpt_idx) { @@ -822,7 +825,7 @@ impl AddressSpace { fn ensure_table(&mut self, va: u64, flags: u64) -> &mut PageTablePage { let flags = flags & TABLE_FLAGS; let (pml4_idx, pdpt_idx, _) = indices(va); - let target = self.cr3(); + let target = self.root(); if self.root[pml4_idx] & PAGE_PRESENT == 0 { let child = Box::new(PageTablePage([0; 512])); @@ -875,7 +878,7 @@ pub fn kernel() -> &'static alloc::sync::Arc> { } /// Kernel CR3. Lock-free — safe to call from panic context. -pub fn kernel_cr3() -> Cr3 { +pub fn kernel_root() -> Cr3 { Cr3(KERNEL_CR3.load(core::sync::atomic::Ordering::Relaxed)) } @@ -886,7 +889,7 @@ pub fn kernel_cr3() -> Cr3 { pub fn activate_kernel() { // SAFETY: `KERNEL_CR3` names the boot-built tables, mapping the code and // stack this call returns onto. - unsafe { kernel_cr3().activate() }; + unsafe { kernel_root().activate() }; } /// [`activate_kernel`] for a CPU without `CR4.PCIDE` yet: `activate` sets the @@ -894,7 +897,7 @@ pub fn activate_kernel() { /// reaches before setting it on itself. pub fn load_kernel_flush() { // SAFETY: same as `activate_kernel` above. - unsafe { kernel_cr3().load_flush() }; + unsafe { kernel_root().load_flush() }; } /// Free function (not a method): the lock and the shootdown are separate @@ -947,7 +950,7 @@ pub(crate) fn init(memory_map: &[MemoryMapEntry]) { addr += PAGE_2M; } - let cr3 = kernel.cr3(); + let cr3 = kernel.root(); KERNEL_CR3.store(cr3.0, core::sync::atomic::Ordering::Release); // Leaked, and `Release` after the space is built: see [`KERNEL`]. let published: &'static alloc::sync::Arc> = Box::leak(Box::new( @@ -973,7 +976,7 @@ fn has(entry: u64, flag: u64) -> u8 { } } -/// The *currently loaded* CR3, not `kernel_cr3()` (a panic can run on a user +/// The *currently loaded* CR3, not `kernel_root()` (a panic can run on a user /// space); lock-free and silent, for the panic path to prove a mapping /// before writing through it. pub fn present_in_current_cr3(addr: u64) -> bool { diff --git a/kernel/src/arch/x86_64/percpu.rs b/kernel/src/arch/x86_64/percpu.rs index 5637b06a687..e042c7f17a1 100644 --- a/kernel/src/arch/x86_64/percpu.rs +++ b/kernel/src/arch/x86_64/percpu.rs @@ -547,7 +547,7 @@ fn ist1_top() -> Option { /// Report how much of the double fault stack the crash report used, straight to the UART — bypassing the log ring, which is drained and may itself be corrupt. pub fn ist1_report() { let Some(top) = ist1_top() else { return }; - let rsp = cpu::read_rsp(); + let rsp = cpu::stack_pointer(); let stack_bottom = top - IST_STACK_SIZE as u64; if rsp < stack_bottom || rsp > top { return; @@ -590,9 +590,9 @@ pub fn init_bsp(lapic_id: u32) { // SAFETY: `alloc_percpu` just returned a live, initialised `PerCpu` with no other reference until the `wrmsr` below. let percpu = unsafe { &mut *ptr }; - percpu.kernel_rsp = cpu::read_rsp(); + percpu.kernel_rsp = cpu::stack_pointer(); // SAFETY: `Tss` is `repr(C, packed)`; `rsp0` may be unaligned. - unsafe { core::ptr::write_unaligned(&raw mut percpu.tss.rsp0, cpu::read_rsp()); } + unsafe { core::ptr::write_unaligned(&raw mut percpu.tss.rsp0, cpu::stack_pointer()); } alloc_idle_stack(percpu); alloc_ist_stacks(percpu); diff --git a/kernel/src/drivers/panic_console/mod.rs b/kernel/src/drivers/panic_console/mod.rs index 93fe68fd354..e2a7510b6d7 100644 --- a/kernel/src/drivers/panic_console/mod.rs +++ b/kernel/src/drivers/panic_console/mod.rs @@ -1334,7 +1334,7 @@ fn write_num(out: &mut [u8], v: usize) -> usize { } /// Whether the first and last framebuffer pages resolve in the *current* -/// CR3, not `kernel_cr3()`: a panic in syscall context runs on a user address space. +/// CR3, not `kernel_root()`: a panic in syscall context runs on a user address space. /// Proves it rather than assuming it, so broken paging becomes no console, never a fault inside the panic handler. fn mapped(fb: &Fb) -> bool { let base = fb.ptr as u64; diff --git a/kernel/src/drivers/xhci/wait/msc.rs b/kernel/src/drivers/xhci/wait/msc.rs index 22eb37bfa23..9d28b7de3c1 100644 --- a/kernel/src/drivers/xhci/wait/msc.rs +++ b/kernel/src/drivers/xhci/wait/msc.rs @@ -888,7 +888,7 @@ fn block_witness_holds(dev: &MscDevice, entered: BlockWitness) { dev.block, at.wrapping_sub(entered.at) as i64, top.wrapping_sub(at) as i64, - crate::arch::cpu::read_rsp(), + crate::arch::cpu::stack_pointer(), ); } diff --git a/kernel/src/loader/mod.rs b/kernel/src/loader/mod.rs index 97de66a7124..cb9f3b89e00 100644 --- a/kernel/src/loader/mod.rs +++ b/kernel/src/loader/mod.rs @@ -658,8 +658,8 @@ pub fn spawn( drop(guard); let t3 = crate::clock::nanos_since_boot(); - log!("spawn: {} pid={} tid={} dst={} base={:#x} entry={:#x} cr3={:#x} symbols={}KiB (layout={}ms relocs={}ms deps={}ms tls={}ms total={}ms)", - path, pid, tid, dst.0, base, entry, child_pt.lock().cr3().phys(), sym_bytes / 1024, + log!("spawn: {} pid={} tid={} dst={} base={:#x} entry={:#x} root={:#x} symbols={}KiB (layout={}ms relocs={}ms deps={}ms tls={}ms total={}ms)", + path, pid, tid, dst.0, base, entry, child_pt.lock().root().phys(), sym_bytes / 1024, (t1 - t0) / 1_000_000, (t2 - t1) / 1_000_000, (t_deps - t2) / 1_000_000, (t_tls - t_deps) / 1_000_000, (t3 - t0) / 1_000_000); diff --git a/kernel/src/panic.rs b/kernel/src/panic.rs index 777176440a7..ab17f6e4247 100644 --- a/kernel/src/panic.rs +++ b/kernel/src/panic.rs @@ -22,30 +22,10 @@ const SLOTS: usize = 64; /// `halt_all_cpus` halts the second CPU anyway. static PANIC_DEPTH: [AtomicU32; SLOTS] = [const { AtomicU32::new(0) }; SLOTS]; -/// This CPU's APIC id, from CPUID. -/// -/// Not `rdmsr(IA32_X2APIC_APICID)`: that MSR is `#GP` before `irqchip::init_ap` -/// has run, and a panic an AP takes before then must not fault inside the -/// reentry guard. -pub fn apic_id() -> u32 { - let (max_leaf, _, _, _) = cpu::cpuid(0, 0); - for leaf in [0x1F, 0x0B] { - if max_leaf >= leaf { - let (_, ebx, _, edx) = cpu::cpuid(leaf, 0); - // SDM Vol. 2A, CPUID leaf 0BH: EBX[15:0] == 0 means unimplemented, - // not id 0, so the leaf-1 fallback below must still run. - if ebx & 0xFFFF != 0 { - return edx; - } - } - } - let (_, ebx, _, _) = cpu::cpuid(1, 0); - ebx >> 24 -} - -/// This CPU's reentry depth. +/// This CPU's reentry depth, indexed by the id the hardware gives the CPU +/// (`arch::cpu::hardware_id`), which answers before any per-CPU state exists. pub fn depth_slot() -> &'static AtomicU32 { - &PANIC_DEPTH[apic_id() as usize & (SLOTS - 1)] + &PANIC_DEPTH[cpu::hardware_id() as usize & (SLOTS - 1)] } /// Path capture bound; overflow is cut from the front (see [`copy_tail`]). @@ -117,7 +97,7 @@ impl Evidence { static FIRST: [Evidence; SLOTS] = [const { Evidence::new() }; SLOTS]; fn evidence() -> &'static Evidence { - &FIRST[apic_id() as usize & (SLOTS - 1)] + &FIRST[cpu::hardware_id() as usize & (SLOTS - 1)] } /// Claims this CPU's slot for the first crash; declines if one is already claimed. @@ -134,7 +114,7 @@ pub fn record_panic(info: &core::panic::PanicInfo) { if !claim(slot, Kind::Panic) { return; } - slot.apic.store(apic_id(), Ordering::Relaxed); + slot.apic.store(cpu::hardware_id(), Ordering::Relaxed); if let Some(location) = info.location() { copy_tail(&slot.file, &slot.file_len, &slot.file_cut, location.file().as_bytes()); slot.line.store(location.line(), Ordering::Relaxed); @@ -153,7 +133,7 @@ pub fn record_fault(name: &str, rip: u64, cr2: u64, error_code: u64) { if !claim(slot, Kind::Fault) { return; } - slot.apic.store(apic_id(), Ordering::Relaxed); + slot.apic.store(cpu::hardware_id(), Ordering::Relaxed); copy_head(&slot.msg, &slot.msg_len, name.as_bytes()); slot.rip.store(rip, Ordering::Relaxed); slot.cr2.store(cr2, Ordering::Relaxed); @@ -286,7 +266,7 @@ pub fn last_words( raw(b"\n!!! "); raw(header.as_bytes()); raw(b" !!! (apic "); - serial::panic_raw_dec(u64::from(apic_id())); + serial::panic_raw_dec(u64::from(cpu::hardware_id())); if let Some(prev) = prev { raw(b", the cpu was already in "); raw(state_name(prev).as_bytes()); diff --git a/kernel/src/process.rs b/kernel/src/process.rs index 2942bc6ed85..96679eeda37 100644 --- a/kernel/src/process.rs +++ b/kernel/src/process.rs @@ -955,7 +955,7 @@ fn teardown_resources( crate::irq_census::log_census(); // After the irq lines: the tlb conservation check reads deliveries first, issues second. crate::arch::tlb::log_census(); - crate::arch::trap::unclaimed::log_vectors(); + crate::arch::trap::log_unclaimed(); ops::close_all(&mut data.handles); data.elf.elf_alloc.take(); diff --git a/kernel/src/sched/driver.rs b/kernel/src/sched/driver.rs index 7385ff45e6c..53ee672be3f 100644 --- a/kernel/src/sched/driver.rs +++ b/kernel/src/sched/driver.rs @@ -370,7 +370,7 @@ pub fn init() { fn idle_ctx() -> KernelCtx { KernelCtx { rsp: 0, - cr3: crate::mm::paging::kernel_cr3(), + root: crate::mm::paging::kernel_root(), fs_base: 0, kernel_stack_top: 0, id: None, @@ -408,11 +408,11 @@ pub fn spawn(new: NewTask) -> (ThreadSched, CpuId) { // A kernel thread's is the kernel address space, the one every CPU // sits in between user threads — why `idle_ctx` names the same `cr3`. // Nothing is released at teardown: this `Arc` clones a leaked, permanent kernel mapping. - let cr3 = new.address_space.lock().cr3(); + let root = new.address_space.lock().root(); let kernel_stack_top = new.kernel_stack.ptr() as u64 + KERNEL_STACK_SIZE as u64; let ctx = KernelCtx { rsp: new.entry_rsp, - cr3, + root, fs_base: new.fs_base, kernel_stack_top, id: Some(new.id), @@ -686,8 +686,8 @@ pub fn enter_idle_loop() -> ! { percpu::set_current_pid(None); // SAFETY: `set_kernel_stack` requires the caller be the CPU its GS base belongs to — true here, on that CPU, after its base was set. unsafe { percpu::set_kernel_stack(percpu::idle_stack_top()) }; - // SAFETY: `kernel_cr3` is the space this function's own code and stack already run in, so the write cannot unmap what executes it. - unsafe { crate::mm::paging::kernel_cr3().activate() }; + // SAFETY: `kernel_root` is the space this function's own code and stack already run in, so the write cannot unmap what executes it. + unsafe { crate::mm::paging::kernel_root().activate() }; // SAFETY: nothing on the outgoing stack is live past this — the function returns `!`, and the stack is this CPU's own idle stack. unsafe { crate::arch::cpu::run_on_stack(percpu::idle_stack_top(), idle_loop) } } @@ -944,7 +944,7 @@ fn check_stack_ownership(payload: &KernelPayload) { let top = bottom + KERNEL_STACK_SIZE as u64; // SAFETY: a pass runs on the CPU whose GS base is its own `PerCpu`. let (kernel_rsp, rsp0) = unsafe { percpu::entry_stacks() }; - let rsp = crate::arch::cpu::read_rsp(); + let rsp = crate::arch::cpu::stack_pointer(); if kernel_rsp == top && rsp0 == top && rsp <= top && rsp > bottom { return; } diff --git a/kernel/src/sched/payload.rs b/kernel/src/sched/payload.rs index 56af5f810e1..7e1cad4fabd 100644 --- a/kernel/src/sched/payload.rs +++ b/kernel/src/sched/payload.rs @@ -13,7 +13,7 @@ use toyos_sched::task::{SchedPayload, TaskAccounting, TaskShared, WaitClass}; use toyos_sched::park::WaitTicket; use crate::watch::Watch; -use crate::mm::paging::Cr3; +use crate::mm::paging::Root; use crate::scheduler::OperationSlot; use crate::process::{OwnedAlloc, PageTables, ProcessAccounting, TaskId}; use crate::symbols::SymbolTable; @@ -44,7 +44,7 @@ pub type RawTicket = WaitTicket; pub struct KernelCtx { /// Saved kernel stack pointer, written by the `context_switch` asm. pub rsp: u64, - pub cr3: Cr3, + pub root: Root, pub fs_base: u64, pub kernel_stack_top: u64, /// `None` is this CPU's idle context. diff --git a/src/release.rs b/src/release.rs index 32d8dc2e349..d8f40c589b2 100644 --- a/src/release.rs +++ b/src/release.rs @@ -200,7 +200,7 @@ fn published(root: &Path, tag: &str) -> bool { pub fn ensure_published(root: &Path) -> Result { let tag = tag(root)?; println!("this tree's toolchain: {tag}"); - if !(cfg!(target_os = "linux") && cfg!(target_arch = "x86_64")) { + if !(cfg!(target_os = "linux") && crate::arch::Arch::HOST == Some(crate::arch::Arch::X86_64)) { return Err(format!( "the release is {HOST}'s and this host is not one; a tarball built here would \ install nowhere" diff --git a/src/sourcegate.rs b/src/sourcegate.rs index 223b18062f4..454f8df31bb 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -3,9 +3,9 @@ //! **Clippy runs now, and these scans are what it cannot say.** `cargo run -- //! --ci host` runs default clippy with warnings denied over three trees //! on every merge — the host workspace -//! (`--workspace --all-targets`), the kernel (`--target x86_64-unknown-none`) -//! and the bootloader (`--target x86_64-unknown-uefi`) — so a `clippy.toml` is -//! no longer a wall with nothing behind it. +//! (`--workspace --all-targets`), and the kernel and the bootloader for every +//! architecture (`src/clippy.rs`) — so a `clippy.toml` is no longer a wall +//! with nothing behind it. //! //! What is behind it is still not these six scans. `disallowed-methods` could //! take the first one, and would lose what makes it useful: the exceptions @@ -61,6 +61,14 @@ //! workflow, script and container recipe into shell commands and refuses a //! package no row declares, the other reads `uses:`. //! +//! The tenth is the architecture rules, [`ARCH_RULES`]: each a set of +//! spellings — assembly and `core::arch` intrinsics, `target_arch`, a path into +//! one architecture's module — stated as the only places they may appear, so an +//! architecture is chosen in one place and reached only through the arch +//! interface. A declared exception is a file row that points at the issue +//! holding what it owes, and one that no longer holds a needle is refused. +//! The rust fork's std is `src/forkcheck.rs`'s to govern and is not read here. +//! //! **What none of them reaches is filed rather than implied**, and each table's //! own doc names its half: the entries under `issues/build/` say so. @@ -1416,6 +1424,184 @@ fn tracked_rust_files(root: &Path, tree: &str) -> std::collections::BTreeSet Vec { + let in_scope = + |at: &str| rule.scope.is_empty() || rule.scope.iter().any(|tree| at.starts_with(tree)); + let placed = |at: &str| rule.places.iter().any(|(place, _)| at.starts_with(place)); + let mut found = Vec::new(); + for (at, text) in files { + if !in_scope(at) || placed(at) { + continue; + } + for (n, line) in text.lines().enumerate() { + let code = code_only(line); + if let Some(needle) = rule.needles.iter().find(|needle| code.contains(**needle)) { + let places: Vec = + rule.places.iter().map(|(place, why)| format!("{place} ({why})")).collect(); + found.push(format!( + "{at}:{}: `{needle}` breaks \"{}\"; it may appear only in {}", + n + 1, + rule.name, + if places.is_empty() { "no file at all".to_string() } else { places.join(", ") }, + )); + } + } + } + found +} + +/// Every `.rs` file this repository holds, as `(repository-relative path, +/// contents)`: everything outside [`NOT_OURS`], build output and dotted +/// directories. +#[cfg(test)] +fn every_rust_file() -> Vec<(String, String)> { + let root = repo_root(); + let mut files = Vec::new(); + let Ok(entries) = std::fs::read_dir(&root) else { return Vec::new() }; + let mut entries: Vec<_> = entries.filter_map(Result::ok).map(|e| e.path()).collect(); + entries.sort(); + for path in entries { + let name = path.file_name().unwrap_or_default().to_string_lossy().to_string(); + if name.starts_with('.') || name == "target" || name == NOT_OURS { + continue; + } + if path.is_dir() { + rust_files(&path, &mut files); + } else if path.extension().is_some_and(|e| e == "rs") { + files.push(path); + } + } + files + .into_iter() + .filter_map(|path| Some((rel(&root, &path), std::fs::read_to_string(&path).ok()?))) + .collect() +} + #[cfg(test)] const CORPUS: &str = "tests/testcases"; @@ -1457,6 +1643,101 @@ fn digest(bytes: &[u8]) -> String { mod tests { use super::*; + /// **The architecture rules hold over the whole repository**, and no place + /// a rule names is a place that no longer holds a needle — a row nobody + /// needs any more is a permission nobody re-argued. + #[test] + fn every_architecture_rule_holds() { + let files = every_rust_file(); + assert!( + files.iter().any(|(at, _)| at == "kernel/src/arch/mod.rs"), + "the walk did not reach the kernel's selector, so it is reading no tree" + ); + let mut complaints = Vec::new(); + for rule in ARCH_RULES { + complaints.extend(place_violations(rule, &files)); + // A module is a place a needle may stand; a file is an exception + // somebody declared, and one that holds nothing any more is stale. + for (place, _) in rule.places.iter().filter(|(place, _)| !place.ends_with('/')) { + let used = files.iter().any(|(at, text)| { + at.starts_with(place) + && text.lines().any(|l| { + let code = code_only(l); + rule.needles.iter().any(|n| code.contains(n)) + }) + }); + if !used { + complaints.push(format!( + "\"{}\" names {place} as a place, and nothing there spells any of {:?}", + rule.name, rule.needles + )); + } + } + } + assert!(complaints.is_empty(), "{}", complaints.join("\n")); + } + + fn rule(name: &str) -> &'static PlaceRule { + ARCH_RULES.iter().find(|r| r.name == name).unwrap_or_else(|| panic!("no rule {name}")) + } + + fn file(at: &str, text: &str) -> (String, String) { + (at.to_string(), text.to_string()) + } + + /// Each rule's own fixture: a violation planted where the rule forbids it + /// reds, naming the rule and the places, and the same line where the rule + /// allows it does not. + #[test] + fn assembly_outside_an_arch_module_is_red() { + let asm = rule("assembly lives in an architecture's own module"); + let planted = [ + file("kernel/src/sched/driver.rs", " unsafe { core::arch::asm!(\"nop\") };\n"), + file("bootloader/src/main.rs", "#[unsafe(naked)]\n"), + file("toyos/src/window.rs", " let t = core::arch::x86_64::_rdtsc();\n"), + ]; + let said = place_violations(asm, &planted); + assert_eq!(said.len(), 3, "{said:?}"); + assert!(said.iter().all(|s| s.contains(asm.name) && s.contains("kernel/src/arch/x86_64/")), "{said:?}"); + let placed = [ + file("kernel/src/arch/aarch64/cpu.rs", " unsafe { core::arch::asm!(\"wfi\") };\n"), + file("kernel/src/sched/driver.rs", " // core::arch::asm! is the architecture's.\n"), + ]; + assert!(place_violations(asm, &placed).is_empty()); + } + + #[test] + fn an_architecture_chosen_outside_the_selector_is_red() { + let select = rule("an architecture is selected in one place"); + let said = place_violations(select, &[file("kernel/src/main.rs", "#[cfg(target_arch = \"x86_64\")]\n")]); + assert_eq!(said.len(), 1, "{said:?}"); + assert!(said[0].contains(select.name) && said[0].contains("kernel/src/arch/mod.rs"), "{said:?}"); + assert!(place_violations(select, &[file("kernel/src/arch/mod.rs", "#[cfg(target_arch = \"aarch64\")]\n")]).is_empty()); + } + + #[test] + fn a_path_into_one_architecture_from_generic_code_is_red() { + let reach = rule("generic kernel code reaches the machine through the arch interface"); + let said = place_violations(reach, &[file("kernel/src/process.rs", "use crate::arch::x86_64::percpu;\n")]); + assert_eq!(said.len(), 1, "{said:?}"); + assert!(said[0].contains(reach.name) && said[0].contains("kernel/src/arch/"), "{said:?}"); + // Outside the kernel the rule does not read; inside `arch/` it allows. + assert!(place_violations(reach, &[file("kernel/src/arch/x86_64/boot.rs", "use crate::arch::x86_64::percpu;\n")]).is_empty()); + } + + #[test] + fn a_pure_crate_that_names_an_architecture_is_red() { + let pure = rule("a pure crate names no architecture"); + let planted = [ + file("toyos-sched/src/cpu.rs", "#[cfg(target_arch = \"aarch64\")]\n"), + file("toyos-desktop/src/lib.rs", " core::arch::asm!(\"nop\");\n"), + file("toyos-dma/src/lib.rs", "use crate::arch::aarch64::x;\n"), + ]; + let said = place_violations(pure, &planted); + assert_eq!(said.len(), 3, "{said:?}"); + assert!(said.iter().all(|s| s.contains(pure.name) && s.contains("no file at all")), "{said:?}"); + } + /// **Two clauses, one rule each, and neither is checkable any other way.** /// /// The first: the NMI handler must not log. It would reenter its own CPU's From 5834a92f4a318ef8b1cbb53f1173f23454b64b14 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 14:32:35 +0200 Subject: [PATCH 09/50] kernel: shootdown origins, and the syscall window's watchdog, named by concept `Origin` (who asked for a TLB invalidation) is a generic census, so it moves to kernel/src/invalidation.rs and the x86 tlb re-exports it. The xHCI driver's assertion about the shootdown ACK timeout belonged to the module that owns the timeout; it lives there now and the constant is private. The syscall path's NMI-gate calls go through `arch::syscall::note_entry` / `window_storm`, so dispatch and the scheduler name no x86 mechanism. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/arch/x86_64/syscall.rs | 13 ++++++++++++ kernel/src/arch/x86_64/tlb.rs | 34 +++++++------------------------ kernel/src/drivers/xhci/mod.rs | 2 -- kernel/src/invalidation.rs | 28 +++++++++++++++++++++++++ kernel/src/main.rs | 1 + kernel/src/sched/driver.rs | 2 +- kernel/src/syscall/dispatch.rs | 4 ++-- 7 files changed, 52 insertions(+), 32 deletions(-) create mode 100644 kernel/src/invalidation.rs diff --git a/kernel/src/arch/x86_64/syscall.rs b/kernel/src/arch/x86_64/syscall.rs index 0a49d29b8f9..9c21bdbe37c 100644 --- a/kernel/src/arch/x86_64/syscall.rs +++ b/kernel/src/arch/x86_64/syscall.rs @@ -182,3 +182,16 @@ extern "sysv64" fn syscall_handler(num: u64, a1: u64, a2: u64, _: u64, a3: u64, percpu::leave_syscall(); out } + +/// Counts one syscall for `nmi_gate`, whatever it turns out to be; every +/// `syscall_dispatch` calls this first. +#[cfg(feature = "boot-actuators")] +pub fn note_entry() { + super::nmi_gate::note_syscall(); +} + +/// `syscall-window-nmi`'s storm on the sibling spinning in `syscall`, from the idle loop. +#[cfg(feature = "boot-actuators")] +pub fn window_storm() { + super::nmi_gate::storm(); +} diff --git a/kernel/src/arch/x86_64/tlb.rs b/kernel/src/arch/x86_64/tlb.rs index 6355596390e..1a4228c57bc 100644 --- a/kernel/src/arch/x86_64/tlb.rs +++ b/kernel/src/arch/x86_64/tlb.rs @@ -19,31 +19,7 @@ use super::{apic, percpu, smp}; static SHOOTDOWN: Shootdown = Shootdown::new(); -/// Which path issued a shootdown, so the census names who pays: `Dlopen` (a -/// `Shared` window or rollback unmap), `Pcid` (pool reclaim), `Mmio`, `Unmap` -/// (`Unmapped::drop`), `Pipe`, `Staged` (the ack-delay actuator), `Bench` -/// ([`bench`]'s own, so a measured shootdown is never counted as one a path in -/// this kernel needed). -#[derive(Clone, Copy)] -#[repr(usize)] -pub enum Origin { - Dlopen, - Pcid, - Mmio, - Unmap, - Pipe, - #[cfg_attr(not(feature = "test-actuators"), allow(dead_code))] - Staged, - #[cfg_attr(not(feature = "boot-actuators"), allow(dead_code))] - Bench, -} - -impl Origin { - const COUNT: usize = 7; - /// Order matches the variants; `tests/toyos.rs`'s `irq_census_conservation` reads the line back. - const NAMES: [&'static str; Self::COUNT] = - ["dlopen", "pcid", "mmio", "unmap", "pipe", "staged", "bench"]; -} +pub use crate::invalidation::Origin; /// Issuer-side census; `irq_census`'s `tlb` column is the receiver side, and a /// delivery the two disagree on is an uncounted issuing path. @@ -84,12 +60,16 @@ pub fn log_census() { /// Set above xHCI's `CALL_AFTER_BREAK`, the longest a disk call spins with `IF` /// clear once its transport has broken, so no legitimate wait trips it; that -/// constant's own assertion holds the order. -pub(crate) const ACK_TIMEOUT: Tripwire = Tripwire::absurd( +/// assertion below holds the order. +const ACK_TIMEOUT: Tripwire = Tripwire::absurd( Duration::from_secs(5), "above the longest IF-clear device spin a target can be inside", ); +// A disk call spins with interrupts off, so one that outlasted this tripwire +// would panic another CPU over a device. +const _: () = assert!(crate::drivers::xhci::CALL_AFTER_BREAK.nanos() < ACK_TIMEOUT.nanos()); + /// Spins between deadline checks; `nanos_since_boot`'s 128-bit divide is too /// costly to call on every iteration. const SPINS_PER_DEADLINE_CHECK: u32 = 1024; diff --git a/kernel/src/drivers/xhci/mod.rs b/kernel/src/drivers/xhci/mod.rs index a5201eb36b8..f5c2efb8bea 100644 --- a/kernel/src/drivers/xhci/mod.rs +++ b/kernel/src/drivers/xhci/mod.rs @@ -321,8 +321,6 @@ pub(crate) const CALL_AFTER_BREAK: crate::time::Budget = crate::time::Budget::of "every wait is clipped to where the rungs still ahead of it begin, so the last rung runs whatever was spent before it and the call ends here", ); -// The caller spins with interrupts off, so a call that outlasted the TLB-ack tripwire would panic another CPU over a device. -const _: () = assert!(CALL_AFTER_BREAK.nanos() < crate::arch::tlb::ACK_TIMEOUT.nanos()); // A disk whose device left under the port rung's reset is waited for no longer than the rungs from that reset on were given to spend on it. const _: () = assert!( diff --git a/kernel/src/invalidation.rs b/kernel/src/invalidation.rs new file mode 100644 index 00000000000..e12d820a54c --- /dev/null +++ b/kernel/src/invalidation.rs @@ -0,0 +1,28 @@ +//! Why a machine-wide translation invalidation was asked for: the census every +//! architecture's shootdown (`arch::tlb`) counts its callers by. + +/// Which path issued a shootdown, so the census names who pays: `Dlopen` (a +/// `Shared` window or rollback unmap), `Pcid` (pool reclaim), `Mmio`, `Unmap` +/// (`Unmapped::drop`), `Pipe`, `Staged` (the ack-delay actuator), `Bench` +/// (`arch::tlb::bench`'s own, so a measured shootdown is never counted as one +/// a path in this kernel needed). +#[derive(Clone, Copy)] +#[repr(usize)] +pub enum Origin { + Dlopen, + Pcid, + Mmio, + Unmap, + Pipe, + #[cfg_attr(not(feature = "test-actuators"), allow(dead_code))] + Staged, + #[cfg_attr(not(feature = "boot-actuators"), allow(dead_code))] + Bench, +} + +impl Origin { + pub const COUNT: usize = 7; + /// Order matches the variants; `tests/toyos.rs`'s `irq_census_conservation` reads the line back. + pub const NAMES: [&'static str; Self::COUNT] = + ["dlopen", "pcid", "mmio", "unmap", "pipe", "staged", "bench"]; +} diff --git a/kernel/src/main.rs b/kernel/src/main.rs index aa0799930c3..955f1d496f2 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -12,6 +12,7 @@ static DEBUG_WAIT: core::sync::atomic::AtomicBool = core::sync::atomic::AtomicBo pub use mm::{UserAddr, DirectMap, PHYS_OFFSET}; +mod invalidation; mod shootdown; mod sleeplock; mod smp_roster; diff --git a/kernel/src/sched/driver.rs b/kernel/src/sched/driver.rs index 53ee672be3f..d0a3a47c5a4 100644 --- a/kernel/src/sched/driver.rs +++ b/kernel/src/sched/driver.rs @@ -704,7 +704,7 @@ extern "C" fn idle_loop() -> ! { // while the one under observation spins on `syscall` from Ring 3. #[cfg(feature = "boot-actuators")] if crate::actuator::syscall_window_nmi() { - crate::arch::nmi_gate::storm(); + crate::arch::syscall::window_storm(); } // Here, not from a syscall: the panic handler recovers, not paints, when a userland // thread is current, and the idle loop has none. diff --git a/kernel/src/syscall/dispatch.rs b/kernel/src/syscall/dispatch.rs index c7ef1f7f106..60b3ea46e7b 100644 --- a/kernel/src/syscall/dispatch.rs +++ b/kernel/src/syscall/dispatch.rs @@ -97,9 +97,9 @@ retired_syscalls! { } pub(crate) fn syscall_dispatch(num: u64, a1: u64, a2: u64, a3: u64, a4: u64) -> u64 { - // Placed first so `nmi_gate` counts the call whatever it turns out to be. + // Placed first so the architecture counts the call whatever it turns out to be. #[cfg(feature = "boot-actuators")] - crate::arch::nmi_gate::note_syscall(); + crate::arch::syscall::note_entry(); let t0 = crate::clock::nanos_since_boot(); process::with_current_data(|data| { From 8a86c2512b7d4033db5c8d85c305e6a68b24232e Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 15:10:00 +0200 Subject: [PATCH 10/50] AArch64 stages 2 and 3: the loader and the kernel reach the PL011 on virt The loader builds for aarch64-unknown-uefi through toyos-ld (PE ARM64), reads ROOT through firmware and hands off; the kernel's AArch64 entry drops from EL2 when entered there, writes the control-register declaration whole, turns on the loader's tables, installs its vectors and reaches kernel_main; the console is the PL011 SPCR names. Measured under `-M virt,gic-version=3` with AAVMF: HVF enters at EL1, TCG with `virtualization=on` at EL2, and both print the boot log, the memory map, the MADT's GIC structures and the GTDT's timers, then stop on the first owed item with an EARLY PANIC on serial and on the ramfb panel. Shared, and changed on x86 too: - toyos-bootmap types a leaf by concept (Cache::{Firmware, Memory, Device, Scanout}) under a Typing (x86: the MTRRs; AArch64: firmware's write-back ranges, a part-memory page refused), encodes both architectures' descriptors, and splits a scanout's partial 2 MiB pages into 4 KiB leaves where the map types memory: ramfb is carved out of RAM at 0xbc7a0000. The x86 plan is the plan it was. - The halt every fatal path funnels into is generic (panic::halt_all_cpus); the architecture stops the other CPUs (irqchip::stop_other_cpus) and reports its fault stack (trap::report_fault_stack). - The frame-pointer backtrace, the crash report's memory tail (mm::report_on_crash), vma::Occupancy and acpi::inventory's table list (arch::boot::ACPI_TABLES) moved to where both architectures reach them. - panic_reboot names the counter, not the TSC, and the loader's jump takes the image and reads the root out of KernelArgs on both architectures. - toyos-ld checks a declared /MACHINE: against the objects, and drops AArch64 mapping symbols ($x/$d), which repeat per section. - toyos-acpi decodes SPCR, GTDT, and the MADT's GICC/GICD/GICR/ITS. - The build system gives an architecture with no userland yet a ROOT with none (Userland::of). The AArch64 kernel builds with -Adead_code (kernel/.cargo/config.toml, exit: the port's stage 7): until the syscall gate, the interrupt controller and the scheduler exist there, what only they reach is unreachable. Every stand-in for later-stage work is an owed! that panics naming its stage. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/src/arch/aarch64.rs | 105 ++++++ bootloader/src/arch/mod.rs | 1 + bootloader/src/arch/x86_64.rs | 25 +- bootloader/src/main.rs | 81 +++-- kernel/.cargo/config.toml | 7 + kernel/Cargo.lock | 5 + kernel/Cargo.toml | 1 + kernel/src/actuator.rs | 6 + kernel/src/arch/aarch64/barrier.rs | 49 +++ kernel/src/arch/aarch64/boot.rs | 254 ++++++++++++++ kernel/src/arch/aarch64/cache.rs | 30 ++ kernel/src/arch/aarch64/console_uart.rs | 77 +++++ kernel/src/arch/aarch64/control_regs.rs | 102 ++++++ kernel/src/arch/aarch64/cpu.rs | 118 +++++++ kernel/src/arch/aarch64/entropy.rs | 43 +++ kernel/src/arch/aarch64/entry.rs | 27 ++ kernel/src/arch/aarch64/fpu.rs | 2 + kernel/src/arch/aarch64/hw.rs | 82 +++++ kernel/src/arch/aarch64/iommu_unit.rs | 73 ++++ kernel/src/arch/aarch64/irqchip.rs | 31 ++ .../src/arch/aarch64/keyboard_controller.rs | 18 + kernel/src/arch/aarch64/mod.rs | 145 ++++++-- kernel/src/arch/aarch64/paging.rs | 194 +++++++++++ kernel/src/arch/aarch64/percpu.rs | 118 +++++++ kernel/src/arch/aarch64/pio.rs | 15 + kernel/src/arch/aarch64/pmu.rs | 20 ++ kernel/src/arch/aarch64/rtc.rs | 20 ++ kernel/src/arch/aarch64/smp.rs | 18 + kernel/src/arch/aarch64/syscall.rs | 12 + kernel/src/arch/aarch64/tlb.rs | 33 ++ kernel/src/arch/aarch64/trap.rs | 204 +++++++++++ kernel/src/arch/aarch64/watchdog.rs | 16 + kernel/src/arch/x86_64/apic.rs | 97 +----- kernel/src/arch/x86_64/boot.rs | 14 +- kernel/src/arch/x86_64/hw.rs | 10 +- kernel/src/arch/x86_64/idt/exceptions.rs | 31 +- kernel/src/arch/x86_64/idt/mod.rs | 4 +- kernel/src/arch/x86_64/idt/nmi.rs | 2 +- kernel/src/arch/x86_64/paging.rs | 20 +- kernel/src/arch/x86_64/vtd/fault.rs | 2 +- kernel/src/deadline.rs | 4 +- kernel/src/drivers/acpi.rs | 14 +- kernel/src/drivers/panic_console/mod.rs | 11 +- kernel/src/drivers/xhci/wait/mod.rs | 2 +- kernel/src/hardlockup/mod.rs | 2 +- kernel/src/main.rs | 8 +- kernel/src/mm/mod.rs | 17 +- kernel/src/panic.rs | 93 +++++ kernel/src/panic_reboot.rs | 21 +- kernel/src/scheduler.rs | 2 +- kernel/src/symbols.rs | 23 ++ kernel/src/syscall/dispatch.rs | 2 +- kernel/src/syscall/vm.rs | 3 +- kernel/src/vma.rs | 12 + src/build.rs | 15 +- tests/common/power.rs | 6 +- tests/common/serial.rs | 2 +- tests/toyos.rs | 2 +- toyos-acpi/src/gtdt.rs | 57 +++ toyos-acpi/src/lib.rs | 8 +- toyos-acpi/src/madt.rs | 35 +- toyos-acpi/src/spcr.rs | 83 +++++ toyos-acpi/tests/fixtures.rs | 4 + toyos-bootmap/src/aarch64.rs | 65 ++++ toyos-bootmap/src/lib.rs | 326 +++++++++++++----- toyos-bootmap/src/x86_64.rs | 38 ++ toyos-bootmap/tests/plan.rs | 233 ++++++++++--- toyos-ld/src/collect.rs | 13 + toyos-ld/src/main.rs | 35 +- 69 files changed, 2861 insertions(+), 387 deletions(-) create mode 100644 bootloader/src/arch/aarch64.rs create mode 100644 kernel/src/arch/aarch64/barrier.rs create mode 100644 kernel/src/arch/aarch64/boot.rs create mode 100644 kernel/src/arch/aarch64/cache.rs create mode 100644 kernel/src/arch/aarch64/console_uart.rs create mode 100644 kernel/src/arch/aarch64/control_regs.rs create mode 100644 kernel/src/arch/aarch64/cpu.rs create mode 100644 kernel/src/arch/aarch64/entropy.rs create mode 100644 kernel/src/arch/aarch64/entry.rs create mode 100644 kernel/src/arch/aarch64/fpu.rs create mode 100644 kernel/src/arch/aarch64/hw.rs create mode 100644 kernel/src/arch/aarch64/iommu_unit.rs create mode 100644 kernel/src/arch/aarch64/irqchip.rs create mode 100644 kernel/src/arch/aarch64/keyboard_controller.rs create mode 100644 kernel/src/arch/aarch64/paging.rs create mode 100644 kernel/src/arch/aarch64/percpu.rs create mode 100644 kernel/src/arch/aarch64/pio.rs create mode 100644 kernel/src/arch/aarch64/pmu.rs create mode 100644 kernel/src/arch/aarch64/rtc.rs create mode 100644 kernel/src/arch/aarch64/smp.rs create mode 100644 kernel/src/arch/aarch64/syscall.rs create mode 100644 kernel/src/arch/aarch64/tlb.rs create mode 100644 kernel/src/arch/aarch64/trap.rs create mode 100644 kernel/src/arch/aarch64/watchdog.rs create mode 100644 toyos-acpi/src/gtdt.rs create mode 100644 toyos-acpi/src/spcr.rs create mode 100644 toyos-bootmap/src/aarch64.rs create mode 100644 toyos-bootmap/src/x86_64.rs diff --git a/bootloader/src/arch/aarch64.rs b/bootloader/src/arch/aarch64.rs new file mode 100644 index 00000000000..0e2b29d6d84 --- /dev/null +++ b/bootloader/src/arch/aarch64.rs @@ -0,0 +1,105 @@ +//! AArch64: the loader's every instruction Rust has no portable spelling for. + +use toyos_abi::boot::KernelArgs; +use toyos_bootmap::Typing; + +/// The machine the kernel image must be built for: the loader's own. +pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::Aarch64; + +/// How the boot map's descriptors are encoded. +pub use toyos_bootmap::aarch64 as encoding; + +/// How the boot map types memory: by firmware's map, since AArch64 has no +/// range registers to do it and every descriptor names its own type. +pub fn typing(write_back: &[(u64, u64)]) -> Typing<'_> { + Typing::ByMap(write_back) +} + +/// The generic timer's virtual count, `CNTVCT_EL0`. +pub fn counter() -> u64 { + let count: u64; + // SAFETY: reads a counter EL1 and EL2 may always read; the `ISB` keeps the + // read in program order. + unsafe { core::arch::asm!("isb", "mrs {}, cntvct_el0", out(reg) count, options(nomem, nostack, preserves_flags)) }; + count +} + +/// What the loader's report says beside the counter: its rate. Where it counts +/// from is firmware's to say and no register here does. +pub fn counter_origin() -> alloc::string::String { + let hz: u64; + // SAFETY: reads a register EL1 and EL2 may always read. + unsafe { core::arch::asm!("mrs {}, cntfrq_el0", out(reg) hz, options(nomem, nostack, preserves_flags)) }; + alloc::format!("CNTFRQ_EL0 {hz} Hz; the counter's origin is firmware's") +} + +/// The smallest data cache line on this machine, from `CTR_EL0.DminLine`. +fn line() -> u64 { + let ctr: u64; + // SAFETY: reads `CTR_EL0`, which every level may read. + unsafe { core::arch::asm!("mrs {}, ctr_el0", out(reg) ctr, options(nomem, nostack, preserves_flags)) }; + 4 << ((ctr >> 16) & 0xF) +} + +/// Every line of `[at, at + len)` cleaned to the point of coherency and +/// invalidated, then `DSB SY` for their completion. +pub fn write_back(at: u64, len: usize) { + let step = line(); + let mut addr = at & !(step - 1); + while addr < at + len as u64 { + // SAFETY: `DC CIVAC` cleans and invalidates the line holding an + // address the caller allocated; it changes no memory's contents. + unsafe { core::arch::asm!("dc civac, {}", in(reg) addr, options(nostack, preserves_flags)) }; + addr += step; + } + // SAFETY: a barrier; waits for the maintenance above to complete. + unsafe { core::arch::asm!("dsb sy", options(nostack, preserves_flags)) }; +} + +/// AArch64 has no I/O port space: every caller checks [`pio::EXISTS`] first. +pub mod pio { + pub const EXISTS: bool = false; + + /// # Safety + /// Never called: [`EXISTS`] is false. + pub unsafe fn outw(_port: u16, _value: u16) { + unreachable!("AArch64 has no I/O port space") + } + + pub fn inw(_port: u16) -> u16 { + unreachable!("AArch64 has no I/O port space") + } +} + +/// Hand the CPU to the kernel as firmware left it — its exception level, its +/// identity tables — at the image's physical entry, with `x0 = args`. The +/// kernel's entry switches to the boot map (`args.boot_pml4_addr`) itself (`kernel/src/arch/aarch64/boot.rs`), +/// because at EL2 only the kernel's own drop to EL1 can install it. +/// +/// The image is cleaned to the point of coherency first: that entry fetches +/// instructions with the MMU off for a few of them, straight from memory. +/// +/// # Safety +/// `args.boot_pml4_addr` is the boot map, `image` is the relocated kernel image, `entry_offset` +/// is its entry point's offset in it, and `args` stays where it is until the +/// kernel copies it. +pub unsafe fn enter_kernel(image: (u64, u64), entry_offset: u64, args: &KernelArgs) -> ! { + write_back(image.0, image.1 as usize); + let entry = image.0 + entry_offset; + // SAFETY: interrupts masked for good — the kernel's vectors are not + // installed yet — then every instruction cache line invalidated against + // the image just cleaned, and a branch to its entry with `x0 = args`, the + // boot protocol `toyos-abi::boot` and the kernel's `_start` define. + unsafe { + core::arch::asm!( + "msr daifset, #0xf", + "ic iallu", + "dsb ish", + "isb", + "br {entry}", + entry = in(reg) entry, + in("x0") args as *const KernelArgs, + options(noreturn), + ); + } +} diff --git a/bootloader/src/arch/mod.rs b/bootloader/src/arch/mod.rs index b3a5eadcbdf..29a2241ec9a 100644 --- a/bootloader/src/arch/mod.rs +++ b/bootloader/src/arch/mod.rs @@ -1,6 +1,7 @@ //! The machine the loader runs on, and the only part of it that knows which one. #[cfg_attr(target_arch = "x86_64", path = "x86_64.rs")] +#[cfg_attr(target_arch = "aarch64", path = "aarch64.rs")] mod imp; pub use imp::*; diff --git a/bootloader/src/arch/x86_64.rs b/bootloader/src/arch/x86_64.rs index c1aaf91af08..a48dee5e395 100644 --- a/bootloader/src/arch/x86_64.rs +++ b/bootloader/src/arch/x86_64.rs @@ -5,6 +5,15 @@ use toyos_abi::boot::KernelArgs; /// The machine the kernel image must be built for: the loader's own. pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::X86_64; +/// How the boot map's entries are encoded. +pub use toyos_bootmap::x86_64 as encoding; + +/// How the boot map types memory: by the MTRRs firmware programmed, beneath +/// entries that select plain memory. +pub fn typing(_write_back: &[(u64, u64)]) -> toyos_bootmap::Typing<'_> { + toyos_bootmap::Typing::Firmware +} + /// The time-stamp counter, which counts from reset. pub fn counter() -> u64 { // SAFETY: RDTSC reads a counter and nothing else; every x86-64 has it. @@ -79,15 +88,17 @@ pub mod pio { } } -/// Switch to the loader's page tables at `root` and jump to the kernel at its -/// high-half `entry`, handing it `args`. +/// Switch to the boot map at `args.boot_pml4_addr` and jump to the kernel +/// image's entry through the high half, handing it `args`. /// /// # Safety -/// `root` identity-maps the memory this code and its stack run from and maps -/// the kernel image at `PHYS_OFFSET`; `entry` is that image's entry point -/// through the high half, and `args` stays where it is until the kernel copies -/// it. -pub unsafe fn enter_kernel(root: u64, entry: u64, args: &KernelArgs) -> ! { +/// The boot map identity-maps the memory this code and its stack run from and +/// maps the kernel image at `PHYS_OFFSET`; `image` is that relocated image, +/// `entry_offset` its entry point's offset in it, and `args` stays where it is +/// until the kernel copies it. +pub unsafe fn enter_kernel(image: (u64, u64), entry_offset: u64, args: &KernelArgs) -> ! { + let root = args.boot_pml4_addr; + let entry = crate::PHYS_OFFSET + image.0 + entry_offset; // SAFETY: the caller's contract: the switch keeps this code and stack // mapped, and the jump lands in the image it mapped. unsafe { core::arch::asm!("mov cr3, {}", in(reg) root, options(nostack)) }; diff --git a/bootloader/src/main.rs b/bootloader/src/main.rs index 3de0f3a72fb..7d1f6e71374 100644 --- a/bootloader/src/main.rs +++ b/bootloader/src/main.rs @@ -16,11 +16,11 @@ use uefi::{ proto::device_path::{media::{PartitionFormat, PartitionSignature}, DevicePath, DevicePathNode, DeviceType, DeviceSubType}, proto::loaded_image::LoadedImage, proto::media::file::{File, FileAttribute, FileInfo, FileMode}, - table::{boot::{MemoryType, OpenProtocolAttributes, OpenProtocolParams, PAGE_SIZE}, cfg::ACPI2_GUID, runtime::ResetType}, + table::{boot::{MemoryAttribute, MemoryType, OpenProtocolAttributes, OpenProtocolParams, PAGE_SIZE}, cfg::ACPI2_GUID, runtime::ResetType}, Event, }; use toyos_abi::boot::{KernelArgs, MemoryMapEntry, RootBridgeWindow, MAX_ROOT_BRIDGE_WINDOWS}; -use toyos_bootmap::{Plan, BOOT_MAP_BYTES, MAX_PAGES, PML4_HIGH_HALF, PML4_IDENTITY}; +use toyos_bootmap::{Plan, BOOT_MAP_BYTES, MAX_PAGES, ROOT_HIGH_HALF, ROOT_IDENTITY}; /// Every line this loader prints: the firmware's console, and the file on the /// stick once [`loaderlog::open`] has one. The arguments are evaluated once, so @@ -521,14 +521,13 @@ fn query_gop(system_table: &SystemTable) -> Option { }) } -/// Write `plan` into `pt_mem` and return the PML4's physical address. +/// Write `plan` into `pt_mem` and return its root table's physical address. /// /// # Safety /// `pt_mem` is [`toyos_bootmap::MAX_PAGES`] pages of zeroed memory, 4096-aligned. unsafe fn build_boot_page_tables(pt_mem: *mut u8, plan: &Plan) -> u64 { - const PAGE_PRESENT: u64 = 1 << 0; - const PAGE_WRITE: u64 = 1 << 1; - const PAGE_SIZE_BIT: u64 = 1 << 7; + use arch::encoding::{block, page, table}; + use toyos_bootmap::Slot; let mut next_page = 0usize; let mut alloc_page = || -> *mut u64 { @@ -537,26 +536,53 @@ unsafe fn build_boot_page_tables(pt_mem: *mut u8, plan: &Plan) -> u64 { page }; - let pml4 = alloc_page(); + let root = alloc_page(); let identity_pdpt = alloc_page(); let high_pdpt = alloc_page(); let mut directories = [core::ptr::null_mut::(); toyos_bootmap::MAX_DIRECTORIES]; for (slot, gib) in plan.directories().iter().enumerate() { let pd = alloc_page(); directories[slot] = pd; - *identity_pdpt.add(*gib as usize) = pd as u64 | PAGE_PRESENT | PAGE_WRITE; - *high_pdpt.add(*gib as usize) = pd as u64 | PAGE_PRESENT | PAGE_WRITE; + *identity_pdpt.add(*gib as usize) = table(pd as u64); + *high_pdpt.add(*gib as usize) = table(pd as u64); + } + + let mut fine = [core::ptr::null_mut::(); toyos_bootmap::MAX_PAGES]; + for (table_at, (directory, index)) in plan.fine_slots().enumerate() { + let leaves = alloc_page(); + fine[table_at] = leaves; + *directories[directory].add(index) = table(leaves as u64); } for entry in plan.entries() { - *directories[entry.directory].add(entry.index) = - entry.phys | PAGE_PRESENT | PAGE_WRITE | PAGE_SIZE_BIT | entry.cache.bits(); + match entry.slot { + Slot::Directory { directory, index } => { + *directories[directory].add(index) = block(entry.phys, entry.cache) + } + Slot::Fine { table, index } => *fine[table].add(index) = page(entry.phys, entry.cache), + } } - *pml4.add(PML4_IDENTITY) = identity_pdpt as u64 | PAGE_PRESENT | PAGE_WRITE; - *pml4.add(PML4_HIGH_HALF) = high_pdpt as u64 | PAGE_PRESENT | PAGE_WRITE; + *root.add(ROOT_IDENTITY) = table(identity_pdpt as u64); + *root.add(ROOT_HIGH_HALF) = table(high_pdpt as u64); - pml4 as u64 + root as u64 +} + +/// Every range firmware's map says is write-back memory, `(base, length)`: +/// a descriptor carrying `EFI_MEMORY_WB` and not one of the two I/O types, +/// which a firmware may give the attribute without meaning memory. +fn write_back_memory(system_table: &SystemTable) -> vec::Vec<(u64, u64)> { + let boot_services = system_table.boot_services(); + let sizes = boot_services.memory_map_size(); + // Room for the descriptors allocating this buffer itself may add. + let mut buffer = vec![0u8; sizes.map_size + 8 * sizes.entry_size]; + let map = boot_services.memory_map(&mut buffer).expect("the memory map, before the exit"); + map.entries() + .filter(|d| d.att.contains(MemoryAttribute::WRITE_BACK)) + .filter(|d| d.ty != MemoryType::MMIO && d.ty != MemoryType::MMIO_PORT_SPACE) + .map(|d| (d.phys_start, d.page_count * PAGE_SIZE as u64)) + .collect() } /// Say whether `at .. at + len` is inside the boot map, and refuse the boot @@ -608,11 +634,16 @@ fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: v // // Said before it is applied: a machine this refuses leaves the refusal in // `loader.log`, which is the artifact a machine with no console has. - let planned = Plan::new(gop.as_ref().map(|g| (g.framebuffer, g.framebuffer_size))); + // Firmware's write-back memory, for an architecture whose boot map types + // pages by it. Before the exit, while the map can still be asked for; the + // attributes a descriptor carries do not change across it. + let write_back = write_back_memory(&system_table); + let planned = + Plan::new(gop.as_ref().map(|g| (g.framebuffer, g.framebuffer_size)), arch::typing(&write_back)); match &planned { Ok(plan) => match plan.scanout() { Some((at, len)) => println!( - "Scanout: {at:#x}+{len:#x} mapped uncacheable in 2 MiB pages at identity and at \ + "Scanout: {at:#x}+{len:#x} mapped as the scanout in 2 MiB pages at identity and at \ PHYS_OFFSET, in {} page directories", plan.directories().len() ), @@ -625,7 +656,7 @@ fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: v // SAFETY: `pt_mem` is the `MAX_PAGES * 4096`-byte, 4096-aligned, zeroed // allocation above, and a `Plan` never names more pages than that. let pml4_phys = unsafe { build_boot_page_tables(pt_mem, &plan) }; - println!("Boot map: PML4 {pml4_phys:#x}, {BOOT_MAP_BYTES:#x} bytes at identity and at PHYS_OFFSET"); + println!("Boot map: root {pml4_phys:#x}, {BOOT_MAP_BYTES:#x} bytes at identity and at PHYS_OFFSET"); let kernel_phys = kernel.memory.as_ptr() as u64; report_reach("Kernel image", kernel_phys, kernel.memory.len() as u64); @@ -742,19 +773,19 @@ fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: v kernel_args.memory_map_size = memory_map.len() as u64 * mem::size_of::() as u64; - let entry_virt = PHYS_OFFSET + kernel_phys + kernel.entry_offset as u64; - mem::forget(memory_map); mem::forget(kernel.memory); mem::forget(kernel_elf_bytes); mem::forget(cmdline); - // SAFETY: `pml4_phys` is the table built above, identity-mapping low memory - // (so the code and stack the switch itself runs from stay mapped across it) - // and high-half-mapping the same range at `PHYS_OFFSET`; the assert before - // the exit proved the whole kernel image is inside that range, so - // `entry_virt` is `kernel_phys + entry_offset` read through it. - unsafe { arch::enter_kernel(pml4_phys, entry_virt, &kernel_args) } + let image = (kernel_phys, kernel_args.kernel_memory_size); + // SAFETY: `kernel_args.boot_pml4_addr` is the table built above, + // identity-mapping low memory (so the code and stack a switch to it runs + // from stay mapped across it) and mapping the same range at `PHYS_OFFSET`; + // the assert before the exit proved the whole kernel image is inside that + // range, and `image` is that image, relocated, with its entry at + // `entry_offset`. + unsafe { arch::enter_kernel(image, kernel.entry_offset as u64, &kernel_args) } } /// When this pass armed the page, in Unix seconds, or 0 where firmware would diff --git a/kernel/.cargo/config.toml b/kernel/.cargo/config.toml index e7607696e14..c0cf254b334 100644 --- a/kernel/.cargo/config.toml +++ b/kernel/.cargo/config.toml @@ -5,5 +5,12 @@ rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes"] [target.x86_64-unknown-none] linker = "toyos-ld" +# A target's own `rustflags` replace `build.rustflags`, so both flags repeat. +# `-Adead_code` is the AArch64 port's declared debt: until its stage 7 gives +# the syscall gate, the interrupt controller and the scheduler a way in, every +# item only those reach is unreachable there and nowhere else — and an +# `#[expect(dead_code)]` cannot be met under it, hence the second `-A`. Exit: +# both go when `issues/kernel/toyos-runs-on-arm64.md`'s stage 7 lands. [target.aarch64-unknown-none-softfloat] linker = "toyos-ld" +rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes", "-Adead_code", "-Aunfulfilled_lint_expectations"] diff --git a/kernel/Cargo.lock b/kernel/Cargo.lock index ba25a32a818..3906d45472d 100644 --- a/kernel/Cargo.lock +++ b/kernel/Cargo.lock @@ -41,6 +41,7 @@ dependencies = [ "toyos-acpi", "toyos-blackbox", "toyos-blockhold", + "toyos-bootmap", "toyos-dma", "toyos-elf", "toyos-fat32", @@ -92,6 +93,10 @@ version = "0.1.0" name = "toyos-blockhold" version = "0.1.0" +[[package]] +name = "toyos-bootmap" +version = "0.1.0" + [[package]] name = "toyos-dma" version = "0.1.0" diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 657997f0dad..80b7526964e 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -386,6 +386,7 @@ toyos-acpi = { path = "../toyos-acpi" } toyos-dma = { path = "../toyos-dma" } toyos-blackbox = { path = "../toyos-blackbox" } toyos-blockhold = { path = "../toyos-blockhold" } +toyos-bootmap = { path = "../toyos-bootmap" } toyos-fat32 = { path = "../toyos-fat32" } toyos-elf = { path = "../toyos-elf" } toyos-gpt = { path = "../toyos-gpt" } diff --git a/kernel/src/actuator.rs b/kernel/src/actuator.rs index 980a049a58f..c2d4c87896e 100644 --- a/kernel/src/actuator.rs +++ b/kernel/src/actuator.rs @@ -46,6 +46,12 @@ actuators! { /// Panic between arming the on-screen console and `mm::init`. test_early_panic = "test-early-panic"; + /// Take an undefined-instruction exception right after the architecture's + /// console step, where it has one to take there: the earliest fault the + /// exception vectors must report. AArch64 installs its vectors in the entry; + /// x86-64 loads its IDT later, and panics by name instead. + test_early_fault = "test-early-fault"; + /// Panic inside `percpu::init_bsp`, one statement after it loads the IDT: /// the earliest point a panic is reportable at all, and the window the T14 /// stops in. What it judges is that the reset register is decoded by then. diff --git a/kernel/src/arch/aarch64/barrier.rs b/kernel/src/arch/aarch64/barrier.rs new file mode 100644 index 00000000000..91612c0d8f4 --- /dev/null +++ b/kernel/src/arch/aarch64/barrier.rs @@ -0,0 +1,49 @@ +//! The orderings a device's view of memory needs, as AArch64 gives them. +//! +//! The same contract x86-64's `barrier` implements, and here every function is +//! an instruction: the Arm memory model is weakly ordered, and a device sits +//! outside the inner-shareable domain `fence` orders (`DMB ISH`). The outer +//! shareable `DMB OSH*` forms are what a DMA master observes (Arm ARM K.a, +//! B2.3.10 and D8.2.2); `DSB` is needed only where completion, not order, is +//! the point. + +/// Every store to memory this CPU made before this call is visible to a +/// device's DMA reads before any store it makes after it — a descriptor before +/// the index that publishes it. `DMB OSHST`. +#[inline(always)] +pub fn dma_wmb() { + // SAFETY: a barrier; reads and writes nothing. + unsafe { core::arch::asm!("dmb oshst", options(nostack, preserves_flags)) }; +} + +/// Every load of device-written memory this CPU makes after this call sees at +/// least what the loads before it saw — a completion's index before the entry +/// it counts. `DMB OSHLD`. +#[inline(always)] +pub fn dma_rmb() { + // SAFETY: a barrier; reads and writes nothing. + unsafe { core::arch::asm!("dmb oshld", options(nostack, preserves_flags)) }; +} + +/// What an MMIO store is preceded by: [`dma_wmb`], so a register write that +/// starts a device's work comes after the memory that work reads. +#[inline(always)] +pub fn before_mmio_write() { + dma_wmb(); +} + +/// What an MMIO load is followed by: [`dma_rmb`], so memory read after a +/// status register is at least as new as the status. +#[inline(always)] +pub fn after_mmio_read() { + dma_rmb(); +} + +/// Every store this CPU made to the scanout has completed before this returns: +/// the scanout is Normal non-cacheable, whose stores may be gathered and held, +/// and `DSB ST` waits for every earlier store to complete. +#[inline(always)] +pub fn scanout_flush() { + // SAFETY: a barrier; reads and writes nothing. + unsafe { core::arch::asm!("dsb st", options(nostack, preserves_flags)) }; +} diff --git a/kernel/src/arch/aarch64/boot.rs b/kernel/src/arch/aarch64/boot.rs new file mode 100644 index 00000000000..9e84bbe9957 --- /dev/null +++ b/kernel/src/arch/aarch64/boot.rs @@ -0,0 +1,254 @@ +//! The AArch64 steps of the boot: the entry the loader jumps to, and what +//! `kernel_main` asks of this architecture at the points where one differs +//! from another. +//! +//! **The entry.** The loader leaves the CPU as firmware ran it — at EL2 or +//! EL1, on firmware's identity tables — cleans the kernel image and its own +//! tables to the point of coherency, and jumps to [`_start`]'s physical +//! address with `x0 = &KernelArgs`. `_start` writes the +//! [`control_regs`](super::control_regs) declaration whole: at EL2 it programs +//! EL1's registers with the MMU already on and drops with `ERET`; at EL1 it +//! turns the MMU off first, so no translation register changes under a live +//! walk. Either way it arrives at the kernel's link address in the view at +//! `PHYS_OFFSET`, on the kernel's own stack, with the vectors installed, and +//! calls `kernel_main`. + +use core::mem::offset_of; + +use toyos_abi::boot::{KernelArgs, MemoryMapEntry}; +use toyos_acpi::MadtEntry; + +use super::control_regs as regs; +use crate::drivers::acpi::DirectPhys; +use crate::log; +use crate::mm::Region; + +/// Entry point: the loader jumps here at its physical address, MMU on under +/// firmware's identity map, with `x0 = &KernelArgs`. +/// # Safety +/// Only the loader may call this, fresh from firmware, with `x0` holding a live [`KernelArgs`]. +#[unsafe(naked)] +#[no_mangle] +pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { + core::arch::naked_asm!( + "mov x19, x0", + // x20 = the stack's top, physical: kernel image + stack offset + stack size. + "ldr x20, [x19, #{kernel_memory}]", + "ldr x1, [x19, #{stack_offset}]", + "add x20, x20, x1", + "ldr x1, [x19, #{stack_size}]", + "add x20, x20, x1", + // x2 = TCR_EL1 whole, x3 = the loader's L0 table, x4 = MAIR_EL1. + "ldr x2, ={tcr}", + "mrs x1, id_aa64mmfr0_el1", + "and x1, x1, #0xf", + "orr x2, x2, x1, lsl #{ips}", + "ldr x3, [x19, #{root}]", + "ldr x4, ={mair}", + "ldr x5, ={sctlr}", + "mrs x21, CurrentEL", + "lsr x21, x21, #2", + "cmp x21, #2", + "b.eq 2f", + "cmp x21, #1", + "b.ne 9f", + // EL1: translation off, then the declaration, then translation on. + "ldr x1, ={sctlr_off}", + "msr sctlr_el1, x1", + "isb", + "msr mair_el1, x4", + "msr tcr_el1, x2", + "msr ttbr0_el1, x3", + "msr ttbr1_el1, x3", + "msr cpacr_el1, xzr", + "tlbi vmalle1", + "dsb nsh", + "isb", + "msr sctlr_el1, x5", + "isb", + "ldr x1, =3f", + "br x1", + // EL2: EL1's registers with the MMU on, EL2's as declared, then drop. + "2:", + "msr mair_el1, x4", + "msr tcr_el1, x2", + "msr ttbr0_el1, x3", + "msr ttbr1_el1, x3", + "msr cpacr_el1, xzr", + "msr sctlr_el1, x5", + "ldr x1, ={hcr}", + "msr hcr_el2, x1", + "mov x1, #{cnthctl}", + "msr cnthctl_el2, x1", + "msr cntvoff_el2, xzr", + "ldr x1, ={cptr}", + "msr cptr_el2, x1", + "tlbi vmalle1", + "dsb nsh", + "mov x1, #{spsr}", + "msr spsr_el2, x1", + "ldr x1, =3f", + "msr elr_el2, x1", + "isb", + "eret", + // At the link address, EL1, MMU on. + "3:", + "ldr x1, ={phys_offset}", + "add x20, x20, x1", + "mov sp, x20", + "add x19, x19, x1", + "adrp x1, {entry_el}", + "str x21, [x1, :lo12:{entry_el}]", + "bl {install}", + "mov x0, x19", + "mov x29, xzr", + "mov x30, xzr", + "bl {kernel_main}", + // EL3, or anything else: nothing here may run there. + "9:", + "wfe", + "b 9b", + kernel_memory = const offset_of!(KernelArgs, kernel_memory_addr), + stack_offset = const offset_of!(KernelArgs, kernel_stack_addr), + stack_size = const offset_of!(KernelArgs, kernel_stack_size), + root = const offset_of!(KernelArgs, boot_pml4_addr), + tcr = const regs::TCR, + ips = const regs::TCR_IPS_SHIFT, + mair = const regs::MAIR, + sctlr = const regs::SCTLR, + sctlr_off = const regs::SCTLR_MMU_OFF, + hcr = const regs::HCR_EL2, + cnthctl = const regs::CNTHCTL_EL2, + cptr = const regs::CPTR_EL2, + spsr = const regs::SPSR_EL2_TO_EL1, + phys_offset = const crate::PHYS_OFFSET, + entry_el = sym regs::ENTRY_EL, + install = sym super::trap::install, + kernel_main = sym crate::kernel_main, + ); +} + +/// The ACPI tables this architecture decodes: the MADT for its GIC and CPUs, +/// the FADT for PSCI and reset, the GTDT for the timer, the SPCR for the +/// console, and the MCFG for ECAM. +pub const ACPI_TABLES: &[&[u8; 4]] = &[b"APIC", b"FACP", b"GTDT", b"SPCR", b"MCFG"]; + +/// Before the panel is armed: nothing. The loader mapped the scanout with its +/// final memory type, Normal non-cacheable, and `MAIR_EL1` names that type +/// since the entry. +pub fn before_panel() {} + +/// Once the console and the boot parameter exist: the declaration read back, +/// and what this boot found — the memory map and the tables the rest of the +/// port reads. +pub fn after_console(args: &KernelArgs, maps: &[MemoryMapEntry]) { + regs::check(); + for entry in maps { + log!("memory: {:#014x}..{:#014x} uefi type {}", entry.start, entry.end, entry.uefi_type); + } + log!("memory: {} ranges, as the loader handed them over", maps.len()); + survey(args.rsdp_addr); + + // After the vectors and before anything else can fault: the earliest + // exception they must report. + if crate::actuator::test_early_fault() { + super::cpu::undefined_instruction(); + } +} + +/// The MADT's GIC structures and the GTDT's timers, decoded and said: what +/// the interrupt controller and the timer of stage 4 are built from. +fn survey(rsdp_addr: u64) { + match toyos_acpi::find_table(DirectPhys, rsdp_addr, b"APIC", toyos_acpi::MADT_ENTRIES) { + Ok(madt) => { + let (mut cpus, mut enabled) = (0u32, 0u32); + for item in toyos_acpi::madt_entries(&madt) { + match item { + Ok(MadtEntry::Gicc(gicc)) => { + cpus += 1; + enabled += u32::from(gicc.enabled); + log!( + "ACPI: MADT GICC uid={} mpidr={:#x} enabled={} gicr={:#x}", + gicc.uid, + gicc.mpidr, + gicc.enabled, + gicc.gicr_base + ); + } + Ok(MadtEntry::Gicd { base, version }) => { + log!("ACPI: MADT GICD at {base:#x}, GIC version {version}") + } + Ok(MadtEntry::Gicr { base, length }) => { + log!("ACPI: MADT GICR range {base:#x}+{length:#x}") + } + Ok(MadtEntry::Its { id, base }) => log!("ACPI: MADT ITS {id} at {base:#x}"), + Ok(MadtEntry::LocalApic { .. } + | MadtEntry::IoApic(_) + | MadtEntry::SourceOverride(_) + | MadtEntry::Other(_)) => {} + Err(halt) => { + log!( + "ACPI: MADT entry at +{} declares {} bytes of a {}-byte list — stopping", + halt.at, + halt.declared, + halt.list_len + ); + break; + } + } + } + log!("ACPI: MADT names {cpus} GIC CPU interfaces, {enabled} enabled"); + } + Err(e) => log!("ACPI: MADT unusable: {e:?}"), + } + match toyos_acpi::gtdt(DirectPhys, rsdp_addr) { + Ok(gtdt) => log!( + "ACPI: GTDT timers: EL1 physical GSIV {}, EL1 virtual GSIV {}, EL2 GSIV {} ({})", + gtdt.non_secure_el1.gsiv, + gtdt.virtual_el1.gsiv, + gtdt.el2.gsiv, + if gtdt.virtual_el1.edge() { "edge" } else { "level" }, + ), + Err(e) => log!("ACPI: GTDT unusable: {e:?}"), + } +} + +/// Physical memory only this architecture's boot uses: none. +pub fn reserved() -> Region { + Region { start: 0, end: 0 } +} + +/// What the boot learns bringing interrupts up and hands later steps. +pub struct Platform { + never: core::convert::Infallible, +} + +/// Interrupt delivery, this CPU's per-CPU block and the syscall gate. +pub fn interrupts(_rsdp_addr: u64) -> Platform { + owed!("interrupt delivery", "stage 4") +} + +/// The clock: the generic timer's counter at `CNTFRQ_EL0`. +pub fn clock(_args: &KernelArgs) { + owed!("the clock", "stage 4") +} + +/// The per-CPU timer. +pub fn timer() { + owed!("the timer", "stage 4") +} + +/// The platform's own devices that are not PCI functions: none this kernel +/// drives on an ACPI Arm machine. +pub fn platform_devices(_rsdp_addr: u64) {} + +/// Every other CPU, running. +pub fn start_other_cpus(platform: &Platform, _args: &KernelArgs) { + match platform.never {} +} + +/// The interrupt-controller selftests an actuator asks for. +#[cfg(feature = "boot-actuators")] +pub fn interrupt_selftests() { + owed!("the interrupt controller", "stage 4") +} diff --git a/kernel/src/arch/aarch64/cache.rs b/kernel/src/arch/aarch64/cache.rs new file mode 100644 index 00000000000..0b0e9df4d6e --- /dev/null +++ b/kernel/src/arch/aarch64/cache.rs @@ -0,0 +1,30 @@ +//! Writing memory back out of the caches, for the one reader that is not a +//! CPU: DRAM across a reset. + +/// The smallest data cache line on this machine, from `CTR_EL0.DminLine` +/// (log2 of the word count), so a walk by it misses no line. +fn line() -> u64 { + let ctr: u64; + // SAFETY: reads `CTR_EL0`, which EL1 may always read. + unsafe { core::arch::asm!("mrs {}, ctr_el0", out(reg) ctr, options(nomem, nostack, preserves_flags)) }; + 4 << ((ctr >> 16) & 0xF) +} + +/// Every line of `[at, at + len)` cleaned to the point of coherency and +/// invalidated before this returns: `DC CIVAC` by line, then `DSB SY` for +/// their completion. +/// +/// A reset invalidates the caches without writing them back, so a byte that +/// must outlive one has to reach DRAM first. +pub fn write_back(at: u64, len: usize) { + let step = line(); + let mut addr = at & !(step - 1); + while addr < at + len as u64 { + // SAFETY: `DC CIVAC` cleans and invalidates the line holding a mapped + // address the caller owns; it changes no memory's contents. + unsafe { core::arch::asm!("dc civac, {}", in(reg) addr, options(nostack, preserves_flags)) }; + addr += step; + } + // SAFETY: a barrier; waits for the maintenance above to complete. + unsafe { core::arch::asm!("dsb sy", options(nostack, preserves_flags)) }; +} diff --git a/kernel/src/arch/aarch64/console_uart.rs b/kernel/src/arch/aarch64/console_uart.rs new file mode 100644 index 00000000000..1241613b2cc --- /dev/null +++ b/kernel/src/arch/aarch64/console_uart.rs @@ -0,0 +1,77 @@ +//! The console UART: whichever PL011-shaped UART the SPCR places firmware's +//! console on. Firmware configured it (rate, framing, enable), and SPCR +//! describes that configuration, so this file programs nothing and only moves +//! bytes: a PL011's `UARTDR` and `UARTFR`, which the SBSA generic UART keeps +//! at the same offsets (Arm PL011 TRM r1p5, §3.3; Arm BSA 1.0, Appendix B). + +use core::sync::atomic::{AtomicU64, Ordering}; + +use toyos_acpi::{SerialInterface, GAS_SYSTEM_MEMORY}; + +use crate::drivers::acpi::DirectPhys; +use crate::log; +use crate::mm::{DirectMap, Mmio}; + +/// `UARTDR`, the data register, and `UARTFR`, the flag register. +const DR: u64 = 0x000; +const FR: u64 = 0x018; +/// `UARTFR.RXFE`: the receive FIFO is empty. `UARTFR.TXFF`: the transmit FIFO is full. +const FR_RXFE: u32 = 1 << 4; +const FR_TXFF: u32 = 1 << 5; +/// One 4 KiB register frame, which is what both UARTs decode. +const FRAME: u64 = 0x1000; + +/// The register frame's physical address; zero until [`init`] found one. +static BASE: AtomicU64 = AtomicU64::new(0); + +fn regs() -> Mmio { + let base = BASE.load(Ordering::Relaxed); + assert!(base != 0, "console UART: a byte moved before `init` found the UART"); + Mmio::new(DirectMap::from_phys(base), FRAME) +} + +/// Find the UART SPCR names and answer whether it is one this file drives. +pub fn init(rsdp_addr: u64) -> bool { + let spcr = match toyos_acpi::spcr(DirectPhys, rsdp_addr) { + Ok(spcr) => spcr, + Err(e) => { + log!("serial: no console UART, because the SPCR is unusable: {e:?}"); + return false; + } + }; + let kind = match spcr.interface { + SerialInterface::Pl011 => "PL011", + SerialInterface::SbsaGeneric | SerialInterface::SbsaGeneric32 => "SBSA generic UART", + SerialInterface::Ns16550 | SerialInterface::Other(_) => { + log!("serial: SPCR names a {:?} UART, which this kernel does not drive on AArch64", spcr.interface); + return false; + } + }; + if spcr.base.space != GAS_SYSTEM_MEMORY || spcr.base.address == 0 { + log!("serial: SPCR places the {kind} at {:?}, which is not a memory-mapped frame", spcr.base); + return false; + } + BASE.store(spcr.base.address, Ordering::Relaxed); + log!("serial: {kind} at {:#x} (SPCR, GSIV {})", spcr.base.address, spcr.gsiv); + true +} + +/// Whether a received byte waits. +pub fn rx_ready() -> bool { + regs().read_u32(FR) & FR_RXFE == 0 +} + +/// The received byte; only after [`rx_ready`] said one waits. +pub fn read_byte() -> u8 { + regs().read_u32(DR) as u8 +} + +/// Whether the transmitter will take a byte. +pub fn tx_ready() -> bool { + regs().read_u32(FR) & FR_TXFF == 0 +} + +/// Put one byte in the transmitter; only after [`tx_ready`], or the byte may be lost. +pub fn write_byte(byte: u8) { + regs().write_u32(DR, u32::from(byte)); +} diff --git a/kernel/src/arch/aarch64/control_regs.rs b/kernel/src/arch/aarch64/control_regs.rs new file mode 100644 index 00000000000..9844eaf7fad --- /dev/null +++ b/kernel/src/arch/aarch64/control_regs.rs @@ -0,0 +1,102 @@ +//! What the EL1 system registers hold on every CPU in this machine, and what +//! EL2 is left holding when the kernel is entered there. One declaration: +//! [`super::boot`]'s entry writes every register here whole, from these +//! constants, before the MMU is on; [`check`] reads the EL1 ones back and +//! refuses a CPU whose registers say anything else. Nothing else writes any +//! of them. +//! +//! Field positions are Arm ARM K.a, chapter D24 (the register descriptions). + +use core::sync::atomic::{AtomicU64, Ordering}; + +use crate::log; + +/// `MAIR_EL1`: the three memory types the loader's tables and this kernel +/// map with, by `AttrIndx` — declared once, beside the descriptors that name them. +pub use toyos_bootmap::aarch64::MAIR; + +/// `SCTLR_EL1`: MMU on (`M`), data and instruction caches on (`C`, `I`), +/// stack alignment checked at EL1 and EL0 (`SA`, `SA0`), AArch32 EL0's `IT` +/// and `SETEND` disabled (`ITD`, `SED` — RES1 on a CPU with no AArch32 EL0, +/// and nothing this kernel runs is AArch32), over the bits Armv8.0 makes +/// RES1 (29, 28, 23, 22, 20, 11). `WXN` stays clear: the +/// loader's blocks are writable and executable both until the kernel owns +/// its tables. Little-endian at both levels; EL0's cache maintenance and +/// `WFI`/`WFE` trap. +pub const SCTLR: u64 = SCTLR_RES1 | 1 << 0 | 1 << 2 | 1 << 3 | 1 << 4 | 1 << 7 | 1 << 8 | 1 << 12; + +/// `SCTLR_EL1` with the MMU and caches off — [`SCTLR`] less `M`, `C`, `I`, +/// `SA` and `SA0` — the only other value the entry writes: what a CPU entered at EL1 under firmware's tables is put through +/// before its translation registers change. +pub const SCTLR_MMU_OFF: u64 = SCTLR_RES1 | 1 << 7 | 1 << 8; + +const SCTLR_RES1: u64 = 1 << 29 | 1 << 28 | 1 << 23 | 1 << 22 | 1 << 20 | 1 << 11; + +/// `TCR_EL1` but for `IPS`: 48-bit regions from both tables (`T0SZ` = `T1SZ` = +/// 16), 4 KiB granules (`TG0` = 0, `TG1` = 2), walks inner-shareable and +/// write-back write-allocate cacheable, 8-bit ASIDs. +pub const TCR: u64 = 16 | 1 << 8 | 1 << 10 | 3 << 12 | 16 << 16 | 1 << 24 | 1 << 26 | 3 << 28 | 2 << 30; + +/// `TCR_EL1.IPS`'s position: the output address size, taken from +/// `ID_AA64MMFR0_EL1.PARange` (the same encoding), because a larger `IPS` +/// than the CPU implements is a reserved value. +pub const TCR_IPS_SHIFT: u64 = 32; + +/// `CPACR_EL1`: `FPEN` = 0, so FP and SIMD trap at EL1 and EL0. The kernel is +/// built soft-float and uses neither; user mode's are stage 7's. +pub const CPACR: u64 = 0; + +/// `HCR_EL2` when entered at EL2: `RW`, so EL1 is AArch64, and nothing else — +/// no stage-2 translation, no trap, `E2H` clear. +pub const HCR_EL2: u64 = 1 << 31; + +/// `CNTHCTL_EL2` when entered at EL2: `EL1PCTEN` and `EL1PCEN`, so EL1 reads the +/// physical counter and programs its timer without trapping. +pub const CNTHCTL_EL2: u64 = 1 << 1 | 1 << 0; + +/// `CPTR_EL2` when entered at EL2 (`E2H` clear): its RES1 bits (13, 12, 9:0) +/// and `TFP` clear, so FP is `CPACR_EL1`'s decision alone. +pub const CPTR_EL2: u64 = 0x33FF; + +/// `SPSR_EL2` for the drop: EL1 on `SP_EL1` (`M` = 0b0101), `D`, `A`, `I`, `F` masked. +pub const SPSR_EL2_TO_EL1: u64 = 0x3C5; + +/// The exception level the loader entered the kernel at, as the entry recorded it. +pub static ENTRY_EL: AtomicU64 = AtomicU64::new(0); + +/// One EL1 system register, read. +macro_rules! read { + ($reg:literal) => {{ + let value: u64; + // SAFETY: reads an EL1 system register, which EL1 may always read. + unsafe { core::arch::asm!(concat!("mrs {}, ", $reg), out(reg) value, options(nomem, nostack, preserves_flags)) }; + value + }}; +} + +/// `TCR_EL1` whole, as this CPU's physical address range makes it. +pub fn tcr() -> u64 { + TCR | (read!("id_aa64mmfr0_el1") & 0xF) << TCR_IPS_SHIFT +} + +/// Read every EL1 register the declaration names back, and refuse a CPU that +/// holds anything else; then say what it holds. +pub fn check() { + let declared = [ + ("SCTLR_EL1", read!("sctlr_el1"), SCTLR), + ("TCR_EL1", read!("tcr_el1"), tcr()), + ("MAIR_EL1", read!("mair_el1"), MAIR), + ("CPACR_EL1", read!("cpacr_el1"), CPACR), + ]; + for (name, live, value) in declared { + assert_eq!(live, value, "control registers: {name} holds {live:#x}, and the declaration says {value:#x}"); + } + let el = ENTRY_EL.load(Ordering::Relaxed); + log!( + "control registers: SCTLR_EL1={SCTLR:#x} TCR_EL1={:#x} MAIR_EL1={:#x} CPACR_EL1={CPACR:#x}, \ + as declared; entered at EL{el}{}", + tcr(), + MAIR, + if el == 2 { ", HCR_EL2/CNTHCTL_EL2/CPTR_EL2 written as declared and dropped to EL1" } else { "" }, + ); +} diff --git a/kernel/src/arch/aarch64/cpu.rs b/kernel/src/arch/aarch64/cpu.rs new file mode 100644 index 00000000000..cfe942ddd0c --- /dev/null +++ b/kernel/src/arch/aarch64/cpu.rs @@ -0,0 +1,118 @@ +//! The CPU's own registers and instructions, as generic code names them. + +use core::arch::asm; + +/// The CPU's free-running counter: the generic timer's virtual count, +/// `CNTVCT_EL0`. The `ISB` keeps the read from being taken early, ahead of +/// the code it times (Arm ARM K.a, D12.2.2). +#[inline] +pub fn counter() -> u64 { + let count: u64; + // SAFETY: reads a counter EL1 may always read; the `ISB` touches nothing. + unsafe { asm!("isb", "mrs {}, cntvct_el0", out(reg) count, options(nomem, nostack, preserves_flags)) }; + count +} + +/// The counter's frequency as firmware states it in `CNTFRQ_EL0`, which the +/// Arm ARM makes firmware's duty to program. Zero states nothing. +pub fn stated_counter_hz() -> Option { + let hz: u64; + // SAFETY: reads a register EL1 may always read. + unsafe { asm!("mrs {}, cntfrq_el0", out(reg) hz, options(nomem, nostack, preserves_flags)) }; + (hz != 0).then_some(hz) +} + +/// This function's caller's frame pointer: `x29`, which `-Cforce-frame-pointers=yes` makes one. +#[inline(always)] +pub fn frame_pointer() -> u64 { + let fp: u64; + // SAFETY: register-to-register move only. + unsafe { asm!("mov {}, x29", out(reg) fp, options(nomem, nostack, preserves_flags)) }; + fp +} + +/// The stack pointer this code is running on. +#[inline(always)] +pub fn stack_pointer() -> u64 { + let sp: u64; + // SAFETY: register-to-register move only. + unsafe { asm!("mov {}, sp", out(reg) sp, options(nomem, nostack, preserves_flags)) }; + sp +} + +/// Raise the architecture's undefined-instruction exception here: `UDF`, whose +/// synchronous exception the vectors catch as the kernel's own fault. +pub fn undefined_instruction() { + // SAFETY: `UDF` reads and writes nothing and raises an exception the + // installed vectors report. + unsafe { asm!("udf #0", options(nomem, nostack)) }; +} + +/// The thread pointer this CPU is running with: `TPIDR_EL0`, which user TLS is addressed from. +#[inline] +pub fn thread_pointer() -> u64 { + let tp: u64; + // SAFETY: reads a register EL1 may always read. + unsafe { asm!("mrs {}, tpidr_el0", out(reg) tp, options(nomem, nostack, preserves_flags)) }; + tp +} + +/// Unmask interrupts on this CPU: `DAIF.I` and `DAIF.F`. +pub fn enable_interrupts() { + // SAFETY: writes two `DAIF` bits; a compiler barrier, so no access moves across it. + unsafe { asm!("msr daifclr, #3", options(nostack)) }; +} + +/// Mask interrupts on this CPU. +pub fn disable_interrupts() { + // SAFETY: writes two `DAIF` bits; a compiler barrier, so no access moves across it. + unsafe { asm!("msr daifset, #3", options(nostack)) }; +} + +/// Whether this CPU takes interrupts: `DAIF.I` clear. +pub fn interrupts_enabled() -> bool { + let daif: u64; + // SAFETY: reads `DAIF`. + unsafe { asm!("mrs {}, daif", out(reg) daif, options(nomem, nostack, preserves_flags)) }; + daif & (1 << 7) == 0 +} + +/// Stop this CPU for good: interrupts masked, then `WFI` forever. A wake +/// that arrives anyway lands back in the loop. +pub fn halt() -> ! { + disable_interrupts(); + loop { + // SAFETY: waits for an event; touches no memory. + unsafe { asm!("wfi", options(nomem, nostack, preserves_flags)) }; + } +} + +/// Leave the current stack for good and run `func` on the one ending at `top`, +/// with a zeroed frame chain so a panic there backtraces instead of walking off +/// the top. +/// # Safety +/// Nothing on the current stack is live past this call, and `top` is the end of +/// a 16-byte-aligned stack this CPU owns. +pub unsafe fn run_on_stack(top: u64, func: extern "C" fn() -> !) -> ! { + // SAFETY: the caller's contract. + unsafe { + asm!( + "mov sp, {sp}", + "mov x29, xzr", + "mov x30, xzr", + "br {func}", + sp = in(reg) top, + func = in(reg) func as *const () as usize, + options(noreturn), + ); + } +} + +/// This CPU's hardware identity: `MPIDR_EL1`'s four affinity fields, packed +/// into 32 bits (`Aff3:Aff2:Aff1:Aff0`), readable before any per-CPU state exists. +pub fn hardware_id() -> u32 { + let mpidr: u64; + // SAFETY: reads an ID register. + unsafe { asm!("mrs {}, mpidr_el1", out(reg) mpidr, options(nomem, nostack, preserves_flags)) }; + ((mpidr & 0xFF_FFFF) | ((mpidr >> 8) & 0xFF00_0000)) as u32 +} diff --git a/kernel/src/arch/aarch64/entropy.rs b/kernel/src/arch/aarch64/entropy.rs new file mode 100644 index 00000000000..fb564800f1b --- /dev/null +++ b/kernel/src/arch/aarch64/entropy.rs @@ -0,0 +1,43 @@ +//! The CPU's own random source: `RNDR`, where `ID_AA64ISAR0_EL1.RNDR` says +//! there is one. A machine without it (QEMU under HVF is one) draws from +//! virtio-rng instead, which the port's stage 6 brings up. + +/// How often a caller may ask before taking "no data" as the answer: `RNDR` +/// reports a transient failure through `NZCV`, as `RDRAND` does through `CF`. +pub const ATTEMPTS: u32 = 10; + +fn has_rndr() -> bool { + let isar0: u64; + // SAFETY: reads an ID register; touches nothing. + unsafe { + core::arch::asm!("mrs {}, id_aa64isar0_el1", out(reg) isar0, options(nomem, nostack, preserves_flags)) + }; + (isar0 >> 60) & 0xF != 0 +} + +/// Whether this CPU can draw at all, or why not. +pub fn available() -> Result<(), &'static str> { + if has_rndr() { + Ok(()) + } else { + Err("ID_AA64ISAR0_EL1.RNDR is zero, so this CPU has no RNDR, and virtio-rng is the port's stage 6") + } +} + +/// One drawn `u64`, or `None` when the source had nothing to give; never waits. +pub fn draw() -> Option { + let value: u64; + let failed: u64; + // SAFETY: `RNDR` (`S3_3_C2_C4_0`) reads a random number, setting `Z` on + // failure; `available` said the register exists before any caller draws. + unsafe { + core::arch::asm!( + "mrs {value}, s3_3_c2_c4_0", + "cset {failed}, eq", + value = out(reg) value, + failed = out(reg) failed, + options(nomem, nostack), + ) + }; + (failed == 0).then_some(value) +} diff --git a/kernel/src/arch/aarch64/entry.rs b/kernel/src/arch/aarch64/entry.rs new file mode 100644 index 00000000000..8207fc9d14b --- /dev/null +++ b/kernel/src/arch/aarch64/entry.rs @@ -0,0 +1,27 @@ +//! Where a new context starts: the frame `switch` restores and the +//! trampolines to user mode and to a kernel thread, the port's stages 4 and 7. + + +pub(crate) extern "C" fn process_start() { + owed!("user mode", "stage 7") +} + +pub(crate) extern "C" fn thread_start() { + owed!("user mode", "stage 7") +} + +pub(crate) extern "C" fn kernel_start() { + owed!("kernel threads", "stage 4") +} + +/// # Safety +/// `top` is the end of a fresh kernel stack nothing else references. +pub unsafe fn initial_frame( + _top: u64, + _trampoline: unsafe extern "C" fn(), + _user_entry: u64, + _user_sp: u64, + _arg: u64, +) -> u64 { + owed!("kernel threads", "stage 4") +} diff --git a/kernel/src/arch/aarch64/fpu.rs b/kernel/src/arch/aarch64/fpu.rs new file mode 100644 index 00000000000..1613f2f8d5b --- /dev/null +++ b/kernel/src/arch/aarch64/fpu.rs @@ -0,0 +1,2 @@ +//! User FP/SIMD state: `CPACR_EL1.FPEN` traps it at EL1 and EL0 until the +//! port's stage 7 saves and restores it. The kernel itself never uses it. diff --git a/kernel/src/arch/aarch64/hw.rs b/kernel/src/arch/aarch64/hw.rs new file mode 100644 index 00000000000..472b8b6a4b4 --- /dev/null +++ b/kernel/src/arch/aarch64/hw.rs @@ -0,0 +1,82 @@ +//! `KernelHw` — the kernel's side of the scheduler-core hardware boundary: +//! the generic timer, SGIs, `WFI` and the context switch, the port's stage 4. + +use toyos_sched::cpu::RunToken; +use toyos_sched::hw::{CpuId, Hw, Kicker, Machine, Nanos, TraceEvent}; +use toyos_sched::task::{TaskAccounting, TaskKey}; + +use crate::sched::payload::KernelPayload; + +/// The one instance; zero-sized, holds no per-CPU state. +pub static HW: KernelHw = KernelHw; + +pub struct KernelHw; + +/// The scheduler clock, in raw nanoseconds. +pub fn now_ns() -> u64 { + HW.now().0 +} + +impl Kicker for KernelHw { + fn kick(&self, _target: CpuId) { + owed!("the interrupt controller", "stage 4") + } +} + +impl Machine for KernelHw { + type IrqGuard = crate::arch::IrqGuard; + + fn now(&self) -> Nanos { + Nanos(crate::clock::nanos_since_boot()) + } + + fn set_timer(&self, _deadline: Nanos) { + owed!("the timer", "stage 4") + } + + fn stop_timer(&self) { + owed!("the timer", "stage 4") + } + + fn irq_guard(&self) -> crate::arch::IrqGuard { + crate::arch::IrqGuard::close() + } + + fn halt(&self) { + owed!("the interrupt controller", "stage 4") + } + + fn need_resched(&self, _cpu: CpuId) { + owed!("the interrupt controller", "stage 4") + } + + fn trace(&self, ev: TraceEvent) { + crate::trace::record(ev); + } +} + +impl Hw for KernelHw { + type Payload = KernelPayload; + + unsafe fn switch(&self, _token: RunToken) { + owed!("the context switch", "stage 4") + } + + fn release(&self, _key: TaskKey, _payload: KernelPayload, _acct: TaskAccounting) { + owed!("the context switch", "stage 4") + } +} + +/// What every kernel crash says about the machine's contexts: until stage 4 +/// switches any, only the memory facts. Never owed: a crash report that +/// panicked would bury the crash. +pub fn report_contexts(sp: u64, _subject: Option) { + crate::log!(" Contexts: the boot CPU crashed at sp={sp:#018x}; no context has been switched"); + crate::mm::report_on_crash(); +} + +/// AMD's `SYSRET` erratum has no AArch64 counterpart; the probe is x86-64's. +#[cfg(feature = "boot-actuators")] +pub fn sysret_ss_probe(_parkable: &crate::scheduler::Parkable) { + crate::log!("sysret-ss: AArch64 has no SYSRET, so there is no SS to probe"); +} diff --git a/kernel/src/arch/aarch64/iommu_unit.rs b/kernel/src/arch/aarch64/iommu_unit.rs new file mode 100644 index 00000000000..ce36f6dfd12 --- /dev/null +++ b/kernel/src/arch/aarch64/iommu_unit.rs @@ -0,0 +1,73 @@ +//! The IOMMU: an SMMUv3 the IORT names, the port's stage 6. Until then no +//! unit exists, and [`init`] says so; a domain is refused rather than built. + +use crate::drivers::pci::PciDevice; +use crate::log; + +pub fn init(_rsdp_addr: u64, _devices: &[PciDevice]) { + log!("IOMMU: the SMMUv3 is the port's stage 6; no device is translated this boot"); +} + +pub mod domain { + use crate::iommu::{DomainId, IommuError, Iova, StreamId}; + + /// No unit is driven, so there is no domain to give. + pub fn create() -> Result { + Err(IommuError::NoUnit) + } + + pub fn map(_id: DomainId, _phys: u64, _bytes: u64) -> Result { + unreachable!("no domain exists: `create` refuses every one") + } + + pub fn map_at(_id: DomainId, _at: Iova, _phys: u64, _bytes: u64) -> Result<(), IommuError> { + unreachable!("no domain exists: `create` refuses every one") + } + + pub fn unmap(_id: DomainId, _at: Iova, _bytes: u64) -> Result<(), IommuError> { + unreachable!("no domain exists: `create` refuses every one") + } + + pub fn attach(_stream: StreamId, _id: DomainId) { + unreachable!("no domain exists: `create` refuses every one") + } +} + +pub mod interrupt { + use crate::iommu::{Refused, StreamId}; + + pub struct Msi { + pub address: u32, + pub data: u32, + } + + pub struct Pin { + pub low: u32, + pub high: u32, + } + + /// No unit, so nothing remaps: callers deliver directly. + pub fn is_armed() -> bool { + false + } + + pub fn msi(_source: StreamId, _vector: u8, _dest: u32) -> Result { + unreachable!("no interrupt remapping without an IOMMU unit, and `is_armed` said so") + } + + pub fn pin(_apic_id: u8, _vector: u8, _dest: u32, _level: bool) -> Result { + unreachable!("no interrupt remapping without an IOMMU unit, and `is_armed` said so") + } +} + +pub mod fault { + use crate::iommu::StreamId; + + pub fn user_owned(_stream: StreamId, _slot: Option) { + owed!("SMMUv3 fault reporting", "stage 6") + } + + pub fn service() { + owed!("SMMUv3 fault reporting", "stage 6") + } +} diff --git a/kernel/src/arch/aarch64/irqchip.rs b/kernel/src/arch/aarch64/irqchip.rs new file mode 100644 index 00000000000..3edc03a567a --- /dev/null +++ b/kernel/src/arch/aarch64/irqchip.rs @@ -0,0 +1,31 @@ +//! The interrupt controller: a GICv3 — distributor, one redistributor per CPU +//! and an ITS for MSIs — the port's stage 4. Until then no interrupt is +//! delivered, and every way of raising one is owed. + + +/// Wake `cpu` so it runs a scheduler pass: an SGI. +pub fn kick_cpu(_cpu: u32) { + owed!("the interrupt controller", "stage 4") +} + +pub fn kick_all_but_self() { + owed!("the interrupt controller", "stage 4") +} + +/// Raise `vector` on this CPU. +pub fn send_self(_vector: u8) { + owed!("the interrupt controller", "stage 4") +} + +/// A pseudo-NMI to `cpu`. +pub fn send_nmi(_cpu: u32) { + owed!("the interrupt controller", "stage 4") +} + +/// This CPU's timer, armed to fire within `nanos`. +pub fn arm_within(_nanos: u64) { + owed!("the timer", "stage 4") +} + +/// Nothing to stop: before stage 5 the boot CPU is the only one running. +pub fn stop_other_cpus() {} diff --git a/kernel/src/arch/aarch64/keyboard_controller.rs b/kernel/src/arch/aarch64/keyboard_controller.rs new file mode 100644 index 00000000000..ef6462509b8 --- /dev/null +++ b/kernel/src/arch/aarch64/keyboard_controller.rs @@ -0,0 +1,18 @@ +//! The platform's own keyboard controller. An Arm machine has none: its +//! keyboards are USB, and the panic panel's key poll reads nothing here. + +/// No byte ever waits. +pub fn poll_byte() -> Option<(u8, bool)> { + None +} + +/// Nothing to decide about a controller that is not there. +pub fn verdict_due() -> bool { + false +} + +/// Nothing to service. +pub fn service() {} + +/// Nothing to report. +pub fn report_line() {} diff --git a/kernel/src/arch/aarch64/mod.rs b/kernel/src/arch/aarch64/mod.rs index 2d602efa5bc..1ac0e061e99 100644 --- a/kernel/src/arch/aarch64/mod.rs +++ b/kernel/src/arch/aarch64/mod.rs @@ -1,23 +1,128 @@ -//! AArch64. -pub mod barrier {} -pub mod boot {} -pub mod cache {} -pub mod cpu {} -pub mod entry {} -pub mod fpu {} -pub mod hw {} -pub mod irqchip {} -pub mod keyboard_controller {} -pub mod iommu_unit {} -pub mod paging {} -pub mod percpu {} -pub mod rtc {} -pub mod smp {} -pub mod syscall {} -pub mod tlb {} -pub mod trap {} -pub mod watchdog {} -pub mod control_regs {} +#![warn(clippy::undocumented_unsafe_blocks)] +//! AArch64: the Arm A-profile at EL1, found and described through ACPI. +//! +//! Every `unsafe` block here carries a one-line `SAFETY:` comment, enforced by the lint above. +//! +//! **What exists and what is owed.** The boot reaches its console: the entry +//! drops from EL2, applies the control-register declaration, turns on the +//! loader's tables and installs the exception vectors; the PL011 is found +//! through SPCR. Everything the kernel does after the console — the interrupt +//! controller, the timer, its own page tables, other CPUs, user mode — is +//! owed by a stage of the port (`issues/kernel/toyos-runs-on-arm64.md`), and +//! each item that stands for it here is an [`owed!`] that panics naming it. A kernel that reaches +//! one stops loudly on its panel; none of them returns a guess. + +/// Stands for work the port owes: panics naming what and which stage of the +/// track owns it (`issues/kernel/toyos-runs-on-arm64.md`), or that none does yet. +macro_rules! owed { + ($what:literal, $stage:literal) => { + panic!(concat!("aarch64: ", $what, ": owed by ", $stage)) + }; +} + +pub mod barrier; +pub mod boot; +pub mod cache; +pub mod console_uart; +pub mod control_regs; +pub mod cpu; +pub mod entropy; +pub mod entry; +pub mod fpu; +pub mod hw; +pub mod iommu_unit; +pub mod irqchip; +pub mod keyboard_controller; +pub mod paging; +pub mod percpu; +pub mod pio; +pub mod pmu; +pub mod rtc; +pub mod smp; +pub mod syscall; +pub mod tlb; +pub mod trap; +pub mod watchdog; /// The machine every program image this kernel loads must be built for. pub const ELF_MACHINE: toyos_elf::Machine = toyos_elf::Machine::Aarch64; + +/// A message-signalled interrupt's address and data for `vector` on CPU +/// `dest`. On AArch64 the doorbell is an ITS's `GITS_TRANSLATER`, one per ITS +/// the MADT names, and the data is an event the ITS maps: stage 4 builds both. +pub fn msi_message(_dest: u32, _vector: u8) -> (u32, u32) { + owed!("an MSI doorbell (the GICv3 ITS)", "stage 4") +} + +/// Interrupts masked on this CPU for as long as the guard lives, and then put +/// back as they were — restored, not enabled — so a guard nests inside a region +/// that is already masked. `DAIF`'s `I` and `F` are what it closes; `D` and `A` +/// are the boot's and it leaves them alone. +/// +/// Both edges are compiler barriers (no `nomem`): a memory access written +/// inside the region is emitted inside it. +#[must_use = "dropping the guard reopens interrupts"] +pub struct IrqGuard { + daif: u64, + // Same-CPU only: keeps this guard `!Send + !Sync`. + _not_send_sync: core::marker::PhantomData<*mut ()>, +} + +impl IrqGuard { + pub fn close() -> Self { + let daif: u64; + // SAFETY: reads `DAIF` and sets its `I` and `F` bits; touches nothing else. + unsafe { + core::arch::asm!("mrs {saved}, daif", "msr daifset, #3", saved = out(reg) daif); + } + Self { daif, _not_send_sync: core::marker::PhantomData } + } + + /// The mask captured and interrupts left as they are: what the + /// `log-unbracketed-reserve` actuator stages a log reservation with. + #[cfg(feature = "boot-actuators")] + pub fn unclosed() -> Self { + let daif: u64; + // SAFETY: reads `DAIF` and writes nothing. + unsafe { + core::arch::asm!("mrs {saved}, daif", saved = out(reg) daif); + } + Self { daif, _not_send_sync: core::marker::PhantomData } + } +} + +impl Drop for IrqGuard { + fn drop(&mut self) { + // SAFETY: the word `close` read out of `DAIF` on this CPU (the guard is + // `!Send`), restored whole. + unsafe { + core::arch::asm!("msr daif, {saved}", saved = in(reg) self.daif); + } + } +} + +/// Adds one to `counter`, atomic against an interrupt on this CPU, and answers the value before the add. +/// # Safety: `counter` is written by no other CPU; `guard` covers the shard selection that owns it. +#[inline(always)] +pub unsafe fn percpu_fetch_add( + counter: &core::sync::atomic::AtomicU64, + _guard: &IrqGuard, +) -> u64 { + let previous = counter.load(core::sync::atomic::Ordering::Relaxed); + // Under `log-shared-reservation`, open the window the guard closes, so a + // nested record can land between the load and the store. + if crate::actuator::log_shared_reservation() && crate::log::nested::inject() { + // SAFETY: each writes `DAIF.I` and touches no memory. + unsafe { + core::arch::asm!("msr daifclr, #2"); + for _ in 0..256 { + core::hint::spin_loop(); + } + core::arch::asm!("msr daifset, #2"); + } + } + // A load and a store, not an atomic add: the guard masks the only other + // writer this CPU has, and no other CPU writes the counter. + counter.store(previous + 1, core::sync::atomic::Ordering::Relaxed); + previous +} diff --git a/kernel/src/arch/aarch64/paging.rs b/kernel/src/arch/aarch64/paging.rs new file mode 100644 index 00000000000..fe72ef6d093 --- /dev/null +++ b/kernel/src/arch/aarch64/paging.rs @@ -0,0 +1,194 @@ +//! Page tables. The boot runs on the loader's: one L0 table that `TTBR0_EL1` +//! walks for the identity view and `TTBR1_EL1` for the view at `PHYS_OFFSET`, +//! 2 MiB blocks whose `AttrIndx` names [`super::control_regs`]'s `MAIR_EL1`. +//! The kernel's own tables — the direct map, MMIO windows, and a user +//! address space per process with an ASID — are the port's stage 4, so an +//! [`AddressSpace`] cannot exist yet: the type is uninhabited, and every +//! method on it is a match on nothing. + +use core::convert::Infallible; + +use crate::mm::UserAddr; +pub use crate::mm::policy::{CachePolicy, MmioPolicy, Prot, WindowProt}; +use crate::sync::Lock; +use crate::vma::{Occupancy, Region, RegionKind}; +use crate::MemoryMapEntry; + +/// A translation table base: what `TTBR0_EL1` is loaded with for a space. +#[derive(Clone, Copy)] +pub struct Root(Infallible); + +impl Root { + pub fn phys(self) -> u64 { + match self.0 {} + } + + /// # Safety + /// The underlying page tables must be valid and live. + pub unsafe fn activate(self) { + match self.0 {} + } +} + +/// A process's address space: its regions and the tables that map them. +pub struct AddressSpace { + never: Infallible, +} + +impl AddressSpace { + pub fn new_user() -> Option { + owed!("a user address space", "stage 4") + } + + pub fn root(&self) -> Root { + match self.never {} + } + + pub fn map_range(&mut self, _vaddr: UserAddr, _phys: u64, _size: u64, _prot: Prot, _cache: CachePolicy) { + match self.never {} + } + + pub fn remap(&mut self, _vaddr: UserAddr, _phys: u64, _prot: Prot) { + match self.never {} + } + + pub fn map_window(&mut self, _vaddr: UserAddr, _phys: u64, _prot: &WindowProt) { + match self.never {} + } + + pub fn map_window_if_absent(&mut self, _vaddr: UserAddr, _phys: u64, _prot: &WindowProt) -> bool { + match self.never {} + } + + pub fn unmap(&mut self, _vaddr: UserAddr) { + match self.never {} + } + + pub fn translate(&self, _vaddr: UserAddr) -> Option { + match self.never {} + } + + pub fn alloc_region(&mut self, _size: u64, _kind: RegionKind) -> Option { + match self.never {} + } + + pub fn alloc_and_map( + &mut self, + _phys: u64, + _size: u64, + _prot: Prot, + _cache: CachePolicy, + ) -> Option<(UserAddr, u64)> { + match self.never {} + } + + pub fn free_and_unmap(&mut self, _addr: UserAddr) -> Option { + match self.never {} + } + + pub fn insert_region(&mut self, _addr: UserAddr, _region: Region) { + match self.never {} + } + + pub fn find_region(&self, _addr: UserAddr) -> Option<(UserAddr, &Region)> { + match self.never {} + } + + pub fn occupancy(&self, _addr: UserAddr, _size: u64) -> Occupancy { + match self.never {} + } + + pub fn overlapping_regions( + &self, + _start: UserAddr, + _end: UserAddr, + ) -> impl Iterator { + match self.never {} + #[allow(unreachable_code)] + core::iter::empty() + } + + pub fn direct_map_policy(&self, _phys: u64) -> Option { + match self.never {} + } + + pub fn user_policy(&self, _addr: UserAddr) -> Option { + match self.never {} + } + + pub fn guard_4k(&mut self, _phys: u64) { + match self.never {} + } +} + +pub fn kernel() -> &'static alloc::sync::Arc> { + owed!("the kernel's page tables", "stage 4") +} + +pub fn kernel_root() -> Root { + owed!("the kernel's page tables", "stage 4") +} + +pub fn activate_kernel() { + owed!("the kernel's page tables", "stage 4") +} + +pub fn map_mmio(_phys: u64, _size: u64, _policy: MmioPolicy) -> crate::mm::Mmio { + owed!("the kernel's page tables", "stage 4") +} + +pub(crate) fn init(_memory_map: &[MemoryMapEntry]) { + owed!("the kernel's page tables", "stage 4") +} + +/// `PAR_EL1` after the MMU translated `addr` for an EL1 read in the tables +/// this CPU runs on now (`AT S1E1R`; Arm ARM K.a, C6.2.x and D24.2.131): +/// bit 0 set is a fault, and otherwise bits 63:56 are the memory type. +fn translate_read(addr: u64) -> u64 { + let par: u64; + // SAFETY: `AT` translates without accessing memory and reports through + // `PAR_EL1`; the `ISB` makes the result the one read back. + unsafe { + core::arch::asm!( + "at s1e1r, {addr}", + "isb", + "mrs {par}, par_el1", + addr = in(reg) addr, + par = out(reg) par, + options(nostack, preserves_flags), + ); + } + par +} + +/// Whether `addr` translates for a read in the tables this CPU runs on now: +/// the MMU's own answer, so broken tables become "not present" and never a +/// fault here. +pub fn present_in_current_tables(addr: u64) -> bool { + translate_read(addr) & 1 == 0 +} + +/// Whether the scanout is write-combining at both of its addresses already: +/// on AArch64 that is Normal non-cacheable, whose stores gather, and the +/// loader maps it so. Asked of the MMU page by page rather than assumed, and +/// nothing is retyped: the type the loader wrote is the final one. +pub fn boot_map_write_combining(phys: u64, size: u64) -> bool { + [phys, crate::mm::PHYS_OFFSET + phys].iter().all(|&base| { + (0..size.div_ceil(4096)).all(|page| { + let par = translate_read(base + page * 4096); + // Outer Normal non-cacheable, and an inner nibble that says the same: + // 0b0100 as `MAIR_EL1` spells it, or 0b0000, which is how a CPU may + // report an inner Non-cacheable attribute in `PAR_EL1` (HVF on Apple + // silicon does), and which `MAIR_EL1` itself never holds for Normal. + let (outer, inner) = ((par >> 60) & 0xF, (par >> 56) & 0xF); + par & 1 == 0 && outer == 0b0100 && (inner == 0b0100 || inner == 0) + }) + }) +} + +/// What memory type the scanout is mapped with, for the GPU's report. +pub fn scanout_memory_type(_addr: u64, _size: u64) -> impl core::fmt::Display { + owed!("the kernel's page tables", "stage 4"); + #[allow(unreachable_code)] + "" +} diff --git a/kernel/src/arch/aarch64/percpu.rs b/kernel/src/arch/aarch64/percpu.rs new file mode 100644 index 00000000000..d9f26a7df18 --- /dev/null +++ b/kernel/src/arch/aarch64/percpu.rs @@ -0,0 +1,118 @@ +//! Per-CPU state. On AArch64 it is reached through `TPIDR_EL1`, and the block +//! it names is built by the port's stage 5 (other CPUs) on top of stage 4's +//! exception entry; until then every accessor is owed. The boot never reaches +//! one: the log and the panic path read [`crate::log::PERCPU_READY`] first. + +use crate::process::{Pid, Tid}; + +/// Per-CPU fault state machine for the escalation policy on nested faults. +#[repr(u8)] +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum CpuFaultState { + Normal = 0, + PageFault = 1, + Fatal = 2, + Panic = 3, +} + +pub fn cpu_id() -> u32 { + owed!("per-CPU state", "stage 4") +} + +pub fn current_tid() -> Option { + owed!("per-CPU state", "stage 4") +} + +pub fn set_current_tid(_tid: Option) { + owed!("per-CPU state", "stage 4") +} + +pub fn current_pid() -> Option { + owed!("per-CPU state", "stage 4") +} + +pub fn set_current_pid(_pid: Option) { + owed!("per-CPU state", "stage 4") +} + +/// # Safety +/// `top` is the top of the kernel stack the next entry from user mode lands on. +pub unsafe fn set_kernel_stack(_top: u64) { + owed!("per-CPU state", "stage 4") +} + +/// # Safety +/// Read on the CPU whose entry stacks they are. +pub unsafe fn entry_stacks() -> (u64, u64) { + owed!("per-CPU state", "stage 4") +} + +pub fn idle_stack_top() -> u64 { + owed!("per-CPU state", "stage 4") +} + +#[cfg(feature = "test-actuators")] +pub fn idle_guard_byte() -> u64 { + owed!("per-CPU state", "stage 4") +} + +#[cfg(feature = "test-actuators")] +pub fn idle_stack_size() -> usize { + owed!("per-CPU state", "stage 4") +} + +#[cfg(feature = "test-actuators")] +pub fn idle_stack_high_water() -> usize { + owed!("per-CPU state", "stage 4") +} + +pub fn in_syscall() -> bool { + owed!("per-CPU state", "stage 4") +} + +pub fn syscall_num() -> u64 { + owed!("per-CPU state", "stage 4") +} + +pub fn swap_fault_state(_new: CpuFaultState) -> CpuFaultState { + owed!("per-CPU state", "stage 4") +} + +/// This CPU's shard, its identity, and one sequence number out of that shard. +pub fn reserve_log_slot( + _guard: &crate::arch::IrqGuard, +) -> (*const crate::log::Shard, u64, u32, u32, u32) { + owed!("per-CPU state", "stage 4") +} + +pub fn irq_counts_here(_first: usize, _second: usize) -> (u64, u64) { + owed!("per-CPU state", "stage 4") +} + +pub fn preempt_count() -> u32 { + owed!("per-CPU state", "stage 4") +} + +pub fn set_preempt_count(_value: u32) { + owed!("per-CPU state", "stage 4") +} + +pub fn preempt_count_up() { + owed!("per-CPU state", "stage 4") +} + +pub fn preempt_count_down() { + owed!("per-CPU state", "stage 4") +} + +pub fn resched_owed() -> bool { + owed!("per-CPU state", "stage 4") +} + +pub fn set_resched_owed(_owed: bool) { + owed!("per-CPU state", "stage 4") +} + +pub fn faulting() -> bool { + owed!("per-CPU state", "stage 4") +} diff --git a/kernel/src/arch/aarch64/pio.rs b/kernel/src/arch/aarch64/pio.rs new file mode 100644 index 00000000000..b2886833d47 --- /dev/null +++ b/kernel/src/arch/aarch64/pio.rs @@ -0,0 +1,15 @@ +//! The I/O port space: AArch64 has none. + +/// Whether this architecture has an I/O port space at all. Firmware tables +/// that name a port are only honoured where it does. +pub const EXISTS: bool = false; + +/// Never called: every caller checks [`EXISTS`] first. +pub unsafe fn outb(_port: u16, _value: u8) { + unreachable!("AArch64 has no I/O port space") +} + +/// Never called: every caller checks [`EXISTS`] first. +pub unsafe fn outw(_port: u16, _value: u16) { + unreachable!("AArch64 has no I/O port space") +} diff --git a/kernel/src/arch/aarch64/pmu.rs b/kernel/src/arch/aarch64/pmu.rs new file mode 100644 index 00000000000..f9697ad93a7 --- /dev/null +++ b/kernel/src/arch/aarch64/pmu.rs @@ -0,0 +1,20 @@ +//! The performance monitor's overflow, as the hard-lockup detector's sample +//! source. On AArch64 that is `PMCCNTR_EL0` overflowing into a pseudo-NMI — +//! an interrupt the GICv3 delivers at a priority `DAIF.I` does not mask — +//! which needs the interrupt controller of the port's stage 4. + + +/// Start this CPU's counter overflowing into an NMI every `period` counter ticks. +pub fn arm(_period: u64) -> bool { + owed!("the PMU overflow NMI", "stage 4") +} + +/// Whether this CPU's counter is the reason this NMI arrived. +pub fn overflowed() -> bool { + owed!("the PMU overflow NMI", "stage 4") +} + +/// After an overflow's sample: clear it and reload. +pub fn rearm(_period: u64) { + owed!("the PMU overflow NMI", "stage 4") +} diff --git a/kernel/src/arch/aarch64/rtc.rs b/kernel/src/arch/aarch64/rtc.rs new file mode 100644 index 00000000000..9a0c49c0ad3 --- /dev/null +++ b/kernel/src/arch/aarch64/rtc.rs @@ -0,0 +1,20 @@ +//! The wall clock at boot: on an ACPI Arm machine, the UEFI runtime's +//! `GetTime` or a PL031 the tables name, the port's stage 6. + +use core::fmt; + +use toyos_wallclock::Civil; + +/// Why this machine did not say what time it is. None yet: the read is owed. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum RtcFault {} + +impl fmt::Display for RtcFault { + fn fmt(&self, _f: &mut fmt::Formatter<'_>) -> fmt::Result { + match *self {} + } +} + +pub fn read(_century_reg: Option) -> Result { + owed!("the wall clock", "no stage yet") +} diff --git a/kernel/src/arch/aarch64/smp.rs b/kernel/src/arch/aarch64/smp.rs new file mode 100644 index 00000000000..f52708238ed --- /dev/null +++ b/kernel/src/arch/aarch64/smp.rs @@ -0,0 +1,18 @@ +//! Other CPUs: PSCI `CPU_ON` for each GICC the MADT names, the port's stage 5. +//! Until then the boot CPU is the only one running, and the machine is never +//! released to the scheduler. + + +/// CPUs running: the boot CPU alone. +pub fn cpu_count() -> u32 { + 1 +} + +pub fn set_ready() { + owed!("other CPUs", "stage 5") +} + +/// Never: the boot ends before the machine is released. +pub fn is_ready() -> bool { + false +} diff --git a/kernel/src/arch/aarch64/syscall.rs b/kernel/src/arch/aarch64/syscall.rs new file mode 100644 index 00000000000..667d1f82fcb --- /dev/null +++ b/kernel/src/arch/aarch64/syscall.rs @@ -0,0 +1,12 @@ +//! The system-call gate: `SVC` from EL0 through the vectors' lower-EL entry, +//! the port's stage 7. + + +/// A syscall entered this CPU; x86-64's NMI gate counts it, and AArch64 has no +/// such gate. +pub fn note_entry() {} + +/// The actuator that storms NMIs at the syscall window. +pub fn window_storm() { + owed!("the syscall gate", "stage 7") +} diff --git a/kernel/src/arch/aarch64/tlb.rs b/kernel/src/arch/aarch64/tlb.rs new file mode 100644 index 00000000000..dae8edfbe64 --- /dev/null +++ b/kernel/src/arch/aarch64/tlb.rs @@ -0,0 +1,33 @@ +//! TLB invalidation across CPUs. AArch64 broadcasts it in hardware (`TLBI +//! …IS`), so the shootdown this interface stands for is a local instruction +//! plus `DSB ISH` once the kernel owns its page tables, the port's stage 4. + + +pub use crate::invalidation::Origin; + +pub fn log_census() { + owed!("TLB invalidation", "stage 4") +} + +pub fn shootdown(_origin: Origin) { + owed!("TLB invalidation", "stage 4") +} + +pub fn poll() { + owed!("TLB invalidation", "stage 4") +} + +#[cfg(feature = "boot-actuators")] +pub fn bench() { + owed!("TLB invalidation", "stage 4") +} + +#[cfg(feature = "test-actuators")] +pub fn debug_arm_ack_delay(_nanos: u64) -> u64 { + owed!("TLB invalidation", "stage 4") +} + +#[cfg(feature = "test-actuators")] +pub fn debug_disarm_ack_delay() -> u64 { + owed!("TLB invalidation", "stage 4") +} diff --git a/kernel/src/arch/aarch64/trap.rs b/kernel/src/arch/aarch64/trap.rs new file mode 100644 index 00000000000..1fd0688762c --- /dev/null +++ b/kernel/src/arch/aarch64/trap.rs @@ -0,0 +1,204 @@ +//! Exceptions: the vector table `VBAR_EL1` names, and what the kernel says +//! when one is taken. +//! +//! Every exception is fatal until the port's stage 4 gives interrupts and +//! user faults somewhere to go: the entry saves the interrupted context into a +//! [`Frame`] on the stack it was taken on, and [`exception`] reports it and +//! panics. A table that does not reach [`exception`] — misaligned, or never +//! installed — is what the aarch64 boot test's fault arm catches, because +//! then nothing reports at all. + +use core::fmt; + +use crate::log; + +/// The interrupted context, as the entry stores it: `x0`–`x30`, the stack +/// pointer before the exception, then the four system registers that say +/// what happened. +#[repr(C)] +pub struct Frame { + pub x: [u64; 31], + pub sp: u64, + pub elr: u64, + pub spsr: u64, + pub esr: u64, + pub far: u64, +} + +const FRAME_BYTES: usize = core::mem::size_of::(); +const _: () = assert!(FRAME_BYTES == 288 && FRAME_BYTES % 16 == 0); + +/// Which of the table's sixteen entries was taken: Arm ARM K.a, D1.3.1, +/// Table D1-7 — four groups by where the exception came from, and in each the +/// synchronous, IRQ, FIQ and SError entries. +#[derive(Clone, Copy)] +struct Entry(u64); + +impl fmt::Display for Entry { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let from = ["EL1 on SP_EL0", "EL1 on SP_EL1", "EL0 in AArch64", "EL0 in AArch32"]; + let kind = ["synchronous", "IRQ", "FIQ", "SError"]; + write!(f, "{} from {}", kind[(self.0 & 3) as usize], from[(self.0 >> 2) as usize & 3]) + } +} + +/// `ESR_ELx.EC`, the exception class, named for the report: Arm ARM K.a, +/// D24.2.40, the classes this kernel can take at EL1. +fn class_name(esr: u64) -> &'static str { + match esr >> 26 { + 0x00 => "unknown reason (an undefined instruction)", + 0x01 => "WFI or WFE trapped", + 0x07 => "SIMD or floating point trapped", + 0x0E => "illegal execution state", + 0x15 => "SVC from AArch64", + 0x18 => "system register access trapped", + 0x20 => "instruction abort from a lower EL", + 0x21 => "instruction abort", + 0x22 => "PC alignment fault", + 0x24 => "data abort from a lower EL", + 0x25 => "data abort", + 0x26 => "SP alignment fault", + 0x2F => "SError", + 0x3C => "BRK", + _ => "an exception class this kernel does not name", + } +} + +/// The Rust half of every vector entry: report the context and panic. The +/// panic handler's early branch puts the report on the console and the panel. +extern "C" fn exception(frame: &Frame, entry: u64) -> ! { + let entry = Entry(entry); + log!( + "KERNEL PANIC: {entry}: {} (ESR={:#010x})", + class_name(frame.esr), + frame.esr + ); + log!(" elr={:#018x} far={:#018x} spsr={:#010x}", frame.elr, frame.far, frame.spsr); + for pair in 0..15 { + log!( + " x{:<2}={:#018x} x{:<2}={:#018x}", + pair * 2, + frame.x[pair * 2], + pair * 2 + 1, + frame.x[pair * 2 + 1] + ); + } + log!(" x30={:#018x} sp ={:#018x}", frame.x[30], frame.sp); + crate::symbols::kernel_backtrace(frame.x[29], 20); + panic!("{entry}: {} at {:#x}", class_name(frame.esr), frame.elr); +} + +// The table: sixteen entries of 0x80 bytes, 2 KiB aligned (`VBAR_EL1` bits +// 10:0 are RES0). Each entry makes room for a `Frame`, saves x0/x1, names +// itself in x1 and branches to the common save, which fills in the rest and +// calls `exception` with the frame in x0. +core::arch::global_asm!( + ".macro toyos_vector n", + ".balign 0x80", + "sub sp, sp, #{frame}", + "stp x0, x1, [sp, #0]", + "mov x1, #\\n", + "b 1f", + ".endm", + ".pushsection .text.toyos_vectors, \"ax\"", + ".balign 0x800", + ".global toyos_vectors", + "toyos_vectors:", + "toyos_vector 0", "toyos_vector 1", "toyos_vector 2", "toyos_vector 3", + "toyos_vector 4", "toyos_vector 5", "toyos_vector 6", "toyos_vector 7", + "toyos_vector 8", "toyos_vector 9", "toyos_vector 10", "toyos_vector 11", + "toyos_vector 12", "toyos_vector 13", "toyos_vector 14", "toyos_vector 15", + "1:", + "stp x2, x3, [sp, #16]", + "stp x4, x5, [sp, #32]", + "stp x6, x7, [sp, #48]", + "stp x8, x9, [sp, #64]", + "stp x10, x11, [sp, #80]", + "stp x12, x13, [sp, #96]", + "stp x14, x15, [sp, #112]", + "stp x16, x17, [sp, #128]", + "stp x18, x19, [sp, #144]", + "stp x20, x21, [sp, #160]", + "stp x22, x23, [sp, #176]", + "stp x24, x25, [sp, #192]", + "stp x26, x27, [sp, #208]", + "stp x28, x29, [sp, #224]", + "add x2, sp, #{frame}", + "stp x30, x2, [sp, #240]", + "mrs x2, elr_el1", + "mrs x3, spsr_el1", + "stp x2, x3, [sp, #256]", + "mrs x2, esr_el1", + "mrs x3, far_el1", + "stp x2, x3, [sp, #272]", + "mov x0, sp", + "bl {exception}", + "brk #0", + ".popsection", + frame = const FRAME_BYTES, + exception = sym exception, +); + +/// Point `VBAR_EL1` at the table. Called by the entry before anything that can fault. +pub fn install() { + // SAFETY: the table is 2 KiB aligned, lives in the kernel image for the + // life of the machine, and every entry ends in `exception`, which never + // returns. The `ISB` makes the new base the one the next exception uses. + unsafe { + core::arch::asm!( + "adrp {t}, toyos_vectors", + "add {t}, {t}, :lo12:toyos_vectors", + "msr vbar_el1, {t}", + "isb", + t = out(reg) _, + options(nostack, preserves_flags), + ); + } +} + +/// Interrupt identifiers the generic drivers program. Inert until stage 4 +/// assigns them to GIC interrupts: every path that would deliver one +/// ([`super::msi_message`], [`super::irqchip::send_self`]) is owed. +#[repr(u8)] +enum Vector { + LogNest = 1, + Hda, + VirtioSound, +} + +pub const HDA_VECTOR: u8 = Vector::Hda as u8; +pub const VIRTIO_SOUND_VECTOR: u8 = Vector::VirtioSound as u8; +pub const LOG_NEST_VECTOR: u8 = Vector::LogNest as u8; + +/// The crash report for a panic, from the frame pointer the panic handler stood on. +pub(crate) fn report_panic(message: &core::panic::PanicInfo, frame: u64) { + crate::alert!("PANIC: {}", message); + log!(" Backtrace:"); + crate::symbols::kernel_backtrace(frame, 20); +} + +/// Whether the interrupted context an `SPSR` describes could have taken an +/// interrupt: `SPSR.I` clear. +pub(crate) const fn frame_interrupts_enabled(spsr: u64) -> bool { + spsr & (1 << 7) == 0 +} + +/// Nothing to report: the vectors run on the stack they interrupted. +pub(crate) fn report_fault_stack() {} + +pub(crate) fn try_recover_from_panic() -> ! { + owed!("recovering a syscall's panic", "stage 7") +} + +pub fn kernel_exit_to_user_check() { + owed!("the return to user mode", "stage 7") +} + +pub(crate) fn log_unclaimed() { + owed!("the interrupt controller", "stage 4") +} + +#[cfg(feature = "test-actuators")] +pub(crate) fn provoke_double_fault() -> ! { + owed!("a fault on the exception stack", "stage 4") +} diff --git a/kernel/src/arch/aarch64/watchdog.rs b/kernel/src/arch/aarch64/watchdog.rs new file mode 100644 index 00000000000..628608537fc --- /dev/null +++ b/kernel/src/arch/aarch64/watchdog.rs @@ -0,0 +1,16 @@ +//! The platform watchdog: on an ACPI Arm machine, an SBSA generic watchdog +//! the GTDT names, the port's stage 6. + +use crate::drivers::pci::PciDevice; + +pub fn init(_devices: &[PciDevice]) { + owed!("the platform watchdog", "no stage yet") +} + +pub fn feed(_now: u64) { + owed!("the platform watchdog", "no stage yet") +} + +pub fn disarm() { + owed!("the platform watchdog", "no stage yet") +} diff --git a/kernel/src/arch/x86_64/apic.rs b/kernel/src/arch/x86_64/apic.rs index 14c7335ac29..d6b2b703d99 100644 --- a/kernel/src/arch/x86_64/apic.rs +++ b/kernel/src/arch/x86_64/apic.rs @@ -2,7 +2,7 @@ use core::sync::atomic::{AtomicBool, AtomicU32, Ordering}; use super::{cpu, percpu}; use crate::log; -use crate::time::{Budget, Delay, Duration, Floor}; +use crate::time::{Delay, Duration, Floor}; /// The local APIC registers and MSRs this file may name. // Every variant is an architectural local-APIC register touching no memory or control transfer, so none can make `Reg::write`'s unsafe wrmsr unsound. @@ -184,100 +184,13 @@ pub fn arm_perf_nmi() { Reg::LvtPmc.write(0b100 << 8); } -// Time /system/bin/logd gets to durably write the panic report before halt; a Budget (not Bound) because expiry degrades gracefully instead of panicking. -const LOG_FILE_DRAIN: Budget = Budget::of( - Duration::from_millis(500), - "the report reaches the panel and not /log", -); - -// Read by tests/toyos.rs — keep in sync or its drift check fails. -const LOG_DRAIN_EXPIRED: &str = "the report did not reach /log"; - -/// Whether `/log` still owes this boot the report. -// True only before durable_ns passes `want` — logd publishes it after fsync returns, never before. -fn owed(want: u64) -> bool { - crate::log::user::durable_ns() < want -} - -/// Give `/system/bin/logd` a chance to put this report on the stick before the machine stops. -// The panic path never writes /log directly — every lock a write needs may already be held by the panicking thread itself. -fn wait_for_log_file() { - // Skip when serial exists: panic_flush already got the report off the box, and waiting here would only delay the pager. - if crate::drivers::serial::has_console() { - return; - } - // INVARIANT: nothing below runs before both facts this wait rests on hold. - // The deadline is read off the calibrated clock, so an uncalibrated one - // makes it unreachable; and what the wait is owed by is `logd`, which only - // a released machine can run. On a boot that crashes before either — the - // one this whole path exists for on a machine with no serial port — waiting - // costs the seal and buys nothing, so it is skipped and not shortened. - if !crate::clock::calibrated() || !crate::arch::smp::is_ready() { - return; - } - // Sampled once — a sibling still logging on its way down must not be able to push this deadline out indefinitely. - let want = crate::log::read::newest_committed_at_ns(); - if !owed(want) { - return; - } - // Wake siblings first: one may be halted in `sti; hlt` with no timer armed to wake it otherwise. - kick_all_but_self(); - let deadline = crate::clock::now() + LOG_FILE_DRAIN.duration(); - while owed(want) { - if crate::clock::now() >= deadline { - // /log has failed to answer, so fold this into the still-unpainted panel snapshot — the panel is the only channel left. - crate::log!( - "panic: {LOG_DRAIN_EXPIRED} in {}ns; the panel is the only copy", - LOG_FILE_DRAIN.nanos() - ); - crate::drivers::panic_console::refresh_capture(); - return; - } - core::hint::spin_loop(); - } -} - -/// Halt all CPUs: send the halt IPI, flush pending log output, then hold this -/// machine's panel until a key retires the reboot bound or the bound returns it -/// to firmware. -// panic_flush bypasses the log-ring and serial locks — after the halt IPI a wedged holder never releases them, so taking them normally could deadlock. -pub fn halt_all_cpus() -> ! { - // Before the wait and the panel: from here this machine holds a report for - // whoever is in front of it, with `IF` clear and under a bound of its own — - // which to a hard-lockup sample or a deadline poll is indistinguishable from - // a wedge, and is the opposite of one. Both bounds, because a `WEDGED` - // record either of them sealed would replace the report this path exists to - // deliver. - crate::hardlockup::stand_down(); - crate::deadline::stand_down(); - wait_for_log_file(); - // Under the same condition as the wait above: before the machine is - // released no sibling has been sent its `SIPI`, so this addresses CPUs that - // are still waiting for one rather than CPUs that need halting. +/// Send every other CPU the halt IPI, where the machine has released any: before +/// that no sibling has been sent its `SIPI`, so there are only CPUs still waiting +/// for one rather than CPUs that need halting. +pub fn stop_other_cpus() { if X2APIC_ENABLED.load(Ordering::Relaxed) && crate::arch::smp::is_ready() { Reg::Icr.write(0x000C_0000 | 0xFD); } - let bound = crate::panic_reboot::arm(true); - // Folded into the still-unpainted capture only where the panel is this - // boot's only account of itself, exactly as `wait_for_log_file`'s own line - // is: a refresh re-freezes the ring, and `screen_late_panic` reads the - // panel for a record written *after* `capture()` to prove the paint comes - // from the frozen snapshot. A machine with a console gets the arm line on it. - if !crate::drivers::serial::has_console() { - crate::drivers::panic_console::refresh_capture(); - } - // Render before the flush: it can't fail the proven serial channel, and a serial line then proves the paint already finished. - let painted = crate::drivers::panic_console::render(); - // SAFETY: sound only once nothing else will run — the halt IPI is already out. - unsafe { crate::drivers::serial::panic_flush(); } - // Must follow the flush — it's the deepest stack this path reaches. No-op off IST1. - percpu::ist1_report(); - // page_forever runs strictly after the flush: it is an unbounded loop and may only run once the serial report is out. - // Only the CPU that painted watches the bound; the rest halt below, since two CPUs polling port 0x60 would split every scancode. - if painted { - crate::drivers::panic_console::page_forever(bound); - } - super::cpu::halt(); } /// Calibrate the LAPIC timer on the BSP (requires HPET); does not start it. diff --git a/kernel/src/arch/x86_64/boot.rs b/kernel/src/arch/x86_64/boot.rs index da39936af57..b2b3cf98401 100644 --- a/kernel/src/arch/x86_64/boot.rs +++ b/kernel/src/arch/x86_64/boot.rs @@ -2,7 +2,7 @@ //! `kernel_main` asks of this architecture at the points where one differs //! from another. -use toyos_abi::boot::KernelArgs; +use toyos_abi::boot::{KernelArgs, MemoryMapEntry}; use super::{apic, control_regs, idt, ioapic, pat, percpu}; use crate::drivers::acpi::{self, MadtInfo}; @@ -37,12 +37,22 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { /// through it in which to establish a memory type. The write alone, and it /// logs nothing: the read-back is `pat::check`, in [`after_console`], where a /// refusal has a channel to reach. +/// The ACPI tables this architecture decodes: the MADT for its CPUs and I/O +/// APICs, the FADT for reset, soft-off and the century register, the HPET for +/// the clock, the MCFG for ECAM and the DMAR for the IOMMU. +pub const ACPI_TABLES: &[&[u8; 4]] = &[b"APIC", b"FACP", b"HPET", b"MCFG", b"DMAR"]; + pub fn before_panel() { pat::init(); } /// Once the console and the boot parameter exist. -pub fn after_console() { +pub fn after_console(_args: &KernelArgs, _maps: &[MemoryMapEntry]) { + // The IDT loads inside `interrupts`, much later: a fault here would reach + // firmware's handlers, so the actuator is refused by name instead. + if crate::actuator::test_early_fault() { + panic!("test-early-fault: x86-64 has no vectors of its own this early"); + } // After actuator::init, whose table the `control-regs-bench` probe inside // this call reads. `pat::init` restored the `CR0` it found, so a firmware // `CD` — which would make every mapping uncacheable whatever the PAT diff --git a/kernel/src/arch/x86_64/hw.rs b/kernel/src/arch/x86_64/hw.rs index f0a5dc201f8..902433dee72 100644 --- a/kernel/src/arch/x86_64/hw.rs +++ b/kernel/src/arch/x86_64/hw.rs @@ -158,15 +158,7 @@ pub fn report_contexts(rsp: u64, subject: Option) { ), } } - if let Some((used, of)) = crate::sched::driver::stack_high_water() { - crate::log!(" Task kernel stacks: deepest {used} of {of} bytes"); - } - if let Some((sweeps, records, overflowed)) = crate::mm::sweep_stats() { - crate::log!( - " Heap sweeps: {sweeps} run, {records} live bands on the last walk{}", - if overflowed { ", and the page table filled — the walk is incomplete" } else { "" }, - ); - } + crate::mm::report_on_crash(); } /// Panics before the wild `ret` would restore register state that makes the failure unnameable. diff --git a/kernel/src/arch/x86_64/idt/exceptions.rs b/kernel/src/arch/x86_64/idt/exceptions.rs index 0714da2b671..7c095df69c0 100644 --- a/kernel/src/arch/x86_64/idt/exceptions.rs +++ b/kernel/src/arch/x86_64/idt/exceptions.rs @@ -1,32 +1,13 @@ -use crate::arch::{apic, cpu, percpu}; +use crate::arch::{cpu, percpu}; use crate::syscall; use crate::arch::percpu::CpuFaultState; use crate::{alert, log, mm, process, scheduler, symbols}; +use crate::symbols::kernel_backtrace; use toyos_userbound::{blame, Blame, Faulted, Ring}; use super::{Vector, TrapFrame, PF_PRESENT, PF_WRITE, PF_INSTRUCTION_FETCH}; -/// Walk RBP chain for kernel backtrace with symbol resolution. -pub(crate) fn kernel_backtrace(start_rbp: u64, max_frames: usize) { - let mut rbp = start_rbp; - for _ in 0..max_frames { - if rbp == 0 || !rbp.is_multiple_of(8) || !mm::is_kernel_addr(rbp) { break; } - // SAFETY: `rbp` is checked non-zero, 8-aligned and a kernel address, so - // both reads land in the direct map, mapped for the life of the machine. - // - // Not `read_volatile` like `safe_read_kernel`, whose double-fault path - // reads memory another CPU may still be writing: this walks the - // faulting thread's own frame chain from its handler. - let saved_rbp = unsafe { *(rbp as *const u64) }; - // SAFETY: same as above, for the return address one word up. - let return_addr = unsafe { *((rbp + 8) as *const u64) }; - if return_addr == 0 || !mm::is_kernel_addr(return_addr) { break; } - symbols::resolve_kernel_return(return_addr); - rbp = saved_rbp; - } -} - /// Walk RBP chain for user backtrace through page tables. Takes no pid: this /// always backtraces the process running on this CPU. fn user_backtrace(start_rbp: u64, pml4: *const u64, max_frames: usize) { @@ -367,7 +348,7 @@ pub(crate) fn recover_or_halt(blame: Blame) -> ! { } // Kernel fault on the thread's behalf — may hold locks, use try_lock path. Blame::ProcessThroughKernel => try_recover_from_panic(), - Blame::Kernel => apic::halt_all_cpus(), + Blame::Kernel => crate::panic::halt_all_cpus(), } } @@ -471,7 +452,7 @@ pub(super) fn double_fault_handler(frame: &TrapFrame) -> ! { addr += 8; } - apic::halt_all_cpus(); + crate::panic::halt_all_cpus(); } /// #MC halts whichever ring faulted rather than killing a process: there is @@ -482,7 +463,7 @@ pub(super) fn machine_check_handler(frame: &TrapFrame) -> ! { log!("MACHINE CHECK on CPU {}", percpu::cpu_id()); let ctx = ExceptionContext { frame, cr2: 0 }; crash_report(&CrashInfo::Exception(&ctx)); - apic::halt_all_cpus(); + crate::panic::halt_all_cpus(); } /// Returns if the fault was resolved (page mapped in); diverges if fatal. @@ -576,7 +557,7 @@ fn fatal_exception(ctx: &ExceptionContext) -> ! { crate::panic::forget(); syscall::kill_process(-1); } - apic::halt_all_cpus(); + crate::panic::halt_all_cpus(); } crash_report(&CrashInfo::Exception(ctx)); diff --git a/kernel/src/arch/x86_64/idt/mod.rs b/kernel/src/arch/x86_64/idt/mod.rs index 9133bbaecec..1bc2744e6ca 100644 --- a/kernel/src/arch/x86_64/idt/mod.rs +++ b/kernel/src/arch/x86_64/idt/mod.rs @@ -521,8 +521,6 @@ pub fn enable_interrupts() { } pub(crate) use exceptions::try_recover_from_panic; -#[cfg(feature = "boot-actuators")] -pub(crate) use exceptions::kernel_backtrace; /// The crash report for a panic, from the frame pointer the panic handler stood on. pub(crate) fn report_panic(message: &core::panic::PanicInfo, frame: u64) { @@ -556,3 +554,5 @@ pub(crate) fn provoke_double_fault() -> ! { } pub(crate) use unclaimed::log_vectors as log_unclaimed; +/// How much of the double-fault stack the crash report used, once the report is out. +pub(crate) use super::percpu::ist1_report as report_fault_stack; diff --git a/kernel/src/arch/x86_64/idt/nmi.rs b/kernel/src/arch/x86_64/idt/nmi.rs index 61d6277e9d3..e334c99b0dc 100644 --- a/kernel/src/arch/x86_64/idt/nmi.rs +++ b/kernel/src/arch/x86_64/idt/nmi.rs @@ -119,5 +119,5 @@ extern "sysv64" fn nested_nmi(rip: u64, rsp: u64) -> ! { serial(b" rsp="); crate::drivers::serial::panic_raw_hex(rsp); serial(b"\n[nmi] the outer handler's frame is gone; the machine stops here.\n"); - crate::arch::apic::halt_all_cpus() + crate::panic::halt_all_cpus() } diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index 316c81ea531..803c5991352 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -19,7 +19,7 @@ pub use crate::mm::policy::{CachePolicy, MmioPolicy, Prot, WindowProt}; use crate::arch::control_regs::PcidActive; use crate::arch::cpu::Invpcid; use crate::sync::Lock; -use crate::vma::{self, Region, RegionKind}; +use crate::vma::{self, Occupancy, Region, RegionKind}; use crate::MemoryMapEntry; const PAGE_PRESENT: u64 = 1 << 0; @@ -372,18 +372,6 @@ pub struct AddressSpace { pcid: PcidHandle, } -/// Needed because a *placed* mapping (`sys_mmap`'s FIXED arm) skips -/// `find_gap`'s implicit check. -#[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub enum Occupancy { - /// Nothing is registered over any part of it. - Free, - /// One region covers it end for end, and that region is all it runs into. - Whole, - /// Part of a region, several regions, or one that merely starts here. - Partial, -} - fn align_up_2m(v: u64) -> u64 { (v + PAGE_2M - 1) & !(PAGE_2M - 1) } @@ -979,7 +967,7 @@ fn has(entry: u64, flag: u64) -> u8 { /// The *currently loaded* CR3, not `kernel_root()` (a panic can run on a user /// space); lock-free and silent, for the panic path to prove a mapping /// before writing through it. -pub fn present_in_current_cr3(addr: u64) -> bool { +pub fn present_in_current_tables(addr: u64) -> bool { // SAFETY: `Cr3::current().phys()` names the table this CPU runs under // right now, so it can't be freed meanwhile. No lock: each entry read is // one aligned `u64`, atomic at the hardware level, so no read is torn. @@ -1045,7 +1033,7 @@ enum Pass { /// Whether the current tables hold a 2 MiB leaf for `addr`, and on /// [`Pass::Switch`] gives that leaf the write-combining type. fn write_combine_leaf(addr: u64, pass: Pass) -> bool { - // SAFETY: sound as `present_in_current_cr3`'s walk — `Cr3::current()` names + // SAFETY: sound as `present_in_current_tables`'s walk — `Cr3::current()` names // the table this CPU runs under and every step is taken through a // `PAGE_PRESENT` entry. Exclusive because this runs on the BSP before any // AP exists and before `mm::init` publishes a space of its own. @@ -1077,7 +1065,7 @@ fn write_combine_leaf(addr: u64, pass: Pass) -> bool { /// Dump page table entries for an address. Lock-free for crash safety. pub fn debug_page_walk(addr: u64) { let cr3 = Cr3::current(); - // SAFETY: same argument as `present_in_current_cr3` above. + // SAFETY: same argument as `present_in_current_tables` above. let pml4 = unsafe { PageTablePage::from_phys(cr3.phys()) }; let (pml4_idx, pdpt_idx, pd_idx) = indices(addr); let pt_idx = ((addr >> 12) & 0x1FF) as usize; diff --git a/kernel/src/arch/x86_64/vtd/fault.rs b/kernel/src/arch/x86_64/vtd/fault.rs index 680dea046be..c0188b87c1e 100644 --- a/kernel/src/arch/x86_64/vtd/fault.rs +++ b/kernel/src/arch/x86_64/vtd/fault.rs @@ -246,7 +246,7 @@ pub fn service() { // that would be one process's bug taking the whole machine down, which // is the thing moving a driver out was for. crate::drivers::panic_console::capture(); - crate::arch::apic::halt_all_cpus(); + crate::panic::halt_all_cpus(); } crate::arch::apic::eoi(); } diff --git a/kernel/src/deadline.rs b/kernel/src/deadline.rs index f7120a5ed73..4c4bd89dece 100644 --- a/kernel/src/deadline.rs +++ b/kernel/src/deadline.rs @@ -28,7 +28,7 @@ //! that can name where the core is standing. Whichever fires takes the //! machine's one seal through [`claim_the_reset`]. //! - **A panic in progress**, which is not a gap but a stand-down: -//! `irqchip::halt_all_cpus` calls [`stand_down`] before it holds the panel, so a +//! `panic::halt_all_cpus` calls [`stand_down`] before it holds the panel, so a //! panic report is never replaced by an expiry. use core::sync::atomic::{AtomicBool, AtomicU64, AtomicU8, Ordering::Relaxed}; @@ -72,7 +72,7 @@ pub fn claim_the_reset() -> bool { /// Stand this bound down for the rest of the machine's life. /// -/// Called from `irqchip::halt_all_cpus` beside [`crate::hardlockup::stand_down`]: +/// Called from `panic::halt_all_cpus` beside [`crate::hardlockup::stand_down`]: /// from there this machine holds a panic report under a bound of its own, and an /// expiry would seal a `WEDGED` record over it. Disarms rather than latching a /// second flag, so [`poll`] stays one relaxed load. diff --git a/kernel/src/drivers/acpi.rs b/kernel/src/drivers/acpi.rs index 00d674e5255..7c4f04417a7 100644 --- a/kernel/src/drivers/acpi.rs +++ b/kernel/src/drivers/acpi.rs @@ -105,10 +105,8 @@ const SDT_OEM_ID: usize = 10; /// — so a row here is a table that checksummed, and the line that closes the /// list is the machine's answer to how many of them it has. pub fn inventory(rsdp_addr: u64) { - /// The five this kernel decodes: the MADT for its CPUs and IO APICs, the - /// FADT for reset, soft-off and the century register, the HPET for the - /// clock, the MCFG for ECAM and the DMAR for the IOMMU. - const READ: &[&[u8; 4]] = &[b"APIC", b"FACP", b"HPET", b"MCFG", b"DMAR"]; + // The tables this architecture decodes. + const READ: &[&[u8; 4]] = crate::arch::boot::ACPI_TABLES; let mut validated = 0usize; for signature in READ { @@ -385,7 +383,13 @@ pub fn parse_madt(rsdp_addr: u64) -> Option { } Ok(MadtEntry::IoApic(entry)) => io_apics.push(entry), Ok(MadtEntry::SourceOverride(entry)) => source_overrides.push(entry), - Ok(MadtEntry::Other(_)) => {} + // A GIC structure on a machine this walk reads APICs from is as + // foreign to it as a type it does not know. + Ok(MadtEntry::Gicc(_) + | MadtEntry::Gicd { .. } + | MadtEntry::Gicr { .. } + | MadtEntry::Its { .. } + | MadtEntry::Other(_)) => {} Err(halt) => { log!( "ACPI: MADT entry at +{} declares {} bytes of a {}-byte list — stopping", diff --git a/kernel/src/drivers/panic_console/mod.rs b/kernel/src/drivers/panic_console/mod.rs index e2a7510b6d7..532a1c025a7 100644 --- a/kernel/src/drivers/panic_console/mod.rs +++ b/kernel/src/drivers/panic_console/mod.rs @@ -461,10 +461,7 @@ pub fn arm(args: &KernelArgs, maps: &[MemoryMapEntry]) { // loader hands the scanout over uncacheable; `pat::init` runs before this // function so that there is a write-combining entry to point its leaves at. let combining = reclaimed.is_none() - && mm::paging::boot_map_write_combining( - args.gop_framebuffer, - align_2m(args.gop_framebuffer_size as usize) as u64, - ); + && mm::paging::boot_map_write_combining(args.gop_framebuffer, args.gop_framebuffer_size); // **The panel is taken before anything above or below it can fail, and // this record is what proves the kernel entered.** A fault in the walk or @@ -813,7 +810,7 @@ pub mod stall { return; } crate::log!("{HELD}"); - crate::arch::irqchip::halt_all_cpus(); + crate::panic::halt_all_cpus(); } } @@ -1334,14 +1331,14 @@ fn write_num(out: &mut [u8], v: usize) -> usize { } /// Whether the first and last framebuffer pages resolve in the *current* -/// CR3, not `kernel_root()`: a panic in syscall context runs on a user address space. +/// tables, not `kernel_root()`: a panic in syscall context runs on a user address space. /// Proves it rather than assuming it, so broken paging becomes no console, never a fault inside the panic handler. fn mapped(fb: &Fb) -> bool { let base = fb.ptr as u64; let Some(last) = base.checked_add(fb.bytes.saturating_sub(1)) else { return false; }; - mm::paging::present_in_current_cr3(base) && mm::paging::present_in_current_cr3(last) + mm::paging::present_in_current_tables(base) && mm::paging::present_in_current_tables(last) } /// `pixel_format` is 0 for RGB, 1 for BGR (`bootloader/src/main.rs`). diff --git a/kernel/src/drivers/xhci/wait/mod.rs b/kernel/src/drivers/xhci/wait/mod.rs index 7eb275f5b79..1c81b549cd3 100644 --- a/kernel/src/drivers/xhci/wait/mod.rs +++ b/kernel/src/drivers/xhci/wait/mod.rs @@ -32,7 +32,7 @@ mod depth_probe { crate::arch::percpu::current_tid().map(|t| t.raw()) ); // `kernel_backtrace` stops at the first unreadable frame. - crate::arch::trap::kernel_backtrace(crate::arch::cpu::frame_pointer(), 20); + crate::symbols::kernel_backtrace(crate::arch::cpu::frame_pointer(), 20); } } diff --git a/kernel/src/hardlockup/mod.rs b/kernel/src/hardlockup/mod.rs index 2cb08bf6eae..a7d94e7afa6 100644 --- a/kernel/src/hardlockup/mod.rs +++ b/kernel/src/hardlockup/mod.rs @@ -203,7 +203,7 @@ pub fn arm_this_cpu() { /// Stand the detector down for the rest of this machine's life. /// -/// Called from `irqchip::halt_all_cpus`, which is every fatal path's one funnel: a +/// Called from `panic::halt_all_cpus`, which is every fatal path's one funnel: a /// panicked kernel pages its panel with `IF` clear, under a bound of its own, /// and a reader holding the machine open is not a machine to reset. One relaxed /// store, and the LVT then stays masked of its own accord — hardware masks it diff --git a/kernel/src/main.rs b/kernel/src/main.rs index 955f1d496f2..b4279d8518a 100644 --- a/kernel/src/main.rs +++ b/kernel/src/main.rs @@ -114,7 +114,7 @@ mod late_panic { use crate::mm::paging::MmioPolicy; use alloc::boxed::Box; use alloc::sync::Arc; -use arch::{cpu, irqchip, percpu, smp}; +use arch::{cpu, percpu, smp}; pub(crate) use arch::hw; use drivers::{acpi, gop, nvme, pci, serial, virtio_console, virtio_gpu, virtio_sound, xhci}; use toyos_abi::boot::{KernelArgs, MemoryMapEntry}; @@ -162,7 +162,7 @@ fn panic(info: &core::panic::PanicInfo) -> ! { if prev != percpu::CpuFaultState::Normal { // Escalate: reentry depth is zero here, so this landed on a fatal exception or page fault no handler was inside. panic::last_words("DOUBLE PANIC", Some(prev), info, true); - irqchip::halt_all_cpus(); + panic::halt_all_cpus(); } arch::trap::report_panic(info, cpu::frame_pointer()); @@ -187,7 +187,7 @@ fn panic(info: &core::panic::PanicInfo) -> ! { arch::trap::try_recover_from_panic(); } - irqchip::halt_all_cpus(); + panic::halt_all_cpus(); } fn register_gpu(driver: Box, info: gpu::GpuInfo) { @@ -297,7 +297,7 @@ pub(crate) unsafe extern "C" fn kernel_main(kernel_args: &KernelArgs) -> ! { log::halt_before_the_next_repaint(); } - arch::boot::after_console(); + arch::boot::after_console(&kernel_args, maps); // percpu, the allocator and our own paging aren't up yet, so a fault here only reaches the early-panic branch. if actuator::test_early_panic() { diff --git a/kernel/src/mm/mod.rs b/kernel/src/mm/mod.rs index 830ebb78843..af525445e6d 100644 --- a/kernel/src/mm/mod.rs +++ b/kernel/src/mm/mod.rs @@ -21,8 +21,6 @@ pub use alloc::sweep as sweep_heap_bands; /// Isolates the sweep's lock hold from the sweep itself, to attribute contention correctly. #[cfg(feature = "heap-lockspin")] pub use alloc::hold_lock as hold_heap_lock; -/// Unconditional: `hw::report_contexts` runs on every crash and must build with no sweep present. -pub use alloc::sweep_stats; pub use dma::{Dma, DmaPool, Unaligned}; pub use mmio::Mmio; pub use region::{Allocation, KernelSlice}; @@ -158,3 +156,18 @@ pub fn init(memory_map: &[MemoryMapEntry], reserved: &[Region]) { paging::init(memory_map); alloc::init(); } + +/// The two memory facts every crash report ends its contexts with: how deep +/// any task's kernel stack went, and what the heap sweep last saw. +/// Unconditional: it runs on every crash and must build with no sweep present. +pub fn report_on_crash() { + if let Some((used, of)) = crate::sched::driver::stack_high_water() { + crate::log!(" Task kernel stacks: deepest {used} of {of} bytes"); + } + if let Some((sweeps, records, overflowed)) = alloc::sweep_stats() { + crate::log!( + " Heap sweeps: {sweeps} run, {records} live bands on the last walk{}", + if overflowed { ", and the page table filled — the walk is incomplete" } else { "" }, + ); + } +} diff --git a/kernel/src/panic.rs b/kernel/src/panic.rs index ab17f6e4247..332894ea090 100644 --- a/kernel/src/panic.rs +++ b/kernel/src/panic.rs @@ -11,6 +11,7 @@ use core::sync::atomic::{AtomicU32, AtomicU64, AtomicU8, Ordering}; use crate::arch::cpu; use crate::arch::percpu::CpuFaultState; use crate::drivers::serial; +use crate::time::{Budget, Duration}; /// Slots in every per-CPU array here: an APIC id masked to six bits. const SLOTS: usize = 64; @@ -330,3 +331,95 @@ pub fn last_words( ), } } + +/// Time `/system/bin/logd` gets to durably write the panic report before halt; +/// a `Budget` (not a `Bound`) because expiry degrades gracefully instead of panicking. +const LOG_FILE_DRAIN: Budget = Budget::of( + Duration::from_millis(500), + "the report reaches the panel and not /log", +); + +// Read by tests/toyos.rs — keep in sync or its drift check fails. +const LOG_DRAIN_EXPIRED: &str = "the report did not reach /log"; + +/// Whether `/log` still owes this boot the report. +// True only before durable_ns passes `want` — logd publishes it after fsync returns, never before. +fn log_file_owed(want: u64) -> bool { + crate::log::user::durable_ns() < want +} + +/// Give `/system/bin/logd` a chance to put this report on the stick before the machine stops. +// The panic path never writes /log directly — every lock a write needs may already be held by the panicking thread itself. +fn wait_for_log_file() { + // Skip when serial exists: panic_flush already got the report off the box, and waiting here would only delay the pager. + if serial::has_console() { + return; + } + // INVARIANT: nothing below runs before both facts this wait rests on hold. + // The deadline is read off the calibrated clock, so an uncalibrated one + // makes it unreachable; and what the wait is owed by is `logd`, which only + // a released machine can run. On a boot that crashes before either — the + // one this whole path exists for on a machine with no serial port — waiting + // costs the seal and buys nothing, so it is skipped and not shortened. + if !crate::clock::calibrated() || !crate::arch::smp::is_ready() { + return; + } + // Sampled once — a sibling still logging on its way down must not be able to push this deadline out indefinitely. + let want = crate::log::read::newest_committed_at_ns(); + if !log_file_owed(want) { + return; + } + // Wake siblings first: one may be halted waiting for an interrupt with no timer armed to wake it otherwise. + crate::arch::irqchip::kick_all_but_self(); + let deadline = crate::clock::now() + LOG_FILE_DRAIN.duration(); + while log_file_owed(want) { + if crate::clock::now() >= deadline { + // /log has failed to answer, so fold this into the still-unpainted panel snapshot — the panel is the only channel left. + crate::log!( + "panic: {LOG_DRAIN_EXPIRED} in {}ns; the panel is the only copy", + LOG_FILE_DRAIN.nanos() + ); + crate::drivers::panic_console::refresh_capture(); + return; + } + core::hint::spin_loop(); + } +} + +/// Halt all CPUs: stop the others, flush pending log output, then hold this +/// machine's panel until a key retires the reboot bound or the bound returns it +/// to firmware. Every fatal path's one funnel. +// panic_flush bypasses the log-ring and serial locks — once the others are stopped a wedged holder never releases them, so taking them normally could deadlock. +pub fn halt_all_cpus() -> ! { + // Before the wait and the panel: from here this machine holds a report for + // whoever is in front of it, with interrupts masked and under a bound of its + // own — which to a hard-lockup sample or a deadline poll is + // indistinguishable from a wedge, and is the opposite of one. Both bounds, + // because a `WEDGED` record either of them sealed would replace the report + // this path exists to deliver. + crate::hardlockup::stand_down(); + crate::deadline::stand_down(); + wait_for_log_file(); + crate::arch::irqchip::stop_other_cpus(); + let bound = crate::panic_reboot::arm(true); + // Folded into the still-unpainted capture only where the panel is this + // boot's only account of itself, exactly as `wait_for_log_file`'s own line + // is: a refresh re-freezes the ring, and `screen_late_panic` reads the + // panel for a record written *after* `capture()` to prove the paint comes + // from the frozen snapshot. A machine with a console gets the arm line on it. + if !serial::has_console() { + crate::drivers::panic_console::refresh_capture(); + } + // Render before the flush: it can't fail the proven serial channel, and a serial line then proves the paint already finished. + let painted = crate::drivers::panic_console::render(); + // SAFETY: sound only once nothing else will run — the other CPUs are already stopped. + unsafe { serial::panic_flush(); } + // Must follow the flush — it's the deepest stack this path reaches. + crate::arch::trap::report_fault_stack(); + // page_forever runs strictly after the flush: it is an unbounded loop and may only run once the serial report is out. + // Only the CPU that painted watches the bound; the rest halt below, since two CPUs polling one keyboard would split every key. + if painted { + crate::drivers::panic_console::page_forever(bound); + } + cpu::halt(); +} diff --git a/kernel/src/panic_reboot.rs b/kernel/src/panic_reboot.rs index 13e39f10764..30ea48abd79 100644 --- a/kernel/src/panic_reboot.rs +++ b/kernel/src/panic_reboot.rs @@ -4,10 +4,11 @@ //! how a person at the machine says the panel is being read — and nobody //! pressing one inside the bound means nobody is there to read it. //! -//! **The bound is carried in TSC cycles, not nanoseconds.** A panic may land -//! before `clock::init`, where the calibrated clock reads zero for every -//! interval; the cycle count comes from the frequency CPUID states instead, and -//! both phases then compare the same `rdtsc` against the same unit. A machine +//! **The bound is carried in counter ticks, not nanoseconds** (`cpu::counter`: +//! the TSC, the generic timer's count). A panic may land before `clock::init`, +//! where the calibrated clock reads zero for every interval; the tick count +//! comes from the frequency the CPU states instead (CPUID, `CNTFRQ_EL0`), and +//! both phases then compare the same counter against the same unit. A machine //! that states no frequency and has no calibrated clock cannot time anything, //! and the arm line says so instead of resetting on a guess. //! @@ -40,7 +41,7 @@ const FAST_BOUND: Budget = Budget::of( /// Whether a reboot is armed on this panic, and when. #[derive(Clone, Copy)] pub enum Bound { - /// Reset the machine at this `rdtsc` reading. + /// Reset the machine at this `cpu::counter` reading. At(u64), /// Hold the panel: somebody is reading it, or nothing here could time a /// wait, or this machine has no reset register to write. @@ -72,14 +73,14 @@ impl Bound { #[derive(Clone, Copy)] enum Source { Calibrated, - Cpuid, + Stated, } impl Source { fn named(self) -> &'static str { match self { Source::Calibrated => "the calibrated clock", - Source::Cpuid => "the TSC frequency CPUID states", + Source::Stated => "the counter frequency the CPU states", } } } @@ -90,7 +91,7 @@ impl Source { const ARMED: &str = "panic: rebooting"; const HELD: &str = "panic: holding this panel"; -/// The bound in `rdtsc` cycles from now, and which clock said so. +/// The bound in counter ticks from now, and which clock said so. fn deadline(bound: Budget) -> Option<(u64, Source)> { if crate::clock::calibrated() { return Some((crate::clock::tsc_deadline(bound.nanos()), Source::Calibrated)); @@ -98,7 +99,7 @@ fn deadline(bound: Budget) -> Option<(u64, Source)> { let hz = crate::arch::cpu::stated_counter_hz()?; // Nanoseconds first, so a bound under a second is not rounded to nothing. let cycles = (u128::from(bound.nanos()) * u128::from(hz) / 1_000_000_000) as u64; - Some((cpu::counter().saturating_add(cycles), Source::Cpuid)) + Some((cpu::counter().saturating_add(cycles), Source::Stated)) } /// Arm the reboot and say so in one line — the panel's last, because the panic @@ -146,7 +147,7 @@ pub fn arm(on_the_record: bool) -> Bound { (None, _) => { if on_the_record { alert!( - "{HELD}: this CPU states no TSC frequency and none is calibrated, so \ + "{HELD}: this CPU states no counter frequency and none is calibrated, so \ nothing here can time a wait" ); } else { diff --git a/kernel/src/scheduler.rs b/kernel/src/scheduler.rs index ce50ea88baa..c66bbd3bfc4 100644 --- a/kernel/src/scheduler.rs +++ b/kernel/src/scheduler.rs @@ -651,7 +651,7 @@ pub(crate) fn reap_poisoned() { pub fn schedule_no_return() -> ! { if in_schedule_self() { crate::log!("schedule_no_return: panicked inside a pass, cannot rejoin"); - crate::arch::irqchip::halt_all_cpus(); + crate::panic::halt_all_cpus(); } if percpu::current_tid().is_none() { enter_idle_loop(); diff --git a/kernel/src/symbols.rs b/kernel/src/symbols.rs index 23a1296ab9b..f6756cf16d6 100644 --- a/kernel/src/symbols.rs +++ b/kernel/src/symbols.rs @@ -236,3 +236,26 @@ fn log_user(syms: &SymbolTable, addr: u64, resolved: Option<(&str, u64)>) -> boo false } } + +/// Walk the frame-pointer chain from `start_fp`, resolving each return +/// address. Every architecture this kernel builds for lays a frame record out +/// the same way under `-Cforce-frame-pointers=yes`: the caller's frame pointer, +/// then the return address one word up. +pub(crate) fn kernel_backtrace(start_fp: u64, max_frames: usize) { + let mut fp = start_fp; + for _ in 0..max_frames { + if fp == 0 || !fp.is_multiple_of(8) || !crate::mm::is_kernel_addr(fp) { break; } + // SAFETY: `fp` is checked non-zero, 8-aligned and a kernel address, so + // both reads land in the direct map, mapped for the life of the machine. + // + // Not `read_volatile` like the double-fault path's reads of memory + // another CPU may still be writing: this walks the faulting thread's + // own frame chain from its handler. + let saved_fp = unsafe { *(fp as *const u64) }; + // SAFETY: same as above, for the return address one word up. + let return_addr = unsafe { *((fp + 8) as *const u64) }; + if return_addr == 0 || !crate::mm::is_kernel_addr(return_addr) { break; } + resolve_kernel_return(return_addr); + fp = saved_fp; + } +} diff --git a/kernel/src/syscall/dispatch.rs b/kernel/src/syscall/dispatch.rs index 60b3ea46e7b..45744610261 100644 --- a/kernel/src/syscall/dispatch.rs +++ b/kernel/src/syscall/dispatch.rs @@ -541,7 +541,7 @@ pub(crate) fn syscall_dispatch(num: u64, a1: u64, a2: u64, a3: u64, a4: u64) -> } // Unlike every other action, this costs the machine, not just the caller's // process: one call is already a permanent halt. - DA::FATAL_HALT => { log!("{}", FATAL_HALT_NONCE); crate::arch::irqchip::halt_all_cpus(); } + DA::FATAL_HALT => { log!("{}", FATAL_HALT_NONCE); crate::panic::halt_all_cpus(); } DA::DOUBLE_FAULT => { log!("SYS_DEBUG: provoking a double fault"); crate::arch::trap::provoke_double_fault() diff --git a/kernel/src/syscall/vm.rs b/kernel/src/syscall/vm.rs index 4c1956d6a1e..eed543d99aa 100644 --- a/kernel/src/syscall/vm.rs +++ b/kernel/src/syscall/vm.rs @@ -7,7 +7,8 @@ //! shoots down and waits, and a sibling thread can be spinning on that same //! lock with `IF` clear. -use crate::mm::paging::{CachePolicy, Occupancy, Prot}; +use crate::mm::paging::{CachePolicy, Prot}; +use crate::vma::Occupancy; use crate::user_ptr::UserBytesMut; use crate::UserAddr; use crate::{process, vfs}; diff --git a/kernel/src/vma.rs b/kernel/src/vma.rs index 5cf35bd54f3..eb617ca8374 100644 --- a/kernel/src/vma.rs +++ b/kernel/src/vma.rs @@ -45,3 +45,15 @@ pub struct Region { /// For the demand-paged kinds, what a fault in this region installs. pub kind: RegionKind, } + +/// How a range meets the regions an address space registers. Needed because a +/// *placed* mapping (`sys_mmap`'s FIXED arm) skips `find_gap`'s implicit check. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Occupancy { + /// Nothing is registered over any part of it. + Free, + /// One region covers it end for end, and that region is all it runs into. + Whole, + /// Part of a region, several regions, or one that merely starts here. + Partial, +} diff --git a/src/build.rs b/src/build.rs index 718f98842b0..c9b46544e5e 100644 --- a/src/build.rs +++ b/src/build.rs @@ -832,6 +832,14 @@ pub enum Userland { Absent, } +impl Userland { + /// What a plan for `arch` carries unless it asks for less: the programs, + /// where the toolchain builds a userland for that architecture at all. + pub fn of(arch: Arch) -> Self { + if crate::toolchain::USERLAND_ARCHS.contains(&arch) { Self::Built } else { Self::Absent } + } +} + impl Plan { pub fn new(arch: Arch, config: &Path, features: &[&str], params: &[&str]) -> Self { Self { @@ -839,7 +847,7 @@ impl Plan { config: config.to_path_buf(), features: features.iter().map(|f| (*f).to_string()).collect(), params: params.iter().map(|p| (*p).to_string()).collect(), - userland: Userland::Built, + userland: Userland::of(arch), } } @@ -866,12 +874,13 @@ pub fn plan_for(root: &Path, boot: &Boot, debug: bool, args: &[String]) -> Plan // anything waits on a lock. let features = kernel_features(root, debug, &feature, ¶m); check_params(root, ¶m); + let arch = arch_for(args); Plan { - arch: arch_for(args), + arch, config: boot.config.clone(), features: features.split(',').filter(|f| !f.is_empty()).map(Into::into).collect(), params: param, - userland: Userland::Built, + userland: Userland::of(arch), } } diff --git a/tests/common/power.rs b/tests/common/power.rs index 96a13b6f80f..970ad8b78cb 100644 --- a/tests/common/power.rs +++ b/tests/common/power.rs @@ -968,7 +968,7 @@ pub fn panic_before_peripherals_reboots( // The one thing this branch removed. A guest reaching the other held branch // for the other reason must not be read as this one passing. boot.must_not_say("decoded no reset register")?; - if !held.contains("states no TSC frequency") { + if !held.contains("states no counter frequency") { return Err(format!( "the panel held for a reason this guest was not expected to reach\n{held}" )); @@ -1728,7 +1728,7 @@ const PANIC_OUTLIVES_DEADLINE: &str = "boot-deadline=4000"; /// page that crosses the reset says which of the two ended the machine. /// /// **What this cannot judge, stated rather than implied.** Reverting -/// `deadline::stand_down` alone leaves this green: after `apic::halt_all_cpus` +/// `deadline::stand_down` alone leaves this green: after `panic::halt_all_cpus` /// every CPU is halted or spinning with `IF` clear, so nothing reaches the poll /// and an armed deadline cannot expire whether or not it was disarmed. The /// window the stand-down closes is the one *before* that — the panicking CPU has @@ -2495,7 +2495,7 @@ pub fn blackbox_early_panic_sealed_muted( Ok(()) } -/// `kernel/src/arch/x86_64/apic.rs`'s `LOG_DRAIN_EXPIRED`, which a boot that never had +/// `kernel/src/panic.rs`'s `LOG_DRAIN_EXPIRED`, which a boot that never had /// a drainer may not print. const LOG_DRAIN_EXPIRED: &str = "the report did not reach /log"; diff --git a/tests/common/serial.rs b/tests/common/serial.rs index 04d5c870347..84bec400f00 100644 --- a/tests/common/serial.rs +++ b/tests/common/serial.rs @@ -36,7 +36,7 @@ use super::qemu::{is_kernel_line, QemuInstance}; #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub enum Died { /// The kernel itself. Every path that writes one of these words ends at - /// `apic::halt_all_cpus` — **unless** the panic handler finds the panic + /// `panic::halt_all_cpus` — **unless** the panic handler finds the panic /// recoverable, which it does for a `panic!` taken in syscall context /// (`kernel/src/main.rs`: the caller is killed and the machine carries on, /// which is what `panic_recovery`, `heap_ceiling` and diff --git a/tests/toyos.rs b/tests/toyos.rs index 2f0846e5b14..01e109ca26d 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -2481,7 +2481,7 @@ const FATAL_HALT_NONCE: &str = "SYS_DEBUG: fatal halt 4b1d9e2c"; /// /// `screen_fatal_halt_composited` reads it off the *panel*, because the machine /// that wait exists for has no serial port and `/log` is the thing that did not -/// answer. Kept in sync with `kernel/src/arch/x86_64/apic.rs::LOG_DRAIN_EXPIRED` by +/// answer. Kept in sync with `kernel/src/panic.rs::LOG_DRAIN_EXPIRED` by /// this comment and by that test turning every spent budget into a red if it /// drifts. const LOG_DRAIN_EXPIRED: &str = "the report did not reach /log"; diff --git a/toyos-acpi/src/gtdt.rs b/toyos-acpi/src/gtdt.rs new file mode 100644 index 00000000000..edac464cd5a --- /dev/null +++ b/toyos-acpi/src/gtdt.rs @@ -0,0 +1,57 @@ +//! The GTDT (signature `GTDT`): ACPI 6.5 §5.2.25, Table 5.121 — the Arm +//! generic timer's interrupts. + +use crate::{find_table, Phys, TableError}; + +/// Secure EL1 timer GSIV at 48 and its flags at 52; non-secure EL1 at 56/60; +/// virtual EL1 at 64/68; EL2 at 72/76. +const SECURE_EL1: usize = 48; +const NON_SECURE_EL1: usize = 56; +const VIRTUAL_EL1: usize = 64; +const EL2: usize = 72; +/// Every field this decoder reads lies below the EL2 flags' end. +pub const GTDT_NEEDED: usize = EL2 + 8; + +/// One timer's interrupt: its GSIV (a PPI) and ACPI 6.5 Table 5.122's flags — +/// bit 0 edge-triggered, bit 1 active-low, bit 2 always-on capable. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct TimerInterrupt { + pub gsiv: u32, + pub flags: u32, +} + +impl TimerInterrupt { + pub fn edge(self) -> bool { + self.flags & 1 != 0 + } + + pub fn active_low(self) -> bool { + self.flags & 2 != 0 + } +} + +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct Gtdt { + pub secure_el1: TimerInterrupt, + pub non_secure_el1: TimerInterrupt, + pub virtual_el1: TimerInterrupt, + pub el2: TimerInterrupt, +} + +/// The GTDT at `rsdp_addr`, decoded. +pub fn gtdt(phys: P, rsdp_addr: u64) -> Result { + let table = find_table(phys, rsdp_addr, b"GTDT", GTDT_NEEDED)?; + let short = TableError::Length { declared: table.len() as u32, needed: GTDT_NEEDED }; + let timer = |at: usize| -> Result { + Ok(TimerInterrupt { + gsiv: table.u32_at(at).ok_or(short)?, + flags: table.u32_at(at + 4).ok_or(short)?, + }) + }; + Ok(Gtdt { + secure_el1: timer(SECURE_EL1)?, + non_secure_el1: timer(NON_SECURE_EL1)?, + virtual_el1: timer(VIRTUAL_EL1)?, + el2: timer(EL2)?, + }) +} diff --git a/toyos-acpi/src/lib.rs b/toyos-acpi/src/lib.rs index ed75b64af3b..90ad4a8e3ba 100644 --- a/toyos-acpi/src/lib.rs +++ b/toyos-acpi/src/lib.rs @@ -7,7 +7,7 @@ //! //! Multi-byte fields are composed from bytes, little-endian, so no firmware //! byte is transmuted into a type. Field offsets cite ACPI 6.5, except MCFG's -//! (PCI Firmware Specification) and HPET's (IA-PC HPET Specification). +//! (PCI Firmware Specification), HPET's (IA-PC HPET Specification) and SPCR's (Microsoft's SPCR specification). //! //! `no_std`, no allocation, no `unsafe`. @@ -15,17 +15,21 @@ #![forbid(unsafe_code)] mod fadt; +mod gtdt; mod madt; mod resource; +mod spcr; pub use fadt::{ century_of, dsdt_address, iapc_boot_arch, reset_register, rtc_century, Century, Reset, CMOS_RAM, FADT_FOR_RESET, FADT_PM1A_CNT_BLK, FADT_X_DSDT, }; pub use madt::{ - madt_entries, IoApicEntry, MadtEntries, MadtEntry, MadtHalt, SourceOverride, MADT_ENTRIES, + madt_entries, Gicc, IoApicEntry, MadtEntries, MadtEntry, MadtHalt, SourceOverride, MADT_ENTRIES, }; +pub use gtdt::{gtdt, Gtdt, TimerInterrupt, GTDT_NEEDED}; pub use resource::{memory_windows, ResourceError, Walk, MAX_LIST_BYTES}; +pub use spcr::{spcr, Gas, SerialInterface, Spcr, GAS_SYSTEM_MEMORY, SPCR_NEEDED}; /// Physical memory, as this decoder reads it. /// diff --git a/toyos-acpi/src/madt.rs b/toyos-acpi/src/madt.rs index fc6f9ca9b3c..921dae67fd9 100644 --- a/toyos-acpi/src/madt.rs +++ b/toyos-acpi/src/madt.rs @@ -4,7 +4,7 @@ //! one running past the list ends the walk with a [`MadtHalt`]: neither can be //! resynchronised, and a walk that tried would not terminate. -use crate::{u16le, u32le, Phys, Table, SDT_HEADER_LEN}; +use crate::{u16le, u32le, u64le, Phys, Table, SDT_HEADER_LEN}; /// ACPI 6.5 Table 5.19: `Local Interrupt Controller Address` (4) and `Flags` /// (4) follow the header; the interrupt controller structures start here. @@ -38,10 +38,29 @@ pub enum MadtEntry { LocalApic { apic_id: u32, enabled: bool }, IoApic(IoApicEntry), SourceOverride(SourceOverride), + /// Type 0xB (Table 5.37): one CPU's GIC CPU interface; `enabled` is flags bit 0. + Gicc(Gicc), + /// Type 0xC (Table 5.39): the GIC distributor. + Gicd { base: u64, version: u8 }, + /// Type 0xE (Table 5.43): a range holding GICv3 redistributors. + Gicr { base: u64, length: u32 }, + /// Type 0xF (Table 5.44): a GICv3 Interrupt Translation Service. + Its { id: u32, base: u64 }, /// A type this kernel does not act on, or one too short to hold its own fields. Other(u8), } +/// MADT type 0xB, the fields a GICv3 kernel reads: which CPU it is +/// (`MPIDR`), whether it may be started, and where its redistributor is when +/// firmware names one per CPU rather than as a range. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct Gicc { + pub uid: u32, + pub enabled: bool, + pub gicr_base: u64, + pub mpidr: u64, +} + /// The entry whose declared length the list cannot hold; the last item a walk yields. #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub struct MadtHalt { @@ -116,6 +135,20 @@ impl Iterator for MadtEntries

    { apic_id: u32le(phys, base + 4), enabled: u32le(phys, base + 8) & 1 != 0, }, + // Table 5.37: ACPI Processor UID (8..12), Flags (12..16), GICR Base + // Address (60..68), MPIDR (68..76). 76 bytes is ACPI 5.1's length. + (0xB, 76..) => MadtEntry::Gicc(Gicc { + uid: u32le(phys, base + 8), + enabled: u32le(phys, base + 12) & 1 != 0, + gicr_base: u64le(phys, base + 60), + mpidr: u64le(phys, base + 68), + }), + // Table 5.39: Physical Base Address (8..16), GIC Version (20). + (0xC, 24..) => MadtEntry::Gicd { base: u64le(phys, base + 8), version: phys.byte(base + 20) }, + // Table 5.43: Discovery Range Base Address (4..12), Length (12..16). + (0xE, 16..) => MadtEntry::Gicr { base: u64le(phys, base + 4), length: u32le(phys, base + 12) }, + // Table 5.44: GIC ITS ID (4..8), Physical Base Address (8..16). + (0xF, 20..) => MadtEntry::Its { id: u32le(phys, base + 4), base: u64le(phys, base + 8) }, _ => MadtEntry::Other(entry_type), })) } diff --git a/toyos-acpi/src/spcr.rs b/toyos-acpi/src/spcr.rs new file mode 100644 index 00000000000..727a0a23da5 --- /dev/null +++ b/toyos-acpi/src/spcr.rs @@ -0,0 +1,83 @@ +//! The SPCR (Microsoft "Serial Port Console Redirection Table", revision 2 +//! and later): which UART firmware's console is on, and where. + +use crate::{find_table, Phys, TableError, SDT_HEADER_LEN}; + +/// Interface Type (1) at 36, reserved to 40, Base Address (a 12-byte Generic +/// Address Structure) at 40, Interrupt Type at 52, IRQ at 53, Global System +/// Interrupt at 54..58. +const INTERFACE_TYPE: usize = SDT_HEADER_LEN; +const BASE_ADDRESS: usize = 40; +const GSIV: usize = 54; +/// Every field this decoder reads lies below the GSIV's end. +pub const SPCR_NEEDED: usize = GSIV + 4; + +/// ACPI 6.5 §5.2.3.2, Table 5.1: a register block's place and access shape. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct Gas { + /// 0 is system memory, 1 system I/O. + pub space: u8, + pub bit_width: u8, + pub bit_offset: u8, + /// 1..=4 are byte, word, dword and qword access; 0 is undefined. + pub access_size: u8, + pub address: u64, +} + +/// The Generic Address Structure's system-memory space id. +pub const GAS_SYSTEM_MEMORY: u8 = 0; + +/// The UART kinds the DBG2 table's serial subtypes name, as far as a kernel +/// that drives them needs to tell them apart. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum SerialInterface { + /// 0x00: a full 16550. + Ns16550, + /// 0x03: an Arm PL011. + Pl011, + /// 0x0E: the Arm SBSA generic UART, a PL011 subset firmware configured. + SbsaGeneric, + /// 0x0D: the same, restricted to 32-bit accesses. + SbsaGeneric32, + /// Any other subtype, by number. + Other(u8), +} + +impl SerialInterface { + fn from_raw(raw: u8) -> Self { + match raw { + 0x00 => Self::Ns16550, + 0x03 => Self::Pl011, + 0x0D => Self::SbsaGeneric32, + 0x0E => Self::SbsaGeneric, + other => Self::Other(other), + } + } +} + +/// What the SPCR says about firmware's console. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub struct Spcr { + pub interface: SerialInterface, + pub base: Gas, + /// The UART's interrupt as a global system interrupt. + pub gsiv: u32, +} + +/// The SPCR at `rsdp_addr`, decoded. +pub fn spcr(phys: P, rsdp_addr: u64) -> Result { + let table = find_table(phys, rsdp_addr, b"SPCR", SPCR_NEEDED)?; + let short = TableError::Length { declared: table.len() as u32, needed: SPCR_NEEDED }; + let byte = |at| table.byte(at).ok_or(short); + Ok(Spcr { + interface: SerialInterface::from_raw(byte(INTERFACE_TYPE)?), + base: Gas { + space: byte(BASE_ADDRESS)?, + bit_width: byte(BASE_ADDRESS + 1)?, + bit_offset: byte(BASE_ADDRESS + 2)?, + access_size: byte(BASE_ADDRESS + 3)?, + address: table.u64_at(BASE_ADDRESS + 4).ok_or(short)?, + }, + gsiv: table.u32_at(GSIV).ok_or(short)?, + }) +} diff --git a/toyos-acpi/tests/fixtures.rs b/toyos-acpi/tests/fixtures.rs index c34ed71fb7f..c7f4c2c171d 100644 --- a/toyos-acpi/tests/fixtures.rs +++ b/toyos-acpi/tests/fixtures.rs @@ -48,6 +48,10 @@ fn the_madt_names_the_two_cpus_that_boot_and_the_chip_that_interrupts_them() { MadtEntry::IoApic(e) => io_apics.push(e), MadtEntry::SourceOverride(o) => overrides.push(o), MadtEntry::Other(_) => {} + gic @ (MadtEntry::Gicc(_) + | MadtEntry::Gicd { .. } + | MadtEntry::Gicr { .. } + | MadtEntry::Its { .. }) => panic!("q35 publishes no GIC structure, and the walk found {gic:?}"), } } diff --git a/toyos-bootmap/src/aarch64.rs b/toyos-bootmap/src/aarch64.rs new file mode 100644 index 00000000000..9d833667a01 --- /dev/null +++ b/toyos-bootmap/src/aarch64.rs @@ -0,0 +1,65 @@ +//! AArch64's encoding of a [`Plan`](crate::Plan): the VMSAv8-64 stage 1 +//! descriptors of a 4 KiB granule (Arm ARM K.a, D8.3), and the one `MAIR_EL1` +//! whose indices they name — the loader writes the one, the kernel's entry +//! loads the other, and both read them here. + +use crate::Cache; + +/// `MAIR_EL1` index 0: Device-nGnRE, registers. +pub const ATTR_DEVICE: u64 = 0; +/// `MAIR_EL1` index 1: Normal, inner and outer write-back, read- and +/// write-allocate — RAM. +pub const ATTR_NORMAL: u64 = 1; +/// `MAIR_EL1` index 2: Normal, inner and outer non-cacheable — the scanout, +/// whose stores gather as write-combining ones do. +pub const ATTR_NORMAL_NC: u64 = 2; +/// Each index's attribute byte (D24.2.110), in index order: the value +/// `PAR_EL1.ATTR` also reports a translation's type in. +pub const ATTRS: [u8; 3] = [0x04, 0xFF, 0x44]; +/// `MAIR_EL1` whole. +pub const MAIR: u64 = ATTRS[0] as u64 | (ATTRS[1] as u64) << 8 | (ATTRS[2] as u64) << 16; + +/// A table descriptor (bits 1:0 = 0b11) naming the next table down. +const TABLE: u64 = 0b11; +/// A block descriptor (bits 1:0 = 0b01) at level 1 or 2. +const BLOCK: u64 = 0b01; +/// `SH` = inner shareable, bits 9:8. +const INNER_SHAREABLE: u64 = 0b11 << 8; +/// `SH` = outer shareable. +const OUTER_SHAREABLE: u64 = 0b10 << 8; +/// The access flag, bit 10: set, so the first access does not fault. +const AF: u64 = 1 << 10; +/// Privileged execute-never, bit 53. +const PXN: u64 = 1 << 53; +/// Unprivileged execute-never, bit 54. +const UXN: u64 = 1 << 54; + +/// A page descriptor (bits 1:0 = 0b11) at level 3. +const PAGE: u64 = 0b11; + +/// A descriptor naming the next table down, at `phys`. +pub const fn table(phys: u64) -> u64 { + phys | TABLE +} + +/// A 2 MiB block at `phys`: EL1 read-write and EL0 nothing (`AP` = 0b00), and +/// executable at EL1 only where it is memory — the kernel's image is. A +/// device is never executable, since a speculative fetch from one is a read +/// of its registers. +pub const fn block(phys: u64, cache: Cache) -> u64 { + phys | BLOCK | AF | attributes(cache) +} + +const fn attributes(cache: Cache) -> u64 { + match cache { + Cache::Memory => ATTR_NORMAL << 2 | INNER_SHAREABLE | UXN, + Cache::Device => ATTR_DEVICE << 2 | PXN | UXN, + Cache::Scanout => ATTR_NORMAL_NC << 2 | OUTER_SHAREABLE | PXN | UXN, + Cache::Firmware => panic!("AArch64 has no range registers to type memory: its plan types by the map"), + } +} + +/// A 4 KiB page at `phys`, with [`block`]'s attributes. +pub const fn page(phys: u64, cache: Cache) -> u64 { + phys | PAGE | AF | attributes(cache) +} diff --git a/toyos-bootmap/src/lib.rs b/toyos-bootmap/src/lib.rs index 30be68a996c..43052c48750 100644 --- a/toyos-bootmap/src/lib.rs +++ b/toyos-bootmap/src/lib.rs @@ -1,34 +1,44 @@ //! The bootloader's transient page tables, decided rather than built. //! -//! Between the loader's `mov cr3` and the kernel's `mm::init` there is one -//! mapping in the machine, and everything the kernel touches in that window has -//! to be in it — its own image, the boot parameter, and the panel it reports a -//! wedge on. +//! Between the loader's switch to these tables and the kernel's `mm::init` +//! there is one mapping in the machine, and everything the kernel touches in +//! that window has to be in it — its own image, the boot parameter, and the +//! panel it reports a wedge on. //! -//! Pure: three numbers in, a [`Plan`] out. The loader allocates the pages and -//! writes the entries. +//! Both architectures walk the same shape — a root (x86-64's PML4, AArch64's +//! L0), a table per 512 GiB (PDPT, L1), a table per GiB (page directory, L2) +//! of 2 MiB leaves — so one [`Plan`] serves both. What differs is how a leaf +//! is typed ([`Typing`]) and how an entry is encoded ([`x86_64`], +//! [`aarch64`]). +//! +//! Pure: the scanout and, where the architecture types memory by firmware's +//! map, the write-back ranges in; a [`Plan`] out. The loader allocates the +//! pages and writes the entries. #![no_std] #![forbid(unsafe_code)] use core::fmt; +pub mod aarch64; +pub mod x86_64; + /// The page every entry in this map describes. pub const PAGE_2M: u64 = 2 * 1024 * 1024; const GIB: u64 = 1 << 30; -/// One PDPT reaches 512 GiB, and the map has two: the identity view at PML4[0] -/// and the high-half view at PML4[256]. +/// One second-level table reaches 512 GiB, and the map has two: the identity +/// view at root slot 0 and the high-half view at root slot 256. const GIB_PER_PDPT: u64 = 512; -/// PML4[0]: physical memory at its own address, which the `mov cr3` itself -/// runs from. -pub const PML4_IDENTITY: usize = 0; +/// Root slot 0: physical memory at its own address, which the switch to these +/// tables itself runs from. +pub const ROOT_IDENTITY: usize = 0; -/// PML4[256]: the same memory at `PHYS_OFFSET`, whose bits 39..48 are 256 and -/// which is where the kernel's entry point is called. -pub const PML4_HIGH_HALF: usize = 256; +/// Root slot 256: the same memory at `PHYS_OFFSET`, whose bits 39..48 are 256 +/// and which is where the kernel runs from. +pub const ROOT_HIGH_HALF: usize = 256; /// How much physical memory the map covers, at identity and at `PHYS_OFFSET` /// alike. Everything the entry jump needs, not everything `KernelArgs` names. @@ -44,8 +54,18 @@ const SCANOUT_DIRECTORIES: usize = 2; /// Every page directory a [`Plan`] can name. pub const MAX_DIRECTORIES: usize = LOW_DIRECTORIES + SCANOUT_DIRECTORIES; -/// The pool a builder needs: a PML4, a PDPT per view, and every directory. -pub const MAX_PAGES: usize = 3 + MAX_DIRECTORIES; +/// The small page a split 2 MiB page is mapped in. +pub const PAGE_4K: u64 = 4096; + +/// Leaves in one table. +const PAGES_PER_TABLE: u64 = PAGE_2M / PAGE_4K; + +/// The 2 MiB pages a scanout covers only in part: at most its first and its last. +const FINE_TABLES: usize = 2; + +/// The pool a builder needs: a root, a second-level table per view, every +/// directory, and a table of 4 KiB leaves per split page. +pub const MAX_PAGES: usize = 3 + MAX_DIRECTORIES + FINE_TABLES; /// Why a machine's memory does not fit these tables. #[derive(Clone, Copy, PartialEq, Eq, Debug)] @@ -55,10 +75,13 @@ pub enum Refusal { Unaligned(u64), /// The range's own end does not fit an address. Extent { base: u64, len: u64 }, - /// Past the reach of the two PDPTs this map has. + /// Past the reach of the two second-level tables this map has. PastPdpt(u64), /// More directories than [`MAX_DIRECTORIES`]. Directories(usize), + /// A 2 MiB page of the low map that is write-back memory in part and not + /// in the rest: either type is wrong for some of it. + Mixed(u64), } impl fmt::Display for Refusal { @@ -72,98 +95,180 @@ impl fmt::Display for Refusal { } Self::PastPdpt(gib) => write!( f, - "GiB {gib} is past the {GIB_PER_PDPT} this map's two PDPTs reach" + "GiB {gib} is past the {GIB_PER_PDPT} this map's two second-level tables reach" ), Self::Directories(needed) => { write!(f, "{needed} page directories are needed and {MAX_DIRECTORIES} may be named") } + Self::Mixed(phys) => write!( + f, + "the 2 MiB page at {phys:#x} is part write-back memory and part not, so no one \ + memory type is right for all of it" + ), } } } -/// What a 2 MiB entry selects. +/// What a 2 MiB entry is, which is what its memory type follows from. #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub enum Cache { - /// PAT entry 0, whose type is the MTRR's — plain memory. - DeferToMtrr, - /// PCD and PWT set with the PAT bit clear: PAT entry 3, uncacheable under - /// every MTRR type and under an unprogrammed PAT, which is what the machine - /// has until the kernel's `pat::init`. - Uncacheable, + /// Typed by the architecture's own range registers rather than by the + /// entry: x86-64's MTRRs, beneath an entry that selects plain memory. + Firmware, + /// Write-back memory, every byte of it, by firmware's map. + Memory, + /// Not memory by firmware's map: registers, or nothing at all. + Device, + /// The scanout. + Scanout, } -impl Cache { - /// The bits a 2 MiB entry carries for this type, beside its address and the - /// present, writable and page-size bits every entry has. - pub const fn bits(self) -> u64 { - /// Page-level cache disable, bit 4. - const PCD: u64 = 1 << 4; - /// Page-level write-through, bit 3. - const PWT: u64 = 1 << 3; - match self { - Self::DeferToMtrr => 0, - Self::Uncacheable => PCD | PWT, +/// How the pages that are not the scanout are typed. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Typing<'a> { + /// By the architecture's range registers: every such page is [`Cache::Firmware`]. + Firmware, + /// By firmware's memory map: these ranges, `(base, length)`, are + /// write-back memory; a page wholly outside them is a device's, and a page + /// partly inside is [`Refusal::Mixed`]. + ByMap(&'a [(u64, u64)]), +} + +impl Typing<'_> { + /// The type of the `size`-byte page at `phys`. + fn of(self, phys: u64, size: u64) -> Result { + let Typing::ByMap(memory) = self else { return Ok(Cache::Firmware) }; + let end = phys + size; + // Bytes of the page the ranges cover; firmware's ranges do not overlap. + let covered: u64 = memory + .iter() + .map(|&(base, len)| base.saturating_add(len).min(end).saturating_sub(base.max(phys))) + .sum(); + match covered { + 0 => Ok(Cache::Device), + c if c == size => Ok(Cache::Memory), + _ => Err(Refusal::Mixed(phys)), } } } -/// One 2 MiB entry the map holds. +/// Where a leaf sits. +#[derive(Clone, Copy, PartialEq, Eq, Debug)] +pub enum Slot { + /// A 2 MiB leaf: in which of [`Plan::directories`], by position, and at + /// which index. + Directory { directory: usize, index: usize }, + /// A 4 KiB leaf: in which of [`Plan::fine_tables`], by position, and at + /// which index. + Fine { table: usize, index: usize }, +} + +/// One leaf the map holds. #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub struct Entry { pub phys: u64, - /// Which of [`Plan::directories`] holds it, by position. - pub directory: usize, - /// Its index in that directory. - pub index: usize, + pub slot: Slot, pub cache: Cache, } /// Where a machine's memory and its scanout go in the loader's two views. #[derive(Clone, Copy, PartialEq, Eq, Debug)] -pub struct Plan { +pub struct Plan<'a> { gibs: [u64; MAX_DIRECTORIES], directories: usize, + /// The 2 MiB pages split into 4 KiB leaves, by base. + fine: [u64; FINE_TABLES], + fines: usize, scanout: Option<(u64, u64)>, + typing: Typing<'a>, } -impl Plan { - /// Lay out [`BOOT_MAP_BYTES`] and `scanout`, or say why neither can be. +impl<'a> Plan<'a> { + /// Lay out [`BOOT_MAP_BYTES`] and `scanout`, typed by `typing`, or say why + /// they cannot be. /// - /// `scanout` is firmware's framebuffer as firmware reports it. Its base - /// must be 2 MiB aligned; its length is rounded up, because a page cannot - /// end anywhere else and what the last one covers past the framebuffer is - /// the same aperture firmware put it in. - pub fn new(scanout: Option<(u64, u64)>) -> Result { - let mut plan = Self { gibs: [0; MAX_DIRECTORIES], directories: 0, scanout: None }; + /// `scanout` is firmware's framebuffer as firmware reports it. Under + /// [`Typing::Firmware`] its base must be 2 MiB aligned and its length is + /// rounded up to whole 2 MiB pages, because what the last one covers past + /// the framebuffer is the same aperture firmware put it in. Under + /// [`Typing::ByMap`] it need only be 4 KiB aligned: a 2 MiB page it covers + /// in part is split into 4 KiB leaves, so the scanout's type reaches no + /// byte beside it — a framebuffer firmware carved out of RAM sits between + /// memory other owners hold. + pub fn new(scanout: Option<(u64, u64)>, typing: Typing<'a>) -> Result { + let mut plan = Self { + gibs: [0; MAX_DIRECTORIES], + directories: 0, + fine: [0; FINE_TABLES], + fines: 0, + scanout: None, + typing, + }; for gib in 0..BOOT_MAP_BYTES / GIB { plan.claim(gib); } - let Some((base, len)) = scanout else { return Ok(plan) }; - if base % PAGE_2M != 0 { + if let Some((base, len)) = scanout { + plan.place_scanout(base, len)?; + } + // Every leaf that is not the scanout typed once here, so `entries` + // cannot meet a refusal. + for page in 0..BOOT_MAP_BYTES / PAGE_2M { + let phys = page * PAGE_2M; + if !plan.is_split(phys) && !plan.in_scanout(phys, PAGE_2M) { + typing.of(phys, PAGE_2M)?; + } + } + for &base in plan.fine_tables() { + for page in 0..PAGES_PER_TABLE { + let phys = base + page * PAGE_4K; + if !plan.in_scanout(phys, PAGE_4K) { + typing.of(phys, PAGE_4K)?; + } + } + } + Ok(plan) + } + + /// Claim the directories and the split pages `base..base + len` needs, + /// and record the extent the map gives it. + fn place_scanout(&mut self, base: u64, len: u64) -> Result<(), Refusal> { + let granule = match self.typing { + Typing::Firmware => PAGE_2M, + Typing::ByMap(_) => PAGE_4K, + }; + if base % granule != 0 { return Err(Refusal::Unaligned(base)); } let end = base.checked_add(len).ok_or(Refusal::Extent { base, len })?; - let covered = - end.checked_next_multiple_of(PAGE_2M).ok_or(Refusal::Extent { base, len })? - base; - let last = (base + covered - PAGE_2M) / GIB; - if last >= GIB_PER_PDPT { - return Err(Refusal::PastPdpt(last)); + let end = end.checked_next_multiple_of(granule).ok_or(Refusal::Extent { base, len })?; + let first = base / PAGE_2M * PAGE_2M; + let last = (end - 1) / PAGE_2M * PAGE_2M; + if last / GIB >= GIB_PER_PDPT { + return Err(Refusal::PastPdpt(last / GIB)); } // Counted whole before one is claimed, so a machine needing fourteen is // told fourteen rather than that one more than the budget was wanted. let low = LOW_DIRECTORIES as u64; - let fresh = if last < low { 0 } else { last - (base / GIB).max(low) + 1 }; + let fresh = if last / GIB < low { 0 } else { last / GIB - (first / GIB).max(low) + 1 }; let required = LOW_DIRECTORIES + fresh as usize; if required > MAX_DIRECTORIES { return Err(Refusal::Directories(required)); } - let mut phys = base; - while phys < base + covered { - plan.claim(phys / GIB); - phys += PAGE_2M; + let mut page = first; + while page <= last { + self.claim(page / GIB); + page += PAGE_2M; } - plan.scanout = Some((base, covered)); - Ok(plan) + // At most the first and the last page are covered in part. + for page in [first, last] { + let whole = base <= page && page + PAGE_2M <= end; + if !whole && !self.is_split(page) { + self.fine[self.fines] = page; + self.fines += 1; + } + } + self.scanout = Some((base, end - base)); + Ok(()) } /// The GiB each directory covers, in the order a builder allocates them. @@ -171,48 +276,81 @@ impl Plan { &self.gibs[..self.directories] } - /// The scanout as this map covers it: firmware's base, rounded up to whole - /// pages. `None` is a machine with no framebuffer. + /// The 2 MiB pages mapped by a table of 4 KiB leaves rather than one + /// leaf, by base, in the order a builder allocates those tables. + pub fn fine_tables(&self) -> &[u64] { + &self.fine[..self.fines] + } + + /// Where each of [`Plan::fine_tables`] is named from: its directory, by + /// position, and its index there. + pub fn fine_slots(&self) -> impl Iterator + '_ { + self.fine_tables().iter().map(move |&base| self.directory_slot(base)) + } + + /// The scanout as this map covers it: firmware's base, and its length + /// rounded up to whole leaves. `None` is a machine with no framebuffer. pub fn scanout(&self) -> Option<(u64, u64)> { self.scanout } - /// Every entry the map holds, low memory first and each place once: a - /// scanout inside the low map retypes the pages already there rather than - /// adding a second entry for them. + /// Every leaf the map holds, low memory first and each place once: a + /// scanout inside the low map retypes the leaves already there rather than + /// adding a second one for them. pub fn entries(&self) -> impl Iterator + '_ { - let plan = *self; let low = (0..BOOT_MAP_BYTES / PAGE_2M) - .map(move |page| plan.entry(page * PAGE_2M, plan.cache_of(page * PAGE_2M))); - let scanout = self.scanout.into_iter().flat_map(move |(base, covered)| { - (0..covered / PAGE_2M) - .map(move |page| base + page * PAGE_2M) - .filter(|phys| *phys >= BOOT_MAP_BYTES) - .map(move |phys| plan.entry(phys, Cache::Uncacheable)) + .map(|page| page * PAGE_2M) + .filter(move |phys| !self.is_split(*phys)) + .map(move |phys| self.leaf(phys, self.cache_of(phys, PAGE_2M))); + let scanout = self.scanout.into_iter().flat_map(move |(base, len)| { + let first = base / PAGE_2M * PAGE_2M; + (0..(base + len - first).div_ceil(PAGE_2M)) + .map(move |page| first + page * PAGE_2M) + .filter(move |phys| *phys >= BOOT_MAP_BYTES && !self.is_split(*phys)) + .map(move |phys| self.leaf(phys, Cache::Scanout)) + }); + let fine = self.fine_tables().iter().enumerate().flat_map(move |(table, &base)| { + (0..PAGES_PER_TABLE).map(move |index| { + let phys = base + index * PAGE_4K; + Entry { + phys, + slot: Slot::Fine { table, index: index as usize }, + cache: self.cache_of(phys, PAGE_4K), + } + }) }); - low.chain(scanout) + low.chain(scanout).chain(fine) } - /// What a page of the low map selects: the scanout's type where the two - /// overlap, and plain memory everywhere else. - fn cache_of(&self, phys: u64) -> Cache { - match self.scanout { - Some((base, covered)) if phys >= base && phys < base + covered => Cache::Uncacheable, - _ => Cache::DeferToMtrr, - } + fn in_scanout(&self, phys: u64, size: u64) -> bool { + self.scanout.is_some_and(|(base, len)| phys >= base && phys + size <= base + len) + } + + fn is_split(&self, page: u64) -> bool { + self.fine_tables().contains(&page) } - fn entry(&self, phys: u64, cache: Cache) -> Entry { - Entry { - phys, - directory: self - .directories() - .iter() - .position(|gib| *gib == phys / GIB) - .expect("every entry's GiB was claimed"), - index: ((phys / PAGE_2M) % 512) as usize, - cache, + /// What a leaf is: the scanout where the scanout covers it, and what the + /// typing says everywhere else. + fn cache_of(&self, phys: u64, size: u64) -> Cache { + if self.in_scanout(phys, size) { + return Cache::Scanout; } + self.typing.of(phys, size).expect("`new` typed every leaf") + } + + fn directory_slot(&self, phys: u64) -> (usize, usize) { + let directory = self + .directories() + .iter() + .position(|gib| *gib == phys / GIB) + .expect("every entry's GiB was claimed"); + (directory, ((phys / PAGE_2M) % 512) as usize) + } + + fn leaf(&self, phys: u64, cache: Cache) -> Entry { + let (directory, index) = self.directory_slot(phys); + Entry { phys, slot: Slot::Directory { directory, index }, cache } } /// Name the directory for `gib`, unless it is already named. Infallible: diff --git a/toyos-bootmap/src/x86_64.rs b/toyos-bootmap/src/x86_64.rs new file mode 100644 index 00000000000..6c138526df2 --- /dev/null +++ b/toyos-bootmap/src/x86_64.rs @@ -0,0 +1,38 @@ +//! x86-64's encoding of a [`Plan`](crate::Plan): Intel SDM Vol. 3A §4.5, +//! Tables 4-15 (a PML4 or PDPT entry naming a table) and 4-17 (a page +//! directory entry mapping a 2 MiB page). + +use crate::Cache; + +const PRESENT: u64 = 1 << 0; +const WRITABLE: u64 = 1 << 1; +/// Page-level write-through, bit 3. +const PWT: u64 = 1 << 3; +/// Page-level cache disable, bit 4. +const PCD: u64 = 1 << 4; +/// A page directory entry that maps 2 MiB rather than naming a table, bit 7. +const PAGE_SIZE: u64 = 1 << 7; + +/// An entry naming the next table down, at `phys`. +pub const fn table(phys: u64) -> u64 { + phys | PRESENT | WRITABLE +} + +/// A 2 MiB leaf at `phys`. Memory and the MTRR-typed page select PAT entry 0, +/// whose type is the MTRR's; a device and the scanout select entry 3 (PCD and +/// PWT with the PAT bit clear), uncacheable under every MTRR type and under an +/// unprogrammed PAT, which is what the machine has until the kernel's +/// `pat::init`. +pub const fn block(phys: u64, cache: Cache) -> u64 { + let typed = match cache { + Cache::Firmware | Cache::Memory => 0, + Cache::Device | Cache::Scanout => PCD | PWT, + }; + phys | PRESENT | WRITABLE | PAGE_SIZE | typed +} + +/// A 4 KiB leaf at `phys` (Table 4-19), typed as [`block`] types a 2 MiB one; +/// a 4 KiB entry's PAT bit is bit 7, and it stays clear. +pub const fn page(phys: u64, cache: Cache) -> u64 { + block(phys, cache) & !PAGE_SIZE +} diff --git a/toyos-bootmap/tests/plan.rs b/toyos-bootmap/tests/plan.rs index a1e68e9bda7..465326c60cf 100644 --- a/toyos-bootmap/tests/plan.rs +++ b/toyos-bootmap/tests/plan.rs @@ -1,33 +1,55 @@ //! The machines this decision is made for: a framebuffer inside the low map, //! one above it, one on the boundary between them, and one that fits no map. -use toyos_bootmap::{Cache, Plan, Refusal, BOOT_MAP_BYTES, MAX_PAGES, PAGE_2M}; +use toyos_bootmap::{ + aarch64, x86_64, Cache, Entry, Plan, Refusal, Slot, Typing, BOOT_MAP_BYTES, MAX_PAGES, PAGE_2M, + PAGE_4K, +}; const GIB: u64 = 1 << 30; /// 1920x1080x4, which is neither a whole page nor a whole GiB. const PANEL: u64 = 0x7e9000; -/// Every entry lands in a directory the plan named, at an index inside it, and -/// no two entries land in the same place — the property the loader's writes -/// rest on, since it stores each one where the plan says without looking. +/// Every leaf lands in a table the plan named, at an index inside it, no two +/// land in the same place, and no leaf lands where a split page's table is +/// named — the property the loader's writes rest on, since it stores each one +/// where the plan says without looking. fn is_consistent(plan: &Plan) { - let mut seen: Vec<(usize, usize)> = Vec::new(); + let mut seen: Vec = Vec::new(); + let tables: Vec<(usize, usize)> = plan.fine_slots().collect(); for entry in plan.entries() { - assert!(entry.directory < plan.directories().len(), "{entry:?}"); - assert!(entry.index < 512, "{entry:?}"); - assert!(seen.iter().all(|at| *at != (entry.directory, entry.index)), "{entry:?} twice"); - seen.push((entry.directory, entry.index)); + match entry.slot { + Slot::Directory { directory, index } => { + assert!(directory < plan.directories().len(), "{entry:?}"); + assert!(index < 512, "{entry:?}"); + assert!(!tables.contains(&(directory, index)), "{entry:?} over a split page's table"); + } + Slot::Fine { table, index } => { + assert!(table < plan.fine_tables().len(), "{entry:?}"); + assert!(index < 512, "{entry:?}"); + } + } + assert!(!seen.contains(&entry.slot), "{entry:?} twice"); + seen.push(entry.slot); + } + assert!(3 + plan.directories().len() + plan.fine_tables().len() <= MAX_PAGES); +} + +/// A 2 MiB leaf's directory, by position. +fn directory(e: &Entry) -> usize { + match e.slot { + Slot::Directory { directory, .. } => directory, + Slot::Fine { .. } => panic!("{e:?} is a 4 KiB leaf"), } - assert!(3 + plan.directories().len() <= MAX_PAGES); } #[test] fn a_machine_with_no_framebuffer_is_the_low_map_and_nothing_else() { - let plan = Plan::new(None).expect("the low map alone"); + let plan = Plan::new(None, Typing::Firmware).expect("the low map alone"); assert_eq!(plan.directories(), [0, 1, 2, 3]); assert_eq!(plan.scanout(), None); assert_eq!(plan.entries().count() as u64, BOOT_MAP_BYTES / PAGE_2M); - assert!(plan.entries().all(|e| e.cache == Cache::DeferToMtrr)); + assert!(plan.entries().all(|e| e.cache == Cache::Firmware)); is_consistent(&plan); } @@ -35,12 +57,12 @@ fn a_machine_with_no_framebuffer_is_the_low_map_and_nothing_else() { /// retypes pages the low map already holds. #[test] fn a_framebuffer_inside_the_low_map_adds_no_directory() { - let plan = Plan::new(Some((0xc000_0000, PANEL))).expect("inside the low map"); + let plan = Plan::new(Some((0xc000_0000, PANEL)), Typing::Firmware).expect("inside the low map"); assert_eq!(plan.directories(), [0, 1, 2, 3]); // Rounded up to whole pages, and up only. assert_eq!(plan.scanout(), Some((0xc000_0000, 0x80_0000))); let uncacheable: Vec = - plan.entries().filter(|e| e.cache == Cache::Uncacheable).map(|e| e.phys).collect(); + plan.entries().filter(|e| e.cache == Cache::Scanout).map(|e| e.phys).collect(); assert_eq!(uncacheable, [0xc000_0000, 0xc020_0000, 0xc040_0000, 0xc060_0000]); is_consistent(&plan); } @@ -49,15 +71,16 @@ fn a_framebuffer_inside_the_low_map_adds_no_directory() { /// the low map untouched. #[test] fn a_framebuffer_above_the_low_map_adds_its_own_directory() { - let plan = Plan::new(Some((256 * GIB, PANEL))).expect("above the low map"); + let plan = Plan::new(Some((256 * GIB, PANEL)), Typing::Firmware).expect("above the low map"); assert_eq!(plan.directories(), [0, 1, 2, 3, 256]); assert_eq!(plan.scanout(), Some((256 * GIB, 0x80_0000))); let mine: Vec = plan .entries() - .filter(|e| e.cache == Cache::Uncacheable) + .filter(|e| e.cache == Cache::Scanout) .map(|e| { - assert_eq!(e.directory, 4, "the scanout is not in the low map's directories"); - e.index + let Slot::Directory { directory, index } = e.slot else { panic!("{e:?}") }; + assert_eq!(directory, 4, "the scanout is not in the low map's directories"); + index }) .collect(); assert_eq!(mine, [0, 1, 2, 3]); @@ -68,13 +91,13 @@ fn a_framebuffer_above_the_low_map_adds_its_own_directory() { /// past it, not the last GiB of it. #[test] fn a_framebuffer_at_the_boundary_is_outside_the_low_map() { - let plan = Plan::new(Some((BOOT_MAP_BYTES, PANEL))).expect("at the boundary"); + let plan = Plan::new(Some((BOOT_MAP_BYTES, PANEL)), Typing::Firmware).expect("at the boundary"); assert_eq!(plan.directories(), [0, 1, 2, 3, 4]); - assert!(plan.entries().filter(|e| e.cache == Cache::Uncacheable).all(|e| e.directory == 4)); + assert!(plan.entries().filter(|e| e.cache == Cache::Scanout).all(|e| directory(&e) == 4)); is_consistent(&plan); // One page below it is the low map's last page, and adds nothing. - let inside = Plan::new(Some((BOOT_MAP_BYTES - PAGE_2M, PAGE_2M))).expect("the last page"); + let inside = Plan::new(Some((BOOT_MAP_BYTES - PAGE_2M, PAGE_2M)), Typing::Firmware).expect("the last page"); assert_eq!(inside.directories(), [0, 1, 2, 3]); is_consistent(&inside); } @@ -85,12 +108,12 @@ fn a_framebuffer_at_the_boundary_is_outside_the_low_map() { #[test] fn a_framebuffer_that_straddles_the_low_maps_end_is_mapped_from_both_arms() { let base = BOOT_MAP_BYTES - PAGE_2M; - let plan = Plan::new(Some((base, 4 * PAGE_2M))).expect("across the end"); + let plan = Plan::new(Some((base, 4 * PAGE_2M)), Typing::Firmware).expect("across the end"); assert_eq!(plan.directories(), [0, 1, 2, 3, 4]); let mine: Vec<(u64, usize)> = plan .entries() - .filter(|e| e.cache == Cache::Uncacheable) - .map(|e| (e.phys, e.directory)) + .filter(|e| e.cache == Cache::Scanout) + .map(|e| (e.phys, directory(&e))) .collect(); assert_eq!( mine, @@ -111,37 +134,27 @@ fn a_framebuffer_that_straddles_the_low_maps_end_is_mapped_from_both_arms() { #[test] fn a_framebuffer_that_straddles_a_gib_claims_both() { let base = 8 * GIB - PAGE_2M; - let plan = Plan::new(Some((base, 4 * PAGE_2M))).expect("straddling"); + let plan = Plan::new(Some((base, 4 * PAGE_2M)), Typing::Firmware).expect("straddling"); assert_eq!(plan.directories(), [0, 1, 2, 3, 7, 8]); - assert_eq!(3 + plan.directories().len(), MAX_PAGES); + // Every directory the budget has; the two split-page tables are a + // map-typed plan's, and this one splits nothing. + assert_eq!(3 + plan.directories().len() + 2, MAX_PAGES); + assert!(plan.fine_tables().is_empty()); is_consistent(&plan); } -/// The bits the loader stores, decided here: PAT entry 3 is PCD and PWT with -/// the PAT bit clear, and entry 0 is none of the three. -#[test] -fn uncacheable_is_pat_entry_three_and_plain_memory_is_entry_zero() { - const PWT: u64 = 1 << 3; - const PCD: u64 = 1 << 4; - const PAT_2M: u64 = 1 << 12; - assert_eq!(Cache::DeferToMtrr.bits(), 0); - assert_eq!(Cache::Uncacheable.bits(), PCD | PWT); - // The PAT bit is what would select entry 4, and nothing here sets it. - assert_eq!(Cache::Uncacheable.bits() & PAT_2M, 0); - assert_eq!(Cache::DeferToMtrr.bits() & PAT_2M, 0); -} /// The two views, so the loader reads the slots rather than knowing them. #[test] fn the_high_half_slot_is_the_top_nine_bits_of_phys_offset() { const PHYS_OFFSET: u64 = 0xFFFF_8000_0000_0000; - assert_eq!(toyos_bootmap::PML4_IDENTITY, 0); - assert_eq!(toyos_bootmap::PML4_HIGH_HALF, ((PHYS_OFFSET >> 39) & 0x1ff) as usize); + assert_eq!(toyos_bootmap::ROOT_IDENTITY, 0); + assert_eq!(toyos_bootmap::ROOT_HIGH_HALF, ((PHYS_OFFSET >> 39) & 0x1ff) as usize); } #[test] fn a_base_off_the_page_is_refused_rather_than_rounded_down() { - assert_eq!(Plan::new(Some((0xc000_1000, PANEL))), Err(Refusal::Unaligned(0xc000_1000))); + assert_eq!(Plan::new(Some((0xc000_1000, PANEL)), Typing::Firmware), Err(Refusal::Unaligned(0xc000_1000))); // The refusal names the address, because a machine owner reads it. assert!(Refusal::Unaligned(0xc000_1000).to_string().contains("0xc0001000")); } @@ -149,13 +162,141 @@ fn a_base_off_the_page_is_refused_rather_than_rounded_down() { #[test] fn a_range_no_map_can_hold_is_refused_by_name() { // Past the two PDPTs' 512 GiB. - assert_eq!(Plan::new(Some((512 * GIB, PANEL))), Err(Refusal::PastPdpt(512))); + assert_eq!(Plan::new(Some((512 * GIB, PANEL)), Typing::Firmware), Err(Refusal::PastPdpt(512))); // Its own end does not fit an address, either as it is given... let base = u64::MAX - PAGE_2M + 1; - assert_eq!(Plan::new(Some((base, u64::MAX))), Err(Refusal::Extent { base, len: u64::MAX })); + assert_eq!(Plan::new(Some((base, u64::MAX)), Typing::Firmware), Err(Refusal::Extent { base, len: u64::MAX })); // ...or once rounded up to the page it must end on. - assert_eq!(Plan::new(Some((base, 1))), Err(Refusal::Extent { base, len: 1 })); + assert_eq!(Plan::new(Some((base, 1)), Typing::Firmware), Err(Refusal::Extent { base, len: 1 })); // Wider than the directories a plan may name, and told what it would need. - assert_eq!(Plan::new(Some((16 * GIB, 10 * GIB))), Err(Refusal::Directories(14))); + assert_eq!(Plan::new(Some((16 * GIB, 10 * GIB)), Typing::Firmware), Err(Refusal::Directories(14))); assert!(Refusal::Directories(14).to_string().contains("14 page directories")); } + +/// The bits the x86-64 loader stores: PAT entry 3 is PCD and PWT with the PAT +/// bit clear, and entry 0 is none of the three. +#[test] +fn uncacheable_is_pat_entry_three_and_plain_memory_is_entry_zero() { + const PRESENT_WRITABLE_2M: u64 = 1 | 1 << 1 | 1 << 7; + const PWT: u64 = 1 << 3; + const PCD: u64 = 1 << 4; + const PAT_2M: u64 = 1 << 12; + let at = 0x4020_0000; + assert_eq!(x86_64::block(at, Cache::Firmware), at | PRESENT_WRITABLE_2M); + assert_eq!(x86_64::block(at, Cache::Scanout), at | PRESENT_WRITABLE_2M | PCD | PWT); + // The PAT bit is what would select entry 4, and nothing here sets it. + for cache in [Cache::Firmware, Cache::Memory, Cache::Device, Cache::Scanout] { + assert_eq!(x86_64::block(at, cache) & PAT_2M, 0, "{cache:?}"); + } + assert_eq!(x86_64::table(0x1000), 0x1003); +} + +/// QEMU `virt` with 1 GiB: flash and devices below 1 GiB, RAM from 1 GiB to 2 +/// GiB, nothing above. What the map calls memory is memory, the rest a device's. +#[test] +fn a_map_typed_plan_is_memory_where_firmware_says_write_back_and_a_device_elsewhere() { + let ram = [(0x4000_0000, 0x4000_0000)]; + let plan = Plan::new(None, Typing::ByMap(&ram)).expect("virt's map"); + for entry in plan.entries() { + let want = if (0x4000_0000..0x8000_0000).contains(&entry.phys) { Cache::Memory } else { Cache::Device }; + assert_eq!(entry.cache, want, "{entry:?}"); + } + is_consistent(&plan); +} + +/// A page firmware says is write-back in part: no one type is right for it. +#[test] +fn a_page_that_is_part_memory_is_refused_by_address() { + let ram = [(0x4000_0000, 0x4000_0000 + 0x1000)]; + assert_eq!(Plan::new(None, Typing::ByMap(&ram)), Err(Refusal::Mixed(0x8000_0000))); + assert!(Refusal::Mixed(0x8000_0000).to_string().contains("0x80000000")); + // Two adjacent ranges that meet inside a page make it whole. + let split = [(0x4000_0000, 0x4010_0000 - 0x4000_0000), (0x4010_0000, 0x3ff0_0000)]; + assert!(Plan::new(None, Typing::ByMap(&split)).is_ok()); +} + +/// A scanout inside memory is the scanout's leaves, not a mixed page. +#[test] +fn a_scanout_inside_memory_is_typed_as_the_scanout() { + let ram = [(0x4000_0000, 0x4000_0000)]; + let plan = Plan::new(Some((0x5000_0000, 0x10_0000)), Typing::ByMap(&ram)).expect("inside"); + let scanout: Vec = + plan.entries().filter(|e| e.cache == Cache::Scanout).map(|e| e.phys).collect(); + assert_eq!(scanout, (0..256).map(|page| 0x5000_0000 + page * PAGE_4K).collect::>()); + is_consistent(&plan); + // And a scanout over a page that is part memory takes that page whole. + let part = [(0x4000_0000, 0x1000)]; + assert!(Plan::new(Some((0x4000_0000, PAGE_2M)), Typing::ByMap(&part)).is_ok()); + assert_eq!(Plan::new(None, Typing::ByMap(&part)), Err(Refusal::Mixed(0x4000_0000))); +} + +/// The AArch64 descriptors, against the Arm ARM's bit positions (K.a, D8.3.1 +/// and D8.3.2): a table is 0b11; a block 0b01 with `AttrIndx` at 4:2, `SH` at +/// 9:8, `AF` at 10, `PXN` at 53 and `UXN` at 54; and `MAIR_EL1`'s bytes are the +/// Device-nGnRE, Normal write-back and Normal non-cacheable encodings of +/// D24.2.110. +#[test] +fn the_aarch64_descriptors_carry_the_attribute_index_the_mair_names() { + let at = 0x4020_0000; + let attr_index = |d: u64| (d >> 2) & 0b111; + let memory = aarch64::block(at, Cache::Memory); + let device = aarch64::block(at, Cache::Device); + let scanout = aarch64::block(at, Cache::Scanout); + for d in [memory, device, scanout] { + assert_eq!(d & 0b11, 0b01, "a block"); + assert_ne!(d & 1 << 10, 0, "the access flag"); + assert_eq!(d & 0b11 << 6, 0, "EL1 read-write, EL0 nothing"); + assert_ne!(d & 1 << 54, 0, "never executable at EL0"); + assert_eq!(d & 0x0000_FFFF_FFE0_0000, at, "the output address"); + } + assert_eq!(aarch64::ATTRS[attr_index(memory) as usize], 0xFF); + assert_eq!(aarch64::ATTRS[attr_index(device) as usize], 0x04); + assert_eq!(aarch64::ATTRS[attr_index(scanout) as usize], 0x44); + assert_eq!(memory & 1 << 53, 0, "the kernel executes from memory"); + assert_ne!(device & 1 << 53, 0, "and never from a device"); + assert_eq!((memory >> 8) & 0b11, 0b11, "memory is inner shareable"); + assert_eq!(aarch64::MAIR, 0x44_FF_04); + // A level-3 page is 0b11 with the same attributes. + assert_eq!(aarch64::page(0x5000_1000, Cache::Scanout), (scanout & !0x0000_FFFF_FFFF_F000 & !0b11) | 0x5000_1000 | 0b11); + assert_eq!(aarch64::table(0x1000), 0x1003); +} + +/// QEMU `virt`'s ramfb as AAVMF placed it on a real boot: 3 MiB carved out of +/// RAM at 0xbc7a0000, on no 2 MiB boundary. Its first and last 2 MiB pages +/// are split, so the scanout's type reaches exactly its own bytes and the RAM +/// beside it stays memory; the page wholly inside it stays one leaf. +#[test] +fn a_scanout_carved_out_of_ram_splits_the_pages_it_shares() { + let ram = [(0x4000_0000, 0x8000_0000)]; + let (base, len) = (0xbc7a_0000, 0x30_0000); + let plan = Plan::new(Some((base, len)), Typing::ByMap(&ram)).expect("ramfb"); + assert_eq!(plan.fine_tables(), [0xbc60_0000, 0xbca0_0000]); + let scanout: Vec = plan.entries().filter(|e| e.cache == Cache::Scanout).collect(); + let bytes: u64 = scanout + .iter() + .map(|e| match e.slot { + Slot::Directory { .. } => PAGE_2M, + Slot::Fine { .. } => PAGE_4K, + }) + .sum(); + assert_eq!(bytes, len, "the scanout's type covers its own bytes and none beside them"); + assert!(scanout.iter().all(|e| e.phys >= base && e.phys < base + len)); + // The 4 KiB leaf just below it and just past it are memory. + let at = |phys: u64| plan.entries().find(|e| e.phys == phys).expect("mapped").cache; + assert_eq!(at(base - PAGE_4K), Cache::Memory); + assert_eq!(at(base + len), Cache::Memory); + assert_eq!(at(0xbc80_0000), Cache::Scanout); + is_consistent(&plan); + // The same framebuffer under range-register typing is refused, as before. + assert_eq!(Plan::new(Some((base, len)), Typing::Firmware), Err(Refusal::Unaligned(base))); +} + +/// A map-typed scanout must still start on a 4 KiB page. +#[test] +fn a_map_typed_scanout_off_a_small_page_is_refused() { + let ram = [(0x4000_0000, 0x8000_0000)]; + assert_eq!( + Plan::new(Some((0xbc7a_0800, 0x1000)), Typing::ByMap(&ram)), + Err(Refusal::Unaligned(0xbc7a_0800)) + ); +} diff --git a/toyos-ld/src/collect.rs b/toyos-ld/src/collect.rs index 199eb9fc29f..c6691924656 100644 --- a/toyos-ld/src/collect.rs +++ b/toyos-ld/src/collect.rs @@ -496,6 +496,11 @@ fn parse_object(obj: &object::File, name: &str) -> Result idx, _ => continue, @@ -1519,3 +1524,11 @@ fn coff_arm64_insn_addend(r_type: RelocType, data: &[u8], offset: u64) -> Option _ => return None, }) } + +/// An AArch64 (or Arm) mapping symbol's name: `$x`, `$d`, `$a` or `$t`, +/// alone or followed by `.` and anything. +fn is_mapping_symbol(name: &str) -> bool { + let Some(rest) = name.strip_prefix('$') else { return false }; + let mut chars = rest.chars(); + matches!(chars.next(), Some('x' | 'd' | 'a' | 't')) && matches!(chars.next(), None | Some('.')) +} diff --git a/toyos-ld/src/main.rs b/toyos-ld/src/main.rs index 040e170241f..51af97a436a 100644 --- a/toyos-ld/src/main.rs +++ b/toyos-ld/src/main.rs @@ -34,6 +34,18 @@ fn main() { match result { Ok(output_bytes) => { + if let Some(declared) = args.pe_machine { + // `link_pe` wrote a PE header whose `e_lfanew` is at 0x3C and + // whose `Machine` follows the four-byte signature. + let pe_at = u32::from_le_bytes(output_bytes[0x3C..0x40].try_into().unwrap()) as usize; + let written = u16::from_le_bytes([output_bytes[pe_at + 4], output_bytes[pe_at + 5]]); + if written != declared { + eprintln!( + "toyos-ld: /MACHINE declares {declared:#06x} and the objects are {written:#06x}" + ); + process::exit(1); + } + } // Write to a temp file then atomically rename. On macOS, overwriting // a signed binary in-place leaves a stale code-signature cache on the // old inode, causing the kernel to hang the next launch in _dyld_start. @@ -169,6 +181,8 @@ struct Args { inputs: Vec, lib_paths: Vec, libs: Vec, + /// The PE machine `/MACHINE:` declared, checked against the output's. + pe_machine: Option, } fn parse_args() -> Args { @@ -187,6 +201,7 @@ fn parse_args() -> Args { let mut inputs = Vec::new(); let mut lib_paths = Vec::new(); let mut libs = Vec::new(); + let mut pe_machine = None; let mut i = 1; while i < argv.len() { @@ -232,6 +247,10 @@ fn parse_args() -> Args { s if s.to_ascii_uppercase().starts_with("/LIBPATH:") => { lib_paths.push(PathBuf::from(&s[9..])); } + s if s.to_ascii_uppercase().starts_with("/MACHINE:") => { + pe_machine = Some(parse_pe_machine(&s[9..])); + pe = true; + } s if s.starts_with('/') && !s[1..].contains('/') && s.as_bytes().get(1).is_some_and(|c| c.is_ascii_uppercase()) => { // Ignore other MSVC flags (/NOLOGO, /DEBUG, /INCREMENTAL:NO, etc.) } @@ -264,7 +283,21 @@ fn parse_args() -> Args { OutputFormat::Pie }; - Args { output, entry, format, gc_sections, build_id, map_file, inputs, lib_paths, libs } + Args { output, entry, format, gc_sections, build_id, map_file, inputs, lib_paths, libs, pe_machine } +} + +/// `/MACHINE:`'s value as the PE `Machine` field it declares (PE/COFF +/// specification, "Machine Types"). The output's machine is the objects', and +/// this is checked against it rather than obeyed. +fn parse_pe_machine(val: &str) -> u16 { + match val.to_ascii_lowercase().as_str() { + "x64" => 0x8664, + "arm64" => 0xAA64, + _ => { + eprintln!("toyos-ld: /MACHINE:{val} is not a machine this linker writes"); + process::exit(1); + } + } } fn parse_pe_subsystem(val: &str) -> PeSubsystem { From 4f65770edcd2b0f486b2d4804b30ba0f5bc78bec Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 15:19:32 +0200 Subject: [PATCH 11/50] harness: Profile::Virt boots AArch64 under HVF, in a local tier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `Profile::Virt` is QEMU `virt` (GICv3, AAVMF, ramfb, the boot stick on xHCI, the PL011): a profile is a whole machine, so it is the profile that says which architecture a boot is, and `qemu_command` takes the firmware, binary, accelerator, CPU and machine from it. The image is built for that architecture, and one with no userland yet is refused the suite's programs. Two tests, both `Tier::Local` — every unsharded `cargo test`, never a CI shard, because no hosted runner boots AArch64 yet (the port's stage 8 measures that): - virt_early_panic: the boot log stage 3 promises on the PL011 (the PL011 SPCR placed, the control registers as declared, the memory map, the MADT's GIC, the GTDT) and the early panic on serial and on the panel, in its fatal colours. - virt_early_fault: an undefined instruction right after the console step reaches the vectors, which report the entry and the class and panic. Negative control, run on this tree: `VBAR_EL1` pointed 0x800 past the table (one added `add` in trap::install) — virt_early_fault goes red, the misrouted exception reporting itself as "synchronous from EL0 in AArch32". `Profile::Virt` boots with 2 GiB: AAVMF allocates from the top of RAM, which past 4 GiB is outside the loader's boot map (issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...b-and-firmware-decides-what-lands-in-it.md | 31 ++++ src/tiers.rs | 20 +++ tests/common/qemu.rs | 87 +++++++++-- tests/toyos.rs | 137 ++++++++++++++++-- 4 files changed, 252 insertions(+), 23 deletions(-) create mode 100644 issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md diff --git a/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md b/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md new file mode 100644 index 00000000000..98afdb6af8f --- /dev/null +++ b/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md @@ -0,0 +1,31 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# The boot map reaches 4 GiB, and firmware decides what lands in it + +`toyos-bootmap`'s plan maps physical `0..BOOT_MAP_BYTES` (4 GiB) plus the +scanout, and everything the kernel touches before `mm::init` has to be inside +it. The loader places none of it there: the kernel image +(`alloc_kernel_memory`), the memory map it hands over, the boot parameter and +ROOT's image all come from the pool allocator or `AnyPages`, wherever firmware +puts them. `report_reach` then refuses the boot by name for the three it +checks — and does not check the memory map at all, which the kernel reads +through the direct map before `mm::init` too. + +On q35 OVMF allocates below 4 GiB, so the x86 suite has never met it. On QEMU +`virt` RAM starts at 1 GiB and AAVMF allocates from its top: with `-m 4G` +the kernel image lands at 0x13b400000 and the loader refuses the boot +("Kernel image at 0x13b400000+0xb07000 is outside the boot map"). The +harness's `Profile::Virt` boots with 2 GiB for that reason +(`tests/common/qemu.rs`, `qemu_command`). A real machine of either +architecture with RAM above 4 GiB and a firmware that allocates top-down is +the same defect. + +**Exit condition**: the loader allocates what the kernel reads before +`mm::init` with `AllocateType::MaxAddress` inside the map (or the plan grows to +reach all of firmware's write-back memory), the memory map is among what +`report_reach` checks, and `Profile::Virt` boots with the 4 GiB every other +profile has. diff --git a/src/tiers.rs b/src/tiers.rs index 6713cb8999c..f0c57216b9f 100644 --- a/src/tiers.rs +++ b/src/tiers.rs @@ -11,6 +11,9 @@ //! enforces it: a name that is Nightly because its verdict is anchored to real //! time, or because it shares a boot with one that is slow, stays where it is //! whatever it measures. +//! +//! The local tier is the third, and the only one CI never runs: its guests are +//! of an architecture no hosted runner has been measured to boot. /// Which run a registered test belongs to. #[derive(Clone, Copy, PartialEq, Eq, Debug)] @@ -19,4 +22,21 @@ pub enum Tier { Fast, /// `cargo test --test toyos-build -- --nightly`. Nightly, + /// Every `cargo test` on a developer's machine and no sharded run: a guest + /// of an architecture no CI runner boots yet. The AArch64 port's stage 8 + /// (`issues/kernel/toyos-runs-on-arm64.md`) measures the runners and + /// moves these rows to `Fast` or `Nightly`. + Local, +} + +impl Tier { + /// Whether a run selects this tier: `nightly` is `--nightly`, `sharded` + /// a `--shard`, which only CI's jobs pass. + pub fn selected(self, nightly: bool, sharded: bool) -> bool { + match self { + Self::Fast => true, + Self::Nightly => nightly, + Self::Local => !sharded, + } + } } diff --git a/tests/common/qemu.rs b/tests/common/qemu.rs index cccd4f57016..3803bcfc3eb 100644 --- a/tests/common/qemu.rs +++ b/tests/common/qemu.rs @@ -1374,6 +1374,21 @@ pub enum Profile { /// that is the driver's work. The negative control on the whole bind path /// — a first-match kernel would go green on every other HDA test. HdaTwoLive, + /// QEMU `virt` on AArch64 (GICv3, AAVMF): a GOP from `ramfb`, the boot + /// stick on an xHCI, the PL011, and nothing else — no virtio, NIC, NVMe or + /// IOMMU. The machine the AArch64 port reaches its console on, and the only + /// profile that is not a q35. + Virt, +} + +impl Profile { + /// The architecture this machine is: every profile is a q35 but `Virt`. + pub fn arch(self) -> Arch { + match self { + Self::Virt => Arch::Aarch64, + _ => Arch::X86_64, + } + } } /// The vIOMMU a profile puts on the machine. @@ -1697,6 +1712,21 @@ pub const NVME_T14_BLOCKS: u64 = NVME_T14_BYTES / 4096; impl Profile { fn shape(self) -> Shape { match self { + Self::Virt => Shape { + vga: "std", + panel: None, + gpu: None, + virtio: Virtio::Absent, + nic: Nic::Absent, + xhci: &[XHCI_DEFAULT], + storage_bus: "xhci.0", + usb: &[], + nvme_bytes: 0, + nvme_lba_bytes: NVME_LBA_DEFAULT, + usb_disks: &[], + hda: &[], + iommu: None, + }, Self::Headless => Shape { vga: "none", panel: None, @@ -2716,7 +2746,7 @@ pub fn build_boot_image_carrying( } else { toyos_build::build::TEST_KERNEL }; - build_boot_image_with(test_crate, c_tests, rust_tests, staged, kernel, kernel_params, false) + build_boot_image_with(SUITE_ARCH, test_crate, c_tests, rust_tests, staged, kernel, kernel_params, false) } /// Refuse a staged [`BootOptions::boot_image`] that is not the image this @@ -2799,6 +2829,7 @@ fn kernel_of(options: &BootOptions) -> Vec<&'static str> { } fn build_boot_image_with( + arch: Arch, test_crate: &Path, c_tests: &[(String, Vec)], rust_tests: &[(String, Vec)], @@ -2847,6 +2878,14 @@ fn build_boot_image_with( toyos_build::build::DEBUG_KERNEL_BUILD, ); KERNELS.lock().expect("the kernel census").insert(joined); + // The suite's programs are built for one architecture, and a ROOT of + // another carries none of them. + assert!( + arch == SUITE_ARCH || (c_tests.is_empty() && rust_tests.is_empty()), + "a {} image was handed programs built for {}", + arch.name(), + SUITE_ARCH.name() + ); let mut extra_files: Vec<(String, Vec)> = Vec::new(); for (name, data) in c_tests { extra_files.push((format!("bin/test_c_{name}"), data.clone())); @@ -2868,7 +2907,7 @@ fn build_boot_image_with( ); let quiet = !VERBOSE.load(Ordering::Relaxed); - let plan = toyos_build::build::Plan::new(SUITE_ARCH, &config_path, kernel_features, kernel_params); + let plan = toyos_build::build::Plan::new(arch, &config_path, kernel_features, kernel_params); toyos_build::build::build_test_image(&compile::repo_root(), &plan, quiet, &extra_files) } @@ -2963,6 +3002,7 @@ impl QemuInstance { let params = options.params(); let params: Vec<&str> = params.iter().map(String::as_str).collect(); build_boot_image_with( + options.profile.arch(), test_crate, c_tests, rust_tests, @@ -4246,12 +4286,13 @@ fn qemu_command( "mute removes the only console a virtio profile has" ); + let arch = options.profile.arch(); let repo = compile::repo_root(); - let [firmware_code, firmware_vars] = SUITE_ARCH.pflash(&repo); + let [firmware_code, firmware_vars] = arch.pflash(&repo); - let mut qemu = Command::new(SUITE_ARCH.qemu()); + let mut qemu = Command::new(arch.qemu()); - let accel = SUITE_ARCH.accel(); + let accel = arch.accel(); if accel.is_hardware() { qemu.arg("-accel").arg(accel.name()); } @@ -4269,7 +4310,15 @@ fn qemu_command( // `kernel-irqchip=split` only when there is a unit: interrupt remapping // needs the userspace half of the irqchip, and a machine with no unit has // no reason to be built differently from the one it has always been. - let mut machine = String::from("q35"); + let mut machine = match arch { + Arch::X86_64 => String::from("q35"), + Arch::Aarch64 => { + // `virt` has no i8042 to take away, and the unit a profile declares + // is VT-d, which it has none of either. + assert!(options.i8042 && shape.iommu.is_none(), "`virt` has neither an i8042 nor VT-d"); + String::from("virt,gic-version=3") + } + }; if !options.i8042 { machine.push_str(",i8042=off"); } @@ -4281,14 +4330,21 @@ fn qemu_command( qemu.arg("-rtc").arg(format!("base={base}")); } + // `virt` puts RAM at 1 GiB and AAVMF allocates from its top, so with 4 GiB + // the loader's allocations land past the 4 GiB its boot map reaches and it + // refuses the boot: issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md. + let memory = match arch { + Arch::X86_64 => "4G", + Arch::Aarch64 => "2G", + }; qemu.arg("-machine") .arg(&machine) .arg("-cpu") - .arg(SUITE_ARCH.cpu(accel)) + .arg(arch.cpu(accel)) .arg("-smp") .arg(options.smp.to_string()) .arg("-m") - .arg("4G") + .arg(memory) .arg("-drive") .arg(firmware_code) .arg("-drive") @@ -4406,11 +4462,24 @@ fn qemu_command( ); qemu.arg("-device").arg(format!("{gpu}{platform}")); } - qemu.arg("-vga").arg(shape.vga).arg("-display").arg("none"); + match (arch, shape.vga) { + (Arch::X86_64, vga) => { + qemu.arg("-vga").arg(vga); + } + // `virt` has no VGA: a GOP there is firmware's over `ramfb`, a + // framebuffer in guest memory that needs no driver after it. + (Arch::Aarch64, "std") => { + qemu.arg("-device").arg("ramfb"); + } + (Arch::Aarch64, "none") => {} + (Arch::Aarch64, other) => panic!("`virt` has no `-vga {other}`"), + } + qemu.arg("-display").arg("none"); if !options.takes_the_reset { qemu.arg("-no-reboot"); } if let Some((w, h)) = shape.panel { + assert_eq!(arch, Arch::X86_64, "a panel is declared through VGA's EDID, and `virt` has no VGA"); // A panel on a machine with no VGA adapter is a declaration nothing // emits, which is the silently-inert field this suite refuses by name. assert_eq!( diff --git a/tests/toyos.rs b/tests/toyos.rs index 01e109ca26d..4f83d748124 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -591,6 +591,9 @@ const SCREEN_TESTS: &[(&str, Sched, Tier)] = &[ // than through `halt_all_cpus`. ("screen_fatal_halt_composited", Sched::Parallel, Tier::Nightly), ("screen_pager_keys", Sched::Serial, Tier::Nightly), + // AArch64 guests on QEMU `virt`: local, because no CI runner boots one yet. + ("virt_early_panic", Sched::Parallel, Tier::Local), + ("virt_early_fault", Sched::Parallel, Tier::Local), ]; /// What `screen_console_shell` types, and what it then looks for on its own. @@ -5831,6 +5834,99 @@ fn run_screen_test( )?; Ok(()) } + "virt_early_panic" => { + // The AArch64 port's stage 3, whole: the loader on AAVMF, the entry's + // drop and declaration, the PL011 SPCR names, the boot's survey of + // the machine, and a panic on both channels. No userland: that + // architecture has none to put on ROOT yet. + let started = std::time::Instant::now(); + let mut qemu = QemuInstance::boot_with_options( + test_config, + &[], + &[], + BootOptions { + profile: qemu::Profile::Virt, + qmp: true, + kernel_params: &["test-early-panic"], + ready_marker: "EARLY PANIC:", + ..Default::default() + }, + ); + let dump = qemu.screendump_until("EARLY PANIC:", Duration::from_secs(30)); + let rest = qemu.drain_serial(Duration::from_secs(1)); + let serial = format!("{}\n{rest}", qemu.boot_log()); + eprintln!(" [virt] the panel is up {} ms after the boot began", started.elapsed().as_millis()); + // What stage 3 prints before it panics: every item is a record + // only the AArch64 side of the kernel writes. + for want in [ + "serial: PL011 at", + "control registers: SCTLR_EL1=", + "as declared; entered at EL", + "memory: 0x0000400", + "ACPI: MADT GICD at 0x8000000, GIC version 3", + "ACPI: MADT GICC uid=0 mpidr=0x0 enabled=true", + "ACPI: GTDT timers:", + "EARLY PANIC: panicked at", + "test-early-panic: on-screen console check", + ] { + if !serial.contains(want) { + return Err(format!("{want:?} not on the PL011\nserial:\n{serial}")); + } + } + let text = dump.text(); + print_screen(name, &text); + for want in ["EARLY PANIC:", "test-early-panic: on-screen console check"] { + if !text.contains(want) { + return Err(format!("{want:?} not on the ramfb panel\ndecoded screen:\n{text}")); + } + } + check_colors( + &dump, + FILL_FATAL, + &["EARLY PANIC:", "test-early-panic: on-screen console check"], + "ACPI: GTDT timers:", + )?; + Ok(()) + } + "virt_early_fault" => { + // The vectors, judged by the one thing a broken table cannot do: + // report. An undefined instruction right after the console step + // reaches `trap::exception`, which says what was taken and panics, + // and the panic reaches both channels. A table that is misaligned, + // never installed, or whose entry does not reach the handler + // leaves the guest silent, and this waits for a line that never + // comes. + let mut qemu = QemuInstance::boot_with_options( + test_config, + &[], + &[], + BootOptions { + profile: qemu::Profile::Virt, + qmp: true, + kernel_params: &["test-early-fault"], + ready_marker: "EARLY PANIC:", + ..Default::default() + }, + ); + let dump = qemu.screendump_until("EARLY PANIC:", Duration::from_secs(30)); + let rest = qemu.drain_serial(Duration::from_secs(1)); + let serial = format!("{}\n{rest}", qemu.boot_log()); + for want in [ + "KERNEL PANIC: synchronous from EL1 on SP_EL1: unknown reason (an undefined instruction)", + "EARLY PANIC: panicked at", + "synchronous from EL1 on SP_EL1: unknown reason (an undefined instruction) at 0x", + ] { + if !serial.contains(want) { + return Err(format!("{want:?} not on the PL011\nserial:\n{serial}")); + } + } + let text = dump.text(); + print_screen(name, &text); + if !text.contains("EARLY PANIC:") || !text.contains("undefined instruction") { + return Err(format!("the fault's report is not on the ramfb panel\ndecoded screen:\n{text}")); + } + Ok(()) + } "screen_early_panic" => { // The window the console exists for: percpu is not up, mm::init // has not run, and on a machine with no UART nothing else can @@ -19528,7 +19624,8 @@ fn build_tasks<'a>( fn check_shard_partition(all_tests: &[TestDef]) { let pricing = shard_pricing(); for &nightly in &[false, true] { - let in_tier = |tier: Tier| nightly || tier == Tier::Fast; + // Sharded, because every run this partition is for is one. + let in_tier = |tier: Tier| tier.selected(nightly, true); let tests_to_run: Vec<&TestDef> = all_tests.iter().filter(|_| in_tier(SHARED_TIER)).collect(); let machine_to_run: Vec<(&str, Sched)> = MACHINE_TESTS @@ -20175,7 +20272,7 @@ fn main() { // nobody remembers. `cargo test -- desktop_window_child` refuses below and // says what to type instead, which is the same information a silent skip // would have withheld. - let in_tier = |tier: Tier| nightly || tier == Tier::Fast; + let in_tier = |tier: Tier| tier.selected(nightly, shard.is_some()); let tests_to_run: Vec<&TestDef> = all_tests .iter() .filter(|t| keep(t.name.as_str()) && in_tier(SHARED_TIER)) @@ -20201,18 +20298,30 @@ fn main() { // introduces, so the names are printed rather than counted, and the line // carries both the command that runs them and the record that says what each // one guarded. - let held_back: Vec<&str> = MACHINE_TESTS - .iter() - .chain(SCREEN_TESTS) - .filter(|(n, _, tier)| keep(n) && !in_tier(*tier)) - .map(|(n, _, _)| *n) - .chain( - AUDIO_TESTS - .iter() - .filter(|(name, tier)| keep(name) && !in_tier(*tier)) - .map(|(name, _)| *name), - ) - .collect(); + let held = |which: Tier| -> Vec<&str> { + MACHINE_TESTS + .iter() + .chain(SCREEN_TESTS) + .filter(|(n, _, tier)| keep(n) && *tier == which && !in_tier(*tier)) + .map(|(n, _, _)| *n) + .chain( + AUDIO_TESTS + .iter() + .filter(|(name, tier)| keep(name) && *tier == which && !in_tier(*tier)) + .map(|(name, _)| *name), + ) + .collect() + }; + let held_back = held(Tier::Nightly); + let held_local = held(Tier::Local); + if !held_local.is_empty() { + eprintln!( + "[toyos] local tier: {} test(s) NOT run, because a sharded run is CI's and no CI \ + runner boots their architecture yet. An unsharded `cargo test` runs them.", + held_local.len(), + ); + eprintln!("[toyos] {}", held_local.join(", ")); + } if !held_back.is_empty() { eprintln!( "[toyos] nightly tier: {} test(s) NOT run. \ From 5c3fcee137701c567bb3851971f84735a1982933 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 15:30:40 +0200 Subject: [PATCH 12/50] =?UTF-8?q?kernel:=20the=20Relaxed=20audit=20?= =?UTF-8?q?=E2=80=94=20one=20data=20race=20and=20three=20publications=20fi?= =?UTF-8?q?xed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every one of the 761 lines naming `Relaxed` under kernel/src (84 files) was read against who stores, who loads, on which CPU, and what the load goes on to trust. What changed: - The panic console's published descriptor was a seqlock over a plain cell: a painter's read of it raced the publisher's write, which the Rust memory model makes undefined whatever the sequence check afterwards says. It is now `drivers/panic_console/published.rs`, a seqlock whose payload is atomic words, compiled into kernel-loom and driven by `tests/panic_console_publish.rs` (a snapshot is one publication whole). Negative control, run: `--features seqlock-writer-fence-off` drops the publisher's Release fence and the model goes red with a torn snapshot. - panic.rs's crash evidence stored its lengths after the bytes "so a read mid-fill reports a short string" — with Relaxed on both sides that held for nothing, not even an NMI on the same CPU. Release/Acquire. - hardlockup's spin record promised "a non-zero lock means the site beside it was already stored" to a report another CPU writes. Release/Acquire. - The USB transport-fault staging (msc::fault, boot-actuators) armed the fault and its opcode Relaxed before the count a disk on another CPU takes; the count is now the Release/Acquire edge, loaded first. What stayed Relaxed, by kind: counters and statistics nothing else reads through; boot-time publications made before the other CPUs exist, which the roster's Release/Acquire release orders; per-CPU and same-thread state; diagnostics whose two words may tear and say so (i8042's unexplained bytes, a task's cpu_ns/running_since pair, nmi_gate's held sample); and the primitives kernel-loom already models, whose Relaxed arms are their negative controls. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel-loom/Cargo.toml | 12 +++ kernel-loom/src/lib.rs | 5 ++ kernel-loom/tests/panic_console_publish.rs | 35 +++++++++ kernel/Cargo.toml | 5 ++ kernel/src/drivers/panic_console/mod.rs | 64 +++++++-------- kernel/src/drivers/panic_console/published.rs | 77 +++++++++++++++++++ kernel/src/drivers/xhci/wait/msc.rs | 13 +++- kernel/src/hardlockup/mod.rs | 12 +-- kernel/src/panic.rs | 22 ++++-- 9 files changed, 197 insertions(+), 48 deletions(-) create mode 100644 kernel-loom/tests/panic_console_publish.rs create mode 100644 kernel/src/drivers/panic_console/published.rs diff --git a/kernel-loom/Cargo.toml b/kernel-loom/Cargo.toml index bd27abf6aed..467a97fb8ea 100644 --- a/kernel-loom/Cargo.toml +++ b/kernel-loom/Cargo.toml @@ -178,6 +178,18 @@ device-irq-lossy = [] # the same name only so `cfg` checking knows it. dump-report-relaxed = [] +# The negative control for the panic console's published descriptor. It drops +# the publisher's `Release` fence between its odd mark and its words, so a +# reader can keep words of a publication whose mark it never saw, and +# `panic_console_publish.rs` must red: +# +# cargo test --manifest-path kernel-loom/Cargo.toml --features seqlock-writer-fence-off \ +# --test panic_console_publish +# +# Never on by default and never reachable from a kernel build, which declares +# the same name only so `cfg` checking knows it. +seqlock-writer-fence-off = [] + [dependencies] loom = "0.7" # The record layout the shard is a ring of. `no_std`, no atomics of its own, diff --git a/kernel-loom/src/lib.rs b/kernel-loom/src/lib.rs index 1e4afcf8b78..00bed39f2d0 100644 --- a/kernel-loom/src/lib.rs +++ b/kernel-loom/src/lib.rs @@ -360,3 +360,8 @@ pub mod capture_latch; #[path = "../../kernel/src/drivers/panic_console/access.rs"] pub mod capture_access; + +/// The panic console's published framebuffer descriptor, driven by +/// `tests/panic_console_publish.rs`. +#[path = "../../kernel/src/drivers/panic_console/published.rs"] +pub mod panic_console_published; diff --git a/kernel-loom/tests/panic_console_publish.rs b/kernel-loom/tests/panic_console_publish.rs new file mode 100644 index 00000000000..2544e850c39 --- /dev/null +++ b/kernel-loom/tests/panic_console_publish.rs @@ -0,0 +1,35 @@ +//! Loom: a panic console reader keeps one publication whole or none. +//! +//! The descriptor is four words a painter draws through; half of one +//! publication and half of the next is a pointer with another mode's stride. +//! One publisher replaces it (the boot, a mode set's window) while a painter +//! on another CPU snapshots it with no lock. The negative control is the +//! `seqlock-writer-fence-off` feature, which must red this file. +#![cfg(feature = "loom")] + +use kernel_loom::panic_console_published::{Published, WORDS}; +use loom::sync::Arc; +use loom::thread; + +#[test] +fn a_snapshot_is_one_publication_whole() { + loom::model(|| { + let fb = Arc::new(Published::new()); + fb.publish([1; WORDS]); + + let publisher = { + let fb = fb.clone(); + thread::spawn(move || fb.publish([2; WORDS])) + }; + if let Some(words) = fb.snapshot() { + assert!( + words == [1; WORDS] || words == [2; WORDS], + "a snapshot kept two publications' words: {words:?}" + ); + } + publisher.join().unwrap(); + + // Quiescent: the second publication, whole. + assert_eq!(fb.snapshot(), Some([2; WORDS])); + }); +} diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 80b7526964e..82b29f55d13 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -19,6 +19,11 @@ loom = [] # with either fence removed behaves identically, which is the whole reason the # obligation is a model. wake-fence-off = [] +# The same for the panic console's published descriptor: `kernel-loom` turns it on +# to drop the publisher's `Release` fence from `drivers/panic_console/published.rs`, +# and `kernel-loom/tests/panic_console_publish.rs` must red — a reader keeping a +# descriptor that is half one publication and half the next. +seqlock-writer-fence-off = [] # The same arrangement for a poll ring's one-shot answer: `kernel-loom` turns it # on to split `inbox/once.rs`'s exchange into a load and a store, and # `kernel-loom/tests/poll_once.rs` must red when it does — a poll two posts diff --git a/kernel/src/drivers/panic_console/mod.rs b/kernel/src/drivers/panic_console/mod.rs index 532a1c025a7..ab60e9f5b1e 100644 --- a/kernel/src/drivers/panic_console/mod.rs +++ b/kernel/src/drivers/panic_console/mod.rs @@ -13,6 +13,7 @@ mod access; mod latch; +mod published; use core::cell::UnsafeCell; use core::sync::atomic::{AtomicBool, AtomicU32, AtomicU64, AtomicUsize, Ordering}; @@ -81,11 +82,31 @@ impl Fb { height: 0, format: 0, }; + + /// The descriptor as the seqlock's words. + fn words(self) -> [u64; published::WORDS] { + [ + self.ptr as u64, + self.bytes, + u64::from(self.stride_px) << 32 | u64::from(self.width), + u64::from(self.height) << 32 | u64::from(self.format), + ] + } + + fn from_words([ptr, bytes, stride_width, height_format]: [u64; published::WORDS]) -> Self { + Self { + ptr: ptr as *mut u8, + bytes, + stride_px: (stride_width >> 32) as u32, + width: stride_width as u32, + height: (height_format >> 32) as u32, + format: height_format as u32, + } + } } struct FbCell(UnsafeCell); -// SAFETY: the panic path may take no lock; `FB` is published and read only -// under the `SEQ` seqlock, and `PENDING` has one writer at a time. +// SAFETY: the panic path may take no lock; `PENDING` has one writer at a time. unsafe impl Sync for FbCell {} /// A screenful-and-then-some of rendered log; which lines came from an `alert!` is a [`Level`] flag, never inferred from the text. @@ -206,11 +227,10 @@ struct RenderedCell(UnsafeCell); // or swap atomically. `PAINTING`, `CAPTURE`, and `CAPTURE_ACCESS` serialise the three cells. unsafe impl Sync for RenderedCell {} -/// Seqlock over `FB`; even means stable, odd means a publisher is inside. +/// The descriptor painters draw through, behind a seqlock (`published`). /// Not a `Lock`: its guard drop can dispatch the scheduler, forbidden here. -/// A publisher that dies mid-update leaves this odd forever, costing the screen and nothing else. -static SEQ: AtomicU32 = AtomicU32::new(0); -static FB: FbCell = FbCell(UnsafeCell::new(Fb::DETACHED)); +/// A publisher that dies mid-update leaves it changing forever, costing the screen and nothing else. +static FB: published::Published = published::Published::new(); /// Exactly one painter at a time, taken by every painter without exception. /// [`render`] and [`seal_wedge`] never release it; every other painter does, @@ -312,17 +332,10 @@ static PENDING: FbCell = FbCell(UnsafeCell::new(Fb::DETACHED)); static RAW_PHYS: AtomicU64 = AtomicU64::new(0); static RAW_SIZE: AtomicU64 = AtomicU64::new(0); -/// Boot-time and `set_resolution`-window only: publishers never race, so the load-then-store of `SEQ` needs no CAS. +/// Boot-time and `set_resolution`-window only: publishers never race. fn publish(fb: Fb) { forget_the_glass(); - let seq = SEQ.load(Ordering::Relaxed); - SEQ.store(seq.wrapping_add(1), Ordering::Relaxed); - // The release fence orders the descriptor store between the odd and even markers; a release RMW alone would not. - core::sync::atomic::fence(Ordering::Release); - // SAFETY: the seqlock's payload store; `SEQ` is odd across this write, so - // a concurrent `snapshot` discards what it reads. Publishers never race each other. - unsafe { *FB.0.get() = fb }; - SEQ.store(seq.wrapping_add(2), Ordering::Release); + FB.publish(fb.words()); } /// Stop painting until the next [`rearm`], for a window where the framebuffer may be freed and reallocated. @@ -349,24 +362,11 @@ pub fn disable() { detach(); } -/// Torn means unavailable, never a wild pointer: only two descriptors are -/// ever published, and every torn mixture is caught downstream by the null check or a zero field collapsing draws to no-ops. -/// A second valid descriptor would break that argument, leaving only the fences. +/// One publication whole, or nothing: a descriptor still changing is no +/// screen this instant (`published`, and `kernel-loom`'s `panic_console_publish`). fn snapshot() -> Option { - for _ in 0..4 { - let before = SEQ.load(Ordering::Acquire); - if before & 1 != 0 { - continue; - } - // SAFETY: the seqlock's payload read, the one place `FB` is read - // while a publisher may be inside it — sound on the `SEQ` comparison below, not exclusion. - let fb = unsafe { *FB.0.get() }; - core::sync::atomic::fence(Ordering::Acquire); - if SEQ.load(Ordering::Relaxed) == before { - return (!fb.ptr.is_null()).then_some(fb); - } - } - None + let fb = Fb::from_words(FB.snapshot()?); + (!fb.ptr.is_null()).then_some(fb) } /// Reject a descriptor that could turn a panic into a wild write. diff --git a/kernel/src/drivers/panic_console/published.rs b/kernel/src/drivers/panic_console/published.rs new file mode 100644 index 00000000000..44678a9c1d2 --- /dev/null +++ b/kernel/src/drivers/panic_console/published.rs @@ -0,0 +1,77 @@ +//! The published framebuffer descriptor: a seqlock whose payload is atomic +//! words, so a reader racing the one publisher reads torn words it throws +//! away rather than racing a plain write (a data race, and undefined, in the +//! Rust memory model whatever the check after it concludes). +//! +//! The writer marks the sequence odd, fences `Release`, stores the words +//! `Relaxed` and marks it even with a `Release` store; the reader loads the +//! sequence `Acquire`, the words `Relaxed`, fences `Acquire` and reloads the +//! sequence. A reader whose two loads agree on an even value read words the +//! publication that value ends wrote, all of them. +//! No `crate::` references: `kernel-loom` compiles this file under `feature = "loom"`. + +#[cfg(not(feature = "loom"))] +use core::sync::atomic::{fence, AtomicU32, AtomicU64, Ordering}; + +#[cfg(feature = "loom")] +use loom::sync::atomic::{fence, AtomicU32, AtomicU64, Ordering}; + +/// Words in one descriptor. +pub const WORDS: usize = 4; + +/// Tries a snapshot makes before answering that the descriptor is changing. +const TRIES: usize = 4; + +pub struct Published { + seq: AtomicU32, + words: [AtomicU64; WORDS], +} + +impl Published { + // Must stay `const`: the kernel's is a `static`, and loom's atomics have no const constructor. + #[cfg(not(feature = "loom"))] + pub const fn new() -> Self { + Self { seq: AtomicU32::new(0), words: [const { AtomicU64::new(0) }; WORDS] } + } + + #[allow(clippy::new_without_default)] + #[cfg(feature = "loom")] + pub fn new() -> Self { + Self { seq: AtomicU32::new(0), words: core::array::from_fn(|_| AtomicU64::new(0)) } + } + + /// Replace the descriptor. One publisher at a time: the caller's own + /// exclusion (the boot sequence, a mode set's single-CPU window) is what + /// makes the load-then-store of `seq` sound. + pub fn publish(&self, words: [u64; WORDS]) { + let seq = self.seq.load(Ordering::Relaxed); + self.seq.store(seq.wrapping_add(1), Ordering::Relaxed); + // Orders the odd mark before every word below: a reader that sees a + // new word sees the mark, and throws the read away. + #[cfg(not(feature = "seqlock-writer-fence-off"))] + fence(Ordering::Release); + for (slot, word) in self.words.iter().zip(words) { + slot.store(word, Ordering::Relaxed); + } + self.seq.store(seq.wrapping_add(2), Ordering::Release); + } + + /// The descriptor, whole, or `None` when every try met a publication in + /// progress. + pub fn snapshot(&self) -> Option<[u64; WORDS]> { + for _ in 0..TRIES { + let before = self.seq.load(Ordering::Acquire); + if before & 1 != 0 { + continue; + } + let words = core::array::from_fn(|i| self.words[i].load(Ordering::Relaxed)); + // Orders the word loads before the recheck: a word a later + // publication wrote is one whose odd mark the recheck sees. + fence(Ordering::Acquire); + if self.seq.load(Ordering::Relaxed) == before { + return Some(words); + } + } + None + } +} diff --git a/kernel/src/drivers/xhci/wait/msc.rs b/kernel/src/drivers/xhci/wait/msc.rs index 9d28b7de3c1..19bce936a87 100644 --- a/kernel/src/drivers/xhci/wait/msc.rs +++ b/kernel/src/drivers/xhci/wait/msc.rs @@ -719,7 +719,9 @@ pub(in crate::drivers::xhci) mod staged { pub fn arm(n: u8, fault: Fault, only: Option) { FAULT.store(fault as u8, Ordering::Relaxed); ONLY.store(only.map_or(ANY, u16::from), Ordering::Relaxed); - LEFT.store(n, Ordering::Relaxed); + // Last and `Release`: the disk that takes a fault may be on another CPU, + // and what it takes has to be what was staged with the count it saw. + LEFT.store(n, Ordering::Release); } /// Take back whatever was staged and never taken, and say how many: a @@ -777,14 +779,19 @@ pub(in crate::drivers::xhci) mod staged { /// The fault the command about to go out was staged with, if any. pub fn take(opcode: u8) -> Option { + // The count first and `Acquire`, pairing with `arm`'s `Release`: the + // opcode and the fault read after it are the ones staged with it. + let mut left = LEFT.load(Ordering::Acquire); + if left == 0 { + return None; + } let only = ONLY.load(Ordering::Relaxed); if only != ANY && only != u16::from(opcode) { return None; } - let mut left = LEFT.load(Ordering::Relaxed); loop { let less = left.checked_sub(1)?; - match LEFT.compare_exchange_weak(left, less, Ordering::Relaxed, Ordering::Relaxed) { + match LEFT.compare_exchange_weak(left, less, Ordering::Acquire, Ordering::Acquire) { Ok(_) => break, Err(now) => left = now, } diff --git a/kernel/src/hardlockup/mod.rs b/kernel/src/hardlockup/mod.rs index a7d94e7afa6..97cfca1e717 100644 --- a/kernel/src/hardlockup/mod.rs +++ b/kernel/src/hardlockup/mod.rs @@ -57,7 +57,7 @@ //! timer's. use core::fmt; -use core::sync::atomic::{AtomicBool, AtomicU64, Ordering::Relaxed}; +use core::sync::atomic::{AtomicBool, AtomicU64, Ordering::{Acquire, Relaxed, Release}}; use crate::arch::{cpu, percpu, pmu, smp, trap}; use crate::sched::MAX_CPUS; @@ -317,8 +317,8 @@ pub fn spinning_on(lock: u64, at: &'static core::panic::Location<'static>) -> Sp let was = Spinning { lock: SPIN_LOCK[me].load(Relaxed), at: SPIN_AT[me].load(Relaxed) }; SPIN_AT[me].store(at as *const _ as u64, Relaxed); // Last, and what the reader tests: a non-zero lock means the site beside it - // was already stored. - SPIN_LOCK[me].store(lock, Relaxed); + // was already stored — `Release`, so that holds on another CPU's record. + SPIN_LOCK[me].store(lock, Release); was } @@ -328,7 +328,7 @@ pub fn spinning_on_nothing(was: Spinning) { let me = percpu::cpu_id() as usize; if me < MAX_CPUS { SPIN_AT[me].store(was.at, Relaxed); - SPIN_LOCK[me].store(was.lock, Relaxed); + SPIN_LOCK[me].store(was.lock, Release); } } @@ -350,7 +350,9 @@ struct Waiting(usize); impl fmt::Display for Waiting { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let lock = SPIN_LOCK[self.0].load(Relaxed); + // `Acquire`: pairs with the store that set it, so the site read below is + // at least the one stored before it. + let lock = SPIN_LOCK[self.0].load(Acquire); if lock == 0 { return Ok(()); } diff --git a/kernel/src/panic.rs b/kernel/src/panic.rs index 332894ea090..24e760f8b19 100644 --- a/kernel/src/panic.rs +++ b/kernel/src/panic.rs @@ -53,11 +53,12 @@ impl Kind { } } -/// One CPU's first unfinished crash. Every field is `Relaxed`: one CPU writes -/// its own slot and the same CPU reads it, with interrupts masked throughout, -/// and no other CPU ever looks. Lengths are stored after the bytes, so a slot -/// read mid-fill — an NMI panicking between the claim and the copy — reports -/// a short string rather than the previous crash's tail. +/// One CPU's first unfinished crash. One CPU writes its own slot and the same +/// CPU reads it, with interrupts masked throughout, and no other CPU ever looks. +/// Lengths are stored `Release` after the bytes and loaded `Acquire` before +/// them, so a slot read mid-fill — an NMI panicking between the claim and the +/// copy — reports a short string rather than the previous crash's tail; every +/// other field is `Relaxed`. struct Evidence { kind: AtomicU8, file_len: AtomicU8, @@ -159,7 +160,9 @@ fn copy_tail(dst: &[AtomicU8], len: &AtomicU8, cut: &AtomicU8, src: &[u8]) { for (slot, &b) in dst.iter().zip(tail) { slot.store(b, Ordering::Relaxed); } - len.store(tail.len() as u8, Ordering::Relaxed); + // `Release`: the bytes before the length, for a reader that interrupts + // this copy as much as for one on another CPU. + len.store(tail.len() as u8, Ordering::Release); cut.store(u8::from(from > 0), Ordering::Relaxed); } @@ -172,12 +175,15 @@ fn copy_head(dst: &[AtomicU8], len: &AtomicU8, src: &[u8]) { for (slot, &b) in dst.iter().zip(src.get(..n).unwrap_or(&[])) { slot.store(b, Ordering::Relaxed); } - len.store(n as u8, Ordering::Relaxed); + // `Release`, as in [`copy_tail`]. + len.store(n as u8, Ordering::Release); } /// A slot's bytes as text, in the caller's own buffer. fn read<'a>(src: &[AtomicU8], len: &AtomicU8, out: &'a mut [u8]) -> &'a str { - let n = (len.load(Ordering::Relaxed) as usize).min(out.len()).min(src.len()); + // `Acquire`: pairs with the copy's `Release`, so the bytes read are at + // least the ones that length was stored after. + let n = (len.load(Ordering::Acquire) as usize).min(out.len()).min(src.len()); for (byte, slot) in out.iter_mut().zip(src.iter()) { *byte = slot.load(Ordering::Relaxed); } From 6deeb5c60ecfd6edd6b51bf3dbb8314213d66d4b Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 15:38:42 +0200 Subject: [PATCH 13/50] The host job's gates, green on the port: clippy on both kernels, the licence of AAVMF, and the loom control declared `cargo run -- --ci host` reddened on four things this branch did: - clippy's `manual_is_multiple_of` (toyos-bootmap, the AArch64 trap frame), a doc comment left dangling where irq_took! moved into the architecture, and a doc comment the architecture rules were inserted under (sourcegate's CORPUS); - the harness's `build_boot_image_with`, which takes its eighth argument (the architecture) under an allow that says why; - NOTICE's AAVMF section, which named its terms in the heading but carried no `SPDX-License-Identifier:` line for the licence gate to read; - `seqlock-writer-fence-off`, a new kernel-loom control that src/ci.rs's CONTROLS and the kernel's declared-feature list did not account for. After this, `cargo run -- --ci host`: 39 steps, all green (EXIT=0). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- NOTICE | 1 + kernel/src/arch/aarch64/trap.rs | 2 +- kernel/src/irq_census.rs | 4 ++-- src/build.rs | 4 ++++ src/ci.rs | 3 +++ src/sourcegate.rs | 6 +++--- tests/common/qemu.rs | 2 ++ toyos-bootmap/src/lib.rs | 2 +- 8 files changed, 17 insertions(+), 7 deletions(-) diff --git a/NOTICE b/NOTICE index 7cd35ccdd24..a74d7edf67e 100644 --- a/NOTICE +++ b/NOTICE @@ -236,6 +236,7 @@ aavmf/*.fd — EDK II firmware for QEMU `virt`, BSD-2-Clause-Patent Copyright (c) 2019, TianoCore and contributors Licence text: licenses/BSD-2-Clause-Patent-EDK2.txt + SPDX-License-Identifier: BSD-2-Clause-Patent QEMU's own prebuilt ArmVirtQemu firmware, unmodified: `edk2-aarch64-code.fd` and `edk2-arm-vars.fd` as QEMU 11.1.0 installs them under `share/qemu/`, diff --git a/kernel/src/arch/aarch64/trap.rs b/kernel/src/arch/aarch64/trap.rs index 1fd0688762c..24683360a39 100644 --- a/kernel/src/arch/aarch64/trap.rs +++ b/kernel/src/arch/aarch64/trap.rs @@ -26,7 +26,7 @@ pub struct Frame { } const FRAME_BYTES: usize = core::mem::size_of::(); -const _: () = assert!(FRAME_BYTES == 288 && FRAME_BYTES % 16 == 0); +const _: () = assert!(FRAME_BYTES == 288 && FRAME_BYTES.is_multiple_of(16)); /// Which of the table's sixteen entries was taken: Arm ARM K.a, D1.3.1, /// Table D1-7 — four groups by where the exception came from, and in each the diff --git a/kernel/src/irq_census.rs b/kernel/src/irq_census.rs index 8b20389ba2e..29782cdcfc0 100644 --- a/kernel/src/irq_census.rs +++ b/kernel/src/irq_census.rs @@ -59,8 +59,8 @@ pub const SLOTS: usize = 1 + Source::COUNT; /// Index of the machine's own total inside a CPU's block. pub const TOTAL: usize = 0; -/// Counted where each is taken, by the architecture's handlers -/// (`arch::percpu::irq_took!`), into this CPU's own block. +// Counted where each is taken, by the architecture's handlers +// (`arch::percpu::irq_took!`), into this CPU's own block. /// Each CPU's counter-array address; only the array is published, so a reader never touches the rest of the block the owning CPU writes through raw pointers. static BLOCKS: [AtomicU64; MAX_CPUS] = [const { AtomicU64::new(0) }; MAX_CPUS]; diff --git a/src/build.rs b/src/build.rs index 0302fb49a59..1bd4061dd5b 100644 --- a/src/build.rs +++ b/src/build.rs @@ -2556,6 +2556,10 @@ mod tests { // not in `TEST_SUITE_KERNEL_BUILDS`, so a full run pays nothing // for it and a boot storm asks for it by name. "sched-tripwire", + // Costs no kernel build, for `wake-fence-off`'s reason: turned on + // only by `kernel-loom`, to drop the panic console publisher's + // `Release` fence and prove `panic_console_publish` reds without it. + "seqlock-writer-fence-off", "shard-publish-relaxed", "shootdown-serve-relaxed", // The eighth loom control, and the first over a *contended* diff --git a/src/ci.rs b/src/ci.rs index 234bd60b5a9..27df9e689e0 100644 --- a/src/ci.rs +++ b/src/ci.rs @@ -245,6 +245,9 @@ pub(crate) const CONTROLS: &[Control] = &[ red(KERNEL_LOOM, "lock-acquire-off", Some("ticket_lock"), &[ "try_lock_observes_the_previous_owners_writes ... FAILED", ]), + red(KERNEL_LOOM, "seqlock-writer-fence-off", Some("panic_console_publish"), &[ + "a_snapshot_is_one_publication_whole ... FAILED", + ]), red(KERNEL_LOOM, "poison-overwrite", Some("poison_set"), &[ "a_second_death_banks_beside_the_first ... FAILED", ]), diff --git a/src/sourcegate.rs b/src/sourcegate.rs index fd23cd5e141..c1857ed9b47 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -1218,9 +1218,6 @@ fn tracked_rust_files(root: &Path, tree: &str) -> std::collections::BTreeSet Vec<(String, String)> { .collect() } +/// The third-party C corpus, whose attribution is per *population* rather than +/// per file: `tests/testcases/LICENSE` states how many files each of these +/// directories holds, and `NOTICE` points at that file for the terms. #[cfg(test)] const CORPUS: &str = "tests/testcases"; diff --git a/tests/common/qemu.rs b/tests/common/qemu.rs index 3803bcfc3eb..d396895888f 100644 --- a/tests/common/qemu.rs +++ b/tests/common/qemu.rs @@ -2828,6 +2828,8 @@ fn kernel_of(options: &BootOptions) -> Vec<&'static str> { toyos_build::build::TEST_KERNEL.to_vec() } +// Eight, because an image is its architecture as much as its files and its kernel. +#[allow(clippy::too_many_arguments)] fn build_boot_image_with( arch: Arch, test_crate: &Path, diff --git a/toyos-bootmap/src/lib.rs b/toyos-bootmap/src/lib.rs index 43052c48750..a585814053b 100644 --- a/toyos-bootmap/src/lib.rs +++ b/toyos-bootmap/src/lib.rs @@ -236,7 +236,7 @@ impl<'a> Plan<'a> { Typing::Firmware => PAGE_2M, Typing::ByMap(_) => PAGE_4K, }; - if base % granule != 0 { + if !base.is_multiple_of(granule) { return Err(Refusal::Unaligned(base)); } let end = base.checked_add(len).ok_or(Refusal::Extent { base, len })?; From 1e5ef5c1fa33c6056ed9c87ceb01312ecad7ddc2 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 16:01:50 +0200 Subject: [PATCH 14/50] serial: a lost try_lock no longer releases the backend it lost to `BackendGuard::try_lock` became `.is_ok().then_some(Self { _irq: irq })` when the one IrqGuard replaced its hand-rolled flags (0840b257). `then_some` builds its argument whether or not the exchange won, so a CPU that lost the race built a guard, dropped it, and its drop stored `BACKEND_LOCKED = false` under the CPU that held the backend. Two CPUs then wrote the virtio-console at once and the second found the TX slot taken: "vconsole: no tx slot", 254 of them in one fast-tier run, taking the shared boot and 130 tests down beside other guests (each green alone). Back to an `if`, as it was before the IrqGuard change. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/drivers/serial.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/kernel/src/drivers/serial.rs b/kernel/src/drivers/serial.rs index 41d2f92502c..c9358fff62e 100644 --- a/kernel/src/drivers/serial.rs +++ b/kernel/src/drivers/serial.rs @@ -84,10 +84,17 @@ impl BackendGuard { /// Non-blocking acquire: `None` if another CPU already holds the backend. pub fn try_lock() -> Option { let irq = IrqGuard::close(); - BACKEND_LOCKED + // Not `then_some`: its argument is built whether or not the exchange + // won, and a `BackendGuard` built on a loss drops, and its drop + // releases the backend another CPU holds. + if BACKEND_LOCKED .compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed) .is_ok() - .then_some(Self { _irq: irq }) + { + Some(Self { _irq: irq }) + } else { + None + } } /// Writes raw bytes with no escape stripping; callers must pre-strip via [`write_console`]. From 73a89365ebbff2010bb80aaa8a88bab83a291330 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 16:05:58 +0200 Subject: [PATCH 15/50] issues: blocking_read_window completed 26 of 500 round trips beside other guests A fast-tier red on this branch, green alone, whose own log reads as a slow guest rather than the lost wake its sentence names. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...completed-26-of-500-beside-other-guests.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md diff --git a/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md b/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md new file mode 100644 index 00000000000..f69b2564dae --- /dev/null +++ b/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md @@ -0,0 +1,29 @@ +--- +status: open +kind: finding +opened: 2026-09-26 +--- + +# `blocking_read_window` completed 26 of 500 round trips beside other guests + +Fast tier at `1e5ef5c1` (PR #524's branch; the host carried the branch's own +twelve guest slots and another worktree's suite at the same time): +`blocking_read_stress: only 26 of 500 round trips completed inside 3s — a wake +was not delivered`. The harness's re-run alone was green in 2 s +(`at least 193 held windows a post landed in (0 -> 256)`). `cargo run -- +--known-red blocking_read_window` answers NO. + +What the red run's own log says against its sentence: the two processes spent +`cpu=1639ms` and `cpu=1998ms` of the 3.5 s they ran (`syscall_wall=3535ms` and +`3599ms`), and cpu0 took 522 interrupts, 456 of them xHCI — a guest that was +running and slow, not one parked on a wake that never came. So the verdict's +cause is unread: the test waits host seconds and names a lost wake when they +run out, which a starved guest satisfies as well as a lost wake does. + +Not done: an A/B against `main` under the same load, which is what would say +whether this branch moved it; nothing on the branch weakens an ordering the +wake path uses. + +**Exit**: the verdict tells a lost wake from a slow guest (the round trips' +progress over the window, not only the count at its end), and a cause for +this run. From 1912cc4205106d79737ad4ff55012e17fbcd63e5 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 16:09:05 +0200 Subject: [PATCH 16/50] toyos-ld: 0.3.0, because this branch changed what it builds The AArch64 machine support (EM_AARCH64, R_AARCH64_RELATIVE, PE 0xAA64, COFF ARM64 relocations) changed toyos-ld's identity, and abi-split reds on a published crate that changed under the version it already had. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- Cargo.lock | 2 +- toyos-ld/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f0f98905290..018f5c0ee65 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1226,7 +1226,7 @@ version = "0.1.0" [[package]] name = "toyos-ld" -version = "0.2.0" +version = "0.3.0" dependencies = [ "object 0.38.1", "sha2", diff --git a/toyos-ld/Cargo.toml b/toyos-ld/Cargo.toml index c5f49713f83..fc7226fd719 100644 --- a/toyos-ld/Cargo.toml +++ b/toyos-ld/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "toyos-ld" -version = "0.2.0" +version = "0.3.0" edition = "2021" license = "MIT OR Apache-2.0" description = "ToyOS's linker: resolves libraries, combines object files and produces executables, for the ToyOS C toolchain and the upstream x86_64-unknown-toyos Rust target." From 7e5ce2eb21fdc726583b5688c68c521b526be551 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 16:18:54 +0200 Subject: [PATCH 17/50] build: a worktree whose fork names another compiler builds its own check_compiler refused a linked worktree whose fork checkout's compiler/ was not the one the primary built stage2 from, so a target spec or any compiler change could be neither built nor tested before it landed. That contradicts the landed rule that every worktree builds the toolchain its own sources name. src/compiler.rs now resolves the compiler a worktree's fork checkout names: the primary's stage2 where its compiler/ is the one recorded, and otherwise a compiler of its own, built by bootstrap in the worktree's own fork checkout (build/toyos-compiler, host only, stage 2 of compiler/rustc and library, the primary's profile) and placed at rust/build/compilers//, keyed on the identity of compiler/, src/bootstrap, src/stage0 and Cargo.lock. The sysroot key already named the compiler's identity, so a sysroot built from it is a new key and is cloned from that compiler instead of the primary's. Nothing of the primary's is written: not its stage2, not its record, not the rustup toyos link (a sysroot is named by directory). The global lock is not taken for such a compiler; its own key lock (buildlock's Keyed, now shared with sysroots) orders before the sysroot key's. --worktree remove sweeps compilers no worktree records. hosted-rustc is refused in a worktree building with its own compiler: the hosted rustc is the primary's. compiler::source now also counts files git does not track under compiler/, which is what a new target spec is before its commit. Negative controls, each applied as a patch, built, run and restored: every worktree given the primary's compiler -> the coexistence test EXIT=101; a worktree's compiler placed beside the primary's stage2 -> EXIT=101. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/build.rs | 15 +- src/buildlock.rs | 85 ++++++--- src/compiler.rs | 449 +++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + src/sysroot.rs | 184 ++++++------------- src/toolchain.rs | 8 +- src/worktree.rs | 7 +- 7 files changed, 587 insertions(+), 162 deletions(-) create mode 100644 src/compiler.rs diff --git a/src/build.rs b/src/build.rs index 1bd4061dd5b..be673030615 100644 --- a/src/build.rs +++ b/src/build.rs @@ -424,12 +424,19 @@ pub const PROFILE: &str = "toyos"; #[derive(Clone)] struct GuestEnv { toolchain: PathBuf, + /// Whether that sysroot's compiler is the primary's, the one the hosted + /// rustc is built from (`src/compiler.rs`). + primary_compiler: bool, path: String, } impl GuestEnv { fn new(root: &Path, sysroot: &crate::sysroot::Sysroot) -> Self { - Self { toolchain: sysroot.dir.clone(), path: toolchain::path_with_toyos_ld(root) } + Self { + toolchain: sysroot.dir.clone(), + primary_compiler: sysroot.primary_compiler, + path: toolchain::path_with_toyos_ld(root), + } } } @@ -735,6 +742,12 @@ fn build_and_assemble( toolchain::HOSTED_ARCH.name(), arch.name() ); + assert!( + env.primary_compiler, + "hosted-rustc ships the primary checkout's hosted compiler, and this worktree builds with \ + a compiler of its own (src/compiler.rs): the image would carry a rustc that is not the \ + one its programs were built with" + ); collect_hosted_rustc(root, &env.toolchain, &mut root_files); } diff --git a/src/buildlock.rs b/src/buildlock.rs index 97eb766601f..56fd51908ea 100644 --- a/src/buildlock.rs +++ b/src/buildlock.rs @@ -26,9 +26,11 @@ //! (`src/sysroot.rs`), which nothing rewrites. Only a sysroot being *made* //! reads the compiler, and it holds [`compiler_shared`] while it does. //! -//! A sysroot's own lock ([`sysroot_building`], [`sysroot_using`]) is per key, +//! A sysroot's own lock ([`keyed_building`], [`keyed_using`]) is per key, //! so two worktrees with different ABIs never meet in it, and two with the same -//! one build it once. +//! one build it once. A compiler a worktree's fork checkout names apart from the +//! primary's (`src/compiler.rs`) is locked the same way under its own key, and +//! neither it nor a sysroot built from it takes the global lock. //! //! [`integration`] is neither: one file of its own, exclusive-only, and held //! while this host's `main` moves rather than while anything builds. @@ -49,7 +51,8 @@ //! `[host-builds] waiting …` line was printed. //! //! **The order between them is a constraint, not a preference:** host slot -//! (guest or build) → a sysroot key's lock → the worktree build lock → the +//! (guest or build) → a compiler key's lock → a sysroot key's lock → the +//! worktree build lock → the //! global one → artifact. A build slot is taken before any build lock and never //! while one is held; a key's lock is taken with the worktree lock put down //! ([`Held::without_shared`]), because the key's builder takes the worktree lock @@ -352,40 +355,64 @@ pub fn build_slot(root: &Path, what: &str) -> Option { const BUILD_SLOT_DIR: &str = "build-slots"; -/// Make the sysroot `key` names: exclusive, and waited for by every other -/// process that wants the same key, which then finds it made. -pub fn sysroot_building(root: &Path, key: &str) -> Guard { - exclusive(&sysroot_lock_path(root, key), "sysroot lock", &format!("building sysroot {key}")) +/// A content-addressed product of the host, locked per key: a sysroot, or a +/// compiler a worktree's fork checkout names (`src/compiler.rs`). +#[derive(Clone, Copy)] +pub enum Keyed { + Sysroot, + Compiler, } -/// Compile against the sysroot `key` names: shared, so any number of builds use -/// it at once, a builder of it is waited for, and a sweep cannot remove it. -pub fn sysroot_using(root: &Path, key: &str) -> Guard { - let path = sysroot_lock_path(root, key); +impl Keyed { + fn dir(self) -> &'static str { + match self { + Keyed::Sysroot => "sysroots", + Keyed::Compiler => "compilers", + } + } + + fn name(self) -> &'static str { + match self { + Keyed::Sysroot => "sysroot", + Keyed::Compiler => "compiler", + } + } +} + +/// Make what `key` names: exclusive, and waited for by every other process that +/// wants the same key, which then finds it made. +pub fn keyed_building(root: &Path, kind: Keyed, key: &str) -> Guard { + let lock = format!("{} lock", kind.name()); + exclusive(&keyed_lock_path(root, kind, key), &lock, &format!("building {} {key}", kind.name())) +} + +/// Use what `key` names: shared, so any number of builds use it at once, a +/// builder of it is waited for, and a sweep cannot remove it. +pub fn keyed_using(root: &Path, kind: Keyed, key: &str) -> Guard { + let path = keyed_lock_path(root, kind, key); let file = open_lock_file(&path); if !try_lock(&file, LOCK_SH) { - let what = format!("using sysroot {key}"); + let lock = format!("{} lock", kind.name()); + let what = format!("using {} {key}", kind.name()); let holder = describe_holder(&path) .unwrap_or_else(|| "held, but the holder left no readable note".to_string()); - announce("sysroot lock", &what, &holder); - take_lock_announcing(&file, LOCK_SH, &path, "sysroot lock", &what); + announce(&lock, &what, &holder); + take_lock_announcing(&file, LOCK_SH, &path, &lock, &what); } Guard { file, records_holder: false } } -/// The sysroot `key` names, exclusively and only if nobody is making or using -/// it: what a sweep holds while it removes one. -pub fn sysroot_idle(root: &Path, key: &str) -> Option { - let file = open_lock_file(&sysroot_lock_path(root, key)); +/// What `key` names, exclusively and only if nobody is making or using it: what +/// a sweep holds while it removes one. +pub fn keyed_idle(root: &Path, kind: Keyed, key: &str) -> Option { + let file = open_lock_file(&keyed_lock_path(root, kind, key)); try_lock(&file, LOCK_EX).then_some(Guard { file, records_holder: false }) } -fn sysroot_lock_path(root: &Path, key: &str) -> PathBuf { - git_lock_dir(root).join(SYSROOT_DIR).join(key) +fn keyed_lock_path(root: &Path, kind: Keyed, key: &str) -> PathBuf { + git_lock_dir(root).join(kind.dir()).join(key) } -const SYSROOT_DIR: &str = "sysroots"; - fn slot_path(dir: &Path, index: usize) -> PathBuf { dir.join(format!("slot-{index}")) } @@ -875,7 +902,7 @@ mod tests { until_orphaned(); } "hold-sysroot-build" => { - let _building = sysroot_building(&root, "k1"); + let _building = keyed_building(&root, Keyed::Sysroot, "k1"); touch(&root.join("held")); appeared(&root.join("release"), Duration::from_secs(20)); note(&root, "built"); @@ -885,7 +912,7 @@ mod tests { note(&root, "landed"); } "want-sysroot" => { - let _using = sysroot_using(&root, "k1"); + let _using = keyed_using(&root, Keyed::Sysroot, "k1"); note(&root, "used"); } "want-slot" => { @@ -1150,8 +1177,8 @@ mod tests { let mut builder = child(&root, "hold-sysroot-build"); assert!(appeared(&root.join("held"), Duration::from_secs(20)), "the builder never started"); - assert!(sysroot_idle(&root, "k1").is_none(), "a sweep could remove a key being built"); - let other = sysroot_building(&root, "k2"); + assert!(keyed_idle(&root, Keyed::Sysroot, "k1").is_none(), "a sweep could remove a key being built"); + let other = keyed_building(&root, Keyed::Sysroot, "k2"); drop(other); let mut user = child(&root, "want-sysroot"); @@ -1164,10 +1191,10 @@ mod tests { assert!(user.wait().unwrap().success()); assert_eq!(fs::read_to_string(root.join("order.log")).unwrap(), "built\nused\n"); - let using = sysroot_using(&root, "k1"); - assert!(sysroot_idle(&root, "k1").is_none(), "a sweep could remove a key in use"); + let using = keyed_using(&root, Keyed::Sysroot, "k1"); + assert!(keyed_idle(&root, Keyed::Sysroot, "k1").is_none(), "a sweep could remove a key in use"); drop(using); - assert!(sysroot_idle(&root, "k1").is_some()); + assert!(keyed_idle(&root, Keyed::Sysroot, "k1").is_some()); } /// The whole point of a counting semaphore: the run past the budget waits. diff --git a/src/compiler.rs b/src/compiler.rs new file mode 100644 index 00000000000..62d4e55b98c --- /dev/null +++ b/src/compiler.rs @@ -0,0 +1,449 @@ +//! The compiler a worktree's sysroot is cloned from and compiled by: the +//! primary's, or one of its own, content-addressed. +//! +//! **Every worktree builds with the compiler its own fork checkout names.** The +//! primary's `stage2` is built from what the primary's `rust/compiler/` holds, +//! and [`record`] writes which that is. A linked worktree whose fork checkout +//! holds the same `compiler/` ([`source`]) compiles with that one. One whose +//! `compiler/` differs — a new target spec, a codegen change — gets its own: +//! built by bootstrap in its own fork checkout, under that checkout's +//! `build/toyos-compiler/`, and placed at `rust/build/compilers//`, where +//! the key ([`key`]) is the identity (`src/identity.rs`) of the checkout's +//! `compiler/`, `src/bootstrap/`, `src/stage0` and `Cargo.lock`, with +//! [`RECIPE`]. Nothing writes that directory after its [`SOURCE`] file exists, +//! and two worktrees naming the same compiler share one copy. +//! +//! **A compiler of a worktree's own never touches what the others build with**: +//! not the primary's `stage2`, not its record, not the machine-global rustup +//! `toyos` link — a sysroot is named by its directory, never by a toolchain +//! name, so no link is made. The global lock is not taken either; nothing of +//! the primary's is read. +//! +//! Locks, in the one order every acquirer takes them: the key's +//! (`buildlock::keyed_*` with [`Keyed::Compiler`]), with this worktree's build +//! lock put down, held shared for as long as a sysroot is being made from it; +//! then, to build, this worktree's exclusively, because its fork build +//! directory is written. +//! +//! A compiler no worktree names any more is removed by [`sweep`], which +//! `--worktree remove` runs: each build records the key it used in its +//! worktree's `target/`, and a key no registered worktree records, that nobody +//! is making or using, goes. +//! +//! What such a worktree's image cannot carry is the ToyOS-hosted rustc: that is +//! the primary's, built from the primary's `compiler/`, so `hosted-rustc` in a +//! worktree building with its own compiler is refused by name +//! (`src/build.rs`). + +use std::fs; +use std::path::{Path, PathBuf}; + +use crate::buildlock::{self, Guard, Held, Keyed}; +use crate::sysroot::{clone_tree, git_bytes, git_out, short, tree_identity}; +use crate::toolchain::{self, host_triple}; + +/// What changes how a key's sources become a compiler and is none of them: the +/// build below. Moving it moves every key. +const RECIPE: &str = "bootstrap stage 2 of compiler/rustc and library, profile compiler, host only; 1"; + +/// What a compiler's key is the identity of, in its fork checkout. +const KEYED: [&str; 4] = ["compiler", "src/bootstrap", "src/stage0", "Cargo.lock"]; + +/// The file a finished compiler carries last, naming what it was built from. A +/// directory without it is a build that did not finish. +const SOURCE: &str = "SOURCE"; + +/// Where each build records the key of the compiler of its own it used, for +/// [`sweep`]. Absent while a worktree builds with the primary's. +const RECORD: &str = "target/toyos-compiler-key"; + +/// A compiler, held in use for as long as this lives. +pub struct Compiler { + /// Its toolchain directory: `bin/rustc`, `lib/`. + pub stage2: PathBuf, + /// The file naming what it was built from. + record: PathBuf, + /// Whether it is the primary's, the one the hosted rustc and the rustup + /// link are built from. + pub primary: bool, + _using: Option, +} + +impl Compiler { + /// The primary's `stage2`. + pub fn primary(rust_dir: &Path) -> Self { + Self { stage2: toolchain::stage2(rust_dir), record: primary_record(rust_dir), primary: true, _using: None } + } + + /// The compiler as a sysroot's key sees it: the source it was built from, + /// and the driver that build left, so a rebuild of the same source is a new + /// compiler too. + pub fn identity(&self) -> String { + let source = fs::read_to_string(&self.record).unwrap_or_else(|_| { + panic!( + "{} is missing, so no sysroot can say which compiler it was built with.\n\ + The primary checkout writes the primary's: run `cargo run -- --build-only` there once.", + self.record.display(), + ) + }); + let lib = self.stage2.join("lib"); + let driver = fs::read_dir(&lib) + .unwrap_or_else(|e| panic!("read {}: {e}", lib.display())) + .flatten() + .find(|e| e.file_name().to_string_lossy().starts_with("librustc_driver")) + .unwrap_or_else(|| panic!("{} holds no librustc_driver", lib.display())); + let meta = driver.metadata().unwrap_or_else(|e| panic!("stat the driver: {e}")); + let mtime = meta + .modified() + .ok() + .and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok()) + .map_or(0, |d| d.as_nanos()); + format!("{} {} {} {mtime}", source.trim(), driver.file_name().to_string_lossy(), meta.len()) + } +} + +/// The primary's record of which `compiler/` its `stage2` was built from. +fn primary_record(rust_dir: &Path) -> PathBuf { + rust_dir.join("build/toyos-compiler") +} + +/// Every compiler of a worktree's own on this host. +pub fn compilers_dir(rust_dir: &Path) -> PathBuf { + rust_dir.join("build/compilers") +} + +/// What `checkout`'s `compiler/` is: its commit's tree, and whatever the working +/// tree changes in it — an edit, or a file git does not track yet, which is +/// what a new target spec is before its commit. +pub fn source(checkout: &Path) -> String { + let tree = git_out(checkout, &["rev-parse", "HEAD:compiler"]); + let mut local = git_bytes(checkout, &["diff", "HEAD", "--", "compiler"]); + let untracked = git_bytes(checkout, &["ls-files", "-z", "--others", "--exclude-standard", "--", "compiler"]); + for name in untracked.split(|b| *b == 0).filter(|n| !n.is_empty()) { + let path = checkout.join(String::from_utf8_lossy(name).as_ref()); + local.extend_from_slice(name); + local.push(0); + local.extend(fs::read(&path).unwrap_or_else(|e| panic!("read {}: {e}", path.display()))); + local.push(0); + } + if local.is_empty() { + tree.trim().to_string() + } else { + format!("{} with local changes {}", tree.trim(), short(&local)) + } +} + +/// Record which compiler the primary's `stage2` is. The primary calls this +/// after a toolchain build, and when the record is missing — its compiler stamp +/// has just said `stage2` is built from what its `rust/` holds. +pub fn record(rust_dir: &Path) { + let at = primary_record(rust_dir); + let want = source(rust_dir); + if fs::read_to_string(&at).ok().as_deref() != Some(want.as_str()) { + fs::write(&at, &want).unwrap_or_else(|e| panic!("write {}: {e}", at.display())); + } +} + +/// The key of the compiler `fork`'s sources name. +pub fn key(fork: &Path) -> String { + let parts = [RECIPE.to_string(), source(fork), tree_identity(fork, &KEYED)]; + short(parts.join("\n\0\n").as_bytes()) +} + +/// The compiler `root`'s fork checkout at `fork` names: the primary's where its +/// `compiler/` is the one the primary's was built from, and otherwise its own, +/// built if nobody has built it, held in use for as long as the returned value +/// lives. +pub fn resolve(root: &Path, rust_dir: &Path, fork: &Path, lock: &mut Held) -> Compiler { + lock.without_shared(|| choose(root, rust_dir, fork, build_in_fork)) +} + +/// [`resolve`] with the build that makes a compiler's `stage2` passed in, so a +/// test can stand in for bootstrap: `build` compiles the fork checkout it is +/// given and returns the `stage2` it left there. +fn choose(root: &Path, rust_dir: &Path, fork: &Path, build: impl Fn(&Path) -> PathBuf) -> Compiler { + let recorded = root.join(RECORD); + if fork == rust_dir { + return Compiler::primary(rust_dir); + } + let built_from = fs::read_to_string(primary_record(rust_dir)).unwrap_or_default(); + if built_from.trim() == source(fork) { + let _ = fs::remove_file(&recorded); + return Compiler::primary(rust_dir); + } + let key = key(fork); + let dir = compilers_dir(rust_dir).join(&key); + fs::create_dir_all(recorded.parent().expect("a file under target/")).ok(); + fs::write(&recorded, &key).unwrap_or_else(|e| panic!("write {}: {e}", recorded.display())); + let using = loop { + let using = buildlock::keyed_using(root, Keyed::Compiler, &key); + if dir.join(SOURCE).is_file() { + break using; + } + drop(using); + let _building = buildlock::keyed_building(root, Keyed::Compiler, &key); + if !dir.join(SOURCE).is_file() { + place(root, fork, &key, &dir, &build); + } + }; + Compiler { stage2: dir.join("stage2"), record: dir.join(SOURCE), primary: false, _using: Some(using) } +} + +/// Build the compiler `key` names from `fork` and put it at `dir`. The caller +/// holds the key's lock. +fn place(root: &Path, fork: &Path, key: &str, dir: &Path, build: &impl Fn(&Path) -> PathBuf) { + let what = format!("building compiler {key}"); + let _worktree = buildlock::worktree_exclusive(root, &what); + eprintln!("Building compiler {key} in {}: its compiler/ is not the one the primary's was built from", fork.display()); + let stage2 = build(fork); + let partial = dir.with_extension("partial"); + if partial.exists() { + fs::remove_dir_all(&partial).unwrap_or_else(|e| panic!("remove {}: {e}", partial.display())); + } + clone_tree(&stage2, &partial.join("stage2")); + // The sources the key named are the ones built, or this is not that key's. + let again = self::key(fork); + assert!( + again == key, + "the fork's compiler sources moved while compiler {key} was being built (they are now \ + {again}); nothing was kept, and the next build makes the one they name" + ); + fs::write(partial.join(SOURCE), format!("{key} {}\n", source(fork))) + .unwrap_or_else(|e| panic!("write {}: {e}", partial.join(SOURCE).display())); + fs::rename(&partial, dir).unwrap_or_else(|e| panic!("rename {} -> {}: {e}", partial.display(), dir.display())); +} + +/// Bootstrap's build of the compiler in `fork`, into its own build directory, +/// and the `stage2` it made, with the cargo every toolchain directory carries. +fn build_in_fork(fork: &Path) -> PathBuf { + crate::ensure_submodule(fork, "library/backtrace"); + let host = host_triple(); + let build_dir = fork.join("build/toyos-compiler"); + fs::create_dir_all(&build_dir).unwrap_or_else(|e| panic!("create {}: {e}", build_dir.display())); + let config = build_dir.join("bootstrap.toml"); + fs::write(&config, config_text(&build_dir, &host)).unwrap_or_else(|e| panic!("write {}: {e}", config.display())); + let config = config.to_str().unwrap_or_else(|| panic!("{} is not UTF-8", config.display())); + let args = ["build", "--stage", "2", "--config", config, "--warnings", "warn", "compiler/rustc", "library"]; + let (ok, log) = toolchain::x_build(fork, &args, "the compiler"); + toolchain::refuse_on_compile_error(&log, "the compiler"); + assert!(ok, "the compiler build in {} failed, and nothing in its output was a compile error", fork.display()); + let stage2 = build_dir.join(&host).join("stage2"); + assert!(stage2.join("bin/rustc").is_file(), "the compiler build left no {}", stage2.join("bin/rustc").display()); + toolchain::provision_toolchain_cargo(&stage2); + toolchain::assert_toolchain_is_honest(&stage2); + stage2 +} + +/// Bootstrap's configuration for a compiler of a worktree's own: the primary's +/// `profile` and options, for the host alone, since every guest target's +/// libraries are the sysroot's to build. +fn config_text(build_dir: &Path, host: &str) -> String { + format!( + r#"change-id = "ignore" +profile = "compiler" + +[build] +build-dir = "{build_dir}" +host = ["{host}"] +target = ["{host}"] + +[rust] +incremental = true +lld = false +"#, + build_dir = build_dir.display(), + ) +} + +/// The key of the compiler of its own `root`'s last build used, if it used one. +pub fn recorded_key(root: &Path) -> Option { + fs::read_to_string(root.join(RECORD)).ok().map(|k| k.trim().to_string()) +} + +/// Remove every compiler no registered worktree records and nobody is making +/// or using, and every half-built one nobody is making. Returns what went. +pub fn sweep(root: &Path) -> Vec { + let dir = compilers_dir(&toolchain::rust_dir(root)); + let Ok(entries) = fs::read_dir(&dir) else { return Vec::new() }; + let named: std::collections::BTreeSet = git_out(root, &["worktree", "list", "--porcelain"]) + .lines() + .filter_map(|l| l.strip_prefix("worktree ")) + .filter_map(|w| recorded_key(Path::new(w))) + .collect(); + let mut removed = Vec::new(); + for entry in entries.flatten() { + let name = entry.file_name().to_string_lossy().into_owned(); + let (key, whole) = match name.split_once('.') { + Some((key, _)) => (key.to_string(), false), + None => (name.clone(), true), + }; + if whole && named.contains(&key) { + continue; + } + let Some(_idle) = buildlock::keyed_idle(root, Keyed::Compiler, &key) else { continue }; + let path = entry.path(); + fs::remove_dir_all(&path).unwrap_or_else(|e| panic!("remove {}: {e}", path.display())); + removed.push(path); + } + removed +} + +#[cfg(test)] +mod tests { + use std::cell::Cell; + use std::process::Command; + + use super::*; + + fn git(dir: &Path, args: &[&str]) -> String { + let out = Command::new("git") + .args(["-c", "commit.gpgsign=false", "-c", "user.email=t@t", "-c", "user.name=t"]) + .args(["-c", "protocol.file.allow=always", "-c", "init.defaultBranch=main"]) + .args(args) + .current_dir(dir) + .output() + .expect("run git"); + assert!(out.status.success(), "git {args:?} in {}: {}", dir.display(), String::from_utf8_lossy(&out.stderr)); + String::from_utf8(out.stdout).unwrap().trim().to_string() + } + + fn write(path: &Path, text: &str) { + fs::create_dir_all(path.parent().unwrap()).unwrap(); + fs::write(path, text).unwrap(); + } + + /// Every file under `dir` with its bytes, for "nothing here changed". + fn snapshot(dir: &Path) -> Vec<(PathBuf, Vec)> { + let mut out = Vec::new(); + let mut stack = vec![dir.to_path_buf()]; + while let Some(at) = stack.pop() { + for entry in fs::read_dir(&at).unwrap().flatten() { + let path = entry.path(); + if path.is_dir() { + stack.push(path); + } else { + out.push((path.clone(), fs::read(&path).unwrap())); + } + } + } + out.sort(); + out + } + + /// A primary whose `rust` pins fork commit `C0` and has built a compiler + /// from it, and three linked worktrees: `same` pins `C0`, `a` and `b` each + /// pin a commit whose `compiler/` is its own. + fn estate() -> (PathBuf, PathBuf, [PathBuf; 3]) { + let base = std::env::temp_dir().join(format!("toyos-compiler-{}", std::process::id())); + let _ = fs::remove_dir_all(&base); + fs::create_dir_all(&base).unwrap(); + let base = fs::canonicalize(&base).unwrap(); + + let fork = base.join("fork-src"); + fs::create_dir_all(&fork).unwrap(); + git(&fork, &["init", "-q"]); + write(&fork.join("compiler/rustc_target/src/lib.rs"), "pub fn targets() {}\n"); + write(&fork.join("src/bootstrap/src/lib.rs"), "fn main() {}\n"); + write(&fork.join("src/stage0"), "compiler_version=beta\n"); + write(&fork.join("Cargo.lock"), "# lock\n"); + write(&fork.join("library/std/src/lib.rs"), "pub fn a() {}\n"); + write(&fork.join(".gitignore"), "/build\n"); + git(&fork, &["add", "-A"]); + git(&fork, &["commit", "-qm", "C0"]); + let c0 = git(&fork, &["rev-parse", "HEAD"]); + let mut pins = Vec::new(); + for spec in ["pub fn targets() { aarch64() }\n", "pub fn targets() { riscv() }\n"] { + git(&fork, &["checkout", "-q", &c0]); + write(&fork.join("compiler/rustc_target/src/lib.rs"), spec); + git(&fork, &["commit", "-qam", "a target"]); + pins.push(git(&fork, &["rev-parse", "HEAD"])); + } + git(&fork, &["checkout", "-q", &c0]); + + let primary = base.join("primary"); + fs::create_dir_all(&primary).unwrap(); + git(&primary, &["init", "-q"]); + write(&primary.join("README"), "x\n"); + git(&primary, &["submodule", "add", "-q", fork.to_str().unwrap(), "rust"]); + git(&primary, &["add", "-A"]); + git(&primary, &["commit", "-qm", "pins C0"]); + let rust_dir = primary.join("rust"); + write(&toolchain::stage2(&rust_dir).join("bin/rustc"), "the primary's rustc"); + write(&toolchain::stage2(&rust_dir).join("lib/librustc_driver-0.dylib"), "the primary's driver"); + record(&rust_dir); + + let mut linked = Vec::new(); + for (name, pin) in [("same", c0.as_str()), ("a", pins[0].as_str()), ("b", pins[1].as_str())] { + let wt = base.join(name); + git(&primary, &["worktree", "add", "-q", "-b", name, wt.to_str().unwrap()]); + let _ = fs::remove_dir(wt.join("rust")); + git(&rust_dir, &["worktree", "add", "-q", "--detach", wt.join("rust").to_str().unwrap(), pin]); + linked.push(wt); + } + (primary, rust_dir, linked.try_into().unwrap()) + } + + /// **Two worktrees with different compilers build side by side, and the + /// primary's toolchain is untouched by either.** Each gets its own compiler + /// at its own key, built once and found again; one that names the primary's + /// `compiler/` builds nothing and gets the primary's; the primary's `stage2`, + /// its record and the rustup `toyos` link are byte-for-byte what they were; + /// a sweep takes a compiler only once no worktree names it. + #[test] + fn worktrees_with_different_compilers_coexist_and_the_primary_s_is_untouched() { + let (primary, rust_dir, [same, a, b]) = estate(); + let before = snapshot(&rust_dir.join("build")); + let link = toolchain::rustup_link(); + let builds = Cell::new(0); + let fake = |fork: &Path| { + builds.set(builds.get() + 1); + let stage2 = fork.join("build/toyos-compiler/stage2"); + let spec = fs::read_to_string(fork.join("compiler/rustc_target/src/lib.rs")).unwrap(); + write(&stage2.join("bin/rustc"), &format!("a rustc knowing {spec}")); + write(&stage2.join("lib/librustc_driver-1.dylib"), &spec); + stage2 + }; + + let mine = choose(&same, &rust_dir, &same.join("rust"), fake); + assert!(mine.primary && mine.stage2 == toolchain::stage2(&rust_dir)); + assert_eq!(builds.get(), 0, "a worktree naming the primary's compiler built one"); + + let ca = choose(&a, &rust_dir, &a.join("rust"), fake); + let cb = choose(&b, &rust_dir, &b.join("rust"), fake); + assert_eq!(builds.get(), 2); + assert!(!ca.primary && !cb.primary); + assert_ne!(ca.stage2, cb.stage2, "two compilers were given one directory"); + assert!(ca.stage2.starts_with(compilers_dir(&rust_dir)) && cb.stage2.starts_with(compilers_dir(&rust_dir))); + assert!(fs::read_to_string(ca.stage2.join("bin/rustc")).unwrap().contains("aarch64")); + assert!(fs::read_to_string(cb.stage2.join("bin/rustc")).unwrap().contains("riscv")); + assert_ne!(ca.identity(), cb.identity()); + assert_ne!(ca.identity(), Compiler::primary(&rust_dir).identity()); + + // Found again, not rebuilt; and still both there. + let again = choose(&a, &rust_dir, &a.join("rust"), fake); + assert_eq!((again.stage2.clone(), builds.get()), (ca.stage2.clone(), 2)); + assert!(ca.stage2.join("bin/rustc").is_file() && cb.stage2.join("bin/rustc").is_file()); + + // An uncommitted file in `compiler/` is a new compiler too. + write(&a.join("rust/compiler/rustc_target/src/new_target.rs"), "pub fn t() {}\n"); + let ca2 = choose(&a, &rust_dir, &a.join("rust"), fake); + assert_ne!(ca2.stage2, ca.stage2, "an untracked target spec kept the old compiler"); + fs::remove_file(a.join("rust/compiler/rustc_target/src/new_target.rs")).unwrap(); + + // The primary's own: nothing under its `build/` but `compilers/` moved. + let after: Vec<_> = snapshot(&rust_dir.join("build")) + .into_iter() + .filter(|(p, _)| !p.starts_with(compilers_dir(&rust_dir))) + .collect(); + assert_eq!(after, before, "the primary's stage2 or its record was written"); + assert_eq!(git(&rust_dir, &["rev-parse", "HEAD"]), git(&primary, &["rev-parse", "HEAD:rust"])); + assert_eq!(toolchain::rustup_link(), link, "the machine-global toyos link moved"); + + // A sweep takes the compiler nobody names, and only that one. + let orphan = ca2.stage2.parent().unwrap().to_path_buf(); + drop((mine, ca, cb, again, ca2)); + let kept = choose(&a, &rust_dir, &a.join("rust"), fake); + assert_eq!(sweep(&primary), [orphan], "the sweep took a compiler a worktree names, or left one nobody does"); + assert!(kept.stage2.is_dir()); + } +} diff --git a/src/lib.rs b/src/lib.rs index e9134be5bab..a5f8f1cf9df 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,7 @@ pub mod build; pub mod buildlock; pub mod ci; pub mod clippy; +pub mod compiler; /// What the untouched-disk gate compares a device against, in `tests/`. pub mod fingerprint; pub mod flags; diff --git a/src/sysroot.rs b/src/sysroot.rs index 0e4046ca00e..34cda0f3328 100644 --- a/src/sysroot.rs +++ b/src/sysroot.rs @@ -6,12 +6,12 @@ //! built from: the three trees std and `libtoyos_c.a` compile //! ([`SYSROOT_SOURCES`]), the std fork's `library/` and `src/bootstrap/` in the //! checkout that builds it, and the compiler that builds it. `rust/build/ -//! sysroots//` is a whole toolchain — the compiler's files cloned from the -//! primary's `stage2`, the guest targets' libraries built from this key's -//! sources — and nothing writes it after its [`SOURCES`] file exists. A build -//! compiles against the directory its own key names, so two worktrees with -//! different ABIs never refuse or wait for each other, and main and every branch -//! matching it share one copy. +//! sysroots//` is a whole toolchain — the compiler's files cloned from its +//! `stage2`, the guest targets' libraries built from this key's sources — and +//! nothing writes it after its [`SOURCES`] file exists. A build compiles against +//! the directory its own key names, so two worktrees with different ABIs or +//! different compilers never refuse or wait for each other, and main and every +//! branch matching it share one copy. //! //! **Each worktree builds std in its own fork checkout, and nothing but the //! primary's own sync moves the primary's.** The primary builds in its `rust/`; @@ -19,16 +19,16 @@ //! the primary's fork repository at the commit this tree pins ([`fork_checkout`]). //! `library/std` names `toyos-abi` and `toyos` as `../../../`, so each //! checkout's std compiles against its own worktree's ABI with nothing -//! rewritten. The build is bootstrap's stage-0 local rebuild: the primary's -//! `stage2` compiler compiles the checkout's `library/` for the guest targets -//! into `/build/toyos-std/`. The compiler is built once, by the -//! primary, and a fork commit whose `compiler/` is not the one it was built from -//! is refused by name ([`check_compiler`]). +//! rewritten. The build is bootstrap's stage-0 local rebuild: the compiler the +//! checkout names (`src/compiler.rs` — the primary's `stage2`, or one of the +//! worktree's own where its `compiler/` differs) compiles the checkout's +//! `library/` for the guest targets into `/build/toyos-std/`. //! -//! Locks, in the one order every acquirer takes them: the key's -//! (`buildlock::sysroot_*`), with this worktree's build lock put down; then, to -//! build, this worktree's exclusively (its fork build directory is written); -//! then the global one shared, because the primary's compiler is read. +//! Locks, in the one order every acquirer takes them: the compiler key's, if the +//! compiler is a worktree's own; the sysroot key's (`buildlock::keyed_*`), with +//! this worktree's build lock put down; then, to build, this worktree's +//! exclusively (its fork build directory is written); then, if the compiler is +//! the primary's, the global one shared, because it is read. //! //! A sysroot no worktree names any more is removed by [`sweep`], which //! `--worktree remove` runs: each build records the key it used in its @@ -42,7 +42,8 @@ use std::process::Command; use sha2::{Digest, Sha256}; -use crate::buildlock::{self, Guard, Held}; +use crate::buildlock::{self, Guard, Held, Keyed}; +use crate::compiler::{self, Compiler}; use crate::identity; use crate::toolchain::{self, host_triple, Owner, GUEST_TARGETS}; @@ -66,12 +67,6 @@ const RECIPE: &str = "bootstrap stage-0 local rebuild, profile compiler, \ /// Where each build records the key it compiled against, for [`sweep`]. const RECORD: &str = "target/toyos-sysroot-key"; -/// The compiler `stage2` was built from, written by the primary: see -/// [`record_compiler`]. -fn compiler_record(rust_dir: &Path) -> PathBuf { - rust_dir.join("build/toyos-compiler") -} - /// Every sysroot on this host. pub fn sysroots_dir(rust_dir: &Path) -> PathBuf { rust_dir.join("build/sysroots") @@ -81,6 +76,9 @@ pub fn sysroots_dir(rust_dir: &Path) -> PathBuf { pub struct Sysroot { /// A toolchain directory: `RUSTUP_TOOLCHAIN` names it. pub dir: PathBuf, + /// Whether its compiler is the primary's, which the ToyOS-hosted rustc is + /// built from. + pub primary_compiler: bool, _using: Option, } @@ -89,7 +87,7 @@ impl Sysroot { /// artifact's, which `toolchain::check_installed_toolchain` has matched to /// these sources. pub(crate) fn installed(stage2: PathBuf) -> Self { - Self { dir: stage2, _using: None } + Self { dir: stage2, primary_compiler: true, _using: None } } } @@ -98,7 +96,7 @@ fn hex(digest: &[u8]) -> String { } /// The first 16 hex digits of the SHA-256 of `data`. -fn short(data: &[u8]) -> String { +pub(crate) fn short(data: &[u8]) -> String { hex(&Sha256::digest(data))[..16].to_string() } @@ -155,7 +153,7 @@ pub fn witness(root: &Path) -> String { /// covers, into every submodule checked out there — never what a build or the /// desktop leaves beside them (bootstrap's `__pycache__`, Finder's /// `.DS_Store`), which would make a key that moves while it is being built. -fn tree_identity(base: &Path, paths: &[&str]) -> String { +pub(crate) fn tree_identity(base: &Path, paths: &[&str]) -> String { let mut files = Vec::new(); source_files(base, paths, &mut files); files.sort(); @@ -188,80 +186,14 @@ fn source_files(checkout: &Path, paths: &[&str], out: &mut Vec) { } } -/// The compiler as the key sees it: the source it was built from, as -/// [`record_compiler`] wrote it, and the driver that build left, so a rebuild -/// of the same source is a new compiler too. -fn compiler_identity(rust_dir: &Path) -> String { - let record = compiler_record(rust_dir); - let source = fs::read_to_string(&record).unwrap_or_else(|_| { - panic!( - "{} is missing, so no sysroot can say which compiler it was built with.\n\ - The primary checkout writes it: run `cargo run -- --build-only` in {} once.", - record.display(), - rust_dir.parent().unwrap_or(rust_dir).display(), - ) - }); - let lib = toolchain::stage2(rust_dir).join("lib"); - let driver = fs::read_dir(&lib) - .unwrap_or_else(|e| panic!("read {}: {e}", lib.display())) - .flatten() - .find(|e| e.file_name().to_string_lossy().starts_with("librustc_driver")) - .unwrap_or_else(|| panic!("{} holds no librustc_driver", lib.display())); - let meta = driver.metadata().unwrap_or_else(|e| panic!("stat the driver: {e}")); - let mtime = meta - .modified() - .ok() - .and_then(|t| t.duration_since(std::time::UNIX_EPOCH).ok()) - .map_or(0, |d| d.as_nanos()); - format!("{} {} {} {mtime}", source.trim(), driver.file_name().to_string_lossy(), meta.len()) -} - -/// What `checkout`'s `compiler/` is: its commit's tree, and whatever the working -/// tree changes in it. -fn compiler_source(checkout: &Path) -> String { - let tree = git_out(checkout, &["rev-parse", "HEAD:compiler"]); - let local = git_bytes(checkout, &["diff", "HEAD", "--", "compiler"]); - if local.is_empty() { - tree.trim().to_string() - } else { - format!("{} with local changes {}", tree.trim(), short(&local)) - } -} - -/// Record which compiler `stage2` is. The primary calls this after a toolchain -/// build, and when the record is missing — its compiler stamp has just said -/// `stage2` is built from what its `rust/` holds. -pub fn record_compiler(rust_dir: &Path) { - let record = compiler_record(rust_dir); - let want = compiler_source(rust_dir); - if fs::read_to_string(&record).ok().as_deref() != Some(want.as_str()) { - fs::write(&record, &want).unwrap_or_else(|e| panic!("write {}: {e}", record.display())); - } -} - -/// Refuse a fork checkout whose `compiler/` is not the one `stage2` was built -/// from: its std would be compiled by a compiler it was not written for. -fn check_compiler(rust_dir: &Path, fork: &Path) { - let record = compiler_record(rust_dir); - let built = fs::read_to_string(&record).unwrap_or_default(); - let here = compiler_source(fork); - assert!( - built.trim() == here, - "{} holds the fork at a `compiler/` ({here}) the shared compiler was not built from \ - ({}).\nA compiler change is built once, by the primary: land it, and the primary's \ - sync and next build rebuild the compiler every worktree uses.", - fork.display(), - if built.is_empty() { "nothing recorded" } else { built.trim() }, - ); -} - -/// The key of the sysroot `root` builds against with its std fork at `fork`. -pub fn key(root: &Path, rust_dir: &Path, fork: &Path) -> String { +/// The key of the sysroot `root` builds against with its std fork at `fork`, +/// compiled by `compiler`. +pub fn key(root: &Path, compiler: &Compiler, fork: &Path) -> String { let parts = [ format!("{RECIPE}; cargo {STAGE0_CARGO}; targets {}", GUEST_TARGETS.join(" ")), witness(root), tree_identity(fork, &["library", "src/bootstrap"]), - compiler_identity(rust_dir), + compiler.identity(), ]; short(parts.join("\n\0\n").as_bytes()) } @@ -374,44 +306,44 @@ fn finished(dir: &Path) -> bool { /// held in use for as long as the returned value lives. pub fn ensure(root: &Path, rust_dir: &Path, lock: &mut Held) -> Sysroot { let fork = fork_checkout(root); - if fork != rust_dir { - check_compiler(rust_dir, &fork); - } - let key = key(root, rust_dir, &fork); + let compiler = compiler::resolve(root, rust_dir, &fork, lock); + let key = key(root, &compiler, &fork); let dir = sysroots_dir(rust_dir).join(&key); let record = root.join(RECORD); fs::create_dir_all(record.parent().expect("a file under target/")).ok(); fs::write(&record, &key).unwrap_or_else(|e| panic!("write {}: {e}", record.display())); let using = lock.without_shared(|| loop { - let using = buildlock::sysroot_using(root, &key); + let using = buildlock::keyed_using(root, Keyed::Sysroot, &key); if finished(&dir) { break using; } drop(using); - let _building = buildlock::sysroot_building(root, &key); + let _building = buildlock::keyed_building(root, Keyed::Sysroot, &key); if !finished(&dir) { - build(root, rust_dir, &fork, &key, &dir); + build(root, &compiler, &fork, &key, &dir); } }); toolchain::assert_toolchain_is_honest(&dir); - Sysroot { dir, _using: Some(using) } + Sysroot { dir, primary_compiler: compiler.primary, _using: Some(using) } } /// Make the sysroot `key` names at `dir`, from `root`'s sources and the std fork -/// at `fork`. The caller holds the key's lock. -fn build(root: &Path, rust_dir: &Path, fork: &Path, key: &str, dir: &Path) { +/// at `fork`, with `compiler`. The caller holds the key's lock. +fn build(root: &Path, compiler: &Compiler, fork: &Path, key: &str, dir: &Path) { let what = format!("building sysroot {key}"); let _worktree = buildlock::worktree_exclusive(root, &what); - let _compiler = buildlock::compiler_shared(root, &what); - eprintln!("Building sysroot {key}: std from {}, the compiler from {}", fork.display(), rust_dir.display()); + // Only the primary's compiler is rebuilt in place; one of a worktree's own + // is written once and held in use by `compiler`. + let _compiler = compiler.primary.then(|| buildlock::compiler_shared(root, &what)); + eprintln!("Building sysroot {key}: std from {}, the compiler {}", fork.display(), compiler.stage2.display()); - let built = build_std(root, rust_dir, fork); + let built = build_std(root, compiler, fork); let partial = dir.with_extension("partial"); if partial.exists() { fs::remove_dir_all(&partial).unwrap_or_else(|e| panic!("remove {}: {e}", partial.display())); } - clone_tree(&toolchain::stage2(rust_dir), &partial); + clone_tree(&compiler.stage2, &partial); for target in GUEST_TARGETS { place_std(&stamp(&built, target), &partial.join("lib/rustlib").join(target).join("lib")); } @@ -422,7 +354,7 @@ fn build(root: &Path, rust_dir: &Path, fork: &Path, key: &str, dir: &Path) { let _ = fs::remove_dir_all(&libc_target); // The sources the key named are the ones built, or this is not that key's. - let again = self::key(root, rust_dir, fork); + let again = self::key(root, compiler, fork); assert!( again == key, "the sources moved while sysroot {key} was being built (they are now {again}); \ @@ -437,12 +369,10 @@ fn build(root: &Path, rust_dir: &Path, fork: &Path, key: &str, dir: &Path) { .unwrap_or_else(|e| panic!("rename {} -> {}: {e}", partial.display(), dir.display())); } -/// Compile the guest targets' libraries from `fork`'s `library/` with the -/// primary's compiler, and return the directory each target's is under. -fn build_std(root: &Path, rust_dir: &Path, fork: &Path) -> PathBuf { - if fork == rust_dir { - crate::ensure_submodule(fork, "library/backtrace"); - } +/// Compile the guest targets' libraries from `fork`'s `library/` with +/// `compiler`, and return the directory each target's is under. +fn build_std(root: &Path, compiler: &Compiler, fork: &Path) -> PathBuf { + crate::ensure_submodule(fork, "library/backtrace"); let host = host_triple(); let build_dir = fork.join("build/toyos-std"); fs::create_dir_all(&build_dir).unwrap_or_else(|e| panic!("create {}: {e}", build_dir.display())); @@ -452,7 +382,7 @@ fn build_std(root: &Path, rust_dir: &Path, fork: &Path) -> PathBuf { let _ = fs::remove_dir_all(build_dir.join(&host).join("stage0-std").join(target)); } let config = build_dir.join("bootstrap.toml"); - fs::write(&config, std_config(rust_dir, &build_dir, &host, &toolchain::toyos_ld_binary(root))) + fs::write(&config, std_config(&compiler.stage2, &build_dir, &host, &toolchain::toyos_ld_binary(root))) .unwrap_or_else(|e| panic!("write {}: {e}", config.display())); // Bootstrap re-locks `library/Cargo.lock` to this worktree's `toyos-abi` and @@ -521,7 +451,7 @@ fn place_std(stamp: &Path, lib: &Path) { /// `local-rebuild` is what lets stage 0 compile the library for a target the /// stage-0 compiler has none for, and `profile = "compiler"` is the primary's, /// so these libraries are built with the options `stage2`'s own were. -fn std_config(rust_dir: &Path, build_dir: &Path, host: &str, toyos_ld: &Path) -> String { +fn std_config(compiler: &Path, build_dir: &Path, host: &str, toyos_ld: &Path) -> String { let targets = GUEST_TARGETS.iter().map(|t| format!("\"{t}\"")).collect::>().join(", "); let linker = toyos_ld.display(); let userland: String = toolchain::USERLAND_ARCHS @@ -543,7 +473,7 @@ target = [{targets}] [rust] lld = false {userland}"#, - rustc = toolchain::stage2(rust_dir).join("bin/rustc").display(), + rustc = compiler.join("bin/rustc").display(), cargo = bootstrap_cargo().display(), build_dir = build_dir.display(), ) @@ -597,7 +527,7 @@ impl Drop for Restore { /// Copy `from` to `to`, a symbolic link as a link: `stage2`'s own point at /// things that outlive it. `fs::copy` clones on APFS and reflinks where Linux /// can, so a sysroot costs the bytes its own libraries differ by. -fn clone_tree(from: &Path, to: &Path) { +pub(crate) fn clone_tree(from: &Path, to: &Path) { fs::create_dir_all(to).unwrap_or_else(|e| panic!("create {}: {e}", to.display())); for entry in fs::read_dir(from).unwrap_or_else(|e| panic!("read {}: {e}", from.display())).flatten() { let src = entry.path(); @@ -638,7 +568,7 @@ pub fn sweep(root: &Path) -> Vec { if whole && named.contains(&key) { continue; } - let Some(_idle) = buildlock::sysroot_idle(root, &key) else { continue }; + let Some(_idle) = buildlock::keyed_idle(root, Keyed::Sysroot, &key) else { continue }; let path = entry.path(); fs::remove_dir_all(&path).unwrap_or_else(|e| panic!("remove {}: {e}", path.display())); removed.push(path); @@ -650,7 +580,7 @@ fn path_str(path: &Path) -> &str { path.to_str().unwrap_or_else(|| panic!("{} is not UTF-8", path.display())) } -fn git_bytes(dir: &Path, args: &[&str]) -> Vec { +pub(crate) fn git_bytes(dir: &Path, args: &[&str]) -> Vec { let out = Command::new("git") .args(args) .current_dir(dir) @@ -665,7 +595,7 @@ fn git_bytes(dir: &Path, args: &[&str]) -> Vec { out.stdout } -fn git_out(dir: &Path, args: &[&str]) -> String { +pub(crate) fn git_out(dir: &Path, args: &[&str]) -> String { String::from_utf8_lossy(&git_bytes(dir, args)).into_owned() } @@ -724,7 +654,7 @@ mod tests { write(&fork.join(".gitignore"), "__pycache__\n.DS_Store\n"); git(&fork, &["init", "-q"]); let rust_dir = base.join("rust"); - write(&compiler_record(&rust_dir), "tree-1"); + write(&rust_dir.join("build/toyos-compiler"), "tree-1"); write(&toolchain::stage2(&rust_dir).join("lib/librustc_driver-1.dylib"), "a driver"); (root, rust_dir, fork) } @@ -735,7 +665,7 @@ mod tests { #[test] fn a_comment_is_the_same_sysroot_and_a_signature_is_another() { let (root, rust_dir, fork) = keyed("key"); - let k = || key(&root, &rust_dir, &fork); + let k = || key(&root, &Compiler::primary(&rust_dir), &fork); let base = k(); assert_eq!(base.len(), 16, "{base}"); @@ -769,7 +699,7 @@ mod tests { write(&root.join("toyos-abi/Cargo.toml"), "[package]\nversion = \"0.1.0\"\n"); assert_eq!(k(), base); - write(&compiler_record(&rust_dir), "tree-2"); + write(&rust_dir.join("build/toyos-compiler"), "tree-2"); assert_ne!(k(), base, "another compiler kept the old sysroot"); } @@ -876,7 +806,7 @@ mod tests { } write(&root.join(RECORD), "named"); write(&linked.join(RECORD), "linked-named"); - let using = buildlock::sysroot_using(&root, "in-use"); + let using = buildlock::keyed_using(&root, Keyed::Sysroot, "in-use"); let mut removed = sweep(&root); removed.sort(); diff --git a/src/toolchain.rs b/src/toolchain.rs index 3746f7b9bc9..5564b24ad0d 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -233,7 +233,7 @@ pub(crate) fn rustup_home() -> Option { } /// Where the machine-global `toyos` rustup toolchain currently points. -fn rustup_link() -> Option { +pub(crate) fn rustup_link() -> Option { fs::read_link(rustup_home()?.join("toolchains/toyos")).ok() } @@ -322,7 +322,7 @@ fn cargo_link_stale(stage2: &Path) -> bool { /// has, and a copy would put a 32 MB host binary into a 401 MiB artifact to /// stand in for a file the consumer can make in a microsecond. `Owner::Installed` /// makes it, exactly as it makes the host target. -fn provision_toolchain_cargo(stage2: &Path) { +pub(crate) fn provision_toolchain_cargo(stage2: &Path) { let at = stage2.join("bin/cargo"); let _ = fs::remove_file(&at); std::os::unix::fs::symlink(host_cargo(), &at).unwrap_or_else(|e| { @@ -480,7 +480,7 @@ pub fn ensure(root: &Path, force_rebuild: bool, lock: &mut buildlock::Held) -> S eprintln!("Building full toolchain (this takes a while on first run)..."); full_bootstrap(root, &rust_dir); stamps::write_dir_stamp(&rust_dir.join("compiler"), &compiler_stamp); - sysroot::record_compiler(&rust_dir); + crate::compiler::record(&rust_dir); if kind.invalidate_hosted { let _ = fs::remove_file(&hosted_stamp); } @@ -492,7 +492,7 @@ pub fn ensure(root: &Path, force_rebuild: bool, lock: &mut buildlock::Held) -> S Scope::Global, "record which compiler the toolchain is", || (!rust_dir.join("build/toyos-compiler").exists()).then_some(()), - |()| sysroot::record_compiler(&rust_dir), + |()| crate::compiler::record(&rust_dir), ); let hosted_rustc = rust_dir.join(format!("build/{}/stage2/bin/rustc", HOSTED_ARCH.userland())); diff --git a/src/worktree.rs b/src/worktree.rs index b00c05fa859..b4bb5d73cd6 100644 --- a/src/worktree.rs +++ b/src/worktree.rs @@ -308,7 +308,8 @@ fn gib(bytes: u64) -> String { /// a worktree of anything. Once git has let go of it nothing in it is work, /// so the whole directory goes. /// -/// Then every sysroot no remaining worktree names goes too (`src/sysroot.rs`). +/// Then every sysroot and every compiler no remaining worktree names goes too +/// (`src/sysroot.rs`, `src/compiler.rs`). pub(crate) fn remove(root: &Path, path: &str) { let at = root.join(path); remove_fork_checkout(root, &at); @@ -326,6 +327,10 @@ pub(crate) fn remove(root: &Path, path: &str) { if !swept.is_empty() { eprintln!("removed {} sysroot(s) no worktree names any more", swept.len()); } + let swept = crate::compiler::sweep(root); + if !swept.is_empty() { + eprintln!("removed {} compiler(s) no worktree names any more", swept.len()); + } } /// A linked worktree's own fork checkout (`src/sysroot.rs`'s `fork_checkout`) From e32e8762d4c2e042c464815ae4fa12d76857330f Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 17:07:21 +0200 Subject: [PATCH 18/50] issues: the harness reads a contention-exposed defect as a Sched, and issue files cite moved paths Two small tooling defects found while landing the port's stage 0: - The shared-host green arm of the ALONE line names Sched::Parallel as the cause, and nothing groups wide failures that share a headline: at f67863c2 one kernel defect (BackendGuard::try_lock) read as 130 scheduling classifications. - 46 citations in 35 issue files name paths this branch moved, beside at least 14 whole kernel/src paths already missing on main. Whether a gate belongs is the owner's: src/CLAUDE.md says documentation carries no gates. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...-exposes-is-classified-as-a-wrong-sched.md | 36 +++++++++++++++++ .../issue-files-cite-paths-that-moved.md | 40 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 issues/build/a-defect-only-contention-exposes-is-classified-as-a-wrong-sched.md create mode 100644 issues/build/issue-files-cite-paths-that-moved.md diff --git a/issues/build/a-defect-only-contention-exposes-is-classified-as-a-wrong-sched.md b/issues/build/a-defect-only-contention-exposes-is-classified-as-a-wrong-sched.md new file mode 100644 index 00000000000..3a63445eca4 --- /dev/null +++ b/issues/build/a-defect-only-contention-exposes-is-classified-as-a-wrong-sched.md @@ -0,0 +1,36 @@ +--- +status: open +kind: tooling +opened: 2026-09-26 +--- + +# A defect only contention exposes is classified as a wrong `Sched::Parallel` + +When a test fails in the wide run and passes in the lone re-run, and the wide +run shared the host, `alone_line` (`tests/toyos.rs`) prints one verdict: +`GREEN — it fails only beside other guests, so its Sched::Parallel is wrong`. +That names a cause. What the two runs establish is only that the failure needs +the timing a loaded host produces, and a kernel race that only a slow or +preempted vCPU opens produces exactly that pair. + +Recorded case, PR #524's fast tier at `f67863c2`: 270 passed, 130 failed, and +254 of the failures were one kernel panic, `vconsole: no tx slot`. Each of the +130 was green alone, so each got the scheduling verdict, 130 times. The cause +was one kernel defect: `serial::BackendGuard::try_lock` built, and so dropped +and unlocked, a guard for the CPU that lost the exchange (fixed in +`1e5ef5c1`). Changing any test's `Sched` would have hidden it. + +What reads it wrong: + +- The per-test verdict names a cause the evidence does not decide. The + `tests/CLAUDE.md` caveat already says it is a hypothesis; the line itself + says it is a finding. +- Nothing groups the failures. Tests that fail wide on one shared headline (the + same panic message, `toyos_build::alone::same_failure`) are one finding, and + the report prints them as N separate classifications. + +**Exit condition**: the shared-host green arm states the observation (fails +only beside other guests) without naming `Sched` as the cause, and the run's +summary groups wide failures that share a headline, printing the group's count +before any per-test classification. The staged pair for the grouping is the +`f67863c2` shape: many tests, one panic headline. diff --git a/issues/build/issue-files-cite-paths-that-moved.md b/issues/build/issue-files-cite-paths-that-moved.md new file mode 100644 index 00000000000..7f8760805cf --- /dev/null +++ b/issues/build/issue-files-cite-paths-that-moved.md @@ -0,0 +1,40 @@ +--- +status: open +kind: tooling +opened: 2026-09-26 +--- + +# Issue files cite source paths that no longer exist + +An issue names the site it is about by path, and a path is the claim a reader +checks first. Moving a source file leaves every issue that cites it pointing at +nothing, and nothing notices. + +Measured on PR #524's branch at `73a89365` (the port's stage 0 moved the +kernel's x86 code under `kernel/src/arch/x86_64/`, the syscall handlers out of +`arch/`, and `hw.rs`): every `kernel/`, `src/`, `userland/`, `tests/`, +`bootloader/` and `toyos-*/` path written in `issues/`, checked against that +tree and against `origin/main`: + +- 46 citations in 35 files name a path that exists on `main` and not on the + branch: the branch moved them. Among them `kernel/src/arch/syscall/*.rs`, + `kernel/src/hw.rs`, `kernel/src/mm/paging.rs`, `kernel/src/arch/apic.rs`, + `kernel/src/arch/idt/*.rs` and `kernel/src/drivers/watchdog.rs`. +- Already on `main`, before this branch: at least 14 citations in 11 files of + a whole `kernel/src/` path that does not exist (`kernel/src/arch/syscall.rs`, + `kernel/src/inbox.rs`, `kernel/src/log_file.rs`, + `kernel/src/completion/mod.rs` among them). The wider count, 153 in 95 files, + also holds crate-relative spellings (`sched/dump.rs`) that the check cannot + tell from rot. + +**Whether a gate belongs with it.** `src/CLAUDE.md` says documentation carries +no gates, and an issue is prose; a red gate over `issues/` contradicts that +rule, so it is the owner's to decide. What the tree already requires of a +deleted document (its citations go in the same merge) is the rule a move needs +too, and an on-demand check that lists every cited path that does not resolve +(offline, beside `--check-forks`) would let the mover do it. A gate is what +makes the mover's duty hold. The on-demand check only makes it cheap. + +**Exit condition**: every whole-repository path written in `issues/` resolves +in the tree that holds it, and the owner has ruled whether a move that strands +one is refused by a gate or caught on demand. From 398c7e25a5b6699ac70648dbc12fbac849be1209 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 17:07:22 +0200 Subject: [PATCH 19/50] toyos-ld: AArch64 TLS descriptors, variant I, and imports through the GOT The aarch64-unknown-toyos std and userland link through toyos-ld, and their thread-locals are TLS descriptor sequences (adrp, ldr, add, blr): - In an executable a descriptor for a variable it defines relaxes to local-exec (movz x0; movk x0; nop; nop), and one another module defines to initial-exec (adrp x0; ldr x0; nop; nop) over a GOT slot named by R_AARCH64_TLS_TPREL. The offsets are TLS variant I: align_up(16, TLS_ALIGN) + the variable's offset in the block, where TLS_ALIGN is the 64 the layout and PT_TLS already used. - A shared library keeps the sequence, points it at a 16-byte descriptor pair per symbol, and asks the loader for it with R_AARCH64_TLSDESC. - R_AARCH64_TLSIE_* and R_AARCH64_TLSLE_ADD_TPREL_* are applied; a local-exec reference in a shared library is refused. - PREL64, LD_PREL_LO19, ADR_PREL_LO21, CONDBR19 and TSTBR14 are applied, with their ranges checked. Two defects the AArch64 std link exposed: an AArch64 GOT relocation looked only in the static GOT, so a shared library's import (its slot is in dyn_got, filled by GLOB_DAT) was an undefined symbol; and the ELF layout wrote x86-64 PLT stubs (FF 25) for every machine. The stub is now the machine's own (adrp x16; ldr x16; br x16 on AArch64). Tests read the outputs back with the object crate against the ABI's numbers. Mutations, each applied, built, run and restored: the TCB gap without the segment's alignment, EXIT=101 (the local-exec test); a descriptor's argument not relative to the block, EXIT=101 (the shared test); the dyn_got lookup removed, EXIT=101 (the import test). Differential oracle: one rustc-built object with two TLSDESC sequences, linked by LLVM's lld and by toyos-ld, is rewritten identically (movz; movk; nop; nop); the offsets differ only by each output's PT_TLS alignment (lld 8: 0x10/0x18; toyos-ld 64: 0x40/0x48). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- toyos-ld/src/collect.rs | 63 ++++++++ toyos-ld/src/emit_elf.rs | 70 ++++++-- toyos-ld/src/reloc.rs | 292 +++++++++++++++++++++++++++++++--- toyos-ld/tests/common/mod.rs | 16 ++ toyos-ld/tests/machines.rs | 46 ++++++ toyos-ld/tests/tls_aarch64.rs | 177 +++++++++++++++++++++ 6 files changed, 622 insertions(+), 42 deletions(-) create mode 100644 toyos-ld/tests/tls_aarch64.rs diff --git a/toyos-ld/src/collect.rs b/toyos-ld/src/collect.rs index c6691924656..954f177ac33 100644 --- a/toyos-ld/src/collect.rs +++ b/toyos-ld/src/collect.rs @@ -116,6 +116,11 @@ pub enum RelocType { Aarch64Abs64, Aarch64Abs32, Aarch64Prel32, + Aarch64Prel64, + Aarch64LdPrelLo19, + Aarch64AdrPrelLo21, + Aarch64Condbr19, + Aarch64Tstbr14, Aarch64Call26, Aarch64Jump26, Aarch64AdrPrelPgHi21, @@ -134,6 +139,38 @@ pub enum RelocType { Aarch64GotPcrel32, Aarch64TlvpLoadPage21, Aarch64TlvpLoadPageoff12, + Aarch64TlsdescAdrPage21, + Aarch64TlsdescLd64Lo12, + Aarch64TlsdescAddLo12, + Aarch64TlsdescCall, + Aarch64TlsieAdrGottprelPage21, + Aarch64TlsieLd64GottprelLo12Nc, + Aarch64TlsleAddTprelHi12, + Aarch64TlsleAddTprelLo12Nc, +} + +impl RelocType { + /// One of the four relocations of an AArch64 TLS descriptor sequence + /// (`adrp`, `ldr`, `add`, `blr`), each patching its own instruction and all + /// four relaxed the same way for one symbol. + pub(crate) fn is_tlsdesc(self) -> bool { + matches!( + self, + Self::Aarch64TlsdescAdrPage21 + | Self::Aarch64TlsdescLd64Lo12 + | Self::Aarch64TlsdescAddLo12 + | Self::Aarch64TlsdescCall + ) + } + + /// A reference to a GOT slot holding a symbol's offset from the thread + /// pointer: the initial-exec model. + pub(crate) fn is_gottprel(self) -> bool { + matches!( + self, + Self::X86Gottpoff | Self::Aarch64TlsieAdrGottprelPage21 | Self::Aarch64TlsieLd64GottprelLo12Nc + ) + } } impl std::fmt::Display for RelocType { @@ -156,6 +193,11 @@ impl std::fmt::Display for RelocType { RelocType::Aarch64Abs64 => write!(f, "R_AARCH64_ABS64"), RelocType::Aarch64Abs32 => write!(f, "R_AARCH64_ABS32"), RelocType::Aarch64Prel32 => write!(f, "R_AARCH64_PREL32"), + RelocType::Aarch64Prel64 => write!(f, "R_AARCH64_PREL64"), + RelocType::Aarch64LdPrelLo19 => write!(f, "R_AARCH64_LD_PREL_LO19"), + RelocType::Aarch64AdrPrelLo21 => write!(f, "R_AARCH64_ADR_PREL_LO21"), + RelocType::Aarch64Condbr19 => write!(f, "R_AARCH64_CONDBR19"), + RelocType::Aarch64Tstbr14 => write!(f, "R_AARCH64_TSTBR14"), RelocType::Aarch64Call26 => write!(f, "R_AARCH64_CALL26"), RelocType::Aarch64Jump26 => write!(f, "R_AARCH64_JUMP26"), RelocType::Aarch64AdrPrelPgHi21 => write!(f, "R_AARCH64_ADR_PREL_PG_HI21"), @@ -174,6 +216,14 @@ impl std::fmt::Display for RelocType { RelocType::Aarch64GotPcrel32 => write!(f, "ARM64_RELOC_POINTER_TO_GOT"), RelocType::Aarch64TlvpLoadPage21 => write!(f, "ARM64_RELOC_TLVP_LOAD_PAGE21"), RelocType::Aarch64TlvpLoadPageoff12 => write!(f, "ARM64_RELOC_TLVP_LOAD_PAGEOFF12"), + RelocType::Aarch64TlsdescAdrPage21 => write!(f, "R_AARCH64_TLSDESC_ADR_PAGE21"), + RelocType::Aarch64TlsdescLd64Lo12 => write!(f, "R_AARCH64_TLSDESC_LD64_LO12"), + RelocType::Aarch64TlsdescAddLo12 => write!(f, "R_AARCH64_TLSDESC_ADD_LO12"), + RelocType::Aarch64TlsdescCall => write!(f, "R_AARCH64_TLSDESC_CALL"), + RelocType::Aarch64TlsieAdrGottprelPage21 => write!(f, "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21"), + RelocType::Aarch64TlsieLd64GottprelLo12Nc => write!(f, "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC"), + RelocType::Aarch64TlsleAddTprelHi12 => write!(f, "R_AARCH64_TLSLE_ADD_TPREL_HI12"), + RelocType::Aarch64TlsleAddTprelLo12Nc => write!(f, "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC"), } } } @@ -832,6 +882,11 @@ fn elf_to_reloc_type(r_type: u32) -> Option { elf::R_AARCH64_ABS64 => RelocType::Aarch64Abs64, elf::R_AARCH64_ABS32 => RelocType::Aarch64Abs32, elf::R_AARCH64_PREL32 => RelocType::Aarch64Prel32, + elf::R_AARCH64_PREL64 => RelocType::Aarch64Prel64, + elf::R_AARCH64_LD_PREL_LO19 => RelocType::Aarch64LdPrelLo19, + elf::R_AARCH64_ADR_PREL_LO21 => RelocType::Aarch64AdrPrelLo21, + elf::R_AARCH64_CONDBR19 => RelocType::Aarch64Condbr19, + elf::R_AARCH64_TSTBR14 => RelocType::Aarch64Tstbr14, elf::R_AARCH64_CALL26 => RelocType::Aarch64Call26, elf::R_AARCH64_JUMP26 => RelocType::Aarch64Jump26, elf::R_AARCH64_ADR_PREL_PG_HI21 => RelocType::Aarch64AdrPrelPgHi21, @@ -847,6 +902,14 @@ fn elf_to_reloc_type(r_type: u32) -> Option { elf::R_AARCH64_MOVW_UABS_G3 => RelocType::Aarch64MovwUabsG3, elf::R_AARCH64_ADR_GOT_PAGE => RelocType::Aarch64AdrGotPage, elf::R_AARCH64_LD64_GOT_LO12_NC => RelocType::Aarch64Ld64GotLo12Nc, + elf::R_AARCH64_TLSDESC_ADR_PAGE21 => RelocType::Aarch64TlsdescAdrPage21, + elf::R_AARCH64_TLSDESC_LD64_LO12 => RelocType::Aarch64TlsdescLd64Lo12, + elf::R_AARCH64_TLSDESC_ADD_LO12 => RelocType::Aarch64TlsdescAddLo12, + elf::R_AARCH64_TLSDESC_CALL => RelocType::Aarch64TlsdescCall, + elf::R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 => RelocType::Aarch64TlsieAdrGottprelPage21, + elf::R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC => RelocType::Aarch64TlsieLd64GottprelLo12Nc, + elf::R_AARCH64_TLSLE_ADD_TPREL_HI12 => RelocType::Aarch64TlsleAddTprelHi12, + elf::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC => RelocType::Aarch64TlsleAddTprelLo12Nc, _ => return None, }) } diff --git a/toyos-ld/src/emit_elf.rs b/toyos-ld/src/emit_elf.rs index 3fc344b3b78..3bbf2a2bf74 100644 --- a/toyos-ld/src/emit_elf.rs +++ b/toyos-ld/src/emit_elf.rs @@ -2,7 +2,7 @@ use object::write::elf::{FileHeader, ProgramHeader, SectionHeader, SectionIndex, use object::write::StringId; use object::Endianness; use crate::collect::{collect_unique_symbols, Arch, InputSection, LinkState, RelocType, SectionKind, SymbolDef, SymbolRef}; -use crate::reloc::{RelocOutput, resolve_symbol, tpoff}; +use crate::reloc::{RelocOutput, resolve_symbol, tpoff, TLS_ALIGN}; use crate::{align_up, classify_sections, LinkError, BASE_VADDR, PAGE_SIZE}; use object::elf; use std::collections::{BTreeMap, HashMap, HashSet}; @@ -303,9 +303,12 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti } } - const PLT_STUB_SIZE: u64 = 6; + let plt_stub_size: u64 = match state.arch { + Arch::X86_64 => 6, + Arch::Aarch64 => 12, + }; let plt_vaddr = if dyn_syms.is_empty() { cursor } else { align_up(cursor, 16) }; - cursor = plt_vaddr + dyn_syms.len() as u64 * PLT_STUB_SIZE; + cursor = plt_vaddr + dyn_syms.len() as u64 * plt_stub_size; // .eh_frame_hdr: placed after PLT stubs, before page alignment let mut eh_frame_vaddr = 0u64; @@ -370,9 +373,10 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let got_symbols = collect_unique_symbols(state.relocs.iter(), |r| { matches!(r.r_type, RelocType::X86Gotpcrel | RelocType::X86Gotpcrelx - | RelocType::X86RexGotpcrelx | RelocType::X86Gottpoff + | RelocType::X86RexGotpcrelx | RelocType::Aarch64AdrGotPage | RelocType::Aarch64Ld64GotLo12Nc) - || (r.r_type == RelocType::X86Tlsgd && !is_shared + || r.r_type.is_gottprel() + || ((r.r_type == RelocType::X86Tlsgd || r.r_type.is_tlsdesc()) && !is_shared && state.dynamic_imports.contains(r.target.name())) }); @@ -393,7 +397,7 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let mut gd_got: BTreeMap = BTreeMap::new(); if is_shared { let gd_symbols = collect_unique_symbols(state.relocs.iter(), |r| { - r.r_type == RelocType::X86Tlsgd + r.r_type == RelocType::X86Tlsgd || r.r_type.is_tlsdesc() }); for sym in &gd_symbols { gd_got.insert(sym.clone(), cursor); @@ -417,7 +421,7 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti // TLS file-backed sections (.tdata) placed within RW segment for correct // PT_TLS p_offset. PT_TLS overlaps with PT_LOAD(RW) in the file. - let tls_start = if buckets.tls.is_empty() { cursor } else { align_up(cursor, 64) }; + let tls_start = if buckets.tls.is_empty() { cursor } else { align_up(cursor, TLS_ALIGN) }; let mut tls_cursor = tls_start; for &idx in &buckets.tls { if state.sections[idx].kind == SectionKind::TlsBss { continue; } @@ -452,16 +456,33 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let rw_end = align_up(cursor, PAGE_SIZE); - // Build PLT stub code: `jmp *[rip + offset]` (FF 25 xx xx xx xx) + // Build PLT stub code, each an indirect jump through the import's GOT slot: + // x86-64 `jmp *[rip + offset]` (FF 25 disp32); AArch64 `adrp x16, slot; + // ldr x16, [x16, #lo12]; br x16`. let mut plt = BTreeMap::new(); let mut plt_data = Vec::new(); for (i, sym) in dyn_syms.iter().enumerate() { - let stub_vaddr = plt_vaddr + i as u64 * PLT_STUB_SIZE; + let stub_vaddr = plt_vaddr + i as u64 * plt_stub_size; plt.insert(sym.clone(), stub_vaddr); - let rip = stub_vaddr + 6; - let offset = (dyn_got[sym] as i64 - rip as i64) as i32; - plt_data.extend_from_slice(&[0xFF, 0x25]); - plt_data.extend_from_slice(&offset.to_le_bytes()); + let slot = dyn_got[sym]; + match state.arch { + Arch::X86_64 => { + let rip = stub_vaddr + 6; + let offset = (slot as i64 - rip as i64) as i32; + plt_data.extend_from_slice(&[0xFF, 0x25]); + plt_data.extend_from_slice(&offset.to_le_bytes()); + } + Arch::Aarch64 => { + let pages = ((slot as i64 & !0xFFF) - (stub_vaddr as i64 & !0xFFF)) >> 12; + assert!((-(1 << 20)..(1 << 20)).contains(&pages), "a PLT stub cannot reach its GOT slot"); + let pages = pages as u32; + let adrp = 0x9000_0010 | ((pages & 3) << 29) | (((pages >> 2) & 0x7FFFF) << 5); + let ldr = 0xF940_0210 | ((((slot & 0xFFF) >> 3) as u32) << 10); + for insn in [adrp, ldr, 0xD61F_0200] { + plt_data.extend_from_slice(&insn.to_le_bytes()); + } + } + } } ElfLayout { @@ -725,6 +746,7 @@ pub(crate) fn emit_elf( let has_relocs = relocs.as_ref().is_some_and(|r| { !r.relatives.is_empty() || !r.glob_dats.is_empty() || !r.tpoff64s.is_empty() || !r.named_tpoff64s.is_empty() || !r.tpoff32s.is_empty() + || !r.tlsdescs.is_empty() || !r.named_tlsdescs.is_empty() }); let needs_dynamic = is_shared || has_dynamic_libs || (is_pie && (layout.init_array_size > 0 || layout.fini_array_size > 0 || has_relocs)); @@ -735,7 +757,8 @@ pub(crate) fn emit_elf( || relocs.is_some_and(|r| !r.glob_dats.is_empty()) || relocs.is_some_and(|r| !r.tpoff64s.is_empty()) || relocs.is_some_and(|r| !r.named_tpoff64s.is_empty()) - || relocs.is_some_and(|r| !r.tpoff32s.is_empty()); + || relocs.is_some_and(|r| !r.tpoff32s.is_empty()) + || relocs.is_some_and(|r| !r.tlsdescs.is_empty() || !r.named_tlsdescs.is_empty()); let file_rw_end = layout.rw_start + layout.rw_filesz; let mut buf = Vec::new(); @@ -772,6 +795,7 @@ pub(crate) fn emit_elf( .chain(relocs.named_tpoff64s.iter()) .chain(relocs.named_dtpmod64s.iter()) .chain(relocs.named_dtpoff64s.iter()) + .chain(relocs.named_tlsdescs.iter()) { if !sym_to_writer_idx.contains_key(sym_name) { let str_id = w.add_dynamic_string(sym_name.as_bytes()); @@ -807,6 +831,7 @@ pub(crate) fn emit_elf( .chain(relocs.named_tpoff64s.iter()) .chain(relocs.named_dtpmod64s.iter()) .chain(relocs.named_dtpoff64s.iter()) + .chain(relocs.named_tlsdescs.iter()) { if !sym_to_writer_idx.contains_key(sym_name) { let str_id = w.add_dynamic_string(sym_name.as_bytes()); @@ -925,6 +950,7 @@ pub(crate) fn emit_elf( + relocs.tpoff64s.len() + relocs.named_tpoff64s.len() + relocs.tpoff32s.len() + relocs.dtpmod64s.len() + relocs.dtpoff64s.len() + relocs.named_dtpmod64s.len() + relocs.named_dtpoff64s.len() + + relocs.tlsdescs.len() + relocs.named_tlsdescs.len() } else { 0 }; let rela_size = rela_count as u64 * 24; @@ -1057,7 +1083,7 @@ pub(crate) fn emit_elf( p_paddr: layout.tls_start, p_filesz: layout.tls_filesz, p_memsz: layout.tls_memsz, - p_align: 64, + p_align: TLS_ALIGN, }); } if has_eh_frame_hdr { @@ -1137,7 +1163,7 @@ pub(crate) fn emit_elf( // Static mode: fill GOT entries directly (GOT is before TLS in the layout) if is_static { let gottpoff_syms: HashSet = state.relocs.iter() - .filter(|r| r.r_type == RelocType::X86Gottpoff) + .filter(|r| r.r_type.is_gottprel()) .map(|r| r.target.clone()).collect(); let mut got_entries: Vec<_> = layout.got.iter().collect(); got_entries.sort_by_key(|(_, &vaddr)| vaddr); @@ -1145,7 +1171,7 @@ pub(crate) fn emit_elf( let sym_addr = resolve_symbol(state, sym_ref, None) .ok_or_else(|| LinkError::UndefinedSymbols(vec![sym_ref.name().to_string()]))?; let value = if gottpoff_syms.contains(sym_ref) { - tpoff(sym_addr, layout.tls_start, layout.tls_memsz) as u64 + tpoff(state.arch, sym_addr, layout.tls_start, layout.tls_memsz) as u64 } else { sym_addr }; let file_off = (got_vaddr - base) as usize; w.pad_until(file_off); @@ -1400,6 +1426,7 @@ enum DynReloc { TpOff32, DtpMod64, DtpOff64, + TlsDesc, } fn dyn_reloc_type(arch: Arch, kind: DynReloc) -> u32 { @@ -1415,8 +1442,11 @@ fn dyn_reloc_type(arch: Arch, kind: DynReloc) -> u32 { (Arch::Aarch64, DynReloc::TpOff64) => elf::R_AARCH64_TLS_TPREL, (Arch::Aarch64, DynReloc::DtpMod64) => elf::R_AARCH64_TLS_DTPMOD, (Arch::Aarch64, DynReloc::DtpOff64) => elf::R_AARCH64_TLS_DTPREL, + (Arch::Aarch64, DynReloc::TlsDesc) => elf::R_AARCH64_TLSDESC, // Only an x86-64 `TPOFF32` input produces one. (Arch::Aarch64, DynReloc::TpOff32) => panic!("an AArch64 link produced a 32-bit TP offset"), + // Only an AArch64 descriptor sequence produces one. + (Arch::X86_64, DynReloc::TlsDesc) => panic!("an x86-64 link produced a TLS descriptor"), } } @@ -1459,4 +1489,10 @@ fn write_dyn_relocs( for (got_vaddr, name) in &relocs.named_dtpoff64s { write(*got_vaddr, named(name), DynReloc::DtpOff64, 0); } + for &(pair, addend) in &relocs.tlsdescs { + write(pair, 0, DynReloc::TlsDesc, addend); + } + for (pair, name) in &relocs.named_tlsdescs { + write(*pair, named(name), DynReloc::TlsDesc, 0); + } } diff --git a/toyos-ld/src/reloc.rs b/toyos-ld/src/reloc.rs index 6a9eda6cb97..d99de1b7002 100644 --- a/toyos-ld/src/reloc.rs +++ b/toyos-ld/src/reloc.rs @@ -32,6 +32,13 @@ pub(crate) struct RelocOutput { pub(crate) named_dtpmod64s: Vec<(u64, String)>, /// Named R_X86_64_DTPOFF64 for cross-library TLS: (GOT slot vaddr, symbol name). pub(crate) named_dtpoff64s: Vec<(u64, String)>, + /// R_AARCH64_TLSDESC runtime relocations for a shared library's own TLS: + /// (descriptor pair vaddr, the symbol's offset within the module's TLS + /// segment). The loader writes the resolver and its argument. + pub(crate) tlsdescs: Vec<(u64, i64)>, + /// Named R_AARCH64_TLSDESC for cross-library TLS: (descriptor pair vaddr, + /// symbol name). + pub(crate) named_tlsdescs: Vec<(u64, String)>, } /// Resolve a symbol to its virtual address. @@ -83,10 +90,23 @@ pub(crate) fn resolve_symbol( } } -/// x86-64 Variant II: TP points to end of TLS block. -/// TPOFF = symbol_vaddr - (tls_start + tls_memsz) -pub(crate) fn tpoff(sym_addr: u64, tls_start: u64, tls_memsz: u64) -> i64 { - sym_addr as i64 - (tls_start as i64 + tls_memsz as i64) +/// The alignment of every TLS segment this linker lays out: its start in the +/// image, its `PT_TLS` `p_align`, and so the gap variant I leaves after the TCB. +pub(crate) const TLS_ALIGN: u64 = 64; + +/// A TLS symbol's offset from the thread pointer, in `arch`'s TLS variant. +/// +/// x86-64, variant II: TP points to the end of the TLS block, so +/// TPOFF = symbol_vaddr - (tls_start + tls_memsz). +/// +/// AArch64, variant I: TP points to a two-word TCB, and the executable's TLS +/// block follows it at the first offset the segment's alignment allows, so +/// TPOFF = align_up(16, TLS_ALIGN) + (symbol_vaddr - tls_start). +pub(crate) fn tpoff(arch: Arch, sym_addr: u64, tls_start: u64, tls_memsz: u64) -> i64 { + match arch { + Arch::X86_64 => sym_addr as i64 - (tls_start as i64 + tls_memsz as i64), + Arch::Aarch64 => crate::align_up(16, TLS_ALIGN) as i64 + (sym_addr as i64 - tls_start as i64), + } } fn check_i32(value: i64, reloc: &InputReloc) -> Result<(), LinkError> { @@ -337,7 +357,7 @@ pub(crate) fn apply_relocs( 0x48, 0x8d, 0x80, 0x00, 0x00, 0x00, 0x00, // lea 0(%rax),%rax ]; write_bytes(state, reloc.section, reloc.offset - 4, &inst); - let tp_value = tpoff(sym_addr, params.tls_start, params.tls_memsz); + let tp_value = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz); check_i32(tp_value, reloc)?; write_i32(state, reloc.section, reloc.offset + 8, tp_value as i32); relaxed_calls.insert((reloc.section, reloc.offset + 8)); @@ -397,7 +417,7 @@ pub(crate) fn apply_relocs( check_i32(value, reloc)?; write_i32(state, reloc.section, reloc.offset, value as i32); } else { - let value = tpoff(sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; + let value = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; check_i32(value, reloc)?; write_i32(state, reloc.section, reloc.offset, value as i32); } @@ -410,7 +430,9 @@ pub(crate) fn apply_relocs( | RelocType::X86Tpoff32 | RelocType::X86Gottpoff | RelocType::X86Tlv | RelocType::Aarch64Abs64 | RelocType::Aarch64Abs32 - | RelocType::Aarch64Prel32 + | RelocType::Aarch64Prel32 | RelocType::Aarch64Prel64 + | RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64AdrPrelLo21 + | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 | RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 | RelocType::Aarch64AdrPrelPgHi21 | RelocType::Aarch64AddAbsLo12Nc | RelocType::Aarch64Ldst8AbsLo12Nc | RelocType::Aarch64Ldst16AbsLo12Nc @@ -421,7 +443,11 @@ pub(crate) fn apply_relocs( | RelocType::Aarch64AdrGotPage | RelocType::Aarch64Ld64GotLo12Nc | RelocType::Aarch64GotPcrel32 | RelocType::Aarch64TlvpLoadPage21 - | RelocType::Aarch64TlvpLoadPageoff12 => {} + | RelocType::Aarch64TlvpLoadPageoff12 + | RelocType::Aarch64TlsdescAdrPage21 | RelocType::Aarch64TlsdescLd64Lo12 + | RelocType::Aarch64TlsdescAddLo12 | RelocType::Aarch64TlsdescCall + | RelocType::Aarch64TlsieAdrGottprelPage21 | RelocType::Aarch64TlsieLd64GottprelLo12Nc + | RelocType::Aarch64TlsleAddTprelHi12 | RelocType::Aarch64TlsleAddTprelLo12Nc => {} } } @@ -450,6 +476,11 @@ pub(crate) fn apply_relocs( continue; } + if is_aarch64_tls(reloc.r_type) { + apply_aarch64_tls(state, reloc, reloc_vaddr, params)?; + continue; + } + let sym_addr = match resolve_symbol(state, &reloc.target, params.plt) { Some(a) => a, None => { @@ -466,12 +497,18 @@ pub(crate) fn apply_relocs( write_i32_data(data, reloc.offset, 0); tpoff32_entries.push((reloc_vaddr, sym_tls_offset)); } else { - let value = tpoff(sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; + let value = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; check_i32(value, reloc)?; write_i32_data(data, reloc.offset, value as i32); } } RelocType::X86Gottpoff => unreachable!("handled above"), + RelocType::Aarch64TlsdescAdrPage21 | RelocType::Aarch64TlsdescLd64Lo12 + | RelocType::Aarch64TlsdescAddLo12 | RelocType::Aarch64TlsdescCall + | RelocType::Aarch64TlsieAdrGottprelPage21 | RelocType::Aarch64TlsieLd64GottprelLo12Nc + | RelocType::Aarch64TlsleAddTprelHi12 | RelocType::Aarch64TlsleAddTprelLo12Nc => { + unreachable!("handled above") + } RelocType::X86Tlsgd | RelocType::X86Tlsld | RelocType::X86Dtpoff32 => { unreachable!("handled in pass 1") } @@ -487,7 +524,9 @@ pub(crate) fn apply_relocs( } } RelocType::Aarch64Abs64 | RelocType::Aarch64Abs32 - | RelocType::Aarch64Prel32 + | RelocType::Aarch64Prel32 | RelocType::Aarch64Prel64 + | RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64AdrPrelLo21 + | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 | RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 | RelocType::Aarch64AdrPrelPgHi21 | RelocType::Aarch64AddAbsLo12Nc | RelocType::Aarch64Ldst8AbsLo12Nc | RelocType::Aarch64Ldst16AbsLo12Nc @@ -500,7 +539,7 @@ pub(crate) fn apply_relocs( | RelocType::Aarch64TlvpLoadPage21 | RelocType::Aarch64TlvpLoadPageoff12 => { let is_abs = - apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, params.got)?; + apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, params.got, params.dyn_got)?; if is_abs && params.record_relatives { relatives.push((reloc_vaddr, sym_addr as i64 + reloc.addend)); } @@ -513,7 +552,7 @@ pub(crate) fn apply_relocs( if params.record_relatives { let gottpoff_syms: HashSet = relocs .iter() - .filter(|r| r.r_type == RelocType::X86Gottpoff) + .filter(|r| r.r_type.is_gottprel() || (r.r_type.is_tlsdesc() && !params.is_shared)) .map(|r| r.target.clone()) .collect(); @@ -543,7 +582,7 @@ pub(crate) fn apply_relocs( } else { // PIE mode: write raw tpoff directly — NOT as RELATIVE (RELATIVE // would add the load base, corrupting the TP-relative offset). - let tp = tpoff(sym_addr, params.tls_start, params.tls_memsz); + let tp = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz); tpoff_fills.push((got_vaddr, tp)); } } else { @@ -552,6 +591,25 @@ pub(crate) fn apply_relocs( } } + // A shared library's TLS descriptors: one pair per symbol, written by the + // loader. + let mut tlsdescs = Vec::new(); + let mut named_tlsdescs = Vec::new(); + if params.is_shared { + let described: std::collections::BTreeSet<&SymbolRef> = + relocs.iter().filter(|r| r.r_type.is_tlsdesc()).map(|r| &r.target).collect(); + for sym_ref in described { + let pair = params.gd_got[sym_ref]; + if matches!(state.globals.get(sym_ref.name()), Some(SymbolDef::Dynamic { .. })) { + named_tlsdescs.push((pair, sym_ref.name().to_string())); + } else { + let sym_addr = resolve_symbol(state, sym_ref, None) + .ok_or_else(|| LinkError::UndefinedSymbols(vec![sym_ref.name().to_string()]))?; + tlsdescs.push((pair, sym_addr as i64 - params.tls_start as i64)); + } + } + } + // Collect dynamic GOT entries as GLOB_DAT relocations (resolved at load time) let mut glob_dats = Vec::new(); for (sym_ref, &got_vaddr) in params.dyn_got { @@ -575,11 +633,159 @@ pub(crate) fn apply_relocs( dtpoff64s: dtpoff64_entries, named_dtpmod64s: named_dtpmod64_entries, named_dtpoff64s: named_dtpoff64_entries, + tlsdescs, + named_tlsdescs, }) } // ── AArch64 relocation helpers ─────────────────────────────────────────── +/// `nop`. +const A64_NOP: u32 = 0xd503_201f; +/// `movz x0, #0, lsl #16`, its immediate in bits 5..21. +const A64_MOVZ_X0_LSL16: u32 = 0xd2a0_0000; +/// `movk x0, #0`, its immediate in bits 5..21. +const A64_MOVK_X0: u32 = 0xf280_0000; +/// `ldr x0, [x0, #0]`, its scaled immediate in bits 10..22. +const A64_LDR_X0_X0: u32 = 0xf940_0000; + +fn is_aarch64_tls(r_type: RelocType) -> bool { + matches!( + r_type, + RelocType::Aarch64TlsdescAdrPage21 + | RelocType::Aarch64TlsdescLd64Lo12 + | RelocType::Aarch64TlsdescAddLo12 + | RelocType::Aarch64TlsdescCall + | RelocType::Aarch64TlsieAdrGottprelPage21 + | RelocType::Aarch64TlsieLd64GottprelLo12Nc + | RelocType::Aarch64TlsleAddTprelHi12 + | RelocType::Aarch64TlsleAddTprelLo12Nc + ) +} + +/// The page delta an `adrp` at `pc` needs to reach `target`'s page. +fn adrp_page_delta(target: u64, pc: u64, reloc: &InputReloc) -> Result { + let delta = ((target as i64) & !0xFFF) - ((pc as i64) & !0xFFF); + let pages = delta >> 12; + if !(-(1 << 20)..(1 << 20)).contains(&pages) { + return Err(LinkError::RelocationOverflow { + reloc_type: reloc.r_type, symbol: reloc.target.name().to_string(), value: pages, + }); + } + Ok(pages as i32) +} + +/// Apply one AArch64 TLS relocation. +/// +/// A TLS descriptor sequence (`adrp x0; ldr x1, [x0]; add x0, x0; blr x1`, +/// the result the variable's offset from TPIDR_EL0) is kept in a shared +/// library, pointed at the symbol's descriptor pair, which an +/// R_AARCH64_TLSDESC asks the loader to fill; in an executable it is relaxed, +/// as the AArch64 ELF ABI allows and as LLD does: to initial-exec (`adrp x0; +/// ldr x0, [x0]; nop; nop`, the GOT slot holding the offset) when another +/// module defines the symbol, and otherwise to local-exec (`movz x0; movk x0; +/// nop; nop`, the offset itself). +fn apply_aarch64_tls( + state: &mut LinkState, + reloc: &InputReloc, + reloc_vaddr: u64, + params: &ElfRelocParams, +) -> Result<(), LinkError> { + let name = reloc.target.name().to_string(); + let undefined = || LinkError::UndefinedSymbols(vec![name.clone()]); + let unsupported = || LinkError::UnsupportedRelocation { reloc_type: reloc.r_type, symbol: name.clone() }; + let dynamic = matches!(state.globals.get(reloc.target.name()), Some(SymbolDef::Dynamic { .. })); + let tp_offset = |state: &LinkState| -> Result { + let sym_addr = resolve_symbol(state, &reloc.target, None).ok_or_else(undefined)?; + Ok(tpoff(Arch::Aarch64, sym_addr, params.tls_start, params.tls_memsz) + reloc.addend) + }; + // A GOT slot or descriptor pair is one per symbol, so it cannot carry an + // addend of its own. + let slot_of = |map: &BTreeMap| -> Result { + if reloc.addend != 0 { + return Err(unsupported()); + } + let slot = *map.get(&reloc.target).ok_or_else(undefined)?; + assert!(slot % 8 == 0, "a TLS GOT slot at {slot:#x} is not 8-byte aligned"); + Ok(slot) + }; + let write = |state: &mut LinkState, insn: u32| write_u32(state, reloc.section, reloc.offset, insn); + + match reloc.r_type { + RelocType::Aarch64TlsdescAdrPage21 + | RelocType::Aarch64TlsdescLd64Lo12 + | RelocType::Aarch64TlsdescAddLo12 + | RelocType::Aarch64TlsdescCall => { + if params.is_shared { + let pair = slot_of(params.gd_got)?; + let sec = &mut state.sections[reloc.section].data; + match reloc.r_type { + RelocType::Aarch64TlsdescAdrPage21 => { + patch_aarch64_adrp_data(sec, reloc.offset, adrp_page_delta(pair, reloc_vaddr, reloc)?) + } + RelocType::Aarch64TlsdescLd64Lo12 => { + patch_aarch64_ldr_imm12_data(sec, reloc.offset, (pair & 0xFFF) as u32, 3) + } + RelocType::Aarch64TlsdescAddLo12 => { + patch_aarch64_add_imm12_data(sec, reloc.offset, (pair & 0xFFF) as u32) + } + _ => {} + } + } else if dynamic { + let slot = slot_of(params.got)?; + match reloc.r_type { + RelocType::Aarch64TlsdescAdrPage21 => { + let sec = &mut state.sections[reloc.section].data; + patch_aarch64_adrp_data(sec, reloc.offset, adrp_page_delta(slot, reloc_vaddr, reloc)?) + } + RelocType::Aarch64TlsdescLd64Lo12 => { + write(state, A64_LDR_X0_X0 | ((((slot & 0xFFF) >> 3) as u32) << 10)) + } + _ => write(state, A64_NOP), + } + } else { + let offset = tp_offset(state)?; + if !(0..=u32::MAX as i64).contains(&offset) { + return Err(LinkError::RelocationOverflow { reloc_type: reloc.r_type, symbol: name, value: offset }); + } + match reloc.r_type { + RelocType::Aarch64TlsdescAdrPage21 => { + write(state, A64_MOVZ_X0_LSL16 | ((((offset >> 16) & 0xFFFF) as u32) << 5)) + } + RelocType::Aarch64TlsdescLd64Lo12 => write(state, A64_MOVK_X0 | (((offset & 0xFFFF) as u32) << 5)), + _ => write(state, A64_NOP), + } + } + } + RelocType::Aarch64TlsieAdrGottprelPage21 => { + let slot = slot_of(params.got)?; + let sec = &mut state.sections[reloc.section].data; + patch_aarch64_adrp_data(sec, reloc.offset, adrp_page_delta(slot, reloc_vaddr, reloc)?); + } + RelocType::Aarch64TlsieLd64GottprelLo12Nc => { + let slot = slot_of(params.got)?; + let sec = &mut state.sections[reloc.section].data; + patch_aarch64_ldr_imm12_data(sec, reloc.offset, (slot & 0xFFF) as u32, 3); + } + RelocType::Aarch64TlsleAddTprelHi12 | RelocType::Aarch64TlsleAddTprelLo12Nc => { + // Local-exec names an offset from this module's thread pointer, + // which only the executable has. + if params.is_shared || dynamic { + return Err(unsupported()); + } + let offset = tp_offset(state)?; + if !(0..1 << 24).contains(&offset) { + return Err(LinkError::RelocationOverflow { reloc_type: reloc.r_type, symbol: name, value: offset }); + } + let imm = if reloc.r_type == RelocType::Aarch64TlsleAddTprelHi12 { offset >> 12 } else { offset } & 0xFFF; + let sec = &mut state.sections[reloc.section].data; + patch_aarch64_add_imm12_data(sec, reloc.offset, imm as u32); + } + _ => unreachable!("not an AArch64 TLS relocation: {}", reloc.r_type), + } + Ok(()) +} + /// Apply a single AArch64 relocation to section data. Returns `true` if it /// produced an absolute reference that needs a Mach-O rebase entry. fn apply_one_reloc_aarch64( @@ -588,7 +794,17 @@ fn apply_one_reloc_aarch64( sym_addr: u64, reloc_vaddr: u64, got: &BTreeMap, + dyn_got: &BTreeMap, ) -> Result { + // A dynamic import's slot is in `dyn_got`, filled by GLOB_DAT; every other + // symbol's in `got`. + let slot = || { + got.get(&reloc.target) + .or_else(|| dyn_got.get(&reloc.target)) + .or_else(|| dyn_got.get(&SymbolRef::Global(reloc.target.name().to_string()))) + .copied() + .ok_or_else(|| LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()])) + }; match reloc.r_type { RelocType::Aarch64Abs64 => { let value = (sym_addr as i64 + reloc.addend) as u64; @@ -605,6 +821,36 @@ fn apply_one_reloc_aarch64( write_i32_data(data, reloc.offset, value as i32); Ok(false) } + RelocType::Aarch64Prel64 => { + let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; + write_u64_data(data, reloc.offset, value as u64); + Ok(false) + } + RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 => { + // A word offset in bits 5.., 19 bits wide for a literal load and a + // conditional branch, 14 for a test-and-branch. + let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; + let bits = if reloc.r_type == RelocType::Aarch64Tstbr14 { 14 } else { 19 }; + let words = value >> 2; + if value & 3 != 0 || !(-(1 << (bits - 1))..(1 << (bits - 1))).contains(&words) { + return Err(LinkError::RelocationOverflow { + reloc_type: reloc.r_type, symbol: reloc.target.name().to_string(), value, + }); + } + let mask = (1u32 << bits) - 1; + modify_insn_data(data, reloc.offset, |insn| (insn & !(mask << 5)) | (((words as u32) & mask) << 5)); + Ok(false) + } + RelocType::Aarch64AdrPrelLo21 => { + let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; + if !(-(1 << 20)..(1 << 20)).contains(&value) { + return Err(LinkError::RelocationOverflow { + reloc_type: reloc.r_type, symbol: reloc.target.name().to_string(), value, + }); + } + patch_aarch64_adrp_data(data, reloc.offset, value as i32); + Ok(false) + } RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 => { let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; let imm26 = value >> 2; @@ -679,9 +925,7 @@ fn apply_one_reloc_aarch64( Ok(false) } RelocType::Aarch64AdrGotPage => { - let got_slot = *got.get(&reloc.target).ok_or_else(|| { - LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()]) - })?; + let got_slot = slot()?; let sym_page = got_slot as i64 & !0xFFF; let pc_page = reloc_vaddr as i64 & !0xFFF; let page_delta = (sym_page - pc_page) >> 12; @@ -694,9 +938,7 @@ fn apply_one_reloc_aarch64( Ok(false) } RelocType::Aarch64Ld64GotLo12Nc => { - let got_slot = *got.get(&reloc.target).ok_or_else(|| { - LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()]) - })?; + let got_slot = slot()?; let value = (got_slot & 0xFFF) as u32; patch_aarch64_ldr_imm12_data(data, reloc.offset, value, 3); Ok(false) @@ -724,9 +966,7 @@ fn apply_one_reloc_aarch64( Ok(false) } RelocType::Aarch64GotPcrel32 => { - let got_slot = *got.get(&reloc.target).ok_or_else(|| { - LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()]) - })?; + let got_slot = slot()?; let value = got_slot as i64 + reloc.addend - reloc_vaddr as i64; check_i32(value, reloc)?; write_i32_data(data, reloc.offset, value as i32); @@ -890,7 +1130,9 @@ pub(crate) fn apply_relocs_macho( let is_abs = match reloc.r_type { // AArch64 relocations RelocType::Aarch64Abs64 | RelocType::Aarch64Abs32 - | RelocType::Aarch64Prel32 + | RelocType::Aarch64Prel32 | RelocType::Aarch64Prel64 + | RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64AdrPrelLo21 + | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 | RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 | RelocType::Aarch64AdrPrelPgHi21 | RelocType::Aarch64AddAbsLo12Nc | RelocType::Aarch64Ldst8AbsLo12Nc | RelocType::Aarch64Ldst16AbsLo12Nc @@ -902,7 +1144,7 @@ pub(crate) fn apply_relocs_macho( | RelocType::Aarch64GotPcrel32 | RelocType::Aarch64TlvpLoadPage21 | RelocType::Aarch64TlvpLoadPageoff12 => { - apply_one_reloc_aarch64(&mut state.sections[reloc.section].data, reloc, sym_addr, reloc_vaddr, params.got)? + apply_one_reloc_aarch64(&mut state.sections[reloc.section].data, reloc, sym_addr, reloc_vaddr, params.got, &BTreeMap::new())? } // x86-64 relocations RelocType::X86_64 @@ -1027,7 +1269,7 @@ pub(crate) fn apply_relocs_pe( let data = &mut state.sections[reloc.section].data; let is_abs = match arch { Arch::X86_64 => apply_one_reloc_x86(data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?, - Arch::Aarch64 => apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, &layout.got)?, + Arch::Aarch64 => apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?, }; if is_abs { abs_fixups.push(reloc_vaddr as u32); diff --git a/toyos-ld/tests/common/mod.rs b/toyos-ld/tests/common/mod.rs index 6626af09a7f..6d6bab70a3a 100644 --- a/toyos-ld/tests/common/mod.rs +++ b/toyos-ld/tests/common/mod.rs @@ -84,6 +84,22 @@ impl ObjBuilder { }) } + /// A thread-local variable with initial bytes, in `.tdata`. + pub fn tls(&mut self, name: &str, bytes: &[u8], scope: SymbolScope) -> object::write::SymbolId { + let section = self.obj.section_id(StandardSection::Tls); + let offset = self.obj.append_section_data(section, bytes, 8); + self.obj.add_symbol(Symbol { + name: name.as_bytes().to_vec(), + value: offset, + size: bytes.len() as u64, + kind: SymbolKind::Tls, + scope, + weak: false, + section: SymbolSection::Section(section), + flags: SymbolFlags::None, + }) + } + pub fn undefined(&mut self, name: &str, kind: SymbolKind) -> object::write::SymbolId { self.obj.add_symbol(Symbol { name: name.as_bytes().to_vec(), diff --git a/toyos-ld/tests/machines.rs b/toyos-ld/tests/machines.rs index 4288f6e6600..75e9de6f5b6 100644 --- a/toyos-ld/tests/machines.rs +++ b/toyos-ld/tests/machines.rs @@ -144,3 +144,49 @@ fn an_aarch64_pe_declares_arm64_and_patches_its_calls() { let bytes = data.data().unwrap(); assert_eq!(u64::from_le_bytes(bytes[8..16].try_into().unwrap()), data.address(), "ptr holds target"); } + +/// The address an `adrp` at `pc` and the scaled `ldr` after it read. +fn adrp_ldr_target(file: &object::File, pc: u64) -> u64 { + let adrp = word_at(file, pc); + let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; + let page = ((pc & !0xfff) as i64 + (((imm << 43) >> 43) << 12)) as u64; + page + (((word_at(file, pc + 4) >> 10) & 0xfff) as u64) * 8 +} + +/// **An AArch64 shared library reaches a function nobody in it defines +/// through the GOT slot its GLOB_DAT names**, whether the code calls it or +/// loads its address: the call goes through a stub that is AArch64 code, +/// `adrp x16; ldr x16; br x16`, never the x86 `jmp *` a PLT used to be for +/// every machine, and both read the one slot the loader fills. +#[test] +fn an_aarch64_shared_library_reaches_an_import_through_its_glob_dat_slot() { + let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + let main = b.undefined("main", object::SymbolKind::Text); + let caller = b.text("caller", &words(&[AARCH64_BL, AARCH64_RET]), SymbolScope::Dynamic); + let at = b.symbol_offset(caller); + b.reloc(StandardSection::Text, at, main, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_CALL26 }); + let loader = b.text("loader", &words(&[0x9000_0008, 0xf940_0108, AARCH64_RET]), SymbolScope::Dynamic); + let at = b.symbol_offset(loader); + b.reloc(StandardSection::Text, at, main, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ADR_GOT_PAGE }); + b.reloc(StandardSection::Text, at + 4, main, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_LD64_GOT_LO12_NC }); + let out = Case::new("aarch64-so-import").arg("-shared").input("a.o", b.finish()).link(); + + let file = object::File::parse(&*out).unwrap(); + let relocs: Vec<_> = file.dynamic_relocations().expect("a .rela.dyn").collect(); + let glob: Vec<_> = relocs + .iter() + .filter(|(_, r)| r.flags() == RelocationFlags::Elf { r_type: elf::R_AARCH64_GLOB_DAT }) + .collect(); + assert_eq!(glob.len(), 1, "{relocs:?}"); + let slot = glob[0].0; + + assert_eq!(adrp_ldr_target(&file, symbol(&file, "loader")), slot, "the address load reads another slot"); + let bl_at = symbol(&file, "caller"); + let bl = word_at(&file, bl_at); + assert_eq!(bl & 0xfc00_0000, AARCH64_BL); + let stub = (bl_at as i64 + ((((bl & 0x03ff_ffff) as i64) << 38) >> 36)) as u64; + assert_eq!(word_at(&file, stub) & 0x9f00_001f, 0x9000_0010, "the stub is not `adrp x16`"); + assert_eq!(word_at(&file, stub + 4) & !(0xfff << 10), 0xf940_0210, "the stub is not `ldr x16, [x16]`"); + assert_eq!(word_at(&file, stub + 8), 0xd61f_0200, "the stub is not `br x16`"); + assert_eq!(adrp_ldr_target(&file, stub), slot, "the stub jumps through another slot"); +} diff --git a/toyos-ld/tests/tls_aarch64.rs b/toyos-ld/tests/tls_aarch64.rs new file mode 100644 index 00000000000..f43b4ec8950 --- /dev/null +++ b/toyos-ld/tests/tls_aarch64.rs @@ -0,0 +1,177 @@ +//! AArch64 thread-local storage: TLS variant I and the TLS descriptor. +//! +//! The numbers asserted here come from the AArch64 ELF ABI, not from the +//! linker: variant I puts a two-word TCB at the thread pointer and the +//! executable's TLS block after it at the first offset the segment's alignment +//! allows, so a variable at offset `o` in a 64-byte-aligned segment is at +//! `align_up(16, 64) + o` from TPIDR_EL0; a descriptor sequence the executable +//! defines relaxes to `movz x0; movk x0; nop; nop` (local-exec), one another +//! module defines to `adrp x0; ldr x0; nop; nop` over a GOT slot the loader +//! fills with R_AARCH64_TLS_TPREL (initial-exec), and a shared library keeps +//! the sequence and asks the loader for the descriptor pair with +//! R_AARCH64_TLSDESC. The outputs are read back by the `object` crate. + +mod common; + +use common::{Case, ObjBuilder}; +use object::write::StandardSection; +use object::{elf, Architecture, BinaryFormat, Object as _, ObjectSegment as _, ObjectSymbol as _, RelocationFlags, RelocationTarget, SymbolKind, SymbolScope}; + +const ADRP_X0: u32 = 0x9000_0000; +const LDR_X1_X0: u32 = 0xf940_0001; +const ADD_X0_X0: u32 = 0x9100_0000; +const BLR_X1: u32 = 0xd63f_0020; +const RET: u32 = 0xd65f_03c0; +const NOP: u32 = 0xd503_201f; +/// `add x0, x1, #0, lsl #12`, the thread pointer read into x1 before it. +const ADD_X0_X1_LSL12: u32 = 0x9140_0020; + +fn words(insns: &[u32]) -> Vec { + insns.iter().flat_map(|i| i.to_le_bytes()).collect() +} + +/// `_start` (or `name`) running one TLS descriptor sequence for `target`. +fn descriptor_call(b: &mut ObjBuilder, name: &str, target: object::write::SymbolId) { + let f = b.text(name, &words(&[ADRP_X0, LDR_X1_X0, ADD_X0_X0, BLR_X1, RET]), SymbolScope::Linkage); + let at = b.symbol_offset(f); + for (i, r_type) in [ + elf::R_AARCH64_TLSDESC_ADR_PAGE21, + elf::R_AARCH64_TLSDESC_LD64_LO12, + elf::R_AARCH64_TLSDESC_ADD_LO12, + elf::R_AARCH64_TLSDESC_CALL, + ] + .into_iter() + .enumerate() + { + b.reloc(StandardSection::Text, at + 4 * i as u64, target, 0, RelocationFlags::Elf { r_type }); + } +} + +fn symbol(file: &object::File, name: &str) -> u64 { + file.symbols().find(|s| s.name() == Ok(name)).unwrap_or_else(|| panic!("no {name}")).address() +} + +fn word_at(file: &object::File, vaddr: u64) -> u32 { + let seg = file.segments().find(|s| (s.address()..s.address() + s.size()).contains(&vaddr)).unwrap(); + let data = seg.data().unwrap(); + let off = (vaddr - seg.address()) as usize; + u32::from_le_bytes(data[off..off + 4].try_into().unwrap()) +} + +fn words_at(file: &object::File, vaddr: u64, n: usize) -> Vec { + (0..n).map(|i| word_at(file, vaddr + 4 * i as u64)).collect() +} + +/// The address an `adrp` at `pc` names. +fn adrp_target(adrp: u32, pc: u64) -> u64 { + let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; + let imm = (imm << 43) >> 43; + ((pc & !0xfff) as i64 + (imm << 12)) as u64 +} + +fn pt_tls(out: &[u8]) -> (u64, u64) { + use object::read::elf::{ElfFile64, ProgramHeader as _}; + let elf = ElfFile64::::parse(out).unwrap(); + let e = object::Endianness::Little; + let tls = elf + .elf_program_headers() + .iter() + .find(|p| p.p_type(e) == elf::PT_TLS) + .expect("a PT_TLS"); + (tls.p_vaddr(e), tls.p_align(e)) +} + +/// A module defining two thread-locals, `first` (8 bytes) and `v` after it. +fn two_locals(b: &mut ObjBuilder, scope: SymbolScope) -> object::write::SymbolId { + b.tls("first", &[1u8; 8], scope); + b.tls("v", &[2u8; 8], scope) +} + +#[test] +fn an_executable_relaxes_its_own_descriptor_to_the_variant_one_offset() { + let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + let v = two_locals(&mut b, SymbolScope::Linkage); + descriptor_call(&mut b, "_start", v); + // Local-exec written by the compiler: the same variable, the same offset. + let le = b.text("le", &words(&[ADD_X0_X1_LSL12, ADD_X0_X0, RET]), SymbolScope::Linkage); + let le_at = b.symbol_offset(le); + b.reloc(StandardSection::Text, le_at, v, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_TLSLE_ADD_TPREL_HI12 }); + b.reloc(StandardSection::Text, le_at + 4, v, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC }); + let out = Case::new("a64-tls-le").input("a.o", b.finish()).link(); + + let file = object::File::parse(&*out).unwrap(); + let (tls_vaddr, tls_align) = pt_tls(&out); + assert_eq!(tls_align, 64); + assert_eq!(tls_vaddr % 64, 0, "the TLS segment starts off its alignment"); + // `v` is 8 bytes into the block, and the block 64 bytes past TP. + let tp_offset: u32 = 64 + 8; + let start = symbol(&file, "_start"); + assert_eq!( + words_at(&file, start, 5), + [0xd2a0_0000 | ((tp_offset >> 16) << 5), 0xf280_0000 | ((tp_offset & 0xffff) << 5), NOP, NOP, RET], + "movz x0, #hi, lsl 16; movk x0, #lo; nop; nop" + ); + let le = symbol(&file, "le"); + let [hi, lo] = [word_at(&file, le), word_at(&file, le + 4)]; + assert_eq!(((hi >> 10) & 0xfff) << 12 | ((lo >> 10) & 0xfff), tp_offset); + let dynamic = file.dynamic_relocations().map(|r| r.count()).unwrap_or(0); + assert_eq!(dynamic, 0, "a relaxed descriptor asked the loader for something"); +} + +#[test] +fn a_shared_library_keeps_the_descriptor_and_asks_the_loader_for_its_pair() { + let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + let v = two_locals(&mut b, SymbolScope::Dynamic); + descriptor_call(&mut b, "reader", v); + let out = Case::new("a64-tls-so").arg("-shared").input("a.o", b.finish()).link(); + + let file = object::File::parse(&*out).unwrap(); + let relocs: Vec<_> = file.dynamic_relocations().expect("a .rela.dyn").collect(); + let descs: Vec<_> = relocs + .iter() + .filter(|(_, r)| r.flags() == RelocationFlags::Elf { r_type: elf::R_AARCH64_TLSDESC }) + .collect(); + assert_eq!(descs.len(), 1, "{relocs:?}"); + let (pair, reloc) = descs[0]; + assert_eq!(reloc.addend(), 8, "the descriptor's argument is `v`'s offset in the module's block"); + assert_eq!(reloc.target(), RelocationTarget::Absolute, "a module's own variable is named by offset"); + assert_eq!(pair % 8, 0); + + let reader = symbol(&file, "reader"); + let seq = words_at(&file, reader, 5); + assert_eq!(adrp_target(seq[0], reader), pair & !0xfff); + assert_eq!(seq[1] & !(0xfff << 10), LDR_X1_X0); + assert_eq!(((seq[1] >> 10) & 0xfff) * 8, (*pair & 0xfff) as u32, "the ldr reads the pair's first word"); + assert_eq!(seq[2] & !(0xfff << 10), ADD_X0_X0); + assert_eq!(((seq[2] >> 10) & 0xfff) as u64, pair & 0xfff, "x0 is the pair's address"); + assert_eq!(&seq[3..], [BLR_X1, RET], "the call to the resolver is kept"); +} + +#[test] +fn an_executable_reaches_another_module_s_variable_through_a_tp_offset_slot() { + let mut lib = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + two_locals(&mut lib, SymbolScope::Dynamic); + lib.text("helper", &words(&[RET]), SymbolScope::Dynamic); + let so = Case::new("a64-tls-lib").arg("-shared").input("a.o", lib.finish()).link(); + + let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); + let v = b.undefined("v", SymbolKind::Tls); + descriptor_call(&mut b, "_start", v); + let out = Case::new("a64-tls-ie").input("a.o", b.finish()).input("libv.so", so).link(); + + let file = object::File::parse(&*out).unwrap(); + let relocs: Vec<_> = file.dynamic_relocations().expect("a .rela.dyn").collect(); + let tprel: Vec<_> = relocs + .iter() + .filter(|(_, r)| r.flags() == RelocationFlags::Elf { r_type: elf::R_AARCH64_TLS_TPREL }) + .collect(); + assert_eq!(tprel.len(), 1, "{relocs:?}"); + let (slot, reloc) = tprel[0]; + assert!(matches!(reloc.target(), RelocationTarget::Symbol(_)), "the slot names `v` for the loader"); + + let start = symbol(&file, "_start"); + let seq = words_at(&file, start, 5); + assert_eq!(adrp_target(seq[0], start), slot & !0xfff); + assert_eq!(seq[1], 0xf940_0000 | ((((*slot & 0xfff) >> 3) as u32) << 10), "ldr x0, [x0, #slot]"); + assert_eq!(&seq[2..], [NOP, NOP, RET]); +} From 63820e9761a1752c3021f2810244f9ed0cc1ef53 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 17:12:35 +0200 Subject: [PATCH 20/50] The port's stage 1: aarch64-unknown-toyos, std and the userland for AArch64 The rust pin moves to 4874af48e26 (on toyos-inbox): the aarch64-unknown-toyos target spec, and std's `_start` and TLS descriptor resolver on AArch64 (variant I, `__toyos_tlsdesc_dynamic`). It is a compiler change, so this worktree builds its own compiler (src/compiler.rs) and the primary's is untouched. - The build: `GUEST_TARGETS` gains aarch64-unknown-toyos, and every architecture has a userland, so `USERLAND_ARCHS` and the plan's `Userland` switch (whose `Absent` arm nothing could reach any more, and whose `without_userland` nothing called) are deleted. `cargo run -- --arch aarch64 --build-only` builds std, libtoyos_c and the userland for AArch64 and puts them on ROOT. - libc: `_start`, memcpy/memmove/memset and the square roots move into `userland/libc/src/arch/`, one module per architecture, and gain their AArch64 versions (pair loads and stores with a byte tail, fsqrt). The copies were checked on this AArch64 host against its own copy_within/fill over 360,000 cases (lengths 0..300, offsets 0..20, overlapping both ways); a copy_backward whose chunk test was 8 instead of 16 died on the same check (SIGBUS, exit 138). - toyos-window's and metalprobe's scanout drain moves into an arch module (SFENCE; DSB ST on AArch64), and the ARCH_RULES rows for them and for libc become module places. toyos-window is published, so it bumps to 0.16.0: 0.15.0 is taken by #525 and #528. - calc, snake and doom are left off an AArch64 ROOT, by name at build time (`NOT_YET_BUILT`): softbuffer's and winit's toyos forks resolve the published toyos-window 0.2.0, whose framebuffer is x86-64 only (issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md). Everything else in the userland workspace, and toyos-ld and toyos-cc as guest programs, builds and links for AArch64. compiler.rs keys a compiler on the content of its sources alone: keying on the git spelling of compiler/ made committing what had been built as local changes a new compiler and a full rebuild. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...rch-module-in-userland-and-guest-probes.md | 11 +- ...-forks-resolve-an-x86-only-toyos-window.md | 27 ++++ rust | 2 +- src/build.rs | 86 +++++++------ src/compiler.rs | 25 ++-- src/sourcegate.rs | 12 +- src/sysroot.rs | 11 +- src/toolchain.rs | 13 +- tests/toyos-rust-tests/Cargo.lock | 2 +- tests/toyos.rs | 4 +- userland/Cargo.lock | 18 +-- userland/libc/src/arch/aarch64.rs | 119 ++++++++++++++++++ userland/libc/src/arch/mod.rs | 14 +++ userland/libc/src/arch/x86_64.rs | 76 +++++++++++ userland/libc/src/lib.rs | 21 +--- userland/libc/src/math.rs | 30 +---- userland/libc/src/memory.rs | 34 ++--- userland/metalprobe/src/arch/aarch64.rs | 8 ++ userland/metalprobe/src/arch/mod.rs | 11 ++ userland/metalprobe/src/arch/x86_64.rs | 8 ++ userland/metalprobe/src/fb.rs | 4 +- userland/metalprobe/src/main.rs | 1 + userland/toyos-window/Cargo.toml | 2 +- userland/toyos-window/src/arch/aarch64.rs | 7 ++ userland/toyos-window/src/arch/mod.rs | 11 ++ userland/toyos-window/src/arch/x86_64.rs | 8 ++ userland/toyos-window/src/framebuffer.rs | 9 +- userland/toyos-window/src/lib.rs | 1 + 28 files changed, 409 insertions(+), 166 deletions(-) create mode 100644 issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md create mode 100644 userland/libc/src/arch/aarch64.rs create mode 100644 userland/libc/src/arch/mod.rs create mode 100644 userland/libc/src/arch/x86_64.rs create mode 100644 userland/metalprobe/src/arch/aarch64.rs create mode 100644 userland/metalprobe/src/arch/mod.rs create mode 100644 userland/metalprobe/src/arch/x86_64.rs create mode 100644 userland/toyos-window/src/arch/aarch64.rs create mode 100644 userland/toyos-window/src/arch/mod.rs create mode 100644 userland/toyos-window/src/arch/x86_64.rs diff --git a/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md b/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md index 8570c1e652f..2aa83a71564 100644 --- a/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md +++ b/issues/build/assembly-outside-an-arch-module-in-userland-and-guest-probes.md @@ -4,7 +4,7 @@ kind: defect opened: 2026-09-26 --- -# Assembly outside an arch module: userland's libc, two framebuffers, and the guest probes +# Assembly outside an arch module: two framebuffers and the guest probes The owner's ruling of 2026-09-26 puts every `asm!`, `global_asm!`, `naked_asm!`, naked function and `core::arch::*` intrinsic inside an @@ -14,10 +14,6 @@ architecture's own module: `kernel/src/arch//`, the bootloader's those; what is left is declared in that table as an exception, each row pointing here: -- `userland/libc/src/math.rs` (`sqrtsd`/`sqrtss` and their AArch64 `fsqrt`), - `userland/libc/src/memory.rs` (three `rep` string operations) and - `userland/libc/src/lib.rs` (the naked `_start`). `userland/libc/src` is - only changed under an ABI brief. - `userland/toyos-window/src/framebuffer.rs` and `userland/metalprobe/src/fb.rs`: `_mm_sfence` after writing a write-combining framebuffer. Userland has no portable way to say "drain my stores to the scanout"; the SDK (`toyos/src`) @@ -34,8 +30,7 @@ pointing here: outside the inner-shareable domain observes (the kernel's `arch::barrier` says why, and `Mmio` carries `writel`/`readl` ordering there). -**Exit condition**: the SDK and libc gain per-architecture modules (as -`toyos-abi`'s syscall entry is one) holding a scanout flush, DMA barriers, the -square roots and the string moves; the guest probes move under a per-arch +**Exit condition**: the SDK gains a per-architecture module (as `toyos-abi`'s +syscall entry and libc's `arch/` are) holding a scanout flush and DMA barriers; the guest probes move under a per-arch directory the harness selects by `Arch`; and every row in `ARCH_RULES` that cites this file is deleted. diff --git a/issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md b/issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md new file mode 100644 index 00000000000..072726d8c1d --- /dev/null +++ b/issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md @@ -0,0 +1,27 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# The toolkit forks resolve an x86-only toyos-window, so calc, snake and doom do not build for AArch64 + +`softbuffer`'s and `winit`'s toyos forks (the `…-sdk-0.2` branches +`userland/Cargo.toml` patches in) name `toyos-window = "0.2"`, and cargo +resolves that to the published `toyos-window 0.2.0`, not to the path crate: +the `[patch]` redirect only applies to a compatible version. That release's +`framebuffer.rs` calls `core::arch::x86_64::_mm_sfence` unconditionally, so it +does not compile for `aarch64-unknown-toyos`, and neither does anything that +pulls either fork in: `calc`, `snake` and `doom`. `cpal`'s fork, `mio`, `tokio`, +`getrandom` and `libloading` name `toyos-abi`/`toyos` 0.1/0.2, which already +select their syscall entry per architecture and build. + +`src/build.rs`'s `NOT_YET_BUILT` leaves the three off an AArch64 ROOT and says +so at build time. Everything else in the userland workspace builds and links +for AArch64 (PR #524). + +**Exit condition**: the forks name a `toyos-window` version the path crate +satisfies (PR #528 moves them to `…-sdk-0.15` branches for its own reasons, and +the path crate is at 0.16.0 on #524), the three build for +`aarch64-unknown-toyos`, and their rows in `NOT_YET_BUILT` are deleted; doom's +row goes when its C is also shown to compile for AArch64 through `toyos-cc`. diff --git a/rust b/rust index f6bf9d220aa..4874af48e26 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit f6bf9d220aa5fb39d8e2e90dfda6c6df66ca3b05 +Subproject commit 4874af48e2675a0341d3099034c90ceda9257764 diff --git a/src/build.rs b/src/build.rs index be673030615..66745c57a39 100644 --- a/src/build.rs +++ b/src/build.rs @@ -727,15 +727,12 @@ fn build_and_assemble( extra_files: &[(String, Vec)], quiet: bool, arch: Arch, - userland: Userland, ) -> Vec { let mut root_files: Vec<(String, Vec)> = Vec::new(); - if userland == Userland::Built { - build_programs(root, config, env, quiet, arch, &mut root_files); - } + build_programs(root, config, env, quiet, arch, &mut root_files); root_files.push((toyos_manifest::PATH.to_string(), render_manifest(config))); - if userland == Userland::Built && config.hosted_rustc { + if config.hosted_rustc { assert!( arch == toolchain::HOSTED_ARCH, "hosted-rustc is built to run on {}, and this image is for {}", @@ -783,6 +780,29 @@ fn build_and_assemble( image::create_root_image(&root_files, &symlinks, quiet) } +/// The programs an architecture cannot build yet, each with why. Such a program +/// is left off that architecture's ROOT, said by name at build time; its row +/// goes when its reason does. +const NOT_YET_BUILT: &[(Arch, &str, &str)] = &[ + (Arch::Aarch64, "calc", TOOLKIT_FORKS), + (Arch::Aarch64, "snake", TOOLKIT_FORKS), + ( + Arch::Aarch64, + "doom", + "its C is compiled by toyos-cc, which no AArch64 build has run, and softbuffer's toyos \ + fork stops it first (issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md)", + ), +]; + +const TOOLKIT_FORKS: &str = "softbuffer's and winit's toyos forks resolve the published \ + toyos-window 0.2.0, whose framebuffer is x86-64 only \ + (issues/build/the-toolkit-forks-resolve-an-x86-only-toyos-window.md)"; + +/// Why `arch`'s userland leaves `program` out, if it does. +fn not_built_for(arch: Arch, program: &str) -> Option<&'static str> { + NOT_YET_BUILT.iter().find(|(a, name, _)| *a == arch && *name == program).map(|(_, _, why)| *why) +} + /// Build `config`'s programs and init for `arch`, and add each to `root_files`. fn build_programs( root: &Path, @@ -798,6 +818,13 @@ fn build_programs( let programs: Vec = config_crates(root, config) .into_iter() .filter(|c| matches!(c.built, Built::Member | Built::Standalone)) + .filter(|c| match not_built_for(arch, &c.name) { + Some(why) => { + eprintln!("{}: not built for {}, and not on this ROOT: {why}", c.name, arch.name()); + false + } + None => true, + }) .collect(); for c in &programs { assert!( @@ -903,27 +930,6 @@ pub struct Plan { pub config: PathBuf, pub features: Vec, pub params: Vec, - pub userland: Userland, -} - -/// Whether ROOT carries the config's programs. -#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)] -pub enum Userland { - /// init and every program the config names, built for the plan's - /// architecture. - Built, - /// The manifest and the config's assets, and no program: the image of a - /// boot that ends before the kernel starts one, which pays for no userland - /// build. A kernel that does reach init finds none, and panics saying so. - Absent, -} - -impl Userland { - /// What a plan for `arch` carries unless it asks for less: the programs, - /// where the toolchain builds a userland for that architecture at all. - pub fn of(arch: Arch) -> Self { - if crate::toolchain::USERLAND_ARCHS.contains(&arch) { Self::Built } else { Self::Absent } - } } impl Plan { @@ -933,14 +939,8 @@ impl Plan { config: config.to_path_buf(), features: features.iter().map(|f| (*f).to_string()).collect(), params: params.iter().map(|p| (*p).to_string()).collect(), - userland: Userland::of(arch), } } - - /// This plan with a ROOT that carries no program. - pub fn without_userland(self) -> Self { - Self { userland: Userland::Absent, ..self } - } } /// The plan a `cargo run` command line names. [`build`] consumes one and @@ -966,7 +966,6 @@ pub fn plan_for(root: &Path, boot: &Boot, debug: bool, args: &[String]) -> Plan config: boot.config.clone(), features: features.split(',').filter(|f| !f.is_empty()).map(Into::into).collect(), params: param, - userland: Userland::of(arch), } } @@ -1794,7 +1793,7 @@ pub fn build( ) }; - let root_bytes = build_and_assemble(root, &config, &env, &[], false, arch, plan.userland); + let root_bytes = build_and_assemble(root, &config, &env, &[], false, arch); let bl_bytes = fs::read(&bl_art).expect("Failed to read staged bootloader"); let disk_bytes = image::create_boot_image(arch, &kernel_bytes, &bl_bytes, &root_bytes, ¶ms); @@ -1905,7 +1904,6 @@ fn root_image_key(plan: &Plan, extra_files: &[(String, Vec)]) -> u64 { let mut h = std::collections::hash_map::DefaultHasher::new(); plan.config.hash(&mut h); plan.arch.hash(&mut h); - plan.userland.hash(&mut h); for (name, data) in extra_files { name.hash(&mut h); data.hash(&mut h); @@ -2002,7 +2000,7 @@ pub fn build_test_image( }; let root_bytes = ROOT_IMAGE.get_or_build(root_image_key, || { - build_and_assemble(root, &config, &env, extra_files, quiet, arch, plan.userland) + build_and_assemble(root, &config, &env, extra_files, quiet, arch) }); drop(build_timer); @@ -2697,6 +2695,22 @@ mod tests { ); } + /// **An architecture leaves out only what the shipped config builds**, and + /// each reason names the issue file that owns it. + #[test] + fn every_program_an_architecture_leaves_out_is_one_the_shipped_config_builds() { + let root = Path::new(env!("CARGO_MANIFEST_DIR")); + let programs = parse_config(&Boot::shipped(root).config).programs; + for (arch, name, why) in NOT_YET_BUILT { + assert!(programs.contains_key(*name), "{name} is left out for {arch:?} and the shipped config builds no such program"); + assert_eq!(not_built_for(*arch, name), Some(*why)); + let issue = why.split("issues/").nth(1).map(|rest| rest.split(')').next().unwrap_or(rest)); + let issue = issue.unwrap_or_else(|| panic!("{name}'s reason names no issue file: {why}")); + assert!(root.join("issues").join(issue).is_file(), "{name}'s reason cites issues/{issue}, which does not exist"); + } + assert_eq!(not_built_for(Arch::X86_64, "calc"), None, "x86-64 builds every program"); + } + /// No image this repository ships starts sshd. /// /// It listens on every interface and authenticates against a file that is diff --git a/src/compiler.rs b/src/compiler.rs index 62d4e55b98c..3b5f11dae26 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -39,7 +39,7 @@ use std::fs; use std::path::{Path, PathBuf}; use crate::buildlock::{self, Guard, Held, Keyed}; -use crate::sysroot::{clone_tree, git_bytes, git_out, short, tree_identity}; +use crate::sysroot::{clone_tree, git_bytes, git_out, short, tree_identity, Restore}; use crate::toolchain::{self, host_triple}; /// What changes how a key's sources become a compiler and is none of them: the @@ -144,9 +144,10 @@ pub fn record(rust_dir: &Path) { } } -/// The key of the compiler `fork`'s sources name. +/// The key of the compiler `fork`'s sources name: their content, so committing +/// what was built as local changes names the same compiler. pub fn key(fork: &Path) -> String { - let parts = [RECIPE.to_string(), source(fork), tree_identity(fork, &KEYED)]; + let parts = [RECIPE.to_string(), tree_identity(fork, &KEYED)]; short(parts.join("\n\0\n").as_bytes()) } @@ -208,7 +209,7 @@ fn place(root: &Path, fork: &Path, key: &str, dir: &Path, build: &impl Fn(&Path) "the fork's compiler sources moved while compiler {key} was being built (they are now \ {again}); nothing was kept, and the next build makes the one they name" ); - fs::write(partial.join(SOURCE), format!("{key} {}\n", source(fork))) + fs::write(partial.join(SOURCE), format!("{key}\n")) .unwrap_or_else(|e| panic!("write {}: {e}", partial.join(SOURCE).display())); fs::rename(&partial, dir).unwrap_or_else(|e| panic!("rename {} -> {}: {e}", partial.display(), dir.display())); } @@ -223,6 +224,10 @@ fn build_in_fork(fork: &Path) -> PathBuf { let config = build_dir.join("bootstrap.toml"); fs::write(&config, config_text(&build_dir, &host)).unwrap_or_else(|e| panic!("write {}: {e}", config.display())); let config = config.to_str().unwrap_or_else(|| panic!("{} is not UTF-8", config.display())); + // Bootstrap re-locks both lockfiles to this worktree's `toyos-abi` and + // `toyos`; the fork's own are put back, so the checkout stays clean and the + // key stays the one it was built for. + let _locks = (Restore::holding(&fork.join("Cargo.lock")), Restore::holding(&fork.join("library/Cargo.lock"))); let args = ["build", "--stage", "2", "--config", config, "--warnings", "warn", "compiler/rustc", "library"]; let (ok, log) = toolchain::x_build(fork, &args, "the compiler"); toolchain::refuse_on_compile_error(&log, "the compiler"); @@ -424,11 +429,17 @@ mod tests { assert_eq!((again.stage2.clone(), builds.get()), (ca.stage2.clone(), 2)); assert!(ca.stage2.join("bin/rustc").is_file() && cb.stage2.join("bin/rustc").is_file()); - // An uncommitted file in `compiler/` is a new compiler too. + // An uncommitted file in `compiler/` is a new compiler too, and + // committing it is not another one. + let pinned = git(&a.join("rust"), &["rev-parse", "HEAD"]); write(&a.join("rust/compiler/rustc_target/src/new_target.rs"), "pub fn t() {}\n"); let ca2 = choose(&a, &rust_dir, &a.join("rust"), fake); assert_ne!(ca2.stage2, ca.stage2, "an untracked target spec kept the old compiler"); - fs::remove_file(a.join("rust/compiler/rustc_target/src/new_target.rs")).unwrap(); + git(&a.join("rust"), &["add", "-A"]); + git(&a.join("rust"), &["commit", "-qm", "the target, committed"]); + let committed = choose(&a, &rust_dir, &a.join("rust"), fake); + assert_eq!((committed.stage2.clone(), builds.get()), (ca2.stage2.clone(), 3), "a commit rebuilt the compiler"); + git(&a.join("rust"), &["checkout", "-q", &pinned]); // The primary's own: nothing under its `build/` but `compilers/` moved. let after: Vec<_> = snapshot(&rust_dir.join("build")) @@ -441,7 +452,7 @@ mod tests { // A sweep takes the compiler nobody names, and only that one. let orphan = ca2.stage2.parent().unwrap().to_path_buf(); - drop((mine, ca, cb, again, ca2)); + drop((mine, ca, cb, again, ca2, committed)); let kept = choose(&a, &rust_dir, &a.join("rust"), fake); assert_eq!(sweep(&primary), [orphan], "the sweep took a compiler a worktree names, or left one nobody does"); assert!(kept.stage2.is_dir()); diff --git a/src/sourcegate.rs b/src/sourcegate.rs index c1857ed9b47..842d3f6ae44 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -1282,11 +1282,9 @@ const ARCH_RULES: &[PlaceRule] = &[ ("kernel/src/arch/aarch64/", "the kernel's AArch64 module"), ("bootloader/src/arch/", "the loader's architecture module"), ("toyos-abi/src/syscall.rs", "toyos-abi's per-architecture syscall entry"), - ("userland/libc/src/lib.rs", USERLAND_ASM), - ("userland/libc/src/math.rs", USERLAND_ASM), - ("userland/libc/src/memory.rs", USERLAND_ASM), - ("userland/metalprobe/src/fb.rs", USERLAND_ASM), - ("userland/toyos-window/src/framebuffer.rs", USERLAND_ASM), + ("userland/libc/src/arch/", "libc's architecture modules"), + ("userland/metalprobe/src/arch/", "metalprobe's architecture modules"), + ("userland/toyos-window/src/arch/", "toyos-window's architecture modules"), ("tests/toyos-rust-tests/src/bin/abuse_kernel_addr.rs", USERLAND_ASM), ("tests/toyos-rust-tests/src/bin/abuse_page_straddle.rs", USERLAND_ASM), ("tests/toyos-rust-tests/src/bin/abuse_tls_alloc.rs", USERLAND_ASM), @@ -1325,7 +1323,9 @@ const ARCH_RULES: &[PlaceRule] = &[ "src/licence.rs", "the licence gate resolves a dependency's `cfg(target_arch = ...)` against the target an image is built for: the architecture is the data it reads, not a choice it makes", ), - ("userland/libc/src/math.rs", USERLAND_ASM), + ("userland/libc/src/arch/", "libc's architecture modules and their selector"), + ("userland/toyos-window/src/arch/", "toyos-window's architecture modules and their selector"), + ("userland/metalprobe/src/arch/", "metalprobe's architecture modules and their selector"), ], }, PlaceRule { diff --git a/src/sysroot.rs b/src/sysroot.rs index 34cda0f3328..743eb528532 100644 --- a/src/sysroot.rs +++ b/src/sysroot.rs @@ -42,6 +42,7 @@ use std::process::Command; use sha2::{Digest, Sha256}; +use crate::arch::Arch; use crate::buildlock::{self, Guard, Held, Keyed}; use crate::compiler::{self, Compiler}; use crate::identity; @@ -348,7 +349,7 @@ fn build(root: &Path, compiler: &Compiler, fork: &Path, key: &str, dir: &Path) { place_std(&stamp(&built, target), &partial.join("lib/rustlib").join(target).join("lib")); } let libc_target = dir.with_extension("libc-target"); - for arch in toolchain::USERLAND_ARCHS { + for arch in Arch::ALL { crate::libc::build(root, &partial, &libc_target, arch); } let _ = fs::remove_dir_all(&libc_target); @@ -396,7 +397,7 @@ fn build_std(root: &Path, compiler: &Compiler, fork: &Path) -> PathBuf { let (ok, log) = toolchain::x_build(fork, &args, "std"); toolchain::refuse_on_compile_error(&log, "std"); assert!(ok, "the std build failed, and nothing in its output was a compile error"); - for arch in toolchain::USERLAND_ARCHS { + for arch in Arch::ALL { toolchain::assert_std_built_from(root, &build_dir.join(&host).join("stage0-std").join(arch.userland())); } build_dir.join(&host).join("stage0-std") @@ -454,7 +455,7 @@ fn place_std(stamp: &Path, lib: &Path) { fn std_config(compiler: &Path, build_dir: &Path, host: &str, toyos_ld: &Path) -> String { let targets = GUEST_TARGETS.iter().map(|t| format!("\"{t}\"")).collect::>().join(", "); let linker = toyos_ld.display(); - let userland: String = toolchain::USERLAND_ARCHS + let userland: String = Arch::ALL .iter() .map(|arch| format!("\n[target.{}]\nlinker = \"{linker}\"\n", arch.userland())) .collect(); @@ -505,13 +506,13 @@ fn bootstrap_cargo() -> PathBuf { } /// A file put back to its bytes when this drops, however the scope ends. -struct Restore { +pub(crate) struct Restore { path: PathBuf, bytes: Vec, } impl Restore { - fn holding(path: &Path) -> Self { + pub(crate) fn holding(path: &Path) -> Self { let bytes = fs::read(path).unwrap_or_else(|e| panic!("read {}: {e}", path.display())); Self { path: path.to_path_buf(), bytes } } diff --git a/src/toolchain.rs b/src/toolchain.rs index 5564b24ad0d..14e084fac78 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -86,20 +86,15 @@ const STD_SOURCES: [&str; 2] = ["toyos-abi/src", "toyos/src"]; /// `src/build.rs`'s external fingerprint. A fifth spelling would silently leave /// one of them building or fingerprinting a different set of targets than the /// others. -pub const GUEST_TARGETS: [&str; 5] = [ +pub const GUEST_TARGETS: [&str; 6] = [ Arch::X86_64.userland(), Arch::X86_64.kernel(), Arch::X86_64.loader(), + Arch::Aarch64.userland(), Arch::Aarch64.kernel(), Arch::Aarch64.loader(), ]; -/// The architectures whose userland target the compiler this tree pins -/// carries, in [`GUEST_TARGETS`]. A userland target is a target spec in the -/// fork's `compiler/`, so a new one is a compiler change: it lands, and the -/// primary's next build makes the compiler every sysroot is cloned from. -pub const USERLAND_ARCHS: [Arch; 1] = [Arch::X86_64]; - /// The one ToyOS the hosted rustc (`system.toml`'s `hosted-rustc`) is built to /// run on. pub const HOSTED_ARCH: Arch = Arch::X86_64; @@ -749,7 +744,7 @@ fn full_bootstrap(root: &Path, rust_dir: &Path) { ); tolerated_failure(&log, "the toolchain build"); } - for arch in USERLAND_ARCHS { + for arch in Arch::ALL { assert_std_built_from( root, &rust_dir.join(format!("build/{host}/stage1-std/{}", arch.userland())), @@ -806,7 +801,7 @@ fn write_config(rust_dir: &Path, host: &str, toyos_ld: &Path, with_hosted_rustc: .map(|t| format!("\"{t}\"")) .collect::>() .join(", "); - let userland: String = USERLAND_ARCHS + let userland: String = Arch::ALL .iter() .map(|arch| { let backends = if *arch == HOSTED_ARCH { codegen_backends } else { "" }; diff --git a/tests/toyos-rust-tests/Cargo.lock b/tests/toyos-rust-tests/Cargo.lock index b2c7cafc020..31c6c37d7a8 100644 --- a/tests/toyos-rust-tests/Cargo.lock +++ b/tests/toyos-rust-tests/Cargo.lock @@ -1518,7 +1518,7 @@ version = "0.1.0" [[package]] name = "toyos-window" -version = "0.14.0" +version = "0.16.0" dependencies = [ "toyos 0.13.0", "toyos-abi 0.12.0", diff --git a/tests/toyos.rs b/tests/toyos.rs index 4f83d748124..a2d18608183 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -5837,8 +5837,8 @@ fn run_screen_test( "virt_early_panic" => { // The AArch64 port's stage 3, whole: the loader on AAVMF, the entry's // drop and declaration, the PL011 SPCR names, the boot's survey of - // the machine, and a panic on both channels. No userland: that - // architecture has none to put on ROOT yet. + // the machine, and a panic on both channels, before the kernel + // reaches the AArch64 userland its ROOT carries. let started = std::time::Instant::now(); let mut qemu = QemuInstance::boot_with_options( test_config, diff --git a/userland/Cargo.lock b/userland/Cargo.lock index 6c4c38cc7b0..689f95e9067 100644 --- a/userland/Cargo.lock +++ b/userland/Cargo.lock @@ -483,7 +483,7 @@ dependencies = [ "toyos-font 0.2.0", "toyos-inspect", "toyos-manifest", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -504,7 +504,7 @@ dependencies = [ "toyos-abi 0.12.0", "toyos-font 0.2.0", "toyos-logstream", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -989,7 +989,7 @@ version = "0.1.0" dependencies = [ "filepicker-api", "toyos-font 0.2.0", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -1111,7 +1111,7 @@ dependencies = [ "filepicker-api", "toyos 0.13.0", "toyos-font 0.2.0", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -1127,7 +1127,7 @@ version = "0.1.0" dependencies = [ "sprite", "toyos-font 0.2.0", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -2321,7 +2321,7 @@ version = "0.1.0" dependencies = [ "filepicker-api", "toyos-font 0.2.0", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -3584,7 +3584,7 @@ version = "0.1.0" dependencies = [ "toyos 0.13.0", "toyos-font 0.2.0", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -3725,7 +3725,7 @@ dependencies = [ "toyos 0.13.0", "toyos-abi 0.12.0", "toyos-keymap 0.1.0", - "toyos-window 0.14.0", + "toyos-window 0.16.0", ] [[package]] @@ -3867,7 +3867,7 @@ dependencies = [ [[package]] name = "toyos-window" -version = "0.14.0" +version = "0.16.0" dependencies = [ "toyos 0.13.0", "toyos-abi 0.12.0", diff --git a/userland/libc/src/arch/aarch64.rs b/userland/libc/src/arch/aarch64.rs new file mode 100644 index 00000000000..011358f11ae --- /dev/null +++ b/userland/libc/src/arch/aarch64.rs @@ -0,0 +1,119 @@ +//! AArch64: the entry, the copies and fills as pair loads and stores with a +//! byte tail, and the FP square roots. An unaligned `ldp`/`stp` is legal on the +//! Normal memory every user buffer is. + +/// Entry point for C programs. Stack layout at entry (set up by kernel), with +/// the stack pointer 16-byte aligned: +/// [sp] = argc +/// [sp+8] = argv[0], argv[1], ..., NULL +#[cfg(not(feature = "std-runtime"))] +#[unsafe(no_mangle)] +#[unsafe(naked)] +unsafe extern "C" fn _start() -> ! { + core::arch::naked_asm!( + "ldr x0, [sp]", // argc + "add x1, sp, #8", // argv + // The outermost frame record: a backtrace ends here. + "mov x29, xzr", + "mov x30, xzr", + "bl {start_c}", + "brk #0x1", + start_c = sym crate::runtime::start_c, + ); +} + +/// Copy `n` bytes from `src` to `dest`, lowest address first. +pub(crate) unsafe fn copy_forward(dest: *mut u8, src: *const u8, n: usize) { + unsafe { + core::arch::asm!( + "2:", + "cmp {n}, #16", + "b.lo 3f", + "ldp {a}, {b}, [{src}], #16", + "stp {a}, {b}, [{dest}], #16", + "sub {n}, {n}, #16", + "b 2b", + "3:", + "cbz {n}, 4f", + "ldrb {a:w}, [{src}], #1", + "strb {a:w}, [{dest}], #1", + "sub {n}, {n}, #1", + "b 3b", + "4:", + dest = inout(reg) dest => _, + src = inout(reg) src => _, + n = inout(reg) n => _, + a = out(reg) _, + b = out(reg) _, + options(nostack), + ); + } +} + +/// Copy `n` bytes from `src` to `dest`, highest address first: the order a +/// `dest` overlapping `src` from above needs. +pub(crate) unsafe fn copy_backward(dest: *mut u8, src: *const u8, n: usize) { + unsafe { + core::arch::asm!( + "add {src}, {src}, {n}", + "add {dest}, {dest}, {n}", + "2:", + "cmp {n}, #16", + "b.lo 3f", + "ldp {a}, {b}, [{src}, #-16]!", + "stp {a}, {b}, [{dest}, #-16]!", + "sub {n}, {n}, #16", + "b 2b", + "3:", + "cbz {n}, 4f", + "ldrb {a:w}, [{src}, #-1]!", + "strb {a:w}, [{dest}, #-1]!", + "sub {n}, {n}, #1", + "b 3b", + "4:", + dest = inout(reg) dest => _, + src = inout(reg) src => _, + n = inout(reg) n => _, + a = out(reg) _, + b = out(reg) _, + options(nostack), + ); + } +} + +/// Set `n` bytes at `dest` to `byte`. +pub(crate) unsafe fn fill(dest: *mut u8, byte: u8, n: usize) { + let word = u64::from(byte) * 0x0101_0101_0101_0101; + unsafe { + core::arch::asm!( + "2:", + "cmp {n}, #16", + "b.lo 3f", + "stp {w}, {w}, [{dest}], #16", + "sub {n}, {n}, #16", + "b 2b", + "3:", + "cbz {n}, 4f", + "strb {w:w}, [{dest}], #1", + "sub {n}, {n}, #1", + "b 3b", + "4:", + dest = inout(reg) dest => _, + n = inout(reg) n => _, + w = in(reg) word, + options(nostack), + ); + } +} + +pub(crate) fn sqrt_f64(x: f64) -> f64 { + let result: f64; + unsafe { core::arch::asm!("fsqrt {0:d}, {0:d}", inout(vreg) x => result, options(pure, nomem, nostack)) }; + result +} + +pub(crate) fn sqrt_f32(x: f32) -> f32 { + let result: f32; + unsafe { core::arch::asm!("fsqrt {0:s}, {0:s}", inout(vreg) x => result, options(pure, nomem, nostack)) }; + result +} diff --git a/userland/libc/src/arch/mod.rs b/userland/libc/src/arch/mod.rs new file mode 100644 index 00000000000..03e946d2a59 --- /dev/null +++ b/userland/libc/src/arch/mod.rs @@ -0,0 +1,14 @@ +//! The C runtime's architecture-specific pieces, one module per architecture, +//! each answering the same names: the process entry, the three copies and +//! fills that must not be written in Rust (the compiler lowers a Rust loop that +//! copies back into a call to `memcpy`), and the square roots. + +#[cfg(target_arch = "aarch64")] +mod aarch64; +#[cfg(target_arch = "aarch64")] +pub(crate) use aarch64::*; + +#[cfg(target_arch = "x86_64")] +mod x86_64; +#[cfg(target_arch = "x86_64")] +pub(crate) use x86_64::*; diff --git a/userland/libc/src/arch/x86_64.rs b/userland/libc/src/arch/x86_64.rs new file mode 100644 index 00000000000..f76430eca0e --- /dev/null +++ b/userland/libc/src/arch/x86_64.rs @@ -0,0 +1,76 @@ +//! x86-64: the entry, the string instructions, and SSE2's square roots. + +/// Entry point for C programs. Stack layout at entry (set up by kernel): +/// [RSP] = argc +/// [RSP+8] = argv[0], argv[1], ..., NULL +#[cfg(not(feature = "std-runtime"))] +#[unsafe(no_mangle)] +#[unsafe(naked)] +unsafe extern "C" fn _start() -> ! { + core::arch::naked_asm!( + "mov rdi, [rsp]", // argc + "lea rsi, [rsp + 8]", // argv + "call {start_c}", + "ud2", + start_c = sym crate::runtime::start_c, + ); +} + +/// Copy `n` bytes from `src` to `dest`, lowest address first. +pub(crate) unsafe fn copy_forward(dest: *mut u8, src: *const u8, n: usize) { + unsafe { + core::arch::asm!( + "rep movsb", + inout("rdi") dest => _, + inout("rsi") src => _, + inout("rcx") n => _, + options(nostack), + ); + } +} + +/// Copy `n` bytes from `src` to `dest`, highest address first: the order a +/// `dest` overlapping `src` from above needs. +pub(crate) unsafe fn copy_backward(dest: *mut u8, src: *const u8, n: usize) { + if n == 0 { + return; + } + // The direction flag is set only across this one `rep`; every Ring 0 entry + // clears it for the kernel's own sake. + unsafe { + core::arch::asm!( + "std", + "rep movsb", + "cld", + inout("rdi") dest.add(n - 1) => _, + inout("rsi") src.add(n - 1) => _, + inout("rcx") n => _, + options(nostack), + ); + } +} + +/// Set `n` bytes at `dest` to `byte`. +pub(crate) unsafe fn fill(dest: *mut u8, byte: u8, n: usize) { + unsafe { + core::arch::asm!( + "rep stosb", + inout("rdi") dest => _, + in("al") byte, + inout("rcx") n => _, + options(nostack), + ); + } +} + +pub(crate) fn sqrt_f64(x: f64) -> f64 { + let result: f64; + unsafe { core::arch::asm!("sqrtsd {0}, {0}", inout(xmm_reg) x => result, options(pure, nomem, nostack)) }; + result +} + +pub(crate) fn sqrt_f32(x: f32) -> f32 { + let result: f32; + unsafe { core::arch::asm!("sqrtss {0}, {0}", inout(xmm_reg) x => result, options(pure, nomem, nostack)) }; + result +} diff --git a/userland/libc/src/lib.rs b/userland/libc/src/lib.rs index 862821d165f..219d9bb256d 100644 --- a/userland/libc/src/lib.rs +++ b/userland/libc/src/lib.rs @@ -2,6 +2,7 @@ extern crate alloc; +mod arch; mod ctype; mod math; mod memory; @@ -14,34 +15,18 @@ mod stdio; mod string; mod time; -// C runtime: _start entry point, panic handler, and global allocator. +// C runtime: the entry `arch::_start` calls, panic handler, and global allocator. // Only for pure C programs (no Rust std). When linked into a Rust program // with std, std provides these. #[cfg(not(feature = "std-runtime"))] mod runtime { use core::panic::PanicInfo; - // Entry point for C programs. The kernel pushes argc and argv onto the stack. - #[unsafe(no_mangle)] - #[unsafe(naked)] - unsafe extern "C" fn _start() -> ! { - // Stack layout at entry (set up by kernel): - // [RSP] = argc - // [RSP+8] = argv[0], argv[1], ..., NULL - core::arch::naked_asm!( - "mov rdi, [rsp]", // argc - "lea rsi, [rsp + 8]", // argv - "call {start_c}", - "ud2", - start_c = sym start_c, - ); - } - // Returning from `main` is defined as calling `exit` with its value, so this // goes through libc's `exit` rather than the syscall: the atexit table and // `fflush(NULL)` are what stand between a program's last unterminated line // and the fd. - extern "C" fn start_c(argc: i32, argv: *const *const u8) -> ! { + pub(crate) extern "C" fn start_c(argc: i32, argv: *const *const u8) -> ! { unsafe extern "C" { fn main(argc: i32, argv: *const *const u8) -> i32; } diff --git a/userland/libc/src/math.rs b/userland/libc/src/math.rs index 7abb5c0f25a..2d97c989566 100644 --- a/userland/libc/src/math.rs +++ b/userland/libc/src/math.rs @@ -230,36 +230,10 @@ pub extern "C" fn floorf(x: f32) -> f32 { pub extern "C" fn ceilf(x: f32) -> f32 { -floorf(-x) } #[no_mangle] -pub extern "C" fn sqrt(x: f64) -> f64 { - #[cfg(target_arch = "x86_64")] - { - let result: f64; - unsafe { core::arch::asm!("sqrtsd {0}, {0}", inout(xmm_reg) x => result); } - return result; - } - #[cfg(target_arch = "aarch64")] - { - let result: f64; - unsafe { core::arch::asm!("fsqrt {0:d}, {0:d}", inout(vreg) x => result); } - return result; - } -} +pub extern "C" fn sqrt(x: f64) -> f64 { crate::arch::sqrt_f64(x) } #[no_mangle] -pub extern "C" fn sqrtf(x: f32) -> f32 { - #[cfg(target_arch = "x86_64")] - { - let result: f32; - unsafe { core::arch::asm!("sqrtss {0}, {0}", inout(xmm_reg) x => result); } - return result; - } - #[cfg(target_arch = "aarch64")] - { - let result: f32; - unsafe { core::arch::asm!("fsqrt {0:s}, {0:s}", inout(vreg) x => result); } - return result; - } -} +pub extern "C" fn sqrtf(x: f32) -> f32 { crate::arch::sqrt_f32(x) } #[no_mangle] pub extern "C" fn fabs(x: f64) -> f64 { f64::from_bits(x.to_bits() & !(1u64 << 63)) } diff --git a/userland/libc/src/memory.rs b/userland/libc/src/memory.rs index 2555b2be805..3432aaf6a35 100644 --- a/userland/libc/src/memory.rs +++ b/userland/libc/src/memory.rs @@ -86,21 +86,15 @@ pub unsafe extern "C" fn realloc(p: *mut u8, new_size: usize) -> *mut u8 { unsafe { backend::realloc(p, new_size) } } -// memcpy, memmove, memset, memcmp — implemented in inline asm to avoid -// infinite recursion (Rust's ptr::copy_nonoverlapping emits calls to memcpy). +// memcpy, memmove and memset are the architecture's (`arch`): Rust's +// ptr::copy_nonoverlapping, and a copying loop, are lowered to calls to memcpy. // This libc spells C strings and buffers as `*const u8`, not `c_char`/`c_void`: // same ABI, different element type from the declaration std links against. #[allow(suspicious_runtime_symbol_definitions)] #[no_mangle] pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 { - core::arch::asm!( - "rep movsb", - inout("rdi") dest => _, - inout("rsi") src => _, - inout("rcx") n => _, - options(nostack), - ); + crate::arch::copy_forward(dest, src, n); dest } @@ -108,18 +102,10 @@ pub unsafe extern "C" fn memcpy(dest: *mut u8, src: *const u8, n: usize) -> *mut #[no_mangle] pub unsafe extern "C" fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mut u8 { if (dest as usize) <= (src as usize) || (dest as usize) >= (src as usize) + n { - memcpy(dest, src, n); + crate::arch::copy_forward(dest, src, n); } else { - // Overlap with dest after src — copy backwards - core::arch::asm!( - "std", - "rep movsb", - "cld", - inout("rdi") dest.add(n - 1) => _, - inout("rsi") src.add(n - 1) => _, - inout("rcx") n => _, - options(nostack), - ); + // Overlap with dest after src: copy backwards. + crate::arch::copy_backward(dest, src, n); } dest } @@ -127,13 +113,7 @@ pub unsafe extern "C" fn memmove(dest: *mut u8, src: *const u8, n: usize) -> *mu #[allow(suspicious_runtime_symbol_definitions)] #[no_mangle] pub unsafe extern "C" fn memset(dest: *mut u8, c: i32, n: usize) -> *mut u8 { - core::arch::asm!( - "rep stosb", - inout("rdi") dest => _, - in("al") c as u8, - inout("rcx") n => _, - options(nostack), - ); + crate::arch::fill(dest, c as u8, n); dest } diff --git a/userland/metalprobe/src/arch/aarch64.rs b/userland/metalprobe/src/arch/aarch64.rs new file mode 100644 index 00000000000..b8b12383d60 --- /dev/null +++ b/userland/metalprobe/src/arch/aarch64.rs @@ -0,0 +1,8 @@ +//! AArch64. + +/// Complete this CPU's stores: DSB ST waits until every store before it has +/// completed. +pub fn drain_stores() { + // SAFETY: a barrier with no operands and no memory it can misuse. + unsafe { std::arch::asm!("dsb st", options(nostack, preserves_flags)) }; +} diff --git a/userland/metalprobe/src/arch/mod.rs b/userland/metalprobe/src/arch/mod.rs new file mode 100644 index 00000000000..099b435e4b5 --- /dev/null +++ b/userland/metalprobe/src/arch/mod.rs @@ -0,0 +1,11 @@ +//! What the probes ask of the CPU, one module per architecture. + +#[cfg(target_arch = "aarch64")] +mod aarch64; +#[cfg(target_arch = "aarch64")] +pub use aarch64::*; + +#[cfg(target_arch = "x86_64")] +mod x86_64; +#[cfg(target_arch = "x86_64")] +pub use x86_64::*; diff --git a/userland/metalprobe/src/arch/x86_64.rs b/userland/metalprobe/src/arch/x86_64.rs new file mode 100644 index 00000000000..888d2affe57 --- /dev/null +++ b/userland/metalprobe/src/arch/x86_64.rs @@ -0,0 +1,8 @@ +//! x86-64. + +/// Drain this CPU's stores out of the write-combining fill buffers. +pub fn drain_stores() { + // SAFETY: `sfence` has no operands and no memory it can misuse; the + // target is x86-64, where the instruction always exists. + unsafe { std::arch::x86_64::_mm_sfence() }; +} diff --git a/userland/metalprobe/src/fb.rs b/userland/metalprobe/src/fb.rs index fd1cb476571..e70632a72e1 100644 --- a/userland/metalprobe/src/fb.rs +++ b/userland/metalprobe/src/fb.rs @@ -103,9 +103,7 @@ impl Scanout { /// Every write is in the fill buffers until this runs: a weakly-ordered /// mapping owes a fence before anything reads what was put there. fn fence(&self) { - // SAFETY: `sfence` has no operands and no memory it can misuse; the - // target is x86-64, where the instruction always exists. - unsafe { std::arch::x86_64::_mm_sfence() }; + crate::arch::drain_stores(); } /// Paint the whole scanout black, so the kernel's panel is legible again diff --git a/userland/metalprobe/src/main.rs b/userland/metalprobe/src/main.rs index 617df2b4110..fd6dbf5553e 100644 --- a/userland/metalprobe/src/main.rs +++ b/userland/metalprobe/src/main.rs @@ -21,6 +21,7 @@ //! A command that could not measure exits with one of [`Refusal`]'s negative //! codes instead, so a missing number is never a small one. +mod arch; mod fb; mod usb; diff --git a/userland/toyos-window/Cargo.toml b/userland/toyos-window/Cargo.toml index 0b9802d9a03..e4c0e992f8b 100644 --- a/userland/toyos-window/Cargo.toml +++ b/userland/toyos-window/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "toyos-window" -version = "0.14.0" +version = "0.16.0" edition = "2021" license = "MIT OR Apache-2.0" description = "Client library for ToyOS windows: create one, draw into it, read its events." diff --git a/userland/toyos-window/src/arch/aarch64.rs b/userland/toyos-window/src/arch/aarch64.rs new file mode 100644 index 00000000000..e22f2010985 --- /dev/null +++ b/userland/toyos-window/src/arch/aarch64.rs @@ -0,0 +1,7 @@ +//! AArch64. + +/// Complete this CPU's stores to the scanout: DSB ST waits until every store +/// before it has completed. +pub(crate) fn drain_stores() { + unsafe { core::arch::asm!("dsb st", options(nostack, preserves_flags)) }; +} diff --git a/userland/toyos-window/src/arch/mod.rs b/userland/toyos-window/src/arch/mod.rs new file mode 100644 index 00000000000..8e7aaf91f6d --- /dev/null +++ b/userland/toyos-window/src/arch/mod.rs @@ -0,0 +1,11 @@ +//! What a surface's writer asks of the CPU, one module per architecture. + +#[cfg(target_arch = "aarch64")] +mod aarch64; +#[cfg(target_arch = "aarch64")] +pub(crate) use aarch64::*; + +#[cfg(target_arch = "x86_64")] +mod x86_64; +#[cfg(target_arch = "x86_64")] +pub(crate) use x86_64::*; diff --git a/userland/toyos-window/src/arch/x86_64.rs b/userland/toyos-window/src/arch/x86_64.rs new file mode 100644 index 00000000000..cb42608a074 --- /dev/null +++ b/userland/toyos-window/src/arch/x86_64.rs @@ -0,0 +1,8 @@ +//! x86-64. + +/// Drain this CPU's stores to a write-combining scanout: SFENCE empties the +/// WC buffers (SDM Vol. 3A §11.3.1), where the tail of a blit otherwise waits +/// for something unrelated to evict it. +pub(crate) fn drain_stores() { + unsafe { core::arch::x86_64::_mm_sfence() }; +} diff --git a/userland/toyos-window/src/framebuffer.rs b/userland/toyos-window/src/framebuffer.rs index 95d4ca7e1f6..9b20bba153f 100644 --- a/userland/toyos-window/src/framebuffer.rs +++ b/userland/toyos-window/src/framebuffer.rs @@ -134,12 +134,11 @@ impl Screen { } } // A scanout is write-combining, so the tail of the last row can sit in - // a partly filled WC buffer until something unrelated evicts it — a - // sliver of the previous frame left on the panel for as long as its - // owner has nothing else to draw. SFENCE is what drains one (SDM - // Vol. 3A §11.3.1), and this is the call that says the pixels are the + // a store buffer until something unrelated evicts it — a sliver of the + // previous frame left on the panel for as long as its owner has nothing + // else to draw. This is the call that says the pixels are the // surface's now. - unsafe { core::arch::x86_64::_mm_sfence() }; + crate::arch::drain_stores(); self.written.set(self.written.get() + (row_bytes * h) as u64); self.blits.set(self.blits.get() + 1); let painted = Rect { x: x as u32, y: y as u32, w: w as u32, h: h as u32 }; diff --git a/userland/toyos-window/src/lib.rs b/userland/toyos-window/src/lib.rs index 98c1707d94e..40038303e58 100644 --- a/userland/toyos-window/src/lib.rs +++ b/userland/toyos-window/src/lib.rs @@ -1,3 +1,4 @@ +mod arch; pub mod framebuffer; pub use framebuffer::{Color, Framebuffer, Screen, Traffic}; From a36ccb9f280788ae17f60acfded66c1fc41123d8 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 17:23:23 +0200 Subject: [PATCH 21/50] toyos-ld: back to main's, by the owner's ruling that AArch64 links through rust-lld The owner's ruling of 2026-09-26 moves ToyOS from toyos-ld to rust-lld: lld's output is accepted by toyos-elf and the loader, byte-reproducible and much smaller (snake 873 KB against 1.99 MB, because toyos-ld's GC roots every .eh_frame), and toyos-ld is frozen, to be deleted. This branch stops extending it: every toyos-ld change it made (the machine parameter, EM_AARCH64, R_AARCH64_RELATIVE, PE ARM64 and /MACHINE:, the AArch64 TLS descriptor output, the AArch64 GOT and PLT fixes, and the 0.3.0 bump) is reverted by this commit, leaving toyos-ld byte for byte main's. x86-64 links exactly as it did; the x86 switch to rust-lld is another branch's. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- Cargo.lock | 2 +- toyos-ld/Cargo.toml | 2 +- toyos-ld/src/collect.rs | 174 ++----------------- toyos-ld/src/emit_elf.rs | 315 ++++++++++++++++++++-------------- toyos-ld/src/emit_pe.rs | 7 +- toyos-ld/src/main.rs | 35 +--- toyos-ld/src/reloc.rs | 299 +++----------------------------- toyos-ld/tests/common/mod.rs | 37 +--- toyos-ld/tests/machines.rs | 192 --------------------- toyos-ld/tests/tls_aarch64.rs | 177 ------------------- 10 files changed, 228 insertions(+), 1012 deletions(-) delete mode 100644 toyos-ld/tests/machines.rs delete mode 100644 toyos-ld/tests/tls_aarch64.rs diff --git a/Cargo.lock b/Cargo.lock index 018f5c0ee65..f0f98905290 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1226,7 +1226,7 @@ version = "0.1.0" [[package]] name = "toyos-ld" -version = "0.3.0" +version = "0.2.0" dependencies = [ "object 0.38.1", "sha2", diff --git a/toyos-ld/Cargo.toml b/toyos-ld/Cargo.toml index fc7226fd719..c5f49713f83 100644 --- a/toyos-ld/Cargo.toml +++ b/toyos-ld/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "toyos-ld" -version = "0.3.0" +version = "0.2.0" edition = "2021" license = "MIT OR Apache-2.0" description = "ToyOS's linker: resolves libraries, combines object files and produces executables, for the ToyOS C toolchain and the upstream x86_64-unknown-toyos Rust target." diff --git a/toyos-ld/src/collect.rs b/toyos-ld/src/collect.rs index 954f177ac33..da5ca4f0004 100644 --- a/toyos-ld/src/collect.rs +++ b/toyos-ld/src/collect.rs @@ -116,11 +116,6 @@ pub enum RelocType { Aarch64Abs64, Aarch64Abs32, Aarch64Prel32, - Aarch64Prel64, - Aarch64LdPrelLo19, - Aarch64AdrPrelLo21, - Aarch64Condbr19, - Aarch64Tstbr14, Aarch64Call26, Aarch64Jump26, Aarch64AdrPrelPgHi21, @@ -139,38 +134,6 @@ pub enum RelocType { Aarch64GotPcrel32, Aarch64TlvpLoadPage21, Aarch64TlvpLoadPageoff12, - Aarch64TlsdescAdrPage21, - Aarch64TlsdescLd64Lo12, - Aarch64TlsdescAddLo12, - Aarch64TlsdescCall, - Aarch64TlsieAdrGottprelPage21, - Aarch64TlsieLd64GottprelLo12Nc, - Aarch64TlsleAddTprelHi12, - Aarch64TlsleAddTprelLo12Nc, -} - -impl RelocType { - /// One of the four relocations of an AArch64 TLS descriptor sequence - /// (`adrp`, `ldr`, `add`, `blr`), each patching its own instruction and all - /// four relaxed the same way for one symbol. - pub(crate) fn is_tlsdesc(self) -> bool { - matches!( - self, - Self::Aarch64TlsdescAdrPage21 - | Self::Aarch64TlsdescLd64Lo12 - | Self::Aarch64TlsdescAddLo12 - | Self::Aarch64TlsdescCall - ) - } - - /// A reference to a GOT slot holding a symbol's offset from the thread - /// pointer: the initial-exec model. - pub(crate) fn is_gottprel(self) -> bool { - matches!( - self, - Self::X86Gottpoff | Self::Aarch64TlsieAdrGottprelPage21 | Self::Aarch64TlsieLd64GottprelLo12Nc - ) - } } impl std::fmt::Display for RelocType { @@ -193,11 +156,6 @@ impl std::fmt::Display for RelocType { RelocType::Aarch64Abs64 => write!(f, "R_AARCH64_ABS64"), RelocType::Aarch64Abs32 => write!(f, "R_AARCH64_ABS32"), RelocType::Aarch64Prel32 => write!(f, "R_AARCH64_PREL32"), - RelocType::Aarch64Prel64 => write!(f, "R_AARCH64_PREL64"), - RelocType::Aarch64LdPrelLo19 => write!(f, "R_AARCH64_LD_PREL_LO19"), - RelocType::Aarch64AdrPrelLo21 => write!(f, "R_AARCH64_ADR_PREL_LO21"), - RelocType::Aarch64Condbr19 => write!(f, "R_AARCH64_CONDBR19"), - RelocType::Aarch64Tstbr14 => write!(f, "R_AARCH64_TSTBR14"), RelocType::Aarch64Call26 => write!(f, "R_AARCH64_CALL26"), RelocType::Aarch64Jump26 => write!(f, "R_AARCH64_JUMP26"), RelocType::Aarch64AdrPrelPgHi21 => write!(f, "R_AARCH64_ADR_PREL_PG_HI21"), @@ -216,14 +174,6 @@ impl std::fmt::Display for RelocType { RelocType::Aarch64GotPcrel32 => write!(f, "ARM64_RELOC_POINTER_TO_GOT"), RelocType::Aarch64TlvpLoadPage21 => write!(f, "ARM64_RELOC_TLVP_LOAD_PAGE21"), RelocType::Aarch64TlvpLoadPageoff12 => write!(f, "ARM64_RELOC_TLVP_LOAD_PAGEOFF12"), - RelocType::Aarch64TlsdescAdrPage21 => write!(f, "R_AARCH64_TLSDESC_ADR_PAGE21"), - RelocType::Aarch64TlsdescLd64Lo12 => write!(f, "R_AARCH64_TLSDESC_LD64_LO12"), - RelocType::Aarch64TlsdescAddLo12 => write!(f, "R_AARCH64_TLSDESC_ADD_LO12"), - RelocType::Aarch64TlsdescCall => write!(f, "R_AARCH64_TLSDESC_CALL"), - RelocType::Aarch64TlsieAdrGottprelPage21 => write!(f, "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21"), - RelocType::Aarch64TlsieLd64GottprelLo12Nc => write!(f, "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC"), - RelocType::Aarch64TlsleAddTprelHi12 => write!(f, "R_AARCH64_TLSLE_ADD_TPREL_HI12"), - RelocType::Aarch64TlsleAddTprelLo12Nc => write!(f, "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC"), } } } @@ -348,28 +298,6 @@ pub(crate) fn collect(objects: &[(String, Vec)]) -> Result>()?; - // One link is one machine: the first object names it, and an object built - // for the other is refused rather than merged into an image that runs on - // neither. - let mut arch = None; - for ((name, _), input) in flat.iter().zip(&parsed) { - let ParsedInput::Object(object) = input else { continue }; - match arch { - None => arch = Some(object.arch), - Some(first) if first != object.arch => { - return Err(LinkError::Parse { - file: name.clone(), - message: format!("built for {:?}, but the link is {first:?}", object.arch), - }) - } - Some(_) => {} - } - } - let arch = arch.ok_or_else(|| LinkError::Parse { - file: String::new(), - message: "no object file names the machine to link for".to_string(), - })?; - // Phase 2: merge results sequentially. let mut state = LinkState { sections: Vec::new(), @@ -380,7 +308,7 @@ pub(crate) fn collect(objects: &[(String, Vec)]) -> Result Result } /// Parse a single object file into a `ParsedObject` with local section indices. -fn parse_object(obj: &object::File, name: &str) -> Result { - let arch = match obj.architecture() { - object::Architecture::X86_64 => Arch::X86_64, - object::Architecture::Aarch64 => Arch::Aarch64, - other => { - return Err(LinkError::Parse { - file: name.to_string(), - message: format!("built for {other:?}, which is neither x86_64 nor aarch64"), - }) - } +fn parse_object(obj: &object::File, _name: &str) -> Result { + let arch = if matches!(obj.architecture(), object::Architecture::X86_64) { + Arch::X86_64 + } else { + Arch::Aarch64 }; let mut sections = Vec::new(); @@ -546,11 +469,6 @@ fn parse_object(obj: &object::File, name: &str) -> Result idx, _ => continue, @@ -622,11 +540,7 @@ fn parse_object(obj: &object::File, name: &str) -> Result match coff_to_reloc_type(arch, typ, || { - let data = §ions[local_sec.0].data; - let off = offset as usize; - u32::from_le_bytes(data[off..off + 4].try_into().unwrap()) - }) { + RelocationFlags::Coff { typ } => match coff_to_reloc_type(typ) { Some(r) => (r, false), None => return Err(LinkError::UnsupportedRawRelocation { raw_type: format!("COFF {typ}"), @@ -662,10 +576,6 @@ fn parse_object(obj: &object::File, name: &str) -> Result String { /// Merge a parsed object into the global LinkState, remapping local section indices. fn merge_parsed_object(state: &mut LinkState, parsed: ParsedObject, obj_idx: ObjIdx) { - debug_assert_eq!(parsed.arch, state.arch, "`collect` refuses a mixed link before any merge"); + if matches!(parsed.arch, Arch::X86_64) { + state.arch = Arch::X86_64; + } let base = state.sections.len(); let remap = |local: LocalSectionIdx| -> SectionIdx { SectionIdx(base + local.0) }; @@ -882,11 +794,6 @@ fn elf_to_reloc_type(r_type: u32) -> Option { elf::R_AARCH64_ABS64 => RelocType::Aarch64Abs64, elf::R_AARCH64_ABS32 => RelocType::Aarch64Abs32, elf::R_AARCH64_PREL32 => RelocType::Aarch64Prel32, - elf::R_AARCH64_PREL64 => RelocType::Aarch64Prel64, - elf::R_AARCH64_LD_PREL_LO19 => RelocType::Aarch64LdPrelLo19, - elf::R_AARCH64_ADR_PREL_LO21 => RelocType::Aarch64AdrPrelLo21, - elf::R_AARCH64_CONDBR19 => RelocType::Aarch64Condbr19, - elf::R_AARCH64_TSTBR14 => RelocType::Aarch64Tstbr14, elf::R_AARCH64_CALL26 => RelocType::Aarch64Call26, elf::R_AARCH64_JUMP26 => RelocType::Aarch64Jump26, elf::R_AARCH64_ADR_PREL_PG_HI21 => RelocType::Aarch64AdrPrelPgHi21, @@ -902,37 +809,12 @@ fn elf_to_reloc_type(r_type: u32) -> Option { elf::R_AARCH64_MOVW_UABS_G3 => RelocType::Aarch64MovwUabsG3, elf::R_AARCH64_ADR_GOT_PAGE => RelocType::Aarch64AdrGotPage, elf::R_AARCH64_LD64_GOT_LO12_NC => RelocType::Aarch64Ld64GotLo12Nc, - elf::R_AARCH64_TLSDESC_ADR_PAGE21 => RelocType::Aarch64TlsdescAdrPage21, - elf::R_AARCH64_TLSDESC_LD64_LO12 => RelocType::Aarch64TlsdescLd64Lo12, - elf::R_AARCH64_TLSDESC_ADD_LO12 => RelocType::Aarch64TlsdescAddLo12, - elf::R_AARCH64_TLSDESC_CALL => RelocType::Aarch64TlsdescCall, - elf::R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 => RelocType::Aarch64TlsieAdrGottprelPage21, - elf::R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC => RelocType::Aarch64TlsieLd64GottprelLo12Nc, - elf::R_AARCH64_TLSLE_ADD_TPREL_HI12 => RelocType::Aarch64TlsleAddTprelHi12, - elf::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC => RelocType::Aarch64TlsleAddTprelLo12Nc, _ => return None, }) } -/// Map a COFF relocation type to RelocType. The numbers are per machine: ARM64 -/// and AMD64 reuse the same small integers for different things. `insn` reads -/// the instruction an ARM64 page-offset load or store patches, whose access -/// size decides the scale. -fn coff_to_reloc_type(arch: Arch, typ: u16, insn: impl FnOnce() -> u32) -> Option { - if arch == Arch::Aarch64 { - return Some(match typ { - pe::IMAGE_REL_ARM64_ADDR64 => RelocType::Aarch64Abs64, - // The image base is 0, so an RVA and an address are one number. - pe::IMAGE_REL_ARM64_ADDR32 | pe::IMAGE_REL_ARM64_ADDR32NB => RelocType::Aarch64Abs32, - pe::IMAGE_REL_ARM64_BRANCH26 => RelocType::Aarch64Call26, - pe::IMAGE_REL_ARM64_PAGEBASE_REL21 => RelocType::Aarch64AdrPrelPgHi21, - pe::IMAGE_REL_ARM64_PAGEOFFSET_12A => RelocType::Aarch64AddAbsLo12Nc, - pe::IMAGE_REL_ARM64_PAGEOFFSET_12L => classify_pageoff12(insn()), - pe::IMAGE_REL_ARM64_REL32 => RelocType::Aarch64Prel32, - pe::IMAGE_REL_ARM64_SECREL => RelocType::Aarch64Abs32, - _ => return None, - }); - } +/// Map COFF x86_64 relocation types to RelocType. +fn coff_to_reloc_type(typ: u16) -> Option { Some(match typ { pe::IMAGE_REL_AMD64_ADDR64 => RelocType::X86_64, pe::IMAGE_REL_AMD64_ADDR32 => RelocType::X86_32, @@ -1563,35 +1445,3 @@ pub(crate) fn collect_unique_symbols<'a>( } result } - -/// The addend an ARM64 COFF instruction relocation carries in the immediate it -/// patches, in bytes, or `None` for a relocation that is not an instruction's. -/// The linker writes the whole field afresh from symbol plus this, which is -/// what LLD's `applyArm64Addr`, `applyArm64Imm` and `applyArm64Ldr` compute. -fn coff_arm64_insn_addend(r_type: RelocType, data: &[u8], offset: u64) -> Option { - let off = offset as usize; - let insn = || u32::from_le_bytes(data[off..off + 4].try_into().unwrap()); - let imm12 = |insn: u32| ((insn >> 10) & 0xfff) as i64; - Some(match r_type { - RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 => (((insn() & 0x03ff_ffff) as i64) << 38) >> 36, - RelocType::Aarch64AdrPrelPgHi21 => { - let insn = insn(); - (((insn >> 29) & 0x3) | ((insn >> 3) & 0x001f_fffc)) as i64 - } - RelocType::Aarch64AddAbsLo12Nc => imm12(insn()), - RelocType::Aarch64Ldst8AbsLo12Nc => imm12(insn()), - RelocType::Aarch64Ldst16AbsLo12Nc => imm12(insn()) << 1, - RelocType::Aarch64Ldst32AbsLo12Nc => imm12(insn()) << 2, - RelocType::Aarch64Ldst64AbsLo12Nc => imm12(insn()) << 3, - RelocType::Aarch64Ldst128AbsLo12Nc => imm12(insn()) << 4, - _ => return None, - }) -} - -/// An AArch64 (or Arm) mapping symbol's name: `$x`, `$d`, `$a` or `$t`, -/// alone or followed by `.` and anything. -fn is_mapping_symbol(name: &str) -> bool { - let Some(rest) = name.strip_prefix('$') else { return false }; - let mut chars = rest.chars(); - matches!(chars.next(), Some('x' | 'd' | 'a' | 't')) && matches!(chars.next(), None | Some('.')) -} diff --git a/toyos-ld/src/emit_elf.rs b/toyos-ld/src/emit_elf.rs index 3bbf2a2bf74..e119a0a372b 100644 --- a/toyos-ld/src/emit_elf.rs +++ b/toyos-ld/src/emit_elf.rs @@ -1,8 +1,8 @@ use object::write::elf::{FileHeader, ProgramHeader, SectionHeader, SectionIndex, Sym, Rel, Writer, SymbolIndex}; use object::write::StringId; use object::Endianness; -use crate::collect::{collect_unique_symbols, Arch, InputSection, LinkState, RelocType, SectionKind, SymbolDef, SymbolRef}; -use crate::reloc::{RelocOutput, resolve_symbol, tpoff, TLS_ALIGN}; +use crate::collect::{collect_unique_symbols, InputSection, LinkState, RelocType, SectionKind, SymbolDef, SymbolRef}; +use crate::reloc::{RelocOutput, resolve_symbol, tpoff}; use crate::{align_up, classify_sections, LinkError, BASE_VADDR, PAGE_SIZE}; use object::elf; use std::collections::{BTreeMap, HashMap, HashSet}; @@ -303,12 +303,9 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti } } - let plt_stub_size: u64 = match state.arch { - Arch::X86_64 => 6, - Arch::Aarch64 => 12, - }; + const PLT_STUB_SIZE: u64 = 6; let plt_vaddr = if dyn_syms.is_empty() { cursor } else { align_up(cursor, 16) }; - cursor = plt_vaddr + dyn_syms.len() as u64 * plt_stub_size; + cursor = plt_vaddr + dyn_syms.len() as u64 * PLT_STUB_SIZE; // .eh_frame_hdr: placed after PLT stubs, before page alignment let mut eh_frame_vaddr = 0u64; @@ -373,10 +370,8 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let got_symbols = collect_unique_symbols(state.relocs.iter(), |r| { matches!(r.r_type, RelocType::X86Gotpcrel | RelocType::X86Gotpcrelx - | RelocType::X86RexGotpcrelx - | RelocType::Aarch64AdrGotPage | RelocType::Aarch64Ld64GotLo12Nc) - || r.r_type.is_gottprel() - || ((r.r_type == RelocType::X86Tlsgd || r.r_type.is_tlsdesc()) && !is_shared + | RelocType::X86RexGotpcrelx | RelocType::X86Gottpoff) + || (r.r_type == RelocType::X86Tlsgd && !is_shared && state.dynamic_imports.contains(r.target.name())) }); @@ -397,7 +392,7 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let mut gd_got: BTreeMap = BTreeMap::new(); if is_shared { let gd_symbols = collect_unique_symbols(state.relocs.iter(), |r| { - r.r_type == RelocType::X86Tlsgd || r.r_type.is_tlsdesc() + r.r_type == RelocType::X86Tlsgd }); for sym in &gd_symbols { gd_got.insert(sym.clone(), cursor); @@ -421,7 +416,7 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti // TLS file-backed sections (.tdata) placed within RW segment for correct // PT_TLS p_offset. PT_TLS overlaps with PT_LOAD(RW) in the file. - let tls_start = if buckets.tls.is_empty() { cursor } else { align_up(cursor, TLS_ALIGN) }; + let tls_start = if buckets.tls.is_empty() { cursor } else { align_up(cursor, 64) }; let mut tls_cursor = tls_start; for &idx in &buckets.tls { if state.sections[idx].kind == SectionKind::TlsBss { continue; } @@ -456,33 +451,16 @@ pub(crate) fn layout_elf(state: &mut LinkState, base_addr: u64, entry_name: Opti let rw_end = align_up(cursor, PAGE_SIZE); - // Build PLT stub code, each an indirect jump through the import's GOT slot: - // x86-64 `jmp *[rip + offset]` (FF 25 disp32); AArch64 `adrp x16, slot; - // ldr x16, [x16, #lo12]; br x16`. + // Build PLT stub code: `jmp *[rip + offset]` (FF 25 xx xx xx xx) let mut plt = BTreeMap::new(); let mut plt_data = Vec::new(); for (i, sym) in dyn_syms.iter().enumerate() { - let stub_vaddr = plt_vaddr + i as u64 * plt_stub_size; + let stub_vaddr = plt_vaddr + i as u64 * PLT_STUB_SIZE; plt.insert(sym.clone(), stub_vaddr); - let slot = dyn_got[sym]; - match state.arch { - Arch::X86_64 => { - let rip = stub_vaddr + 6; - let offset = (slot as i64 - rip as i64) as i32; - plt_data.extend_from_slice(&[0xFF, 0x25]); - plt_data.extend_from_slice(&offset.to_le_bytes()); - } - Arch::Aarch64 => { - let pages = ((slot as i64 & !0xFFF) - (stub_vaddr as i64 & !0xFFF)) >> 12; - assert!((-(1 << 20)..(1 << 20)).contains(&pages), "a PLT stub cannot reach its GOT slot"); - let pages = pages as u32; - let adrp = 0x9000_0010 | ((pages & 3) << 29) | (((pages >> 2) & 0x7FFFF) << 5); - let ldr = 0xF940_0210 | ((((slot & 0xFFF) >> 3) as u32) << 10); - for insn in [adrp, ldr, 0xD61F_0200] { - plt_data.extend_from_slice(&insn.to_le_bytes()); - } - } - } + let rip = stub_vaddr + 6; + let offset = (dyn_got[sym] as i64 - rip as i64) as i32; + plt_data.extend_from_slice(&[0xFF, 0x25]); + plt_data.extend_from_slice(&offset.to_le_bytes()); } ElfLayout { @@ -746,7 +724,6 @@ pub(crate) fn emit_elf( let has_relocs = relocs.as_ref().is_some_and(|r| { !r.relatives.is_empty() || !r.glob_dats.is_empty() || !r.tpoff64s.is_empty() || !r.named_tpoff64s.is_empty() || !r.tpoff32s.is_empty() - || !r.tlsdescs.is_empty() || !r.named_tlsdescs.is_empty() }); let needs_dynamic = is_shared || has_dynamic_libs || (is_pie && (layout.init_array_size > 0 || layout.fini_array_size > 0 || has_relocs)); @@ -757,8 +734,7 @@ pub(crate) fn emit_elf( || relocs.is_some_and(|r| !r.glob_dats.is_empty()) || relocs.is_some_and(|r| !r.tpoff64s.is_empty()) || relocs.is_some_and(|r| !r.named_tpoff64s.is_empty()) - || relocs.is_some_and(|r| !r.tpoff32s.is_empty()) - || relocs.is_some_and(|r| !r.tlsdescs.is_empty() || !r.named_tlsdescs.is_empty()); + || relocs.is_some_and(|r| !r.tpoff32s.is_empty()); let file_rw_end = layout.rw_start + layout.rw_filesz; let mut buf = Vec::new(); @@ -795,7 +771,6 @@ pub(crate) fn emit_elf( .chain(relocs.named_tpoff64s.iter()) .chain(relocs.named_dtpmod64s.iter()) .chain(relocs.named_dtpoff64s.iter()) - .chain(relocs.named_tlsdescs.iter()) { if !sym_to_writer_idx.contains_key(sym_name) { let str_id = w.add_dynamic_string(sym_name.as_bytes()); @@ -831,7 +806,6 @@ pub(crate) fn emit_elf( .chain(relocs.named_tpoff64s.iter()) .chain(relocs.named_dtpmod64s.iter()) .chain(relocs.named_dtpoff64s.iter()) - .chain(relocs.named_tlsdescs.iter()) { if !sym_to_writer_idx.contains_key(sym_name) { let str_id = w.add_dynamic_string(sym_name.as_bytes()); @@ -950,7 +924,6 @@ pub(crate) fn emit_elf( + relocs.tpoff64s.len() + relocs.named_tpoff64s.len() + relocs.tpoff32s.len() + relocs.dtpmod64s.len() + relocs.dtpoff64s.len() + relocs.named_dtpmod64s.len() + relocs.named_dtpoff64s.len() - + relocs.tlsdescs.len() + relocs.named_tlsdescs.len() } else { 0 }; let rela_size = rela_count as u64 * 24; @@ -1045,10 +1018,7 @@ pub(crate) fn emit_elf( os_abi: 0, abi_version: 0, e_type, - e_machine: match state.arch { - Arch::X86_64 => elf::EM_X86_64, - Arch::Aarch64 => elf::EM_AARCH64, - }, + e_machine: elf::EM_X86_64, e_entry: entry, e_flags: 0, }).unwrap(); @@ -1083,7 +1053,7 @@ pub(crate) fn emit_elf( p_paddr: layout.tls_start, p_filesz: layout.tls_filesz, p_memsz: layout.tls_memsz, - p_align: TLS_ALIGN, + p_align: 64, }); } if has_eh_frame_hdr { @@ -1163,7 +1133,7 @@ pub(crate) fn emit_elf( // Static mode: fill GOT entries directly (GOT is before TLS in the layout) if is_static { let gottpoff_syms: HashSet = state.relocs.iter() - .filter(|r| r.r_type.is_gottprel()) + .filter(|r| r.r_type == RelocType::X86Gottpoff) .map(|r| r.target.clone()).collect(); let mut got_entries: Vec<_> = layout.got.iter().collect(); got_entries.sort_by_key(|(_, &vaddr)| vaddr); @@ -1171,7 +1141,7 @@ pub(crate) fn emit_elf( let sym_addr = resolve_symbol(state, sym_ref, None) .ok_or_else(|| LinkError::UndefinedSymbols(vec![sym_ref.name().to_string()]))?; let value = if gottpoff_syms.contains(sym_ref) { - tpoff(state.arch, sym_addr, layout.tls_start, layout.tls_memsz) as u64 + tpoff(sym_addr, layout.tls_start, layout.tls_memsz) as u64 } else { sym_addr }; let file_off = (got_vaddr - base) as usize; w.pad_until(file_off); @@ -1250,7 +1220,83 @@ pub(crate) fn emit_elf( // Shared library RELA (reserved before dynamic section, must be written here) if let Some(relocs) = relocs { if rela_count > 0 { - write_dyn_relocs(&mut w, state.arch, relocs, &sym_to_writer_idx); + w.write_align_relocation(); + for &(offset, addend) in &relocs.relatives { + w.write_relocation(true, &Rel { + r_offset: offset, + r_sym: 0, + r_type: elf::R_X86_64_RELATIVE, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.glob_dats { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_GLOB_DAT, + r_addend: 0, + }); + } + for &(got_vaddr, addend) in &relocs.tpoff64s { + w.write_relocation(true, &Rel { + r_offset: got_vaddr, + r_sym: 0, + r_type: elf::R_X86_64_TPOFF64, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.named_tpoff64s { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_TPOFF64, + r_addend: 0, + }); + } + for &(vaddr, addend) in &relocs.tpoff32s { + w.write_relocation(true, &Rel { + r_offset: vaddr, + r_sym: 0, + r_type: elf::R_X86_64_TPOFF32, + r_addend: addend, + }); + } + for &(got_vaddr, addend) in &relocs.dtpmod64s { + w.write_relocation(true, &Rel { + r_offset: got_vaddr, + r_sym: 0, + r_type: elf::R_X86_64_DTPMOD64, + r_addend: addend, + }); + } + for &(got_vaddr, addend) in &relocs.dtpoff64s { + w.write_relocation(true, &Rel { + r_offset: got_vaddr, + r_sym: 0, + r_type: elf::R_X86_64_DTPOFF64, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.named_dtpmod64s { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_DTPMOD64, + r_addend: 0, + }); + } + for (got_vaddr, sym_name) in &relocs.named_dtpoff64s { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_DTPOFF64, + r_addend: 0, + }); + } } } } @@ -1259,7 +1305,49 @@ pub(crate) fn emit_elf( // section so relocations are within the PT_LOAD segment for the dynamic area. if rela_before_dynamic { if let Some(relocs) = relocs { - write_dyn_relocs(&mut w, state.arch, relocs, &sym_to_writer_idx); + w.write_align_relocation(); + for &(offset, addend) in &relocs.relatives { + w.write_relocation(true, &Rel { + r_offset: offset, + r_sym: 0, + r_type: elf::R_X86_64_RELATIVE, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.glob_dats { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_GLOB_DAT, + r_addend: 0, + }); + } + for &(got_vaddr, addend) in &relocs.tpoff64s { + w.write_relocation(true, &Rel { + r_offset: got_vaddr, + r_sym: 0, + r_type: elf::R_X86_64_TPOFF64, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.named_tpoff64s { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_TPOFF64, + r_addend: 0, + }); + } + for &(vaddr, addend) in &relocs.tpoff32s { + w.write_relocation(true, &Rel { + r_offset: vaddr, + r_sym: 0, + r_type: elf::R_X86_64_TPOFF32, + r_addend: addend, + }); + } } } @@ -1303,7 +1391,49 @@ pub(crate) fn emit_elf( // Relocations (PIE / non-shared — shared writes RELA before dynamic section) if !is_shared && !rela_before_dynamic { if let Some(relocs) = relocs { - write_dyn_relocs(&mut w, state.arch, relocs, &sym_to_writer_idx); + w.write_align_relocation(); + for &(offset, addend) in &relocs.relatives { + w.write_relocation(true, &Rel { + r_offset: offset, + r_sym: 0, + r_type: elf::R_X86_64_RELATIVE, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.glob_dats { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_GLOB_DAT, + r_addend: 0, + }); + } + for &(got_vaddr, addend) in &relocs.tpoff64s { + w.write_relocation(true, &Rel { + r_offset: got_vaddr, + r_sym: 0, + r_type: elf::R_X86_64_TPOFF64, + r_addend: addend, + }); + } + for (got_vaddr, sym_name) in &relocs.named_tpoff64s { + let sym_idx = sym_to_writer_idx[sym_name]; + w.write_relocation(true, &Rel { + r_offset: *got_vaddr, + r_sym: sym_idx.0, + r_type: elf::R_X86_64_TPOFF64, + r_addend: 0, + }); + } + for &(vaddr, addend) in &relocs.tpoff32s { + w.write_relocation(true, &Rel { + r_offset: vaddr, + r_sym: 0, + r_type: elf::R_X86_64_TPOFF32, + r_addend: addend, + }); + } } } @@ -1415,84 +1545,3 @@ pub(crate) fn emit_elf( Ok(buf) } - -/// What a dynamic relocation asks the loader for; each machine's psABI gives -/// it a number ([`dyn_reloc_type`]). -#[derive(Clone, Copy)] -enum DynReloc { - Relative, - GlobDat, - TpOff64, - TpOff32, - DtpMod64, - DtpOff64, - TlsDesc, -} - -fn dyn_reloc_type(arch: Arch, kind: DynReloc) -> u32 { - match (arch, kind) { - (Arch::X86_64, DynReloc::Relative) => elf::R_X86_64_RELATIVE, - (Arch::X86_64, DynReloc::GlobDat) => elf::R_X86_64_GLOB_DAT, - (Arch::X86_64, DynReloc::TpOff64) => elf::R_X86_64_TPOFF64, - (Arch::X86_64, DynReloc::TpOff32) => elf::R_X86_64_TPOFF32, - (Arch::X86_64, DynReloc::DtpMod64) => elf::R_X86_64_DTPMOD64, - (Arch::X86_64, DynReloc::DtpOff64) => elf::R_X86_64_DTPOFF64, - (Arch::Aarch64, DynReloc::Relative) => elf::R_AARCH64_RELATIVE, - (Arch::Aarch64, DynReloc::GlobDat) => elf::R_AARCH64_GLOB_DAT, - (Arch::Aarch64, DynReloc::TpOff64) => elf::R_AARCH64_TLS_TPREL, - (Arch::Aarch64, DynReloc::DtpMod64) => elf::R_AARCH64_TLS_DTPMOD, - (Arch::Aarch64, DynReloc::DtpOff64) => elf::R_AARCH64_TLS_DTPREL, - (Arch::Aarch64, DynReloc::TlsDesc) => elf::R_AARCH64_TLSDESC, - // Only an x86-64 `TPOFF32` input produces one. - (Arch::Aarch64, DynReloc::TpOff32) => panic!("an AArch64 link produced a 32-bit TP offset"), - // Only an AArch64 descriptor sequence produces one. - (Arch::X86_64, DynReloc::TlsDesc) => panic!("an x86-64 link produced a TLS descriptor"), - } -} - -/// Every dynamic relocation `relocs` holds, in the one order every mode writes. -fn write_dyn_relocs( - w: &mut Writer, - arch: Arch, - relocs: &RelocOutput, - sym_to_writer_idx: &HashMap, -) { - w.write_align_relocation(); - let mut write = |r_offset: u64, r_sym: u32, kind: DynReloc, r_addend: i64| { - w.write_relocation(true, &Rel { r_offset, r_sym, r_type: dyn_reloc_type(arch, kind), r_addend }); - }; - let named = |name: &String| sym_to_writer_idx[name].0; - for &(offset, addend) in &relocs.relatives { - write(offset, 0, DynReloc::Relative, addend); - } - for (got_vaddr, name) in &relocs.glob_dats { - write(*got_vaddr, named(name), DynReloc::GlobDat, 0); - } - for &(got_vaddr, addend) in &relocs.tpoff64s { - write(got_vaddr, 0, DynReloc::TpOff64, addend); - } - for (got_vaddr, name) in &relocs.named_tpoff64s { - write(*got_vaddr, named(name), DynReloc::TpOff64, 0); - } - for &(vaddr, addend) in &relocs.tpoff32s { - write(vaddr, 0, DynReloc::TpOff32, addend); - } - for &(got_vaddr, addend) in &relocs.dtpmod64s { - write(got_vaddr, 0, DynReloc::DtpMod64, addend); - } - for &(got_vaddr, addend) in &relocs.dtpoff64s { - write(got_vaddr, 0, DynReloc::DtpOff64, addend); - } - for (got_vaddr, name) in &relocs.named_dtpmod64s { - write(*got_vaddr, named(name), DynReloc::DtpMod64, 0); - } - for (got_vaddr, name) in &relocs.named_dtpoff64s { - write(*got_vaddr, named(name), DynReloc::DtpOff64, 0); - } - for &(pair, addend) in &relocs.tlsdescs { - write(pair, 0, DynReloc::TlsDesc, addend); - } - for (pair, name) in &relocs.named_tlsdescs { - write(*pair, named(name), DynReloc::TlsDesc, 0); - } -} diff --git a/toyos-ld/src/emit_pe.rs b/toyos-ld/src/emit_pe.rs index e045b8d7a20..87e964bfcea 100644 --- a/toyos-ld/src/emit_pe.rs +++ b/toyos-ld/src/emit_pe.rs @@ -1,4 +1,4 @@ -use crate::collect::{collect_unique_symbols, Arch, LinkState, RelocType, SymbolDef, SymbolRef}; +use crate::collect::{collect_unique_symbols, LinkState, RelocType, SymbolDef, SymbolRef}; use crate::reloc::resolve_symbol; use crate::{align_up, classify_sections, LinkError}; use object::write::pe::{NtHeaders, Writer}; @@ -140,10 +140,7 @@ pub(crate) fn emit_pe_bytes( w.write_empty_dos_header().unwrap(); w.write_nt_headers(NtHeaders { - machine: match state.arch { - Arch::X86_64 => pe::IMAGE_FILE_MACHINE_AMD64, - Arch::Aarch64 => pe::IMAGE_FILE_MACHINE_ARM64, - }, + machine: pe::IMAGE_FILE_MACHINE_AMD64, time_date_stamp: 0, characteristics: pe::IMAGE_FILE_EXECUTABLE_IMAGE | pe::IMAGE_FILE_LARGE_ADDRESS_AWARE, major_linker_version: 0, diff --git a/toyos-ld/src/main.rs b/toyos-ld/src/main.rs index 51af97a436a..040e170241f 100644 --- a/toyos-ld/src/main.rs +++ b/toyos-ld/src/main.rs @@ -34,18 +34,6 @@ fn main() { match result { Ok(output_bytes) => { - if let Some(declared) = args.pe_machine { - // `link_pe` wrote a PE header whose `e_lfanew` is at 0x3C and - // whose `Machine` follows the four-byte signature. - let pe_at = u32::from_le_bytes(output_bytes[0x3C..0x40].try_into().unwrap()) as usize; - let written = u16::from_le_bytes([output_bytes[pe_at + 4], output_bytes[pe_at + 5]]); - if written != declared { - eprintln!( - "toyos-ld: /MACHINE declares {declared:#06x} and the objects are {written:#06x}" - ); - process::exit(1); - } - } // Write to a temp file then atomically rename. On macOS, overwriting // a signed binary in-place leaves a stale code-signature cache on the // old inode, causing the kernel to hang the next launch in _dyld_start. @@ -181,8 +169,6 @@ struct Args { inputs: Vec, lib_paths: Vec, libs: Vec, - /// The PE machine `/MACHINE:` declared, checked against the output's. - pe_machine: Option, } fn parse_args() -> Args { @@ -201,7 +187,6 @@ fn parse_args() -> Args { let mut inputs = Vec::new(); let mut lib_paths = Vec::new(); let mut libs = Vec::new(); - let mut pe_machine = None; let mut i = 1; while i < argv.len() { @@ -247,10 +232,6 @@ fn parse_args() -> Args { s if s.to_ascii_uppercase().starts_with("/LIBPATH:") => { lib_paths.push(PathBuf::from(&s[9..])); } - s if s.to_ascii_uppercase().starts_with("/MACHINE:") => { - pe_machine = Some(parse_pe_machine(&s[9..])); - pe = true; - } s if s.starts_with('/') && !s[1..].contains('/') && s.as_bytes().get(1).is_some_and(|c| c.is_ascii_uppercase()) => { // Ignore other MSVC flags (/NOLOGO, /DEBUG, /INCREMENTAL:NO, etc.) } @@ -283,21 +264,7 @@ fn parse_args() -> Args { OutputFormat::Pie }; - Args { output, entry, format, gc_sections, build_id, map_file, inputs, lib_paths, libs, pe_machine } -} - -/// `/MACHINE:`'s value as the PE `Machine` field it declares (PE/COFF -/// specification, "Machine Types"). The output's machine is the objects', and -/// this is checked against it rather than obeyed. -fn parse_pe_machine(val: &str) -> u16 { - match val.to_ascii_lowercase().as_str() { - "x64" => 0x8664, - "arm64" => 0xAA64, - _ => { - eprintln!("toyos-ld: /MACHINE:{val} is not a machine this linker writes"); - process::exit(1); - } - } + Args { output, entry, format, gc_sections, build_id, map_file, inputs, lib_paths, libs } } fn parse_pe_subsystem(val: &str) -> PeSubsystem { diff --git a/toyos-ld/src/reloc.rs b/toyos-ld/src/reloc.rs index d99de1b7002..e0e703a1908 100644 --- a/toyos-ld/src/reloc.rs +++ b/toyos-ld/src/reloc.rs @@ -1,4 +1,4 @@ -use crate::collect::{Arch, InputReloc, LinkState, RelocType, SectionIdx, SectionKind, SymbolDef, SymbolRef}; +use crate::collect::{InputReloc, LinkState, RelocType, SectionIdx, SectionKind, SymbolDef, SymbolRef}; use crate::emit_pe::PeLayout; use crate::LinkError; use std::collections::{BTreeMap, HashSet}; @@ -32,13 +32,6 @@ pub(crate) struct RelocOutput { pub(crate) named_dtpmod64s: Vec<(u64, String)>, /// Named R_X86_64_DTPOFF64 for cross-library TLS: (GOT slot vaddr, symbol name). pub(crate) named_dtpoff64s: Vec<(u64, String)>, - /// R_AARCH64_TLSDESC runtime relocations for a shared library's own TLS: - /// (descriptor pair vaddr, the symbol's offset within the module's TLS - /// segment). The loader writes the resolver and its argument. - pub(crate) tlsdescs: Vec<(u64, i64)>, - /// Named R_AARCH64_TLSDESC for cross-library TLS: (descriptor pair vaddr, - /// symbol name). - pub(crate) named_tlsdescs: Vec<(u64, String)>, } /// Resolve a symbol to its virtual address. @@ -90,23 +83,10 @@ pub(crate) fn resolve_symbol( } } -/// The alignment of every TLS segment this linker lays out: its start in the -/// image, its `PT_TLS` `p_align`, and so the gap variant I leaves after the TCB. -pub(crate) const TLS_ALIGN: u64 = 64; - -/// A TLS symbol's offset from the thread pointer, in `arch`'s TLS variant. -/// -/// x86-64, variant II: TP points to the end of the TLS block, so -/// TPOFF = symbol_vaddr - (tls_start + tls_memsz). -/// -/// AArch64, variant I: TP points to a two-word TCB, and the executable's TLS -/// block follows it at the first offset the segment's alignment allows, so -/// TPOFF = align_up(16, TLS_ALIGN) + (symbol_vaddr - tls_start). -pub(crate) fn tpoff(arch: Arch, sym_addr: u64, tls_start: u64, tls_memsz: u64) -> i64 { - match arch { - Arch::X86_64 => sym_addr as i64 - (tls_start as i64 + tls_memsz as i64), - Arch::Aarch64 => crate::align_up(16, TLS_ALIGN) as i64 + (sym_addr as i64 - tls_start as i64), - } +/// x86-64 Variant II: TP points to end of TLS block. +/// TPOFF = symbol_vaddr - (tls_start + tls_memsz) +pub(crate) fn tpoff(sym_addr: u64, tls_start: u64, tls_memsz: u64) -> i64 { + sym_addr as i64 - (tls_start as i64 + tls_memsz as i64) } fn check_i32(value: i64, reloc: &InputReloc) -> Result<(), LinkError> { @@ -357,7 +337,7 @@ pub(crate) fn apply_relocs( 0x48, 0x8d, 0x80, 0x00, 0x00, 0x00, 0x00, // lea 0(%rax),%rax ]; write_bytes(state, reloc.section, reloc.offset - 4, &inst); - let tp_value = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz); + let tp_value = tpoff(sym_addr, params.tls_start, params.tls_memsz); check_i32(tp_value, reloc)?; write_i32(state, reloc.section, reloc.offset + 8, tp_value as i32); relaxed_calls.insert((reloc.section, reloc.offset + 8)); @@ -417,7 +397,7 @@ pub(crate) fn apply_relocs( check_i32(value, reloc)?; write_i32(state, reloc.section, reloc.offset, value as i32); } else { - let value = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; + let value = tpoff(sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; check_i32(value, reloc)?; write_i32(state, reloc.section, reloc.offset, value as i32); } @@ -430,9 +410,7 @@ pub(crate) fn apply_relocs( | RelocType::X86Tpoff32 | RelocType::X86Gottpoff | RelocType::X86Tlv | RelocType::Aarch64Abs64 | RelocType::Aarch64Abs32 - | RelocType::Aarch64Prel32 | RelocType::Aarch64Prel64 - | RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64AdrPrelLo21 - | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 + | RelocType::Aarch64Prel32 | RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 | RelocType::Aarch64AdrPrelPgHi21 | RelocType::Aarch64AddAbsLo12Nc | RelocType::Aarch64Ldst8AbsLo12Nc | RelocType::Aarch64Ldst16AbsLo12Nc @@ -443,11 +421,7 @@ pub(crate) fn apply_relocs( | RelocType::Aarch64AdrGotPage | RelocType::Aarch64Ld64GotLo12Nc | RelocType::Aarch64GotPcrel32 | RelocType::Aarch64TlvpLoadPage21 - | RelocType::Aarch64TlvpLoadPageoff12 - | RelocType::Aarch64TlsdescAdrPage21 | RelocType::Aarch64TlsdescLd64Lo12 - | RelocType::Aarch64TlsdescAddLo12 | RelocType::Aarch64TlsdescCall - | RelocType::Aarch64TlsieAdrGottprelPage21 | RelocType::Aarch64TlsieLd64GottprelLo12Nc - | RelocType::Aarch64TlsleAddTprelHi12 | RelocType::Aarch64TlsleAddTprelLo12Nc => {} + | RelocType::Aarch64TlvpLoadPageoff12 => {} } } @@ -476,11 +450,6 @@ pub(crate) fn apply_relocs( continue; } - if is_aarch64_tls(reloc.r_type) { - apply_aarch64_tls(state, reloc, reloc_vaddr, params)?; - continue; - } - let sym_addr = match resolve_symbol(state, &reloc.target, params.plt) { Some(a) => a, None => { @@ -497,18 +466,12 @@ pub(crate) fn apply_relocs( write_i32_data(data, reloc.offset, 0); tpoff32_entries.push((reloc_vaddr, sym_tls_offset)); } else { - let value = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; + let value = tpoff(sym_addr, params.tls_start, params.tls_memsz) + reloc.addend; check_i32(value, reloc)?; write_i32_data(data, reloc.offset, value as i32); } } RelocType::X86Gottpoff => unreachable!("handled above"), - RelocType::Aarch64TlsdescAdrPage21 | RelocType::Aarch64TlsdescLd64Lo12 - | RelocType::Aarch64TlsdescAddLo12 | RelocType::Aarch64TlsdescCall - | RelocType::Aarch64TlsieAdrGottprelPage21 | RelocType::Aarch64TlsieLd64GottprelLo12Nc - | RelocType::Aarch64TlsleAddTprelHi12 | RelocType::Aarch64TlsleAddTprelLo12Nc => { - unreachable!("handled above") - } RelocType::X86Tlsgd | RelocType::X86Tlsld | RelocType::X86Dtpoff32 => { unreachable!("handled in pass 1") } @@ -524,9 +487,7 @@ pub(crate) fn apply_relocs( } } RelocType::Aarch64Abs64 | RelocType::Aarch64Abs32 - | RelocType::Aarch64Prel32 | RelocType::Aarch64Prel64 - | RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64AdrPrelLo21 - | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 + | RelocType::Aarch64Prel32 | RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 | RelocType::Aarch64AdrPrelPgHi21 | RelocType::Aarch64AddAbsLo12Nc | RelocType::Aarch64Ldst8AbsLo12Nc | RelocType::Aarch64Ldst16AbsLo12Nc @@ -539,7 +500,7 @@ pub(crate) fn apply_relocs( | RelocType::Aarch64TlvpLoadPage21 | RelocType::Aarch64TlvpLoadPageoff12 => { let is_abs = - apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, params.got, params.dyn_got)?; + apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, params.got)?; if is_abs && params.record_relatives { relatives.push((reloc_vaddr, sym_addr as i64 + reloc.addend)); } @@ -552,7 +513,7 @@ pub(crate) fn apply_relocs( if params.record_relatives { let gottpoff_syms: HashSet = relocs .iter() - .filter(|r| r.r_type.is_gottprel() || (r.r_type.is_tlsdesc() && !params.is_shared)) + .filter(|r| r.r_type == RelocType::X86Gottpoff) .map(|r| r.target.clone()) .collect(); @@ -582,7 +543,7 @@ pub(crate) fn apply_relocs( } else { // PIE mode: write raw tpoff directly — NOT as RELATIVE (RELATIVE // would add the load base, corrupting the TP-relative offset). - let tp = tpoff(state.arch, sym_addr, params.tls_start, params.tls_memsz); + let tp = tpoff(sym_addr, params.tls_start, params.tls_memsz); tpoff_fills.push((got_vaddr, tp)); } } else { @@ -591,25 +552,6 @@ pub(crate) fn apply_relocs( } } - // A shared library's TLS descriptors: one pair per symbol, written by the - // loader. - let mut tlsdescs = Vec::new(); - let mut named_tlsdescs = Vec::new(); - if params.is_shared { - let described: std::collections::BTreeSet<&SymbolRef> = - relocs.iter().filter(|r| r.r_type.is_tlsdesc()).map(|r| &r.target).collect(); - for sym_ref in described { - let pair = params.gd_got[sym_ref]; - if matches!(state.globals.get(sym_ref.name()), Some(SymbolDef::Dynamic { .. })) { - named_tlsdescs.push((pair, sym_ref.name().to_string())); - } else { - let sym_addr = resolve_symbol(state, sym_ref, None) - .ok_or_else(|| LinkError::UndefinedSymbols(vec![sym_ref.name().to_string()]))?; - tlsdescs.push((pair, sym_addr as i64 - params.tls_start as i64)); - } - } - } - // Collect dynamic GOT entries as GLOB_DAT relocations (resolved at load time) let mut glob_dats = Vec::new(); for (sym_ref, &got_vaddr) in params.dyn_got { @@ -633,159 +575,11 @@ pub(crate) fn apply_relocs( dtpoff64s: dtpoff64_entries, named_dtpmod64s: named_dtpmod64_entries, named_dtpoff64s: named_dtpoff64_entries, - tlsdescs, - named_tlsdescs, }) } // ── AArch64 relocation helpers ─────────────────────────────────────────── -/// `nop`. -const A64_NOP: u32 = 0xd503_201f; -/// `movz x0, #0, lsl #16`, its immediate in bits 5..21. -const A64_MOVZ_X0_LSL16: u32 = 0xd2a0_0000; -/// `movk x0, #0`, its immediate in bits 5..21. -const A64_MOVK_X0: u32 = 0xf280_0000; -/// `ldr x0, [x0, #0]`, its scaled immediate in bits 10..22. -const A64_LDR_X0_X0: u32 = 0xf940_0000; - -fn is_aarch64_tls(r_type: RelocType) -> bool { - matches!( - r_type, - RelocType::Aarch64TlsdescAdrPage21 - | RelocType::Aarch64TlsdescLd64Lo12 - | RelocType::Aarch64TlsdescAddLo12 - | RelocType::Aarch64TlsdescCall - | RelocType::Aarch64TlsieAdrGottprelPage21 - | RelocType::Aarch64TlsieLd64GottprelLo12Nc - | RelocType::Aarch64TlsleAddTprelHi12 - | RelocType::Aarch64TlsleAddTprelLo12Nc - ) -} - -/// The page delta an `adrp` at `pc` needs to reach `target`'s page. -fn adrp_page_delta(target: u64, pc: u64, reloc: &InputReloc) -> Result { - let delta = ((target as i64) & !0xFFF) - ((pc as i64) & !0xFFF); - let pages = delta >> 12; - if !(-(1 << 20)..(1 << 20)).contains(&pages) { - return Err(LinkError::RelocationOverflow { - reloc_type: reloc.r_type, symbol: reloc.target.name().to_string(), value: pages, - }); - } - Ok(pages as i32) -} - -/// Apply one AArch64 TLS relocation. -/// -/// A TLS descriptor sequence (`adrp x0; ldr x1, [x0]; add x0, x0; blr x1`, -/// the result the variable's offset from TPIDR_EL0) is kept in a shared -/// library, pointed at the symbol's descriptor pair, which an -/// R_AARCH64_TLSDESC asks the loader to fill; in an executable it is relaxed, -/// as the AArch64 ELF ABI allows and as LLD does: to initial-exec (`adrp x0; -/// ldr x0, [x0]; nop; nop`, the GOT slot holding the offset) when another -/// module defines the symbol, and otherwise to local-exec (`movz x0; movk x0; -/// nop; nop`, the offset itself). -fn apply_aarch64_tls( - state: &mut LinkState, - reloc: &InputReloc, - reloc_vaddr: u64, - params: &ElfRelocParams, -) -> Result<(), LinkError> { - let name = reloc.target.name().to_string(); - let undefined = || LinkError::UndefinedSymbols(vec![name.clone()]); - let unsupported = || LinkError::UnsupportedRelocation { reloc_type: reloc.r_type, symbol: name.clone() }; - let dynamic = matches!(state.globals.get(reloc.target.name()), Some(SymbolDef::Dynamic { .. })); - let tp_offset = |state: &LinkState| -> Result { - let sym_addr = resolve_symbol(state, &reloc.target, None).ok_or_else(undefined)?; - Ok(tpoff(Arch::Aarch64, sym_addr, params.tls_start, params.tls_memsz) + reloc.addend) - }; - // A GOT slot or descriptor pair is one per symbol, so it cannot carry an - // addend of its own. - let slot_of = |map: &BTreeMap| -> Result { - if reloc.addend != 0 { - return Err(unsupported()); - } - let slot = *map.get(&reloc.target).ok_or_else(undefined)?; - assert!(slot % 8 == 0, "a TLS GOT slot at {slot:#x} is not 8-byte aligned"); - Ok(slot) - }; - let write = |state: &mut LinkState, insn: u32| write_u32(state, reloc.section, reloc.offset, insn); - - match reloc.r_type { - RelocType::Aarch64TlsdescAdrPage21 - | RelocType::Aarch64TlsdescLd64Lo12 - | RelocType::Aarch64TlsdescAddLo12 - | RelocType::Aarch64TlsdescCall => { - if params.is_shared { - let pair = slot_of(params.gd_got)?; - let sec = &mut state.sections[reloc.section].data; - match reloc.r_type { - RelocType::Aarch64TlsdescAdrPage21 => { - patch_aarch64_adrp_data(sec, reloc.offset, adrp_page_delta(pair, reloc_vaddr, reloc)?) - } - RelocType::Aarch64TlsdescLd64Lo12 => { - patch_aarch64_ldr_imm12_data(sec, reloc.offset, (pair & 0xFFF) as u32, 3) - } - RelocType::Aarch64TlsdescAddLo12 => { - patch_aarch64_add_imm12_data(sec, reloc.offset, (pair & 0xFFF) as u32) - } - _ => {} - } - } else if dynamic { - let slot = slot_of(params.got)?; - match reloc.r_type { - RelocType::Aarch64TlsdescAdrPage21 => { - let sec = &mut state.sections[reloc.section].data; - patch_aarch64_adrp_data(sec, reloc.offset, adrp_page_delta(slot, reloc_vaddr, reloc)?) - } - RelocType::Aarch64TlsdescLd64Lo12 => { - write(state, A64_LDR_X0_X0 | ((((slot & 0xFFF) >> 3) as u32) << 10)) - } - _ => write(state, A64_NOP), - } - } else { - let offset = tp_offset(state)?; - if !(0..=u32::MAX as i64).contains(&offset) { - return Err(LinkError::RelocationOverflow { reloc_type: reloc.r_type, symbol: name, value: offset }); - } - match reloc.r_type { - RelocType::Aarch64TlsdescAdrPage21 => { - write(state, A64_MOVZ_X0_LSL16 | ((((offset >> 16) & 0xFFFF) as u32) << 5)) - } - RelocType::Aarch64TlsdescLd64Lo12 => write(state, A64_MOVK_X0 | (((offset & 0xFFFF) as u32) << 5)), - _ => write(state, A64_NOP), - } - } - } - RelocType::Aarch64TlsieAdrGottprelPage21 => { - let slot = slot_of(params.got)?; - let sec = &mut state.sections[reloc.section].data; - patch_aarch64_adrp_data(sec, reloc.offset, adrp_page_delta(slot, reloc_vaddr, reloc)?); - } - RelocType::Aarch64TlsieLd64GottprelLo12Nc => { - let slot = slot_of(params.got)?; - let sec = &mut state.sections[reloc.section].data; - patch_aarch64_ldr_imm12_data(sec, reloc.offset, (slot & 0xFFF) as u32, 3); - } - RelocType::Aarch64TlsleAddTprelHi12 | RelocType::Aarch64TlsleAddTprelLo12Nc => { - // Local-exec names an offset from this module's thread pointer, - // which only the executable has. - if params.is_shared || dynamic { - return Err(unsupported()); - } - let offset = tp_offset(state)?; - if !(0..1 << 24).contains(&offset) { - return Err(LinkError::RelocationOverflow { reloc_type: reloc.r_type, symbol: name, value: offset }); - } - let imm = if reloc.r_type == RelocType::Aarch64TlsleAddTprelHi12 { offset >> 12 } else { offset } & 0xFFF; - let sec = &mut state.sections[reloc.section].data; - patch_aarch64_add_imm12_data(sec, reloc.offset, imm as u32); - } - _ => unreachable!("not an AArch64 TLS relocation: {}", reloc.r_type), - } - Ok(()) -} - /// Apply a single AArch64 relocation to section data. Returns `true` if it /// produced an absolute reference that needs a Mach-O rebase entry. fn apply_one_reloc_aarch64( @@ -794,17 +588,7 @@ fn apply_one_reloc_aarch64( sym_addr: u64, reloc_vaddr: u64, got: &BTreeMap, - dyn_got: &BTreeMap, ) -> Result { - // A dynamic import's slot is in `dyn_got`, filled by GLOB_DAT; every other - // symbol's in `got`. - let slot = || { - got.get(&reloc.target) - .or_else(|| dyn_got.get(&reloc.target)) - .or_else(|| dyn_got.get(&SymbolRef::Global(reloc.target.name().to_string()))) - .copied() - .ok_or_else(|| LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()])) - }; match reloc.r_type { RelocType::Aarch64Abs64 => { let value = (sym_addr as i64 + reloc.addend) as u64; @@ -821,36 +605,6 @@ fn apply_one_reloc_aarch64( write_i32_data(data, reloc.offset, value as i32); Ok(false) } - RelocType::Aarch64Prel64 => { - let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; - write_u64_data(data, reloc.offset, value as u64); - Ok(false) - } - RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 => { - // A word offset in bits 5.., 19 bits wide for a literal load and a - // conditional branch, 14 for a test-and-branch. - let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; - let bits = if reloc.r_type == RelocType::Aarch64Tstbr14 { 14 } else { 19 }; - let words = value >> 2; - if value & 3 != 0 || !(-(1 << (bits - 1))..(1 << (bits - 1))).contains(&words) { - return Err(LinkError::RelocationOverflow { - reloc_type: reloc.r_type, symbol: reloc.target.name().to_string(), value, - }); - } - let mask = (1u32 << bits) - 1; - modify_insn_data(data, reloc.offset, |insn| (insn & !(mask << 5)) | (((words as u32) & mask) << 5)); - Ok(false) - } - RelocType::Aarch64AdrPrelLo21 => { - let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; - if !(-(1 << 20)..(1 << 20)).contains(&value) { - return Err(LinkError::RelocationOverflow { - reloc_type: reloc.r_type, symbol: reloc.target.name().to_string(), value, - }); - } - patch_aarch64_adrp_data(data, reloc.offset, value as i32); - Ok(false) - } RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 => { let value = sym_addr as i64 + reloc.addend - reloc_vaddr as i64; let imm26 = value >> 2; @@ -925,7 +679,9 @@ fn apply_one_reloc_aarch64( Ok(false) } RelocType::Aarch64AdrGotPage => { - let got_slot = slot()?; + let got_slot = *got.get(&reloc.target).ok_or_else(|| { + LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()]) + })?; let sym_page = got_slot as i64 & !0xFFF; let pc_page = reloc_vaddr as i64 & !0xFFF; let page_delta = (sym_page - pc_page) >> 12; @@ -938,7 +694,9 @@ fn apply_one_reloc_aarch64( Ok(false) } RelocType::Aarch64Ld64GotLo12Nc => { - let got_slot = slot()?; + let got_slot = *got.get(&reloc.target).ok_or_else(|| { + LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()]) + })?; let value = (got_slot & 0xFFF) as u32; patch_aarch64_ldr_imm12_data(data, reloc.offset, value, 3); Ok(false) @@ -966,7 +724,9 @@ fn apply_one_reloc_aarch64( Ok(false) } RelocType::Aarch64GotPcrel32 => { - let got_slot = slot()?; + let got_slot = *got.get(&reloc.target).ok_or_else(|| { + LinkError::UndefinedSymbols(vec![reloc.target.name().to_string()]) + })?; let value = got_slot as i64 + reloc.addend - reloc_vaddr as i64; check_i32(value, reloc)?; write_i32_data(data, reloc.offset, value as i32); @@ -1130,9 +890,7 @@ pub(crate) fn apply_relocs_macho( let is_abs = match reloc.r_type { // AArch64 relocations RelocType::Aarch64Abs64 | RelocType::Aarch64Abs32 - | RelocType::Aarch64Prel32 | RelocType::Aarch64Prel64 - | RelocType::Aarch64LdPrelLo19 | RelocType::Aarch64AdrPrelLo21 - | RelocType::Aarch64Condbr19 | RelocType::Aarch64Tstbr14 + | RelocType::Aarch64Prel32 | RelocType::Aarch64Call26 | RelocType::Aarch64Jump26 | RelocType::Aarch64AdrPrelPgHi21 | RelocType::Aarch64AddAbsLo12Nc | RelocType::Aarch64Ldst8AbsLo12Nc | RelocType::Aarch64Ldst16AbsLo12Nc @@ -1144,7 +902,7 @@ pub(crate) fn apply_relocs_macho( | RelocType::Aarch64GotPcrel32 | RelocType::Aarch64TlvpLoadPage21 | RelocType::Aarch64TlvpLoadPageoff12 => { - apply_one_reloc_aarch64(&mut state.sections[reloc.section].data, reloc, sym_addr, reloc_vaddr, params.got, &BTreeMap::new())? + apply_one_reloc_aarch64(&mut state.sections[reloc.section].data, reloc, sym_addr, reloc_vaddr, params.got)? } // x86-64 relocations RelocType::X86_64 @@ -1265,12 +1023,7 @@ pub(crate) fn apply_relocs_pe( } }; - let arch = state.arch; - let data = &mut state.sections[reloc.section].data; - let is_abs = match arch { - Arch::X86_64 => apply_one_reloc_x86(data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?, - Arch::Aarch64 => apply_one_reloc_aarch64(data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?, - }; + let is_abs = apply_one_reloc_x86(&mut state.sections[reloc.section].data, reloc, sym_addr, reloc_vaddr, &layout.got, &BTreeMap::new())?; if is_abs { abs_fixups.push(reloc_vaddr as u32); } diff --git a/toyos-ld/tests/common/mod.rs b/toyos-ld/tests/common/mod.rs index 6d6bab70a3a..e36e10c06b1 100644 --- a/toyos-ld/tests/common/mod.rs +++ b/toyos-ld/tests/common/mod.rs @@ -34,24 +34,9 @@ pub struct ObjBuilder { impl ObjBuilder { pub fn new() -> Self { - Self::for_machine(BinaryFormat::Elf, Architecture::X86_64) - } - - pub fn for_machine(format: BinaryFormat, arch: Architecture) -> Self { - ObjBuilder { obj: Object::new(format, arch, Endianness::Little) } - } - - /// Add a relocation of `flags` against `symbol` at `offset` in `section`'s bytes. - pub fn reloc( - &mut self, - section: StandardSection, - offset: u64, - symbol: object::write::SymbolId, - addend: i64, - flags: RelocationFlags, - ) { - let section = self.obj.section_id(section); - self.obj.add_relocation(section, Relocation { offset, symbol, addend, flags }).unwrap(); + ObjBuilder { + obj: Object::new(BinaryFormat::Elf, Architecture::X86_64, Endianness::Little), + } } pub fn text(&mut self, name: &str, code: &[u8], scope: SymbolScope) -> object::write::SymbolId { @@ -84,22 +69,6 @@ impl ObjBuilder { }) } - /// A thread-local variable with initial bytes, in `.tdata`. - pub fn tls(&mut self, name: &str, bytes: &[u8], scope: SymbolScope) -> object::write::SymbolId { - let section = self.obj.section_id(StandardSection::Tls); - let offset = self.obj.append_section_data(section, bytes, 8); - self.obj.add_symbol(Symbol { - name: name.as_bytes().to_vec(), - value: offset, - size: bytes.len() as u64, - kind: SymbolKind::Tls, - scope, - weak: false, - section: SymbolSection::Section(section), - flags: SymbolFlags::None, - }) - } - pub fn undefined(&mut self, name: &str, kind: SymbolKind) -> object::write::SymbolId { self.obj.add_symbol(Symbol { name: name.as_bytes().to_vec(), diff --git a/toyos-ld/tests/machines.rs b/toyos-ld/tests/machines.rs deleted file mode 100644 index 75e9de6f5b6..00000000000 --- a/toyos-ld/tests/machines.rs +++ /dev/null @@ -1,192 +0,0 @@ -//! One linker, two machines: the machine every input names is the machine the -//! output declares, and every number in the output that means something only -//! to one machine — `e_machine`, a dynamic relocation's type, a PE header's -//! machine — is that machine's. The outputs are read back by the `object` -//! crate, a reader this linker does not share code with. - -mod common; - -use common::{Case, ObjBuilder, RET}; -use object::read::elf::{ElfFile64, FileHeader as _}; -use object::read::pe::PeFile64; -use object::write::StandardSection; -use object::{elf, pe, Architecture, BinaryFormat, Object as _, ObjectSection as _, ObjectSymbol as _, RelocationFlags, SymbolScope}; - -const ADRP_X0: u32 = 0x9000_0000; -const ADD_X0_X0: u32 = 0x9100_0000; -const AARCH64_RET: u32 = 0xd65f_03c0; -const AARCH64_BL: u32 = 0x9400_0000; - -fn words(insns: &[u32]) -> Vec { - insns.iter().flat_map(|i| i.to_le_bytes()).collect() -} - -/// `_start` takes `target`'s address PC-relatively, and `ptr` holds it as an -/// absolute pointer: one instruction pair the linker resolves and one word the -/// loader must rebase. -fn aarch64_elf_program() -> Vec { - let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - let target = b.data("target", &[7u8; 8], SymbolScope::Linkage); - let start = b.text("_start", &words(&[ADRP_X0, ADD_X0_X0, AARCH64_RET]), SymbolScope::Linkage); - let at = b.symbol_offset(start); - b.reloc(StandardSection::Text, at, target, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ADR_PREL_PG_HI21 }); - b.reloc(StandardSection::Text, at + 4, target, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ADD_ABS_LO12_NC }); - let ptr = b.data("ptr", &[0u8; 8], SymbolScope::Linkage); - let ptr_at = b.symbol_offset(ptr); - b.reloc(StandardSection::Data, ptr_at, target, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ABS64 }); - b.finish() -} - -fn symbol(file: &object::File, name: &str) -> u64 { - file.symbols().find(|s| s.name() == Ok(name)).unwrap_or_else(|| panic!("no {name}")).address() -} - -fn word_at(file: &object::File, vaddr: u64) -> u32 { - use object::ObjectSegment as _; - let seg = file.segments().find(|s| (s.address()..s.address() + s.size()).contains(&vaddr)).unwrap(); - let data = seg.data().unwrap(); - let off = (vaddr - seg.address()) as usize; - u32::from_le_bytes(data[off..off + 4].try_into().unwrap()) -} - -#[test] -fn an_aarch64_pie_declares_aarch64_and_rebases_with_its_own_relative_type() { - let out = Case::new("aarch64-pie").input("a.o", aarch64_elf_program()).link(); - - let elf = ElfFile64::::parse(&*out).unwrap(); - assert_eq!(elf.elf_header().e_machine(object::Endianness::Little), elf::EM_AARCH64); - - let file = object::File::parse(&*out).unwrap(); - let (target, ptr, start) = (symbol(&file, "target"), symbol(&file, "ptr"), symbol(&file, "_start")); - - let relocs: Vec<_> = file.dynamic_relocations().expect("a PIE carries .rela.dyn").collect(); - assert_eq!(relocs.len(), 1, "{relocs:?}"); - let (offset, reloc) = &relocs[0]; - assert_eq!(*offset, ptr); - assert_eq!(reloc.flags(), RelocationFlags::Elf { r_type: elf::R_AARCH64_RELATIVE }); - assert_eq!(reloc.addend(), target as i64); - - // ADRP names the page, the ADD the offset within it: together `target`. - let adrp = word_at(&file, start); - let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; - let imm = (imm << 43) >> 43; - let page = (start & !0xfff) as i64 + (imm << 12); - let lo12 = ((word_at(&file, start + 4) >> 10) & 0xfff) as i64; - assert_eq!((page + lo12) as u64, target); -} - -#[test] -fn an_x86_64_pie_rebases_with_the_x86_64_relative_type() { - let mut b = ObjBuilder::new(); - let target = b.data("target", &[7u8; 8], SymbolScope::Linkage); - b.text("_start", &[RET], SymbolScope::Linkage); - let ptr = b.data("ptr", &[0u8; 8], SymbolScope::Linkage); - let ptr_at = b.symbol_offset(ptr); - b.reloc(StandardSection::Data, ptr_at, target, 0, RelocationFlags::Elf { r_type: elf::R_X86_64_64 }); - let out = Case::new("x86-pie").input("a.o", b.finish()).link(); - - let elf = ElfFile64::::parse(&*out).unwrap(); - assert_eq!(elf.elf_header().e_machine(object::Endianness::Little), elf::EM_X86_64); - let file = object::File::parse(&*out).unwrap(); - let relocs: Vec<_> = file.dynamic_relocations().unwrap().collect(); - assert_eq!(relocs.len(), 1, "{relocs:?}"); - assert_eq!(relocs[0].1.flags(), RelocationFlags::Elf { r_type: elf::R_X86_64_RELATIVE }); - assert_eq!(relocs[0].1.addend(), symbol(&file, "target") as i64); -} - -#[test] -fn inputs_for_two_machines_are_refused() { - let mut x86 = ObjBuilder::new(); - x86.text("_start", &[RET], SymbolScope::Linkage); - let mut arm = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - arm.text("helper", &words(&[AARCH64_RET]), SymbolScope::Linkage); - let said = Case::new("mixed") - .input("x86.o", x86.finish()) - .input("arm.o", arm.finish()) - .link_expecting_failure(); - assert!(said.contains("arm.o") && said.contains("Aarch64"), "{said}"); -} - -#[test] -fn an_aarch64_pe_declares_arm64_and_patches_its_calls() { - let mut b = ObjBuilder::for_machine(BinaryFormat::Coff, Architecture::Aarch64); - let helper = b.text("helper", &words(&[AARCH64_RET]), SymbolScope::Linkage); - let target = b.data("target", &[7u8; 8], SymbolScope::Linkage); - let start = b.text("efi_main", &words(&[AARCH64_BL, ADRP_X0, ADD_X0_X0, AARCH64_RET]), SymbolScope::Linkage); - let at = b.symbol_offset(start); - b.reloc(StandardSection::Text, at, helper, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_BRANCH26 }); - b.reloc(StandardSection::Text, at + 4, target, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_PAGEBASE_REL21 }); - b.reloc(StandardSection::Text, at + 8, target, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_PAGEOFFSET_12A }); - let ptr = b.data("ptr", &[0u8; 8], SymbolScope::Linkage); - let ptr_at = b.symbol_offset(ptr); - b.reloc(StandardSection::Data, ptr_at, target, 0, RelocationFlags::Coff { typ: pe::IMAGE_REL_ARM64_ADDR64 }); - let out = Case::new("aarch64-pe").input("a.obj", b.finish()).arg("--pe").arg("-e").arg("efi_main").link(); - - let file = PeFile64::parse(&*out).unwrap(); - assert_eq!(file.nt_headers().file_header.machine.get(object::LittleEndian), pe::IMAGE_FILE_MACHINE_ARM64); - assert_eq!(file.architecture(), Architecture::Aarch64); - - // `helper` leads `.text` and `efi_main` follows it at the next 16 bytes; - // `target` leads `.data` and `ptr` follows it. - let file = object::File::parse(&*out).unwrap(); - let entry = file.entry(); - let text = file.section_by_name(".text").unwrap(); - let data = file.section_by_name(".data").unwrap(); - assert_eq!(entry, text.address() + 16); - let bl = word_at(&file, entry); - assert_eq!(bl & 0xfc00_0000, AARCH64_BL); - assert_eq!((((bl & 0x03ff_ffff) as i64) << 38) >> 36, -16, "the call reaches helper"); - let adrp = word_at(&file, entry + 4); - let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; - let page = (entry as i64 + 4) & !0xfff; - let lo12 = ((word_at(&file, entry + 8) >> 10) & 0xfff) as i64; - assert_eq!((page + (((imm << 43) >> 43) << 12) + lo12) as u64, data.address()); - let bytes = data.data().unwrap(); - assert_eq!(u64::from_le_bytes(bytes[8..16].try_into().unwrap()), data.address(), "ptr holds target"); -} - -/// The address an `adrp` at `pc` and the scaled `ldr` after it read. -fn adrp_ldr_target(file: &object::File, pc: u64) -> u64 { - let adrp = word_at(file, pc); - let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; - let page = ((pc & !0xfff) as i64 + (((imm << 43) >> 43) << 12)) as u64; - page + (((word_at(file, pc + 4) >> 10) & 0xfff) as u64) * 8 -} - -/// **An AArch64 shared library reaches a function nobody in it defines -/// through the GOT slot its GLOB_DAT names**, whether the code calls it or -/// loads its address: the call goes through a stub that is AArch64 code, -/// `adrp x16; ldr x16; br x16`, never the x86 `jmp *` a PLT used to be for -/// every machine, and both read the one slot the loader fills. -#[test] -fn an_aarch64_shared_library_reaches_an_import_through_its_glob_dat_slot() { - let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - let main = b.undefined("main", object::SymbolKind::Text); - let caller = b.text("caller", &words(&[AARCH64_BL, AARCH64_RET]), SymbolScope::Dynamic); - let at = b.symbol_offset(caller); - b.reloc(StandardSection::Text, at, main, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_CALL26 }); - let loader = b.text("loader", &words(&[0x9000_0008, 0xf940_0108, AARCH64_RET]), SymbolScope::Dynamic); - let at = b.symbol_offset(loader); - b.reloc(StandardSection::Text, at, main, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_ADR_GOT_PAGE }); - b.reloc(StandardSection::Text, at + 4, main, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_LD64_GOT_LO12_NC }); - let out = Case::new("aarch64-so-import").arg("-shared").input("a.o", b.finish()).link(); - - let file = object::File::parse(&*out).unwrap(); - let relocs: Vec<_> = file.dynamic_relocations().expect("a .rela.dyn").collect(); - let glob: Vec<_> = relocs - .iter() - .filter(|(_, r)| r.flags() == RelocationFlags::Elf { r_type: elf::R_AARCH64_GLOB_DAT }) - .collect(); - assert_eq!(glob.len(), 1, "{relocs:?}"); - let slot = glob[0].0; - - assert_eq!(adrp_ldr_target(&file, symbol(&file, "loader")), slot, "the address load reads another slot"); - let bl_at = symbol(&file, "caller"); - let bl = word_at(&file, bl_at); - assert_eq!(bl & 0xfc00_0000, AARCH64_BL); - let stub = (bl_at as i64 + ((((bl & 0x03ff_ffff) as i64) << 38) >> 36)) as u64; - assert_eq!(word_at(&file, stub) & 0x9f00_001f, 0x9000_0010, "the stub is not `adrp x16`"); - assert_eq!(word_at(&file, stub + 4) & !(0xfff << 10), 0xf940_0210, "the stub is not `ldr x16, [x16]`"); - assert_eq!(word_at(&file, stub + 8), 0xd61f_0200, "the stub is not `br x16`"); - assert_eq!(adrp_ldr_target(&file, stub), slot, "the stub jumps through another slot"); -} diff --git a/toyos-ld/tests/tls_aarch64.rs b/toyos-ld/tests/tls_aarch64.rs deleted file mode 100644 index f43b4ec8950..00000000000 --- a/toyos-ld/tests/tls_aarch64.rs +++ /dev/null @@ -1,177 +0,0 @@ -//! AArch64 thread-local storage: TLS variant I and the TLS descriptor. -//! -//! The numbers asserted here come from the AArch64 ELF ABI, not from the -//! linker: variant I puts a two-word TCB at the thread pointer and the -//! executable's TLS block after it at the first offset the segment's alignment -//! allows, so a variable at offset `o` in a 64-byte-aligned segment is at -//! `align_up(16, 64) + o` from TPIDR_EL0; a descriptor sequence the executable -//! defines relaxes to `movz x0; movk x0; nop; nop` (local-exec), one another -//! module defines to `adrp x0; ldr x0; nop; nop` over a GOT slot the loader -//! fills with R_AARCH64_TLS_TPREL (initial-exec), and a shared library keeps -//! the sequence and asks the loader for the descriptor pair with -//! R_AARCH64_TLSDESC. The outputs are read back by the `object` crate. - -mod common; - -use common::{Case, ObjBuilder}; -use object::write::StandardSection; -use object::{elf, Architecture, BinaryFormat, Object as _, ObjectSegment as _, ObjectSymbol as _, RelocationFlags, RelocationTarget, SymbolKind, SymbolScope}; - -const ADRP_X0: u32 = 0x9000_0000; -const LDR_X1_X0: u32 = 0xf940_0001; -const ADD_X0_X0: u32 = 0x9100_0000; -const BLR_X1: u32 = 0xd63f_0020; -const RET: u32 = 0xd65f_03c0; -const NOP: u32 = 0xd503_201f; -/// `add x0, x1, #0, lsl #12`, the thread pointer read into x1 before it. -const ADD_X0_X1_LSL12: u32 = 0x9140_0020; - -fn words(insns: &[u32]) -> Vec { - insns.iter().flat_map(|i| i.to_le_bytes()).collect() -} - -/// `_start` (or `name`) running one TLS descriptor sequence for `target`. -fn descriptor_call(b: &mut ObjBuilder, name: &str, target: object::write::SymbolId) { - let f = b.text(name, &words(&[ADRP_X0, LDR_X1_X0, ADD_X0_X0, BLR_X1, RET]), SymbolScope::Linkage); - let at = b.symbol_offset(f); - for (i, r_type) in [ - elf::R_AARCH64_TLSDESC_ADR_PAGE21, - elf::R_AARCH64_TLSDESC_LD64_LO12, - elf::R_AARCH64_TLSDESC_ADD_LO12, - elf::R_AARCH64_TLSDESC_CALL, - ] - .into_iter() - .enumerate() - { - b.reloc(StandardSection::Text, at + 4 * i as u64, target, 0, RelocationFlags::Elf { r_type }); - } -} - -fn symbol(file: &object::File, name: &str) -> u64 { - file.symbols().find(|s| s.name() == Ok(name)).unwrap_or_else(|| panic!("no {name}")).address() -} - -fn word_at(file: &object::File, vaddr: u64) -> u32 { - let seg = file.segments().find(|s| (s.address()..s.address() + s.size()).contains(&vaddr)).unwrap(); - let data = seg.data().unwrap(); - let off = (vaddr - seg.address()) as usize; - u32::from_le_bytes(data[off..off + 4].try_into().unwrap()) -} - -fn words_at(file: &object::File, vaddr: u64, n: usize) -> Vec { - (0..n).map(|i| word_at(file, vaddr + 4 * i as u64)).collect() -} - -/// The address an `adrp` at `pc` names. -fn adrp_target(adrp: u32, pc: u64) -> u64 { - let imm = (((adrp >> 29) & 3) | (((adrp >> 5) & 0x7ffff) << 2)) as i64; - let imm = (imm << 43) >> 43; - ((pc & !0xfff) as i64 + (imm << 12)) as u64 -} - -fn pt_tls(out: &[u8]) -> (u64, u64) { - use object::read::elf::{ElfFile64, ProgramHeader as _}; - let elf = ElfFile64::::parse(out).unwrap(); - let e = object::Endianness::Little; - let tls = elf - .elf_program_headers() - .iter() - .find(|p| p.p_type(e) == elf::PT_TLS) - .expect("a PT_TLS"); - (tls.p_vaddr(e), tls.p_align(e)) -} - -/// A module defining two thread-locals, `first` (8 bytes) and `v` after it. -fn two_locals(b: &mut ObjBuilder, scope: SymbolScope) -> object::write::SymbolId { - b.tls("first", &[1u8; 8], scope); - b.tls("v", &[2u8; 8], scope) -} - -#[test] -fn an_executable_relaxes_its_own_descriptor_to_the_variant_one_offset() { - let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - let v = two_locals(&mut b, SymbolScope::Linkage); - descriptor_call(&mut b, "_start", v); - // Local-exec written by the compiler: the same variable, the same offset. - let le = b.text("le", &words(&[ADD_X0_X1_LSL12, ADD_X0_X0, RET]), SymbolScope::Linkage); - let le_at = b.symbol_offset(le); - b.reloc(StandardSection::Text, le_at, v, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_TLSLE_ADD_TPREL_HI12 }); - b.reloc(StandardSection::Text, le_at + 4, v, 0, RelocationFlags::Elf { r_type: elf::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC }); - let out = Case::new("a64-tls-le").input("a.o", b.finish()).link(); - - let file = object::File::parse(&*out).unwrap(); - let (tls_vaddr, tls_align) = pt_tls(&out); - assert_eq!(tls_align, 64); - assert_eq!(tls_vaddr % 64, 0, "the TLS segment starts off its alignment"); - // `v` is 8 bytes into the block, and the block 64 bytes past TP. - let tp_offset: u32 = 64 + 8; - let start = symbol(&file, "_start"); - assert_eq!( - words_at(&file, start, 5), - [0xd2a0_0000 | ((tp_offset >> 16) << 5), 0xf280_0000 | ((tp_offset & 0xffff) << 5), NOP, NOP, RET], - "movz x0, #hi, lsl 16; movk x0, #lo; nop; nop" - ); - let le = symbol(&file, "le"); - let [hi, lo] = [word_at(&file, le), word_at(&file, le + 4)]; - assert_eq!(((hi >> 10) & 0xfff) << 12 | ((lo >> 10) & 0xfff), tp_offset); - let dynamic = file.dynamic_relocations().map(|r| r.count()).unwrap_or(0); - assert_eq!(dynamic, 0, "a relaxed descriptor asked the loader for something"); -} - -#[test] -fn a_shared_library_keeps_the_descriptor_and_asks_the_loader_for_its_pair() { - let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - let v = two_locals(&mut b, SymbolScope::Dynamic); - descriptor_call(&mut b, "reader", v); - let out = Case::new("a64-tls-so").arg("-shared").input("a.o", b.finish()).link(); - - let file = object::File::parse(&*out).unwrap(); - let relocs: Vec<_> = file.dynamic_relocations().expect("a .rela.dyn").collect(); - let descs: Vec<_> = relocs - .iter() - .filter(|(_, r)| r.flags() == RelocationFlags::Elf { r_type: elf::R_AARCH64_TLSDESC }) - .collect(); - assert_eq!(descs.len(), 1, "{relocs:?}"); - let (pair, reloc) = descs[0]; - assert_eq!(reloc.addend(), 8, "the descriptor's argument is `v`'s offset in the module's block"); - assert_eq!(reloc.target(), RelocationTarget::Absolute, "a module's own variable is named by offset"); - assert_eq!(pair % 8, 0); - - let reader = symbol(&file, "reader"); - let seq = words_at(&file, reader, 5); - assert_eq!(adrp_target(seq[0], reader), pair & !0xfff); - assert_eq!(seq[1] & !(0xfff << 10), LDR_X1_X0); - assert_eq!(((seq[1] >> 10) & 0xfff) * 8, (*pair & 0xfff) as u32, "the ldr reads the pair's first word"); - assert_eq!(seq[2] & !(0xfff << 10), ADD_X0_X0); - assert_eq!(((seq[2] >> 10) & 0xfff) as u64, pair & 0xfff, "x0 is the pair's address"); - assert_eq!(&seq[3..], [BLR_X1, RET], "the call to the resolver is kept"); -} - -#[test] -fn an_executable_reaches_another_module_s_variable_through_a_tp_offset_slot() { - let mut lib = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - two_locals(&mut lib, SymbolScope::Dynamic); - lib.text("helper", &words(&[RET]), SymbolScope::Dynamic); - let so = Case::new("a64-tls-lib").arg("-shared").input("a.o", lib.finish()).link(); - - let mut b = ObjBuilder::for_machine(BinaryFormat::Elf, Architecture::Aarch64); - let v = b.undefined("v", SymbolKind::Tls); - descriptor_call(&mut b, "_start", v); - let out = Case::new("a64-tls-ie").input("a.o", b.finish()).input("libv.so", so).link(); - - let file = object::File::parse(&*out).unwrap(); - let relocs: Vec<_> = file.dynamic_relocations().expect("a .rela.dyn").collect(); - let tprel: Vec<_> = relocs - .iter() - .filter(|(_, r)| r.flags() == RelocationFlags::Elf { r_type: elf::R_AARCH64_TLS_TPREL }) - .collect(); - assert_eq!(tprel.len(), 1, "{relocs:?}"); - let (slot, reloc) = tprel[0]; - assert!(matches!(reloc.target(), RelocationTarget::Symbol(_)), "the slot names `v` for the loader"); - - let start = symbol(&file, "_start"); - let seq = words_at(&file, start, 5); - assert_eq!(adrp_target(seq[0], start), slot & !0xfff); - assert_eq!(seq[1], 0xf940_0000 | ((((*slot & 0xfff) >> 3) as u32) << 10), "ldr x0, [x0, #slot]"); - assert_eq!(&seq[2..], [NOP, NOP, RET]); -} From dbe44197a9c2454e73f7d504af0d5a853b1e19b6 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:14:20 +0200 Subject: [PATCH 22/50] AArch64 links through rust-lld: the userland, the kernel and the loader MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By the owner's ruling of 2026-09-26. The rust pin moves to c3cb792df3f (on toyos-inbox): aarch64-unknown-toyos names rust-lld with the GNU flavour. The toolchain is built with `lld = true`, so every compiler and sysroot carries rust-lld, and bootstrap is told the AArch64 userland's linker (rust-lld, by name for the primary's stages and by path for a sysroot's std) with `rpath = false`: bootstrap's `-Wl,-rpath` is a cc driver's argument, and a guest std records no host library path. `Arch::links_through_toyos_ld` says which architecture still links through the frozen toyos-ld: x86-64, whose linking this branch does not change. The kernel's and the loader's AArch64 targets drop their toyos-ld override and link with the targets' own rust-lld. The loader takes the kernel as a static PIE at base 0, which rust-lld makes of the target's static-model code with `-pie -z notext`; position-independent codegen would reach symbols through GOT slots holding virtual addresses, which the entry cannot use with the MMU off. rust-lld's layout exposed a loader defect: the kernel's stack began at the image's last byte, wherever the linker ended it. lld ends this kernel at 0x…908, and on the M4 the first `stp x29, x30, [sp, #-16]!` took an SP alignment fault (ESR_EL1 0x9A000000, read through QEMU's gdb stub on a hardware breakpoint at firmware's synchronous vector); TCG does not check SCTLR_EL1.SA there, so only HVF saw it. The stack now starts on the next page. virt_early_panic and virt_early_fault: 2 passed, EXIT=0. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/.cargo/config.toml | 3 --- bootloader/src/main.rs | 10 ++++++++-- kernel/.cargo/config.toml | 11 ++++++++--- rust | 2 +- src/arch.rs | 10 ++++++++++ src/compiler.rs | 4 ++-- src/sysroot.rs | 10 +++++++++- src/toolchain.rs | 12 ++++++++++-- 8 files changed, 48 insertions(+), 14 deletions(-) diff --git a/bootloader/.cargo/config.toml b/bootloader/.cargo/config.toml index 13126787482..591d56623e0 100644 --- a/bootloader/.cargo/config.toml +++ b/bootloader/.cargo/config.toml @@ -4,6 +4,3 @@ rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes"] [target.x86_64-unknown-uefi] linker = "toyos-ld" - -[target.aarch64-unknown-uefi] -linker = "toyos-ld" diff --git a/bootloader/src/main.rs b/bootloader/src/main.rs index 7d1f6e71374..b15a245666b 100644 --- a/bootloader/src/main.rs +++ b/bootloader/src/main.rs @@ -369,10 +369,16 @@ fn load_kernel_elf(kernel_elf_bytes: &[u8]) -> LoadedKernel { println!("Kernel stack size: {}", stack_size); // `vaddr_max` is the largest `p_vaddr + p_memsz` over the `PT_LOAD` // segments, and the image is laid out at its own vaddrs — so it is what the - // kernel's memory has to cover before the stack is added to it. + // kernel's memory has to cover before the stack is added to it. The stack + // starts on the next page: where the image ends is the linker's choice, and + // both ABIs want the stack pointer 16-byte aligned, which AArch64's + // `SCTLR_EL1.SA` enforces on every access through it. + const PAGE: u64 = 4096; let mem_size = layout .vaddr_max - .checked_add(stack_size as u64) + .checked_add(PAGE - 1) + .map(|end| end & !(PAGE - 1)) + .and_then(|stack_base| stack_base.checked_add(stack_size as u64)) .and_then(|n| usize::try_from(n).ok()) .expect("kernel.elf: image plus stack does not fit an allocation"); diff --git a/kernel/.cargo/config.toml b/kernel/.cargo/config.toml index c0cf254b334..8817cd2f548 100644 --- a/kernel/.cargo/config.toml +++ b/kernel/.cargo/config.toml @@ -10,7 +10,12 @@ linker = "toyos-ld" # the syscall gate, the interrupt controller and the scheduler a way in, every # item only those reach is unreachable there and nowhere else — and an # `#[expect(dead_code)]` cannot be met under it, hence the second `-A`. Exit: -# both go when `issues/kernel/toyos-runs-on-arm64.md`'s stage 7 lands. +# both go when `issues/kernel/toyos-runs-on-arm64.md`'s stage 7 lands. The +# loader takes a static PIE at base 0 (`ET_DYN`, `R_AARCH64_RELATIVE` only), +# which rust-lld makes of the target's static-model code with `-pie`: `-z +# notext` lets absolute words stay in read-only sections, which the loader +# relocates before anything runs. Position-independent codegen is not an +# option: it reaches symbols through GOT slots holding virtual addresses, +# which the entry cannot use while the MMU is off. [target.aarch64-unknown-none-softfloat] -linker = "toyos-ld" -rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes", "-Adead_code", "-Aunfulfilled_lint_expectations"] +rustflags = ["-Dwarnings", "-Cforce-frame-pointers=yes", "-Adead_code", "-Aunfulfilled_lint_expectations", "-Clink-arg=-pie", "-Clink-arg=-znotext"] diff --git a/rust b/rust index 4874af48e26..c3cb792df3f 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit 4874af48e2675a0341d3099034c90ceda9257764 +Subproject commit c3cb792df3f00ad64fe8ccc4571e4856ed13948b diff --git a/src/arch.rs b/src/arch.rs index 59e8f6f27dc..d740cc37c29 100644 --- a/src/arch.rs +++ b/src/arch.rs @@ -93,6 +93,16 @@ impl Arch { } } + /// Whether this architecture's guest binaries link through toyos-ld, which + /// is frozen, rather than the rust-lld its targets name: x86-64's do until + /// its own switch to rust-lld. + pub const fn links_through_toyos_ld(self) -> bool { + match self { + Arch::X86_64 => true, + Arch::Aarch64 => false, + } + } + /// Where on the ESP firmware looks for a removable medium's loader: UEFI /// 2.11 §3.5.1.1 names one file per architecture. pub const fn removable_loader(self) -> &'static str { diff --git a/src/compiler.rs b/src/compiler.rs index 3b5f11dae26..490f71063c0 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -44,7 +44,7 @@ use crate::toolchain::{self, host_triple}; /// What changes how a key's sources become a compiler and is none of them: the /// build below. Moving it moves every key. -const RECIPE: &str = "bootstrap stage 2 of compiler/rustc and library, profile compiler, host only; 1"; +const RECIPE: &str = "bootstrap stage 2 of compiler/rustc and library, profile compiler, host only, with rust-lld; 2"; /// What a compiler's key is the identity of, in its fork checkout. const KEYED: [&str; 4] = ["compiler", "src/bootstrap", "src/stage0", "Cargo.lock"]; @@ -254,7 +254,7 @@ target = ["{host}"] [rust] incremental = true -lld = false +lld = true "#, build_dir = build_dir.display(), ) diff --git a/src/sysroot.rs b/src/sysroot.rs index 743eb528532..ea6e18d2fca 100644 --- a/src/sysroot.rs +++ b/src/sysroot.rs @@ -457,7 +457,15 @@ fn std_config(compiler: &Path, build_dir: &Path, host: &str, toyos_ld: &Path) -> let linker = toyos_ld.display(); let userland: String = Arch::ALL .iter() - .map(|arch| format!("\n[target.{}]\nlinker = \"{linker}\"\n", arch.userland())) + .map(|arch| { + let linker = if arch.links_through_toyos_ld() { + format!("linker = \"{linker}\"") + } else { + let lld = compiler.join(format!("lib/rustlib/{host}/bin/rust-lld")); + format!("linker = \"{}\"\nrpath = false", lld.display()) + }; + format!("\n[target.{}]\n{linker}\n", arch.userland()) + }) .collect(); format!( r#"change-id = "ignore" diff --git a/src/toolchain.rs b/src/toolchain.rs index 14e084fac78..2e62e1e9976 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -805,7 +805,15 @@ fn write_config(rust_dir: &Path, host: &str, toyos_ld: &Path, with_hosted_rustc: .iter() .map(|arch| { let backends = if *arch == HOSTED_ARCH { codegen_backends } else { "" }; - format!("[target.{}]\nlinker = \"{linker}\"{backends}\n\n", arch.userland()) + // rust-lld by name: rustc finds it in the sysroot of the stage that + // links, which `lld = true` puts it in. It takes no `-Wl,` rpath, + // and a guest std has no host library path to record. + let linker = if arch.links_through_toyos_ld() { + format!("linker = \"{linker}\"") + } else { + "linker = \"rust-lld\"\nrpath = false".to_string() + }; + format!("[target.{}]\n{linker}{backends}\n\n", arch.userland()) }) .collect(); let config = format!( @@ -818,7 +826,7 @@ target = [{targets}] [rust] incremental = true -lld = false +lld = true {userland}"# ); From 347f205b45cdeb284ba06bfdf40074c8331227a5 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:14:20 +0200 Subject: [PATCH 23/50] AArch64 boots without firmware's five-second wait AAVMF waits its platform boot timeout, five seconds, for a key before it boots, unless QEMU hands it a menu wait through fw_cfg, which only `-boot menu=on` does; `splash-time=0` makes that wait zero. Both launch paths pass it for AArch64 (`Arch::boot`); x86-64's is unchanged. Measured on this M4 Pro, QEMU's start to `EARLY PANIC:` with test-early-panic armed, the pinned DEBUG AAVMF, three runs each, interleaved in one session: 5.70, 5.69, 5.70 s without it (the loader's first line at 5.32-5.33 s), 0.69, 0.69, 0.70 s with it (the loader at 0.33 s). This is the delay the owner's ruling of 2026-09-26 meant to remove by moving to a RELEASE build, and it is not the DEBUG build's: Debian 12's RELEASE AAVMF (edk2 2022.11), on the boots where it reached the kernel, took 5.71 and 6.08 s. The RELEASE builds tried did not boot reliably either (Debian 13's 2025.02-8+deb13u1: never reached the loader in six boots; Debian 12's 2022.11-6+deb12u2: 2 of 5), so the pinned firmware stays. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/arch.rs | 11 +++++++++++ src/qemu.rs | 3 +++ tests/common/qemu.rs | 3 +++ 3 files changed, 17 insertions(+) diff --git a/src/arch.rs b/src/arch.rs index d740cc37c29..72e4ac6df5a 100644 --- a/src/arch.rs +++ b/src/arch.rs @@ -145,6 +145,17 @@ impl Arch { ] } + /// QEMU's `-boot` for this machine's firmware, if it needs one. AAVMF + /// waits its platform boot timeout, five seconds, for a key before it boots + /// unless QEMU hands it a menu wait through fw_cfg, which only `menu=on` + /// does; `splash-time=0` makes that wait zero. + pub const fn boot(self) -> Option<&'static str> { + match self { + Arch::X86_64 => None, + Arch::Aarch64 => Some("menu=on,splash-time=0"), + } + } + /// How this host provides a guest of this architecture: its own /// hypervisor when the host is the same architecture and will open it, /// and emulation otherwise. diff --git a/src/qemu.rs b/src/qemu.rs index ee5da078501..ba0521e4742 100644 --- a/src/qemu.rs +++ b/src/qemu.rs @@ -143,6 +143,9 @@ pub fn launch(opts: &Options) { qemu.arg("-cpu").arg(arch.cpu(accel)); let [code, vars] = arch.pflash(std::path::Path::new(".")); + if let Some(boot) = arch.boot() { + qemu.arg("-boot").arg(boot); + } qemu.arg("-machine") .arg(machine(arch, shape.iommu)) .arg("-smp") diff --git a/tests/common/qemu.rs b/tests/common/qemu.rs index d396895888f..7bc7875c572 100644 --- a/tests/common/qemu.rs +++ b/tests/common/qemu.rs @@ -4293,6 +4293,9 @@ fn qemu_command( let [firmware_code, firmware_vars] = arch.pflash(&repo); let mut qemu = Command::new(arch.qemu()); + if let Some(boot) = arch.boot() { + qemu.arg("-boot").arg(boot); + } let accel = arch.accel(); if accel.is_hardware() { From a083f3b09b6c7ecf76b0f9ee2f88efbf32f7fcad Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:16:16 +0200 Subject: [PATCH 24/50] NOTICE: the pinned AAVMF carries OpenSSL, under Apache-2.0 This branch's AAVMF entry named only BSD-2-Clause-Patent. QEMU builds its ArmVirtQemu firmware with NETWORK_TLS_ENABLE (roms/edk2-build.config at v11.1.0, [opts.common]), and edk2-stable202408's ArmVirt.dsc.inc links the bundled OpenSSL with TLS on (OpensslLib) or off (OpensslLibCrypto). The submodule pins OpenSSL 3.0.9 (openssl de90e54b, VERSION.dat), whose LICENSE.txt is Apache-2.0 and which ships no NOTICE; the text is added as licenses/Apache-2.0-OpenSSL.txt, and the section and both ledger rows say BSD-2-Clause-Patent AND Apache-2.0. OVMF's record has the same gap and is not this branch's: issues/build/ovmf-s-licence-record-names-no-openssl.md. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- NOTICE | 12 +- .../ovmf-s-licence-record-names-no-openssl.md | 22 +++ licenses/Apache-2.0-OpenSSL.txt | 177 ++++++++++++++++++ src/licence.rs | 4 +- 4 files changed, 210 insertions(+), 5 deletions(-) create mode 100644 issues/build/ovmf-s-licence-record-names-no-openssl.md create mode 100644 licenses/Apache-2.0-OpenSSL.txt diff --git a/NOTICE b/NOTICE index caed99f87e3..95c962f286b 100644 --- a/NOTICE +++ b/NOTICE @@ -226,7 +226,7 @@ instead — which would put it inside the "comes with QEMU" allowance and delete -aavmf/*.fd — EDK II firmware for QEMU `virt`, BSD-2-Clause-Patent +aavmf/*.fd — EDK II firmware for QEMU `virt`, BSD-2-Clause-Patent AND Apache-2.0 ------------------------------------------------------------ AAVMF_CODE.fd 67,108,864 bytes @@ -236,14 +236,20 @@ aavmf/*.fd — EDK II firmware for QEMU `virt`, BSD-2-Clause-Patent Copyright (c) 2019, TianoCore and contributors Licence text: licenses/BSD-2-Clause-Patent-EDK2.txt - SPDX-License-Identifier: BSD-2-Clause-Patent + Copyright 1995-2023 The OpenSSL Project Authors + Licence text: licenses/Apache-2.0-OpenSSL.txt + SPDX-License-Identifier: BSD-2-Clause-Patent AND Apache-2.0 QEMU's own prebuilt ArmVirtQemu firmware, unmodified: `edk2-aarch64-code.fd` and `edk2-arm-vars.fd` as QEMU 11.1.0 installs them under `share/qemu/`, whose version string reads `edk2-stable202408-prebuilt.qemu.org` (a `DEBUG_GCC5` build of 2024-09-12). The variable store is the template: every boot gives it a writable snapshot QEMU discards, because this `DEBUG` build -asserts on a read-only store. +asserts on a read-only store. QEMU builds it with `NETWORK_TLS_ENABLE` +(`roms/edk2-build.config`, `[opts.common]`), and edk2-stable202408's +ArmVirtQemu links edk2's bundled OpenSSL either way (`OpensslLib` with TLS, +`OpensslLibCrypto` without): OpenSSL 3.0.9, whose `LICENSE.txt` is the +Apache-2.0 text above and which carries no `NOTICE`. tests/fixtures/gbae-v0.2.0-* — gbae, MIT ----------------------------------------- diff --git a/issues/build/ovmf-s-licence-record-names-no-openssl.md b/issues/build/ovmf-s-licence-record-names-no-openssl.md new file mode 100644 index 00000000000..dd99fbafc47 --- /dev/null +++ b/issues/build/ovmf-s-licence-record-names-no-openssl.md @@ -0,0 +1,22 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# OVMF's licence record names no OpenSSL + +`NOTICE`'s `ovmf/*.fd` section and its three `src/licence.rs` rows say +`BSD-2-Clause-Patent`. EDK II's platforms link its bundled OpenSSL into the +firmware through `CryptoPkg` (`BaseCryptLib`, and `TlsLib` when +`NETWORK_TLS_ENABLE` is set), and OpenSSL 3 is Apache-2.0. For the AArch64 +firmware this is established and recorded (PR #524: edk2-stable202408's +ArmVirtQemu links OpenSSL 3.0.9 whether TLS is on or off, and QEMU builds it +with TLS on). For OVMF nothing is: the section itself says the files came +with no version record or build recipe, so which CryptoPkg libraries they +link is unknown, and the record claims a single licence nobody has checked. + +**Exit condition**: the OVMF images' crypto content is read out of the +binaries or their upstream build, and the section and rows state every +licence it carries, or the images are replaced by ones whose build is known +(the section's own open question to the owner). diff --git a/licenses/Apache-2.0-OpenSSL.txt b/licenses/Apache-2.0-OpenSSL.txt new file mode 100644 index 00000000000..49cc83d2ee2 --- /dev/null +++ b/licenses/Apache-2.0-OpenSSL.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/src/licence.rs b/src/licence.rs index 127b69ec2d9..b174cf5ec58 100644 --- a/src/licence.rs +++ b/src/licence.rs @@ -386,13 +386,13 @@ pub const COMMITTED_FILES: &[(&str, &str, &str, Terms)] = &[ "aavmf/AAVMF_CODE.fd", "47765fe344818cbc464b1c14ae658fb4b854f5c2ceffa982411731eb4865594d", "NOTICE", - Terms::Spdx("BSD-2-Clause-Patent"), + Terms::Spdx("BSD-2-Clause-Patent AND Apache-2.0"), ), ( "aavmf/AAVMF_VARS.fd", "b3b855c5a80310168051164986855692d1bdb06e67619856177965cd87c6774f", "NOTICE", - Terms::Spdx("BSD-2-Clause-Patent"), + Terms::Spdx("BSD-2-Clause-Patent AND Apache-2.0"), ), ( "ovmf/DEBUGX64_OVMF.fd", From 4e6e5845048daf7d376b552df4989deabb7579bf Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:18:21 +0200 Subject: [PATCH 25/50] issues: two suites in one worktree race on the C corpus's libc archive Found running the fast-tier A/B for PR #524: three suites at once in one worktree, on main and on the branch alike, lost four of thirty runs to a C corpus link that found no libtoyos_libc.a mid-rebuild. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...-one-worktree-race-on-the-c-corpus-libc.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 issues/build/two-suites-in-one-worktree-race-on-the-c-corpus-libc.md diff --git a/issues/build/two-suites-in-one-worktree-race-on-the-c-corpus-libc.md b/issues/build/two-suites-in-one-worktree-race-on-the-c-corpus-libc.md new file mode 100644 index 00000000000..4eeef14b07e --- /dev/null +++ b/issues/build/two-suites-in-one-worktree-race-on-the-c-corpus-libc.md @@ -0,0 +1,27 @@ +--- +status: open +kind: tooling +opened: 2026-09-26 +--- + +# Two suites in one worktree race on the C corpus's libc archive + +`tests/common/compile.rs`'s `libc_archive_toyos` runs `cargo rustc +--crate-type staticlib` into `userland/libc/target/sysroot-/` once per +process, then every C test links `-ltoyos_libc` from there. Nothing holds the +archive across the build and its use, so a second `cargo test` in the same +worktree, running its own `cargo rustc` into the same directory, removes and +re-creates the archive while the first suite's C links read it. `src/build.rs`'s +`build_programs` holds `buildlock::artifact` across build and read for exactly +this reason; this path does not. + +Seen on PR #524's A/B, three `cargo test --test toyos-build -- +blocking_read_window` at once per worktree, on both main (`d65446cc`) and the +branch: four of thirty runs panicked before any guest booted, each naming a C +case that "stopped building" (`resolve_libs failed: cannot parse -ltoyos_libc: +library not found`, or `expected staticlib at …/libtoyos_libc.a` from the +`NOT_RUN` check). The harness reports it as a C test that no longer builds. + +**Exit condition**: the archive is built and read under one hold, as +`build_programs` does, and two suites started at once in one worktree both get +past the C corpus's build. From a65356199df090aa5a49d2832b8690606bfdc925 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:18:37 +0200 Subject: [PATCH 26/50] issues: blocking_read_window reds on main too, at the same rate A same-session A/B under one load: main 16 of 17 green, the branch 17 of 18, each red the same "only N of 500 round trips" sentence. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...ead-window-completed-26-of-500-beside-other-guests.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md b/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md index f69b2564dae..45649d3551b 100644 --- a/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md +++ b/issues/build/blocking-read-window-completed-26-of-500-beside-other-guests.md @@ -20,9 +20,12 @@ running and slow, not one parked on a wake that never came. So the verdict's cause is unread: the test waits host seconds and names a lost wake when they run out, which a starved guest satisfies as well as a lost wake does. -Not done: an A/B against `main` under the same load, which is what would say -whether this branch moved it; nothing on the branch weakens an ordering the -wake path uses. +Main reproduces it. A same-session A/B, runs of main (`d65446cc`) and of the +branch started together so both arms carried one load (six suites at once): +main 16 of 17 green, the branch 17 of 18, and each arm's one red is this +sentence (`only 26 of 500` on main, `only 27 of 500` on the branch; the +branch's red spent `cpu=1568ms` and `cpu=1532ms` of its window). The rate is +the same on both arms, so the branch did not move it. **Exit**: the verdict tells a lost wake from a slow guest (the round trips' progress over the window, not only the count at its end), and a cause for From ce76523c32e6a0156422fbf1c83132558bb6ae15 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:41:52 +0200 Subject: [PATCH 27/50] issues: the LAN tests' sockets under the suite's TMPDIR pass the Unix socket limit Found settling the fast tier's reds for PR #524: since #529 the lane sockets are 104-byte paths on macOS, and lan_mdns_answer reds on main (e48604c0) and on the branch alike, every run. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...ite-s-tmpdir-pass-the-unix-socket-limit.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md diff --git a/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md b/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md new file mode 100644 index 00000000000..7e43babd302 --- /dev/null +++ b/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md @@ -0,0 +1,31 @@ +--- +status: open +kind: tooling +opened: 2026-09-26 +--- + +# The LAN tests' sockets under the suite's `$TMPDIR` pass the Unix socket limit + +Since #529 (`e48604c0`) a suite's scratch lives under a per-run directory in +`$TMPDIR`, and `tests/common/segment.rs` makes each lane's socket there +(`tap-in-{n}.sock`, `tap-out-{n}.sock`). On macOS `$TMPDIR` is +`/private/var/folders/<2>/<28>/T/`, and the result is 104 bytes: + +``` +/private/var/folders/gr/mr4_fg4n34jb417sx1g5cgxc0000gp/T/toyos-tmp-47355-0/tests-0/lane-0/tap-out-0.sock +``` + +`sockaddr_un.sun_path` holds 104 bytes with its terminator, so the connect +fails (`path must be shorter than SUN_LEN`), and `lan_mdns_answer` reds before +the lane carries a frame. Measured on PR #524's A/B: `main` at `e48604c0` +red 4 of 4 runs, the branch 5 of 5, every one on this sentence; the fast tier +at the branch's merge of `e48604c0` red on it too. The wide run's first +failure, `QEMU died before ===READY=== (status … 256)`, is the other end of the +same socket. The pid in the path also makes the harness's `ALONE` line call the +two readings "a DIFFERENT failure". + +`qmp-{seq}.sock` sits one level shallower and fits today, by 11 bytes. + +**Exit condition**: every socket the harness makes has a path the platform's +`sun_path` holds, checked where the path is made rather than at `connect`, and +`lan_mdns_answer` is green again on the dev host. From de4e1ec93dd0714be88e27b9cde718da223d7719 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 18:42:06 +0200 Subject: [PATCH 28/50] issues: drop an unmeasured claim from the socket-path issue Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...ckets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md b/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md index 7e43babd302..0873070d249 100644 --- a/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md +++ b/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md @@ -24,8 +24,6 @@ failure, `QEMU died before ===READY=== (status … 256)`, is the other end of th same socket. The pid in the path also makes the harness's `ALONE` line call the two readings "a DIFFERENT failure". -`qmp-{seq}.sock` sits one level shallower and fits today, by 11 bytes. - **Exit condition**: every socket the harness makes has a path the platform's `sun_path` holds, checked where the path is made rather than at `connect`, and `lan_mdns_answer` is green again on the dev host. From 0bef702dcc762f11916aa4080c61bd3cee803043 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:40:41 +0200 Subject: [PATCH 29/50] serial: the backend lock is a file kernel-loom drives, and a lost try_lock is modelled The console backend's lock moves out of drivers/serial.rs into drivers/serial_lock.rs, which names no crate:: path, so kernel-loom compiles it as it compiles sync.rs. BackendGuard is now the held lock and the IRQ guard, dropped in that order. kernel-loom/tests/serial_lock.rs drives it: one CPU whose second try_lock must lose and leave the lock held, and two CPUs each trying twice around a shared cell. The control serial-try-lock-then-some builds try_lock with then_some, whose argument is built on a loss and releases the holder's lock when it drops; both models red under it (EXIT=101), and it is registered in src/ci.rs's CONTROLS. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel-loom/Cargo.toml | 12 ++++++ kernel-loom/src/lib.rs | 4 ++ kernel-loom/tests/serial_lock.rs | 51 +++++++++++++++++++++++ kernel/Cargo.toml | 4 ++ kernel/src/drivers/mod.rs | 1 + kernel/src/drivers/serial.rs | 35 ++++------------ kernel/src/drivers/serial_lock.rs | 68 +++++++++++++++++++++++++++++++ rust | 2 +- src/build.rs | 4 ++ src/ci.rs | 4 ++ 10 files changed, 156 insertions(+), 29 deletions(-) create mode 100644 kernel-loom/tests/serial_lock.rs create mode 100644 kernel/src/drivers/serial_lock.rs diff --git a/kernel-loom/Cargo.toml b/kernel-loom/Cargo.toml index 467a97fb8ea..4983c147759 100644 --- a/kernel-loom/Cargo.toml +++ b/kernel-loom/Cargo.toml @@ -190,6 +190,18 @@ dump-report-relaxed = [] # the same name only so `cfg` checking knows it. seqlock-writer-fence-off = [] +# The negative control for the console backend's lock. It builds +# `serial_lock.rs`'s `try_lock` with `then_some`, whose argument is built on a +# lost exchange too and whose drop then releases the holder's lock, and +# `serial_lock.rs` must red: +# +# cargo test --manifest-path kernel-loom/Cargo.toml --features serial-try-lock-then-some \ +# --test serial_lock +# +# Never on by default and never reachable from a kernel build, which declares +# the same name only so `cfg` checking knows it. +serial-try-lock-then-some = [] + [dependencies] loom = "0.7" # The record layout the shard is a ring of. `no_std`, no atomics of its own, diff --git a/kernel-loom/src/lib.rs b/kernel-loom/src/lib.rs index 00bed39f2d0..36bc127f92f 100644 --- a/kernel-loom/src/lib.rs +++ b/kernel-loom/src/lib.rs @@ -365,3 +365,7 @@ pub mod capture_access; /// `tests/panic_console_publish.rs`. #[path = "../../kernel/src/drivers/panic_console/published.rs"] pub mod panic_console_published; + +/// The console backend's lock, driven by `tests/serial_lock.rs`. +#[path = "../../kernel/src/drivers/serial_lock.rs"] +pub mod serial_lock; diff --git a/kernel-loom/tests/serial_lock.rs b/kernel-loom/tests/serial_lock.rs new file mode 100644 index 00000000000..780abde1465 --- /dev/null +++ b/kernel-loom/tests/serial_lock.rs @@ -0,0 +1,51 @@ +//! Loom: a lost `try_lock` on the console backend leaves its holder holding. +//! +//! The console drain takes the backend with `try_lock` from every CPU that +//! logs, so a losing attempt is the common case beside another CPU's write. +//! A loss that released the lock let a third writer in under the holder. The +//! negative control is the `serial-try-lock-then-some` feature, which must red +//! this file. +#![cfg(feature = "loom")] + +use kernel_loom::serial_lock::BackendLock; +use loom::cell::UnsafeCell; +use loom::sync::Arc; +use loom::thread; + +/// One CPU: a loss while it holds the lock is a loss again on the next try. +#[test] +fn a_lost_try_lock_leaves_the_lock_held() { + loom::model(|| { + let lock = BackendLock::new(); + let held = lock.try_lock().expect("an unheld lock refused its first taker"); + assert!(lock.try_lock().is_none(), "a held lock was taken twice"); + assert!(lock.try_lock().is_none(), "a lost try_lock released the lock its holder still has"); + drop(held); + assert!(lock.try_lock().is_some(), "a released lock stayed held"); + }); +} + +/// Two CPUs, each trying twice: whoever gets in writes alone. +#[test] +fn two_writers_never_overlap() { + loom::model(|| { + let lock = Arc::new(BackendLock::new()); + let line = Arc::new(UnsafeCell::new(0u32)); + let writer = |lock: Arc, line: Arc>| { + move || { + for _ in 0..2 { + if let Some(held) = lock.try_lock() { + // SAFETY: the backend is held, so no other writer is in here. + line.with_mut(|n| unsafe { *n += 1 }); + drop(held); + return; + } + thread::yield_now(); + } + } + }; + let other = thread::spawn(writer(lock.clone(), line.clone())); + writer(lock.clone(), line.clone())(); + other.join().unwrap(); + }); +} diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 82b29f55d13..58c72cb9182 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -24,6 +24,10 @@ wake-fence-off = [] # and `kernel-loom/tests/panic_console_publish.rs` must red — a reader keeping a # descriptor that is half one publication and half the next. seqlock-writer-fence-off = [] +# The same for the console backend's lock: `kernel-loom` turns it on to build +# `drivers/serial_lock.rs`'s `try_lock` with `then_some`, whose lost exchange +# releases the holder's lock, and `kernel-loom/tests/serial_lock.rs` must red. +serial-try-lock-then-some = [] # The same arrangement for a poll ring's one-shot answer: `kernel-loom` turns it # on to split `inbox/once.rs`'s exchange into a load and a store, and # `kernel-loom/tests/poll_once.rs` must red when it does — a poll two posts diff --git a/kernel/src/drivers/mod.rs b/kernel/src/drivers/mod.rs index 7b85806128e..586cf961a4e 100644 --- a/kernel/src/drivers/mod.rs +++ b/kernel/src/drivers/mod.rs @@ -5,6 +5,7 @@ #![warn(clippy::undocumented_unsafe_blocks)] pub mod serial; +pub mod serial_lock; pub mod acpi; pub mod pci; pub mod nvme; diff --git a/kernel/src/drivers/serial.rs b/kernel/src/drivers/serial.rs index c9358fff62e..c0e440c31af 100644 --- a/kernel/src/drivers/serial.rs +++ b/kernel/src/drivers/serial.rs @@ -9,6 +9,7 @@ use core::sync::atomic::{AtomicBool, Ordering}; use crate::arch::IrqGuard; +use super::serial_lock::{BackendLock, Held}; use crate::arch::console_uart as uart; @@ -58,43 +59,27 @@ pub fn backend() -> Backend { } -static BACKEND_LOCKED: AtomicBool = AtomicBool::new(false); +static BACKEND: BackendLock = BackendLock::new(); /// Exclusive access to the serial backend; interrupts are off for as long as the guard lives. /// Same-CPU re-entry from an IRQ handler deadlocks the spin. pub struct BackendGuard { - // Dropped after `Drop::drop` releases the backend, so interrupts reopen last. + // Fields drop in order: the backend is released before interrupts reopen. + _held: Held<'static>, _irq: IrqGuard, } impl BackendGuard { pub fn lock() -> Self { let irq = IrqGuard::close(); - while BACKEND_LOCKED - .compare_exchange_weak(false, true, Ordering::Acquire, Ordering::Relaxed) - .is_err() - { - while BACKEND_LOCKED.load(Ordering::Relaxed) { - core::hint::spin_loop(); - } - } - Self { _irq: irq } + Self { _held: BACKEND.lock(), _irq: irq } } /// Non-blocking acquire: `None` if another CPU already holds the backend. pub fn try_lock() -> Option { let irq = IrqGuard::close(); - // Not `then_some`: its argument is built whether or not the exchange - // won, and a `BackendGuard` built on a loss drops, and its drop - // releases the backend another CPU holds. - if BACKEND_LOCKED - .compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed) - .is_ok() - { - Some(Self { _irq: irq }) - } else { - None - } + let held = BACKEND.try_lock()?; + Some(Self { _held: held, _irq: irq }) } /// Writes raw bytes with no escape stripping; callers must pre-strip via [`write_console`]. @@ -125,12 +110,6 @@ impl BackendGuard { } } -impl Drop for BackendGuard { - fn drop(&mut self) { - BACKEND_LOCKED.store(false, Ordering::Release); - } -} - pub fn has_data() -> bool { let g = BackendGuard::lock(); g.has_data() diff --git a/kernel/src/drivers/serial_lock.rs b/kernel/src/drivers/serial_lock.rs new file mode 100644 index 00000000000..6928a93ce80 --- /dev/null +++ b/kernel/src/drivers/serial_lock.rs @@ -0,0 +1,68 @@ +//! The console backend's one lock: a flag that only the [`Held`] a won +//! exchange returns ever clears, by its drop. A lost `try_lock` builds no +//! [`Held`], so it can never release the lock another CPU holds. +//! No `crate::` references: `kernel-loom` compiles this file directly under `feature = "loom"`. + +#[cfg(not(feature = "loom"))] +use core::sync::atomic::{AtomicBool, Ordering}; + +#[cfg(feature = "loom")] +use loom::sync::atomic::{AtomicBool, Ordering}; + +pub struct BackendLock { + locked: AtomicBool, +} + +/// The lock, held for as long as this lives. +pub struct Held<'a> { + lock: &'a BackendLock, +} + +impl BackendLock { + /// Must stay `const`: the backend's lock is a `static`. + #[cfg(not(feature = "loom"))] + pub const fn new() -> Self { + Self { locked: AtomicBool::new(false) } + } + + #[allow(clippy::new_without_default)] + #[cfg(feature = "loom")] + pub fn new() -> Self { + Self { locked: AtomicBool::new(false) } + } + + pub fn lock(&self) -> Held<'_> { + while self + .locked + .compare_exchange_weak(false, true, Ordering::Acquire, Ordering::Relaxed) + .is_err() + { + while self.locked.load(Ordering::Relaxed) { + core::hint::spin_loop(); + } + } + Held { lock: self } + } + + /// `None` if another holder has it. + pub fn try_lock(&self) -> Option> { + // Not `then_some`: its argument is built whether or not the exchange + // won, and a `Held` built on a loss drops, and its drop releases the + // lock another CPU holds. + let won = self.locked.compare_exchange(false, true, Ordering::Acquire, Ordering::Relaxed).is_ok(); + #[cfg(feature = "serial-try-lock-then-some")] + return won.then_some(Held { lock: self }); + #[cfg(not(feature = "serial-try-lock-then-some"))] + if won { + Some(Held { lock: self }) + } else { + None + } + } +} + +impl Drop for Held<'_> { + fn drop(&mut self) { + self.lock.locked.store(false, Ordering::Release); + } +} diff --git a/rust b/rust index c3cb792df3f..851c6bfcaa8 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit c3cb792df3f00ad64fe8ccc4571e4856ed13948b +Subproject commit 851c6bfcaa8ea836f836620055a40a41e966f1ac diff --git a/src/build.rs b/src/build.rs index e721a59b88b..ecf00814a25 100644 --- a/src/build.rs +++ b/src/build.rs @@ -2571,6 +2571,10 @@ mod tests { // only by `kernel-loom`, to drop the panic console publisher's // `Release` fence and prove `panic_console_publish` reds without it. "seqlock-writer-fence-off", + // Costs no kernel build: turned on only by `kernel-loom`, to build + // the backend lock's `try_lock` with `then_some` and prove + // `serial_lock` reds. + "serial-try-lock-then-some", "shard-publish-relaxed", "shootdown-serve-relaxed", // The eighth loom control, and the first over a *contended* diff --git a/src/ci.rs b/src/ci.rs index 1c66349bb12..f613131fb11 100644 --- a/src/ci.rs +++ b/src/ci.rs @@ -251,6 +251,10 @@ pub(crate) const CONTROLS: &[Control] = &[ red(KERNEL_LOOM, "seqlock-writer-fence-off", Some("panic_console_publish"), &[ "a_snapshot_is_one_publication_whole ... FAILED", ]), + red(KERNEL_LOOM, "serial-try-lock-then-some", Some("serial_lock"), &[ + "a_lost_try_lock_leaves_the_lock_held ... FAILED", + "two_writers_never_overlap ... FAILED", + ]), red(KERNEL_LOOM, "poison-overwrite", Some("poison_set"), &[ "a_second_death_banks_beside_the_first ... FAILED", ]), From 5a1b5147020088e5f106e6b4246bd7cdec779d87 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:40:52 +0200 Subject: [PATCH 30/50] aarch64: HCR_EL2 before any EL1 register, read back, and a boot that enters at EL2 The drop from EL2 wrote SCTLR_EL1, TCR_EL1, TTBR*_EL1, MAIR_EL1 and CPACR_EL1 before HCR_EL2. Under HCR_EL2.E2H=1 (firmware's VHE, or a CPU without FEAT_E2H0) each of those names is an EL2 register at EL2. HCR_EL2 is now written first, then an ISB, and read back: E2H set halts in refused_hcr_el2_e2h, any other difference in refused_hcr_el2_readback. The console is found after the drop, so the halted PC's symbol is the name. control_regs::check also asserts the CPU runs at EL1 on SP_EL1. Profile::VirtEl2 is virt with virtualization=on under TCG -cpu max, where AAVMF hands the loader the CPU at EL2. virt_el2_drop asserts "entered at EL2, HCR_EL2 read back as declared" and the early panic after it (990 ms). Deleting "msr hcr_el2" reds it (the boot halts silently, EXIT=1), as do SPSR_EL2 0x3C4 ("running at EL1 on SP_EL0", EXIT=1) and a declaration with E2H set (EXIT=1). Profile::arch names every variant: no wildcard answers x86 for a profile nobody classified. virt_early_panic and virt_early_fault wait on their last asserted line with drain_until instead of a flat one-second drain. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/arch/aarch64/boot.rs | 44 +++++++++++++++-- kernel/src/arch/aarch64/control_regs.rs | 9 +++- tests/common/qemu.rs | 64 ++++++++++++++++++++++--- tests/toyos.rs | 45 +++++++++++++++-- 4 files changed, 146 insertions(+), 16 deletions(-) diff --git a/kernel/src/arch/aarch64/boot.rs b/kernel/src/arch/aarch64/boot.rs index 9e84bbe9957..16f3df77b25 100644 --- a/kernel/src/arch/aarch64/boot.rs +++ b/kernel/src/arch/aarch64/boot.rs @@ -6,8 +6,9 @@ //! EL1, on firmware's identity tables — cleans the kernel image and its own //! tables to the point of coherency, and jumps to [`_start`]'s physical //! address with `x0 = &KernelArgs`. `_start` writes the -//! [`control_regs`](super::control_regs) declaration whole: at EL2 it programs -//! EL1's registers with the MMU already on and drops with `ERET`; at EL1 it +//! [`control_regs`](super::control_regs) declaration whole: at EL2 it writes +//! `HCR_EL2` first, halts in a named refusal unless it reads back as declared, +//! then programs EL1's registers with the MMU already on and drops with `ERET`; at EL1 it //! turns the MMU off first, so no translation register changes under a live //! walk. Either way it arrives at the kernel's link address in the view at //! `PHYS_OFFSET`, on the kernel's own stack, with the vectors installed, and @@ -68,16 +69,25 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { "isb", "ldr x1, =3f", "br x1", - // EL2: EL1's registers with the MMU on, EL2's as declared, then drop. + // EL2: `HCR_EL2` first, since with `E2H` set every `_el1` name + // below is an EL2 register; refused unless it reads back as declared. + // Then EL1's registers with the MMU on, EL2's others, and the drop. "2:", + "ldr x1, ={hcr}", + "msr hcr_el2, x1", + "isb", + "mrs x6, hcr_el2", + "tbz x6, #{e2h}, 4f", + "b {refuse_e2h}", + "4:", + "cmp x6, x1", + "b.ne {refuse_hcr}", "msr mair_el1, x4", "msr tcr_el1, x2", "msr ttbr0_el1, x3", "msr ttbr1_el1, x3", "msr cpacr_el1, xzr", "msr sctlr_el1, x5", - "ldr x1, ={hcr}", - "msr hcr_el2, x1", "mov x1, #{cnthctl}", "msr cnthctl_el2, x1", "msr cntvoff_el2, xzr", @@ -118,6 +128,9 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { sctlr = const regs::SCTLR, sctlr_off = const regs::SCTLR_MMU_OFF, hcr = const regs::HCR_EL2, + e2h = const regs::HCR_EL2_E2H, + refuse_e2h = sym refused_hcr_el2_e2h, + refuse_hcr = sym refused_hcr_el2_readback, cnthctl = const regs::CNTHCTL_EL2, cptr = const regs::CPTR_EL2, spsr = const regs::SPSR_EL2_TO_EL1, @@ -128,6 +141,27 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { ); } +/// Where a CPU entered at EL2 halts when `HCR_EL2.E2H` reads back set after the +/// entry wrote it clear: firmware's VHE it will not give up, or a CPU without +/// FEAT_E2H0, whose `E2H` is RES1. There, every `_el1` register the drop +/// programs would be EL2's own and `CPTR_EL2` has another layout, so the +/// kernel does not run. Nothing can report yet: the console is found after the +/// drop, so the refusal is this symbol, which the halted PC names. +#[unsafe(naked)] +#[no_mangle] +unsafe extern "C" fn refused_hcr_el2_e2h() -> ! { + core::arch::naked_asm!("1:", "wfe", "b 1b") +} + +/// Where a CPU entered at EL2 halts when `HCR_EL2` reads back anything but the +/// declaration the entry wrote, for [`refused_hcr_el2_e2h`]'s reason and +/// with its silence. +#[unsafe(naked)] +#[no_mangle] +unsafe extern "C" fn refused_hcr_el2_readback() -> ! { + core::arch::naked_asm!("1:", "wfe", "b 1b") +} + /// The ACPI tables this architecture decodes: the MADT for its GIC and CPUs, /// the FADT for PSCI and reset, the GTDT for the timer, the SPCR for the /// console, and the MCFG for ECAM. diff --git a/kernel/src/arch/aarch64/control_regs.rs b/kernel/src/arch/aarch64/control_regs.rs index 9844eaf7fad..17f2acf3a08 100644 --- a/kernel/src/arch/aarch64/control_regs.rs +++ b/kernel/src/arch/aarch64/control_regs.rs @@ -50,6 +50,10 @@ pub const CPACR: u64 = 0; /// no stage-2 translation, no trap, `E2H` clear. pub const HCR_EL2: u64 = 1 << 31; +/// `HCR_EL2.E2H`'s position. Set, EL2's registers take EL1's names and +/// layouts; the entry refuses a CPU on which it reads back set. +pub const HCR_EL2_E2H: u64 = 34; + /// `CNTHCTL_EL2` when entered at EL2: `EL1PCTEN` and `EL1PCEN`, so EL1 reads the /// physical counter and programs its timer without trapping. pub const CNTHCTL_EL2: u64 = 1 << 1 | 1 << 0; @@ -91,12 +95,15 @@ pub fn check() { for (name, live, value) in declared { assert_eq!(live, value, "control registers: {name} holds {live:#x}, and the declaration says {value:#x}"); } + // What the drop from EL2 left, or the EL1 entry kept: EL1, on `SP_EL1`. + let (el, spsel) = (read!("CurrentEL") >> 2 & 3, read!("SPSel") & 1); + assert_eq!((el, spsel), (1, 1), "control registers: running at EL{el} on SP_EL{spsel}, not EL1 on SP_EL1"); let el = ENTRY_EL.load(Ordering::Relaxed); log!( "control registers: SCTLR_EL1={SCTLR:#x} TCR_EL1={:#x} MAIR_EL1={:#x} CPACR_EL1={CPACR:#x}, \ as declared; entered at EL{el}{}", tcr(), MAIR, - if el == 2 { ", HCR_EL2/CNTHCTL_EL2/CPTR_EL2 written as declared and dropped to EL1" } else { "" }, + if el == 2 { ", HCR_EL2 read back as declared, CNTHCTL_EL2/CPTR_EL2 written, and dropped to EL1" } else { "" }, ); } diff --git a/tests/common/qemu.rs b/tests/common/qemu.rs index 7bc7875c572..314f244b44b 100644 --- a/tests/common/qemu.rs +++ b/tests/common/qemu.rs @@ -9,7 +9,7 @@ use std::time::{Duration, Instant}; use std::{fs, thread}; use super::compile; -use toyos_build::arch::Arch; +use toyos_build::arch::{Accel, Arch}; /// The architecture every machine this suite builds and boots is: the suite's /// q35 shapes, i8042 and VT-d are x86-64's, and the aarch64 bring-up boots @@ -1379,14 +1379,62 @@ pub enum Profile { /// IOMMU. The machine the AArch64 port reaches its console on, and the only /// profile that is not a q35. Virt, + /// [`Profile::Virt`] with EL2 (`virtualization=on`), emulated on `-cpu max`: + /// firmware then hands the loader the CPU at EL2, and the kernel's entry + /// has to drop from it. HVF gives a guest EL1 only. + VirtEl2, } impl Profile { - /// The architecture this machine is: every profile is a q35 but `Virt`. + /// The architecture this machine is. pub fn arch(self) -> Arch { match self { - Self::Virt => Arch::Aarch64, - _ => Arch::X86_64, + Self::Virt | Self::VirtEl2 => Arch::Aarch64, + Self::Headless + | Self::HeadlessNoIommu + | Self::VirtioNetNoMsix + | Self::E1000e + | Self::E1000eNoServer + | Self::E1000eBesideIgb + | Self::Gop + | Self::VirtioGpu + | Self::Metal + | Self::MetalNoUsb + | Self::InternalDisk + | Self::MetalUsb + | Self::MetalDisk + | Self::Diskless + | Self::NvmeWideSector + | Self::UsbDisk + | Self::UsbDisk4k + | Self::UsbDiskHuge + | Self::UsbDiskReadOnly + | Self::NvmeBootUsbDisk + | Self::UsbDiskRefusedFirst + | Self::UsbDiskCrowd + | Self::MetalFullSpeed + | Self::MetalXhciSecond + | Self::MetalXhciBoth + | Self::MetalXhciMsi + | Self::MetalXhciNoIrq + | Self::MetalXhciDeaf + | Self::MetalHotplug + | Self::NoIommu + | Self::IommuNarrow + | Self::IommuNoIntremap + | Self::IommuEim + | Self::Hda + | Self::HdaTwoLive => Arch::X86_64, + } + } + + /// How this host provides the machine: [`Profile::VirtEl2`] emulated, + /// since only emulation gives a guest EL2; every other as its + /// architecture's own. + pub fn accel(self) -> Accel { + match self { + Self::VirtEl2 => Accel::Tcg, + _ => self.arch().accel(), } } } @@ -1712,6 +1760,7 @@ pub const NVME_T14_BLOCKS: u64 = NVME_T14_BYTES / 4096; impl Profile { fn shape(self) -> Shape { match self { + Self::VirtEl2 => Self::Virt.shape(), Self::Virt => Shape { vga: "std", panel: None, @@ -4297,7 +4346,7 @@ fn qemu_command( qemu.arg("-boot").arg(boot); } - let accel = arch.accel(); + let accel = options.profile.accel(); if accel.is_hardware() { qemu.arg("-accel").arg(accel.name()); } @@ -4321,7 +4370,10 @@ fn qemu_command( // `virt` has no i8042 to take away, and the unit a profile declares // is VT-d, which it has none of either. assert!(options.i8042 && shape.iommu.is_none(), "`virt` has neither an i8042 nor VT-d"); - String::from("virt,gic-version=3") + String::from(match options.profile { + Profile::VirtEl2 => "virt,gic-version=3,virtualization=on", + _ => "virt,gic-version=3", + }) } }; if !options.i8042 { diff --git a/tests/toyos.rs b/tests/toyos.rs index 62caa713041..24a88d0c558 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -529,6 +529,10 @@ const AUDIO_TESTS: &[(&str, Tier)] = // first-class single-CPU case, smp=8 the full-SMP case. const AUDIO_SMP: &[u32] = &[1, 8]; +/// What `test-early-panic` panics with (`kernel/src/main.rs`): the last line its +/// report puts on serial. +const EARLY_PANIC_MESSAGE: &str = "test-early-panic: on-screen console check"; + // Tests that read a decoded screendump, which is exactly the set for which // the screen is the device under test: the panic console. On a machine with // no serial port the rendered report is the only diagnostic that exists, so @@ -594,6 +598,7 @@ const SCREEN_TESTS: &[(&str, Sched, Tier)] = &[ // AArch64 guests on QEMU `virt`: local, because no CI runner boots one yet. ("virt_early_panic", Sched::Parallel, Tier::Local), ("virt_early_fault", Sched::Parallel, Tier::Local), + ("virt_el2_drop", Sched::Parallel, Tier::Local), ]; /// What `screen_console_shell` types, and what it then looks for on its own. @@ -5859,7 +5864,7 @@ fn run_screen_test( }, ); let dump = qemu.screendump_until("EARLY PANIC:", Duration::from_secs(30)); - let rest = qemu.drain_serial(Duration::from_secs(1)); + let rest = qemu.drain_until(Duration::from_secs(10), |l| l.contains(EARLY_PANIC_MESSAGE)); let serial = format!("{}\n{rest}", qemu.boot_log()); eprintln!(" [virt] the panel is up {} ms after the boot began", started.elapsed().as_millis()); // What stage 3 prints before it panics: every item is a record @@ -5873,7 +5878,7 @@ fn run_screen_test( "ACPI: MADT GICC uid=0 mpidr=0x0 enabled=true", "ACPI: GTDT timers:", "EARLY PANIC: panicked at", - "test-early-panic: on-screen console check", + EARLY_PANIC_MESSAGE, ] { if !serial.contains(want) { return Err(format!("{want:?} not on the PL011\nserial:\n{serial}")); @@ -5894,6 +5899,37 @@ fn run_screen_test( )?; Ok(()) } + "virt_el2_drop" => { + // The entry's drop from EL2, which HVF never exercises: `virt` with + // EL2 under TCG, where firmware hands the loader the CPU at EL2. A + // drop that leaves `HCR_EL2` other than declared halts in a named + // refusal and says nothing; one that lands anywhere but EL1 on + // `SP_EL1` panics in the declaration's read-back. Either way the + // line this waits for never comes. + let mut qemu = QemuInstance::boot_with_options( + test_config, + &[], + &[], + BootOptions { + profile: qemu::Profile::VirtEl2, + kernel_params: &["test-early-panic"], + ready_marker: "EARLY PANIC:", + ..Default::default() + }, + ); + let rest = qemu.drain_until(Duration::from_secs(10), |l| l.contains(EARLY_PANIC_MESSAGE)); + let serial = format!("{}\n{rest}", qemu.boot_log()); + for want in [ + "as declared; entered at EL2, HCR_EL2 read back as declared", + "EARLY PANIC: panicked at", + EARLY_PANIC_MESSAGE, + ] { + if !serial.contains(want) { + return Err(format!("{want:?} not on the PL011\nserial:\n{serial}")); + } + } + Ok(()) + } "virt_early_fault" => { // The vectors, judged by the one thing a broken table cannot do: // report. An undefined instruction right after the console step @@ -5915,12 +5951,13 @@ fn run_screen_test( }, ); let dump = qemu.screendump_until("EARLY PANIC:", Duration::from_secs(30)); - let rest = qemu.drain_serial(Duration::from_secs(1)); + const FAULT_MESSAGE: &str = "synchronous from EL1 on SP_EL1: unknown reason (an undefined instruction) at 0x"; + let rest = qemu.drain_until(Duration::from_secs(10), |l| l.contains(FAULT_MESSAGE)); let serial = format!("{}\n{rest}", qemu.boot_log()); for want in [ "KERNEL PANIC: synchronous from EL1 on SP_EL1: unknown reason (an undefined instruction)", "EARLY PANIC: panicked at", - "synchronous from EL1 on SP_EL1: unknown reason (an undefined instruction) at 0x", + FAULT_MESSAGE, ] { if !serial.contains(want) { return Err(format!("{want:?} not on the PL011\nserial:\n{serial}")); From 5209a693e79d62118170fff0aae0f77f8752ffd9 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:41:05 +0200 Subject: [PATCH 31/50] TLS: each machine's psABI variant, and R_AARCH64_TLSDESC refused by name The kernel built x86-64's variant II for every thread, while the AArch64 std reads its DTV at TP+0 and lld resolves an AArch64 executable's own local-exec accesses to align_up(16, p_align) above TP. toyos_elf::tls now lays out either variant from a checked Static (alignments powers of two by construction), with tpoff per variant; the kernel takes the variant from its ELF machine, places the executable first in variant I and last in variant II, and writes each TCB: [self, DTV] or [DTV, reserved]. x86-64's arithmetic is unchanged. The oracle is rust-lld: an aarch64-unknown-toyos executable with a 64-aligned PT_TLS reads its .tdata offsets 0 and 0x40 at TP+0x40 and TP+0x80, which variant_i_agrees_with_what_lld_linked asserts. Mapping AArch64 to variant II reds each_machine_has_its_own_variant (EXIT=101). The fork's __toyos_tlsdesc_dynamic had no caller and no test, so it is deleted (rust 851c6bfcaa8, merged into toyos-inbox as 1d70812c40a), and RelocKind::TlsDesc makes rela::validate refuse R_AARCH64_TLSDESC by name for a library and, through ParsedRelaEntries, for an executable. Deleting the refusal reds an_aarch64_tls_descriptor_is_refused_by_name (EXIT=101). The resolver returns in the port's stage 5 with its loader half and a test. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/elf/index.rs | 11 ++- kernel/src/elf/reloc.rs | 16 +-- kernel/src/loader/mod.rs | 31 +++--- kernel/src/loader/tls.rs | 120 +++++++++++------------ kernel/src/process.rs | 15 ++- kernel/src/syscall/vm.rs | 4 +- toyos-elf/src/rela.rs | 16 ++- toyos-elf/src/tls.rs | 198 ++++++++++++++++++++++++++------------ toyos-elf/tests/tables.rs | 20 +++- toyos-elf/tests/tls.rs | 81 +++++++++++++--- 10 files changed, 337 insertions(+), 175 deletions(-) diff --git a/kernel/src/elf/index.rs b/kernel/src/elf/index.rs index 2100c790830..e20e9d6a1b3 100644 --- a/kernel/src/elf/index.rs +++ b/kernel/src/elf/index.rs @@ -17,6 +17,8 @@ pub struct ParsedRelaEntries { pub glob_dat: Vec<(u64, u32, i64)>, pub tpoff64: Vec<(u64, u32, i64)>, pub tpoff32: Vec<(u64, u32, i64)>, + /// `R_AARCH64_TLSDESC`, kept only so `rela::validate` refuses the image by name. + pub tlsdesc: Vec<(u64, u32, i64)>, } impl ParsedRelaEntries { @@ -35,7 +37,10 @@ impl ParsedRelaEntries { let t32 = self.tpoff32.iter().map(|&(offset, sym, addend)| Rela { offset, sym, kind: RelocKind::Tpoff32, addend, }); - rel.chain(bind).chain(t64).chain(t32) + let desc = self.tlsdesc.iter().map(|&(offset, sym, addend)| Rela { + offset, sym, kind: RelocKind::TlsDesc, addend, + }); + rel.chain(bind).chain(t64).chain(t32).chain(desc) } } @@ -49,7 +54,7 @@ pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Option(); - let kept = [RelocKind::Relative, RelocKind::GlobDat, RelocKind::Tpoff64, RelocKind::Tpoff32]; + let kept = [RelocKind::Relative, RelocKind::GlobDat, RelocKind::Tpoff64, RelocKind::Tpoff32, RelocKind::TlsDesc]; if counts.max_of(&kept).checked_mul(widest).is_none_or(|b| b > MAX_HEAP_ALLOC) { log!("ELF: {:?} will not fit one allocation", counts); return None; @@ -59,6 +64,7 @@ pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Option Option out.tpoff64.push((r.offset, r.sym, r.addend)), RelocKind::Tpoff32 => out.tpoff32.push((r.offset, r.sym, r.addend)), + RelocKind::TlsDesc => out.tlsdesc.push((r.offset, r.sym, r.addend)), _ => {} } } diff --git a/kernel/src/elf/reloc.rs b/kernel/src/elf/reloc.rs index 0dcd3b69b22..743c0533e55 100644 --- a/kernel/src/elf/reloc.rs +++ b/kernel/src/elf/reloc.rs @@ -137,19 +137,19 @@ pub fn resolve_lib_bind_relocs( pub fn apply_tpoff_relocs( lib: &LoadedLib, lib_base_offset: usize, - total_memsz: usize, + tls: toyos_elf::tls::Static, tls_info: &TlsModuleInfo, ) { let mut count64 = 0u64; for (offset, sym, addend) in lib.typed_entries(RelocKind::Tpoff64, |r| &r.tpoff64) { - let tpoff = compute_tpoff(lib, sym, addend, lib_base_offset, total_memsz, tls_info); + let tpoff = compute_tpoff(lib, sym, addend, lib_base_offset, tls, tls_info); // SAFETY: see write_at's `# Safety`. unsafe { lib.write_at::(offset, tpoff as u64) }; count64 += 1; } let mut count32 = 0u64; for (offset, sym, addend) in lib.typed_entries(RelocKind::Tpoff32, |r| &r.tpoff32) { - let tpoff = compute_tpoff(lib, sym, addend, lib_base_offset, total_memsz, tls_info); + let tpoff = compute_tpoff(lib, sym, addend, lib_base_offset, tls, tls_info); // SAFETY: see write_at's `# Safety`. unsafe { lib.write_at::(offset, tpoff as i32) }; count32 += 1; @@ -157,7 +157,7 @@ pub fn apply_tpoff_relocs( if count64 > 0 || count32 > 0 { log!( "dlopen: applied {} TPOFF64 + {} TPOFF32 relocs (base_offset={}, total_memsz={})", - count64, count32, lib_base_offset, total_memsz + count64, count32, lib_base_offset, tls.total_memsz() ); } } @@ -249,20 +249,20 @@ fn compute_tpoff( r_sym: u32, r_addend: i64, lib_base_offset: usize, - total_memsz: usize, + tls: toyos_elf::tls::Static, tls_info: &TlsModuleInfo, ) -> i64 { if r_sym == 0 { - return toyos_elf::tls::tpoff(lib_base_offset as u64, r_addend, total_memsz); + return tls.tpoff(lib_base_offset as u64, r_addend); } let symbols = lib.symbols(); if let Some(sym) = symbols.get(r_sym as usize).filter(|s| s.is_defined()) { - return toyos_elf::tls::tpoff(lib_base_offset as u64 + sym.value, r_addend, total_memsz); + return tls.tpoff(lib_base_offset as u64 + sym.value, r_addend); } let name = symbols.name(r_sym as usize); match defining_module(name, tls_info) { Some((module, sym_offset)) => { - toyos_elf::tls::tpoff(module.base_offset as u64 + sym_offset, r_addend, total_memsz) + tls.tpoff(module.base_offset as u64 + sym_offset, r_addend) } None => { log!("tpoff: unresolved TLS symbol: {}", name); diff --git a/kernel/src/loader/mod.rs b/kernel/src/loader/mod.rs index cb9f3b89e00..ed52efd47f4 100644 --- a/kernel/src/loader/mod.rs +++ b/kernel/src/loader/mod.rs @@ -17,7 +17,7 @@ mod tls; pub use start::{build_child_handles, PendingHandles, SLOT_PAIR_LEN}; pub(crate) use start::alloc_kernel_stack; pub(crate) use crate::arch::entry::{kernel_start, process_start, thread_start}; -pub use tls::{setup_combined_tls, setup_tls, DTV_INITIAL_CAPACITY}; +pub use tls::{setup_combined_tls, setup_tls, DTV_INITIAL_CAPACITY, VARIANT as TLS_VARIANT}; pub(crate) use tls::rebase_block; use alloc::string::String; @@ -536,7 +536,7 @@ pub fn spawn( None => None, }; - let Some((tls_modules, tls_total_memsz, max_tls_align, next_tls_module_id)) = + let Some((tls_modules, tls, next_tls_module_id)) = tls::build_tls_layout(&loaded_libs.libs, &layout, exe_tls_template.as_ref()) else { log!("spawn: {}: the TLS modules do not fit one block", path); @@ -544,7 +544,7 @@ pub fn spawn( }; apply_tls_relocs(&exe, backing.as_ref(), &loaded_libs.libs, &tls_modules, - tls_total_memsz, &mut reloc_index); + tls, &mut reloc_index); reloc_index.finalize(); let reloc_index = if reloc_index.len() > 0 { @@ -554,11 +554,11 @@ pub fn spawn( None }; - log!("spawn: TLS {} modules, total_memsz={}", tls_modules.len(), tls_total_memsz); + log!("spawn: TLS {} modules, total_memsz={}", tls_modules.len(), tls.total_memsz()); let Some((tls_pages, fs_base)) = - tls::map_block(&child_pt, &tls_modules, tls_total_memsz, max_tls_align) + tls::map_block(&child_pt, &tls_modules, tls) else { - log!("spawn: {}: failed to allocate TLS ({} bytes)", path, tls_total_memsz); + log!("spawn: {}: failed to allocate TLS ({} bytes)", path, tls.total_memsz()); return Err(SyscallError::ResourceExhausted.into()); }; @@ -594,8 +594,7 @@ pub fn spawn( elf: ElfInfo { elf_alloc: exe_tls_template, tls_modules, - tls_total_memsz, - tls_max_align: max_tls_align, + tls, next_tls_module_id, dynamic_tls_blocks: alloc::collections::BTreeMap::new(), loaded_libs, @@ -795,7 +794,7 @@ fn apply_tls_relocs( backing: &dyn crate::file_backing::FileBacking, loaded_libs: &[elf::LoadedLib], tls_modules: &[elf::TlsModule], - tls_total_memsz: usize, + tls: toyos_elf::tls::Static, reloc_index: &mut elf::RelocationIndex, ) { let tls_info = elf::TlsModuleInfo { libs: loaded_libs, modules: tls_modules }; @@ -804,7 +803,7 @@ fn apply_tls_relocs( let module = tls_modules.iter().find(|m| m.template == lib.tls_template); let base_offset = module.map_or(0, |m| m.base_offset); // Initial-exec: references to TLS in the static block. - elf::apply_tpoff_relocs(lib, base_offset, tls_total_memsz, &tls_info); + elf::apply_tpoff_relocs(lib, base_offset, tls, &tls_info); // General-dynamic: this lib's own TLS, reached through the DTV. if let Some(m) = module { elf::apply_dtpmod_relocs(lib, m.module_id, &tls_info); @@ -817,12 +816,12 @@ fn apply_tls_relocs( .map_or(0, |m| m.base_offset); for &(r_offset, r_sym, r_addend) in &exe.relas.tpoff64 { let tpoff = exe_tpoff(exe, backing, r_sym, r_addend, exe_base_offset, - tls_total_memsz, &tls_info); + tls, &tls_info); reloc_index.add_u64(r_offset, tpoff as u64); } for &(r_offset, r_sym, r_addend) in &exe.relas.tpoff32 { let tpoff = exe_tpoff(exe, backing, r_sym, r_addend, exe_base_offset, - tls_total_memsz, &tls_info); + tls, &tls_info); reloc_index.add_i32(r_offset, tpoff as i32); } } @@ -838,10 +837,10 @@ fn exe_tpoff( r_sym: u32, r_addend: i64, exe_base_offset: usize, - total_memsz: usize, + tls: toyos_elf::tls::Static, tls_info: &elf::TlsModuleInfo, ) -> i64 { - let unnamed = toyos_elf::tls::tpoff(exe_base_offset as u64, r_addend, total_memsz); + let unnamed = tls.tpoff(exe_base_offset as u64, r_addend); if r_sym == 0 { return unnamed; } @@ -849,7 +848,7 @@ fn exe_tpoff( return unnamed; }; if sym.is_defined() { - return toyos_elf::tls::tpoff(exe_base_offset as u64 + sym.value, r_addend, total_memsz); + return tls.tpoff(exe_base_offset as u64 + sym.value, r_addend); } let name = toyos_elf::cstr(&exe.dynstr, sym.name as u64); @@ -858,7 +857,7 @@ fn exe_tpoff( // rather than guessed at with base_offset 0. match elf::defining_module(name, tls_info) { Some((module, sym_offset)) => { - toyos_elf::tls::tpoff(module.base_offset as u64 + sym_offset, r_addend, total_memsz) + tls.tpoff(module.base_offset as u64 + sym_offset, r_addend) } None => { log!("tpoff: unresolved exe TLS symbol: {}", name); diff --git a/kernel/src/loader/tls.rs b/kernel/src/loader/tls.rs index cf25b920c23..fb01f221452 100644 --- a/kernel/src/loader/tls.rs +++ b/kernel/src/loader/tls.rs @@ -1,13 +1,18 @@ -//! A thread's TLS block: x86-64 variant II with the DTV in front of the data, built holding -//! physical addresses that `rebase_block` shifts once the block is mapped. The layout -//! arithmetic is `toyos_elf::tls`; this is the allocation, the template copies and the DTV. +//! A thread's TLS block, in this machine's psABI variant with the DTV in front of it, built +//! holding physical addresses that `rebase_block` shifts once the block is mapped. The layout +//! arithmetic is `toyos_elf::tls`; this is the allocation, the template copies, the TCB and the DTV. use crate::elf::TlsModule; use crate::mm::KernelSlice; use crate::process::{OwnedAlloc, PageAlloc}; use crate::DirectMap; +use toyos_elf::tls::{Static, Variant}; use toyos_elf::Layout; +/// This machine's TLS layout. +pub const VARIANT: Variant = Variant::of(crate::arch::ELF_MACHINE); + +/// Variant II's TCB; variant I's is the gap `toyos_elf::tls` leaves below the data. const TCB_SIZE: usize = 64; /// Module entries a thread's DTV can hold; `SYS_TLS_ALLOC_BLOCK` refuses a module id above it: there is nowhere to record the answer. pub const DTV_INITIAL_CAPACITY: usize = 64; @@ -23,6 +28,7 @@ pub fn setup_tls( tls_memsz: usize, tls_align: usize, ) -> Option<(PageAlloc, u64)> { + let tls = Static::new(VARIANT, tls_memsz, tls_align, tls_align)?; setup_combined_tls( &[TlsModule { template: tls_template, @@ -31,24 +37,13 @@ pub fn setup_tls( module_id: 1, is_static: true, }], - tls_memsz, - tls_align, + tls, ) } /// One thread's TLS block for every static module; `None` when no allocation holds the layout. -pub fn setup_combined_tls( - modules: &[TlsModule], - total_memsz: usize, - tls_align: usize, -) -> Option<(PageAlloc, u64)> { - let plan = toyos_elf::tls::plan( - total_memsz, - tls_align, - TCB_SIZE, - DTV_BYTES, - crate::mm::PAGE_2M as usize, - )?; +pub fn setup_combined_tls(modules: &[TlsModule], tls: Static) -> Option<(PageAlloc, u64)> { + let plan = tls.plan(TCB_SIZE, DTV_BYTES, crate::mm::PAGE_2M as usize)?; let page_alloc = PageAlloc::new(plan.alloc_size, crate::mm::pmm::Category::InitTls)?; let block = page_alloc.ptr(); @@ -74,11 +69,18 @@ pub fn setup_combined_tls( let tp_user = block_phys + plan.tp_offset as u64; // SAFETY: the plan reserves `TCB_SIZE` bytes at `tp_offset` inside `alloc_size`. let tp_kernel = unsafe { block.add(plan.tp_offset) } as *mut u64; - // TP+0 is the psABI self-pointer, TP+8 the DTV pointer. - // SAFETY: two words of the `TCB_SIZE` reserved at `tp_kernel`; `block` is still unpublished. + // SAFETY: two words of the TCB the plan reserves at `tp_kernel` (`TCB_SIZE`, or + // variant I's gap of at least 16); `block` is still unpublished. unsafe { - *tp_kernel = tp_user; - *tp_kernel.add(1) = block_phys; + match VARIANT { + // TP+0 the psABI self-pointer, TP+8 the DTV pointer. + Variant::II => { + *tp_kernel = tp_user; + *tp_kernel.add(1) = block_phys; + } + // TP+0 the DTV pointer, TP+8 reserved (zeroed above). + Variant::I => *tp_kernel = block_phys, + } } let dtv = block as *mut u64; @@ -110,8 +112,13 @@ pub(crate) unsafe fn rebase_block(phys: u64, tp_offset: usize, fs_base: u64, reb unsafe { let block = DirectMap::from_phys(phys).as_mut_ptr::(); let tp = block.add(tp_offset) as *mut u64; - *tp = fs_base; - *tp.add(1) = (*tp.add(1) as i64 + rebase) as u64; + match VARIANT { + Variant::II => { + *tp = fs_base; + *tp.add(1) = (*tp.add(1) as i64 + rebase) as u64; + } + Variant::I => *tp = (*tp as i64 + rebase) as u64, + } let dtv = block as *mut u64; let dtv_len = *dtv.add(1) as usize; for i in 0..dtv_len { @@ -127,11 +134,10 @@ pub(crate) unsafe fn rebase_block(phys: u64, tp_offset: usize, fs_base: u64, reb pub fn map_block( child_pt: &crate::process::PageTables, modules: &[TlsModule], - total_memsz: usize, - max_align: usize, + tls: Static, ) -> Option<(crate::process::MappedPages, u64)> { - let (alloc, fs_base) = if total_memsz > 0 { - setup_combined_tls(modules, total_memsz, max_align)? + let (alloc, fs_base) = if tls.total_memsz() > 0 { + setup_combined_tls(modules, tls)? } else { setup_tls(None, 0, 1)? }; @@ -149,48 +155,38 @@ pub fn map_block( } /// One combined block for every startup module; `None` when they do not fit, since a missing module would mean relocations resolving against a block that is not there. +/// The executable's module goes where its linker resolved its own accesses: next to the thread +/// pointer, last in variant II and first in variant I. pub fn build_tls_layout( loaded_libs: &[crate::elf::LoadedLib], layout: &Layout, exe_tls_template: Option<&OwnedAlloc>, -) -> Option<(alloc::vec::Vec, usize, usize, u64)> { - let exe = layout.tls.filter(|t| t.memsz > 0); - let libs = loaded_libs.iter().filter(|lib| lib.tls_memsz > 0); +) -> Option<(alloc::vec::Vec, Static, u64)> { + // (template, memsz, align, module id). Module id 1 is the executable's; libraries start at 2. + let exe = layout.tls.filter(|t| t.memsz > 0).map(|tls| { + (exe_tls_template.map(|buf| buf.slice(tls.filesz as usize)), tls.memsz as usize, tls.align as usize, 1) + }); + let libs = loaded_libs + .iter() + .filter(|lib| lib.tls_memsz > 0) + .zip(2u64..) + .map(|(lib, id)| (lib.tls_template, lib.tls_memsz, lib.tls_align, id)); + let next_module_id = 2 + loaded_libs.iter().filter(|lib| lib.tls_memsz > 0).count() as u64; + let order: alloc::vec::Vec<_> = match VARIANT { + Variant::II => libs.chain(exe).collect(), + Variant::I => exe.into_iter().chain(libs).collect(), + }; - let mut modules = alloc::vec::Vec::with_capacity(loaded_libs.len() + 1); + let mut modules = alloc::vec::Vec::with_capacity(order.len()); let mut cursor = 0usize; let mut max_align = 1usize; - // Module id 1 is the executable's; libraries start at 2. - let mut next_module_id = 2u64; - - for lib in libs { - let (base_offset, next) = - toyos_elf::tls::place_module(cursor, lib.tls_memsz, lib.tls_align)?; - cursor = next; - max_align = max_align.max(lib.tls_align); - modules.push(TlsModule { - template: lib.tls_template, - memsz: lib.tls_memsz, - base_offset, - module_id: next_module_id, - is_static: true, - }); - next_module_id += 1; - } - - if let Some(tls) = exe { - let (base_offset, next) = - toyos_elf::tls::place_module(cursor, tls.memsz as usize, tls.align as usize)?; + for (template, memsz, align, module_id) in order.iter().copied() { + let (base_offset, next) = toyos_elf::tls::place_module(cursor, memsz, align)?; cursor = next; - max_align = max_align.max(tls.align as usize); - modules.push(TlsModule { - template: exe_tls_template.map(|buf| buf.slice(tls.filesz as usize)), - memsz: tls.memsz as usize, - base_offset, - module_id: 1, - is_static: true, - }); + max_align = max_align.max(align); + modules.push(TlsModule { template, memsz, base_offset, module_id, is_static: true }); } - - Some((modules, cursor, max_align, next_module_id)) + let first_align = order.first().map_or(1, |&(_, _, align, _)| align); + let tls = Static::new(VARIANT, cursor, max_align, first_align)?; + Some((modules, tls, next_module_id)) } diff --git a/kernel/src/process.rs b/kernel/src/process.rs index 96679eeda37..cbba1e3a80a 100644 --- a/kernel/src/process.rs +++ b/kernel/src/process.rs @@ -436,8 +436,8 @@ impl PageFaultTrace { pub struct ElfInfo { pub elf_alloc: Option, pub tls_modules: Vec, - pub tls_total_memsz: usize, - pub tls_max_align: usize, + /// Every static module's TLS, as a thread's block is laid out from it. + pub tls: toyos_elf::tls::Static, /// Next module ID to assign on dlopen (1-based, exe=1). pub next_tls_module_id: u64, /// Dynamically allocated TLS blocks for dlopen'd modules, keyed by (Tid, module_id). @@ -462,8 +462,7 @@ impl ElfInfo { Self { elf_alloc: None, tls_modules: Vec::new(), - tls_total_memsz: 0, - tls_max_align: 0, + tls: toyos_elf::tls::Static::empty(crate::loader::TLS_VARIANT), next_tls_module_id: 1, dynamic_tls_blocks: alloc::collections::BTreeMap::new(), loaded_libs: Vec::new(), @@ -830,16 +829,16 @@ pub fn spawn_thread(entry: u64, stack_ptr: u64, arg: u64, stack_base: u64) -> Op .expect("spawn_thread: the spawning thread runs in an address space"); (addr_space, Arc::clone(&proc.process_data)) }; - let (tls_modules, tls_total_memsz, tls_max_align) = { + let (tls_modules, tls) = { let data = process_data_arc.lock(); - (data.elf.tls_modules.clone(), data.elf.tls_total_memsz, data.elf.tls_max_align) + (data.elf.tls_modules.clone(), data.elf.tls) }; // Phase 2: allocate TLS outside any lock. An empty module set still gets a DTV+TCB block via `setup_tls(None, 0, ..)`. let (tls_alloc, fs_base) = if !tls_modules.is_empty() { - setup_combined_tls(&tls_modules, tls_total_memsz, tls_max_align)? + setup_combined_tls(&tls_modules, tls)? } else { - setup_tls(None, 0, tls_max_align)? + setup_tls(None, 0, tls.max_align())? }; let (tls_alloc, fs_base) = { let addr_space = &parent_addr_space; diff --git a/kernel/src/syscall/vm.rs b/kernel/src/syscall/vm.rs index eed543d99aa..67788d95ef0 100644 --- a/kernel/src/syscall/vm.rs +++ b/kernel/src/syscall/vm.rs @@ -283,12 +283,12 @@ pub(super) fn sys_dlopen(ctx: &crate::user_ptr::SyscallContext, path: &str, init let data = data_arc.lock(); crate::elf::resolve_dlopen_relocs(&lib, &data.elf.loaded_libs); - if data.elf.tls_total_memsz > 0 { + if data.elf.tls.total_memsz() > 0 { let tls_info = crate::elf::TlsModuleInfo { libs: &data.elf.loaded_libs, modules: &data.elf.tls_modules, }; - crate::elf::apply_tpoff_relocs(&lib, 0, data.elf.tls_total_memsz, &tls_info); + crate::elf::apply_tpoff_relocs(&lib, 0, data.elf.tls, &tls_info); } // init_info layout: [init_array_vaddr, init_array_count], vaddr rebased to user_base. diff --git a/toyos-elf/src/rela.rs b/toyos-elf/src/rela.rs index c1a9cdf77f7..4b942a24ac5 100644 --- a/toyos-elf/src/rela.rs +++ b/toyos-elf/src/rela.rs @@ -35,6 +35,9 @@ pub enum RelocKind { Tpoff64, /// `R_X86_64_TPOFF32`; AArch64 has no 32-bit thread-pointer offset. Tpoff32, + /// `R_AARCH64_TLSDESC`: a TLS descriptor, whose resolver this loader does + /// not have, so [`validate`] refuses it. + TlsDesc, Other(u32), } @@ -48,6 +51,7 @@ impl RelocKind { (Machine::X86_64, 17) | (Machine::Aarch64, 1029) => RelocKind::DtpOff64, (Machine::X86_64, 18) | (Machine::Aarch64, 1030) => RelocKind::Tpoff64, (Machine::X86_64, 23) => RelocKind::Tpoff32, + (Machine::Aarch64, 1031) => RelocKind::TlsDesc, (_, other) => RelocKind::Other(other), } } @@ -63,7 +67,7 @@ impl RelocKind { | RelocKind::DtpOff64 | RelocKind::Tpoff64 => Some(8), RelocKind::Tpoff32 => Some(4), - RelocKind::Other(_) => None, + RelocKind::TlsDesc | RelocKind::Other(_) => None, } } @@ -149,6 +153,7 @@ pub struct RelaCounts { pub tpoff32: usize, pub dtpmod64: usize, pub dtpoff64: usize, + pub tlsdesc: usize, } impl RelaCounts { @@ -162,6 +167,7 @@ impl RelaCounts { RelocKind::Tpoff32 => &mut counts.tpoff32, RelocKind::DtpMod64 => &mut counts.dtpmod64, RelocKind::DtpOff64 => &mut counts.dtpoff64, + RelocKind::TlsDesc => &mut counts.tlsdesc, RelocKind::Other(_) => continue, }; *slot += 1; @@ -188,6 +194,7 @@ impl RelaCounts { RelocKind::Tpoff32 => self.tpoff32, RelocKind::DtpMod64 => self.dtpmod64, RelocKind::DtpOff64 => self.dtpoff64, + RelocKind::TlsDesc => self.tlsdesc, RelocKind::Other(_) => 0, } } @@ -217,6 +224,9 @@ pub enum RelocError { SymbolPastTable, /// The write would cross a fill page, so a chunked writer would drop it. StraddlesFillPage, + /// A TLS descriptor, which only a resolver this loader does not have can + /// fill. + TlsDescriptor, } impl RelocError { @@ -226,6 +236,7 @@ impl RelocError { RelocError::OutsideWindow => "ELF: relocation r_offset outside the writable image", RelocError::SymbolPastTable => "ELF: relocation r_sym past .dynsym", RelocError::StraddlesFillPage => "ELF: relocation crosses a fill-page boundary", + RelocError::TlsDescriptor => "ELF: R_AARCH64_TLSDESC has no resolver in this loader", } } } @@ -296,6 +307,9 @@ pub fn validate( ) -> Result<(), RelocError> { let (lo, hi) = window; for rela in entries { + if rela.kind == RelocKind::TlsDesc { + return Err(RelocError::TlsDescriptor); + } let Some(width) = rela.kind.write_width() else { continue; }; diff --git a/toyos-elf/src/tls.rs b/toyos-elf/src/tls.rs index b85b597f57f..c26d639dad3 100644 --- a/toyos-elf/src/tls.rs +++ b/toyos-elf/src/tls.rs @@ -1,18 +1,60 @@ -//! Where everything goes inside a thread's TLS allocation. -//! -//! x86-64 variant II, plus the DTV the kernel writes in front of it: +//! Where everything goes inside a thread's TLS allocation, in the layout each +//! machine's psABI names ([`Variant`]), with the DTV the kernel writes at the +//! front of the allocation: //! //! ```text -//! [DTV] [alignment padding] [TLS data (.tdata + .tbss)] [TCB] -//! ^ data_start ^ thread pointer +//! variant II (x86-64): [DTV] [pad] [TLS data (.tdata + .tbss)] [TCB] +//! ^ tls_start ^ thread pointer +//! variant I (AArch64): [DTV] [pad] [TCB] [TLS data (.tdata + .tbss)] +//! ^ thread pointer, tls_start - gap //! ``` //! -//! The linker computes `TPOFF = sym_offset - memsz` raw, so the thread pointer -//! sits at `data_start + memsz` and `data_start` must carry the largest -//! alignment any module asked for. Both of those are sums of numbers a file -//! declared, which is why every step here is checked and the whole thing is a -//! pure function: `dtv_bytes <= tls_start` is the property, and it used to be -//! an assertion in the kernel reached from a crafted `PT_TLS`. +//! Variant II: the linker computes `TPOFF = sym_offset - memsz` raw, so the +//! thread pointer sits at `tls_start + memsz`. Variant I: the linker computes +//! `TPOFF = align_up(16, p_align) + sym_offset` from the executable's own +//! `PT_TLS`, so the executable's block is the first one, `gap` above the +//! thread pointer. Either way `tls_start` carries the largest alignment any +//! module asked for. Every input is a sum of numbers a file declared, which is +//! why every step here is checked and the whole thing is a pure function: +//! `dtv_bytes <= tls_start` is the property, and it used to be an assertion in +//! the kernel reached from a crafted `PT_TLS`. + +use crate::header::Machine; + +/// Which of the psABIs' two TLS layouts a machine uses. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Variant { + /// The thread pointer addresses a two-word TCB, `[DTV, reserved]`, and the + /// first module's data follows it. + I, + /// The thread pointer addresses a TCB, `[self, DTV]`, after the last + /// module's data. + II, +} + +impl Variant { + pub const fn of(machine: Machine) -> Variant { + match machine { + Machine::X86_64 => Variant::II, + Machine::Aarch64 => Variant::I, + } + } +} + +/// A thread's static TLS, as much of it as its layout depends on. Its +/// alignments are powers of two, or it does not exist ([`Static::new`]). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct Static { + variant: Variant, + /// Every static module's bytes, placed by [`place_module`]. + total_memsz: usize, + /// The largest `p_align` any static module declared, "no constraint" as 8. + max_align: usize, + /// The `p_align` of the module at offset 0, "no constraint" as 8: variant + /// I's executable, whose linker fixed its distance from the thread pointer + /// from it. + first_align: usize, +} /// A planned TLS allocation, in offsets from the base of one block. #[derive(Clone, Copy, Debug, PartialEq, Eq)] @@ -22,56 +64,92 @@ pub struct TlsBlock { /// Where the first module's TLS data begins. Aligned to the requested /// alignment, and never below `dtv_bytes`. pub tls_start: usize, - /// Where the thread pointer goes: `tls_start + total_memsz`. + /// Where the thread pointer goes. pub tp_offset: usize, } -/// Lay out one thread's TLS block, or `None` for a layout no allocation can -/// hold. -/// -/// `align` is `PT_TLS`'s `p_align` — zero or one mean "no constraint" and -/// become 8. It has already been established a power of two no larger than -/// [`crate::MAX_TLS_ALIGN`] by [`crate::Layout::parse`], which is what makes -/// `!(align - 1)` a mask here. -/// -/// `granule` is the allocation unit the block is rounded up to, and -/// `dtv_bytes` the fixed header the kernel writes at offset zero. Both are -/// kernel constants; everything else came out of a file. -pub fn plan( - total_memsz: usize, - align: usize, - tcb_size: usize, - dtv_bytes: usize, - granule: usize, -) -> Option { - debug_assert!(granule.is_power_of_two()); - if align != 0 && !align.is_power_of_two() { - return None; +impl Static { + /// `None` for an alignment that is not a power of two: a mask that is not + /// a mask can place the data anywhere. Zero and one mean "no constraint". + pub fn new(variant: Variant, total_memsz: usize, max_align: usize, first_align: usize) -> Option { + Some(Static { variant, total_memsz, max_align: effective(max_align)?, first_align: effective(first_align)? }) + } + + pub fn variant(self) -> Variant { + self.variant + } + + pub fn total_memsz(self) -> usize { + self.total_memsz + } + + pub fn max_align(self) -> usize { + self.max_align + } + + /// No module at all: what a thread of a program without TLS is given. + pub const fn empty(variant: Variant) -> Static { + Static { variant, total_memsz: 0, max_align: 8, first_align: 8 } + } + + /// Lay out one thread's TLS block, or `None` for a layout no allocation + /// can hold. + /// + /// `granule` is the allocation unit the block is rounded up to, + /// `dtv_bytes` the fixed header the kernel writes at offset zero, and + /// `tcb_size` variant II's TCB; variant I's is the `gap` below its data. + /// All three are kernel constants; everything else came out of a file. + pub fn plan(self, tcb_size: usize, dtv_bytes: usize, granule: usize) -> Option { + debug_assert!(granule.is_power_of_two()); + let align = self.max_align; + match self.variant { + Variant::II => { + let block_size = self.total_memsz.checked_add(tcb_size)?; + // The DTV goes at the start of this same allocation and the TLS + // data is placed `align`-aligned above it, so both belong in + // the size. Sizing from the block and the alignment alone left + // `tls_start` free to land inside the DTV. + let alloc_size = + align_up(block_size.checked_add(dtv_bytes)?.checked_add(align)?, granule)?; + // Rounding *down* by `align` loses less than `align`, and + // `align` was one of the addends — so this is at least + // `dtv_bytes + 1` and the DTV can never be overwritten by TLS + // data. + let tls_start = (alloc_size - block_size) & !(align - 1); + Some(TlsBlock { alloc_size, tls_start, tp_offset: tls_start + self.total_memsz }) + } + Variant::I => { + let gap = self.gap(); + // At least 16, so the thread pointer `gap` below is 16-aligned. + let tls_start = align_up(dtv_bytes.checked_add(gap)?, align.max(16))?; + let alloc_size = align_up(tls_start.checked_add(self.total_memsz)?, granule)?; + Some(TlsBlock { alloc_size, tls_start, tp_offset: tls_start - gap }) + } + } + } + + /// A static-TLS datum's initial-exec offset from the thread pointer: psABI + /// `S + A - tp`, where `module_addr` is `S` (its module's `base_offset` + /// plus the datum's offset) from `tls_start`. Every `TPOFF` branch passes + /// the addend here, so none can drop `A`. + pub fn tpoff(self, module_addr: u64, addend: i64) -> i64 { + let from_start = module_addr as i64 + addend; + match self.variant { + Variant::II => from_start - self.total_memsz as i64, + Variant::I => from_start + self.gap() as i64, + } + } + + /// Variant I's distance from the thread pointer to the first module's + /// data: `align_up(16, p_align)` of that module, the linker's own. + fn gap(self) -> usize { + self.first_align.max(16) } - let align = if align > 1 { align } else { 8 }; - - let block_size = total_memsz.checked_add(tcb_size)?; - // The DTV goes at the start of this same allocation and the TLS data is - // placed `align`-aligned above it, so both belong in the size. Sizing from - // the block and the alignment alone left `tls_start` free to land inside - // the DTV. - let alloc_size = align_up(block_size.checked_add(dtv_bytes)?.checked_add(align)?, granule)?; - - // Rounding *down* by `align` loses less than `align`, and `align` was one - // of the addends — so this is at least `dtv_bytes + 1` and the DTV can - // never be overwritten by TLS data. - let tls_start = (alloc_size - block_size) & !(align - 1); - - Some(TlsBlock { - alloc_size, - tls_start, - tp_offset: tls_start + total_memsz, - }) } /// One module's placement in a combined block: `cursor` rounded up to the -/// module's own `p_align` (psABI variant II, not a shared constant), floored at -/// the 16 `cmpxchg16b` needs. `align` is a power of two ≤ [`crate::MAX_TLS_ALIGN`] +/// module's own `p_align` (psABI, not a shared constant), floored at the 16 +/// `cmpxchg16b` needs. `align` is a power of two ≤ [`crate::MAX_TLS_ALIGN`] /// by [`crate::Layout::parse`]; `tls_start` carries the max, so a base on the /// module's own align lands the module on it. pub fn place_module(cursor: usize, memsz: usize, align: usize) -> Option<(usize, usize)> { @@ -80,12 +158,12 @@ pub fn place_module(cursor: usize, memsz: usize, align: usize) -> Option<(usize, Some((base, base.checked_add(memsz)?)) } -/// A static-TLS datum's initial-exec offset from the thread pointer: psABI -/// `S + A - tp`, where `module_addr` is `S` (its module's `base_offset` plus the -/// datum's offset) and `tp` sits `total_memsz` past the same origin. Every -/// `TPOFF` branch passes the addend here, so none can drop `A`. -pub fn tpoff(module_addr: u64, addend: i64, total_memsz: usize) -> i64 { - module_addr as i64 + addend - total_memsz as i64 +/// `align`, with "no constraint" as 8; `None` for one that is not a power of two. +fn effective(align: usize) -> Option { + if align != 0 && !align.is_power_of_two() { + return None; + } + Some(if align > 1 { align } else { 8 }) } fn align_up(value: usize, granule: usize) -> Option { diff --git a/toyos-elf/tests/tables.rs b/toyos-elf/tests/tables.rs index 9ce78e2da96..cfa14adccf7 100644 --- a/toyos-elf/tests/tables.rs +++ b/toyos-elf/tests/tables.rs @@ -235,6 +235,24 @@ fn every_written_type_is_validated_and_no_other_is() { assert_eq!(rela::validate(RelaTable::new(&ignored, Machine::X86_64).iter(), window, 0, None), Ok(())); } +/// A TLS descriptor is filled by a resolver this loader does not have, so an +/// AArch64 image that needs one is refused by name rather than left with a +/// descriptor nobody wrote. The same number on x86-64 is a type nobody patches. +#[test] +fn an_aarch64_tls_descriptor_is_refused_by_name() { + let window = (0u64, 0x100u64); + let desc = [rela(0x10, 1, 1031, 0)].concat(); + assert_eq!(RelocKind::from_raw(Machine::Aarch64, 1031), RelocKind::TlsDesc); + assert_eq!( + rela::validate(RelaTable::new(&desc, Machine::Aarch64).iter(), window, 4, None), + Err(RelocError::TlsDescriptor), + ); + assert!(RelocError::TlsDescriptor.as_str().contains("R_AARCH64_TLSDESC")); + assert_eq!(rela::validate(RelaTable::new(&desc, Machine::X86_64).iter(), window, 4, None), Ok(())); + let counts = RelaCounts::of(RelaTable::new(&desc, Machine::Aarch64).iter()); + assert_eq!(counts.count_of(RelocKind::TlsDesc), 1); +} + #[test] fn a_symbol_index_past_the_table_is_refused_except_for_relative() { let window = (0u64, 0x100u64); @@ -257,7 +275,7 @@ fn counts_are_per_kind_over_every_table() { let counts = RelaCounts::of(RelaTable::new(&a, Machine::X86_64).iter().chain(RelaTable::new(&b, Machine::X86_64).iter())); assert_eq!( counts, - RelaCounts { relative: 1, bind: 2, tpoff64: 1, tpoff32: 1, dtpmod64: 0, dtpoff64: 0 }, + RelaCounts { relative: 1, bind: 2, tpoff64: 1, tpoff32: 1, dtpmod64: 0, dtpoff64: 0, tlsdesc: 0 }, ); // The ceiling is over the kinds a caller reserves for, never over every // kind: a bound on one nothing stores refuses a file for a collection that diff --git a/toyos-elf/tests/tls.rs b/toyos-elf/tests/tls.rs index b95e582a468..78979e052e3 100644 --- a/toyos-elf/tests/tls.rs +++ b/toyos-elf/tests/tls.rs @@ -5,7 +5,7 @@ //! kernel-bug assert reached from a crafted `PT_TLS`. The property is proved //! here instead, which is what lets the assert go. -use toyos_elf::tls; +use toyos_elf::tls::{self, Static, Variant}; const TCB: usize = 64; const DTV: usize = 16 + 64 * 8; @@ -30,7 +30,8 @@ fn the_dtv_is_never_overwritten_by_tls_data() { let aligns = [0usize, 1, 2, 8, 16, 64, 4096, 65536, GRANULE]; for &memsz in &sizes { for &align in &aligns { - let plan = tls::plan(memsz, align, TCB, DTV, GRANULE) + let plan = Static::new(Variant::II, memsz, align, align) + .and_then(|s| s.plan(TCB, DTV, GRANULE)) .unwrap_or_else(|| panic!("no plan for memsz {memsz} align {align}")); let effective = if align > 1 { align } else { 8 }; assert!( @@ -51,9 +52,12 @@ fn the_dtv_is_never_overwritten_by_tls_data() { #[test] fn a_size_no_allocation_can_hold_has_no_plan() { - assert_eq!(tls::plan(usize::MAX, 8, TCB, DTV, GRANULE), None); - assert_eq!(tls::plan(usize::MAX - TCB, 8, TCB, DTV, GRANULE), None); - assert_eq!(tls::plan(usize::MAX - GRANULE, GRANULE, TCB, DTV, GRANULE), None); + for variant in [Variant::I, Variant::II] { + let plan = |memsz, align| Static::new(variant, memsz, align, align).unwrap().plan(TCB, DTV, GRANULE); + assert_eq!(plan(usize::MAX, 8), None, "{variant:?}"); + assert_eq!(plan(usize::MAX - TCB, 8), None, "{variant:?}"); + assert_eq!(plan(usize::MAX - GRANULE, GRANULE), None, "{variant:?}"); + } } /// `!(align - 1)` is only a mask for a power of two, and a mask that is not a @@ -61,7 +65,10 @@ fn a_size_no_allocation_can_hold_has_no_plan() { #[test] fn an_alignment_that_is_not_a_power_of_two_has_no_plan() { for align in [3usize, 5, 6, 100, usize::MAX] { - assert_eq!(tls::plan(64, align, TCB, DTV, GRANULE), None, "align {align}"); + for variant in [Variant::I, Variant::II] { + assert_eq!(Static::new(variant, 64, align, 8), None, "align {align}"); + assert_eq!(Static::new(variant, 64, 8, align), None, "first align {align}"); + } } } @@ -95,17 +102,61 @@ fn a_module_lands_on_its_own_declared_alignment() { #[test] fn tpoff_carries_the_addend() { let total = 0x200usize; + let two = Static::new(Variant::II, total, 64, 64).unwrap(); + let one = Static::new(Variant::I, total, 64, 64).unwrap(); for &module_addr in &[0u64, 8, 0x40, 0x1F0] { - assert_eq!(tls::tpoff(module_addr, 0, total), module_addr as i64 - total as i64); + assert_eq!(two.tpoff(module_addr, 0), module_addr as i64 - total as i64); + assert_eq!(one.tpoff(module_addr, 0), module_addr as i64 + 64); for &addend in &[0i64, 8, -8, 0x100, -0x100] { - assert_eq!( - tls::tpoff(module_addr, addend, total), - module_addr as i64 + addend - total as i64, - ); - assert_eq!( - tls::tpoff(module_addr, addend, total) - tls::tpoff(module_addr, 0, total), - addend, - ); + for s in [one, two] { + assert_eq!(s.tpoff(module_addr, addend) - s.tpoff(module_addr, 0), addend, "{s:?}"); + } + } + } +} + +/// Variant I, as lld resolves an AArch64 executable's own local-exec access +/// at link time: `TPOFF = align_up(16, p_align) + offset in its PT_TLS` — +/// lld's `getTlsTpOffset`, and the AArch64 ELF ABI's 16-byte TCB. The +/// executable is the module at offset 0, so its data has to start exactly +/// that far above the thread pointer, whatever a later module asks for. +#[test] +fn variant_i_puts_the_first_module_where_its_linker_put_it() { + let sizes = [0usize, 1, 8, 0x48, 4096, DTV + 1, GRANULE - 1, GRANULE + 1]; + let aligns = [0usize, 1, 2, 8, 16, 64, 4096, GRANULE]; + for &memsz in &sizes { + for &first in &aligns { + for &max in aligns.iter().filter(|&&a| a.max(8) >= first.max(8)) { + let s = Static::new(Variant::I, memsz, max, first).unwrap(); + let plan = s.plan(TCB, DTV, GRANULE).unwrap(); + let gap = 16usize.max(first); + let at = format!("memsz {memsz} first {first} max {max}: {plan:?}"); + assert_eq!(plan.tls_start - plan.tp_offset, gap, "{at}"); + assert_eq!(s.tpoff(0, 0), gap as i64, "{at}"); + assert!(plan.tp_offset >= DTV, "{at}: the TCB overlaps the DTV"); + assert_eq!(plan.tp_offset % 16, 0, "{at}"); + assert_eq!(plan.tls_start % max.max(16), 0, "{at}"); + assert!(plan.tls_start + memsz <= plan.alloc_size, "{at}"); + assert_eq!(plan.alloc_size % GRANULE, 0, "{at}"); + } } } } + +/// rust-lld's own answer, read off an `aarch64-unknown-toyos` executable whose +/// `PT_TLS` is 64-aligned: `add x0, x8, #0x40` for the datum at offset 0 of +/// `.tdata`, `#0x80` for the one at 0x40. +#[test] +fn variant_i_agrees_with_what_lld_linked() { + let s = Static::new(Variant::I, 0xb0, 64, 64).unwrap(); + assert_eq!(s.tpoff(0, 0), 0x40); + assert_eq!(s.tpoff(0x40, 0), 0x80); +} + +/// The machine names the variant: x86-64's psABI is variant II, AArch64's +/// variant I. +#[test] +fn each_machine_has_its_own_variant() { + assert_eq!(Variant::of(toyos_elf::Machine::X86_64), Variant::II); + assert_eq!(Variant::of(toyos_elf::Machine::Aarch64), Variant::I); +} From daae32288c18e5781d1280b1f7052d4e1d80981c Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:41:20 +0200 Subject: [PATCH 32/50] sourcegate: core::arch and std::arch are needles in any spelling The assembly and pure-crate rules matched "core::arch::" as a substring, so "use core::arch as isa;" and "use core::{arch::x86_64::_rdtsc};" named the module and passed. arch_module_lines finds a path to either module however it is written: directly, renamed, or as an element of a use group across any number of lines. The review's plants are fixtures in both rules' tests, with a group that nests fmt::{self, arch} and a string and a mycore::arch that must stay green. Matching the old way reds both fixture tests (EXIT=101). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/sourcegate.rs | 122 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 107 insertions(+), 15 deletions(-) diff --git a/src/sourcegate.rs b/src/sourcegate.rs index 98f9283c3f9..012452ef3ab 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -1233,6 +1233,9 @@ fn tracked_rust_files(root: &Path, tree: &str) -> std::collections::BTreeSet Vec { + let code: Vec = text.lines().map(code_only).collect::>().join("\n").chars().collect(); + let word = |c: char| c.is_ascii_alphanumeric() || c == '_'; + let line_of = |at: usize| code[..at].iter().filter(|c| **c == '\n').count(); + let skip_space = |mut at: usize| { + while code.get(at).is_some_and(|c| c.is_whitespace()) { + at += 1; + } + at + }; + let ident_at = |at: usize, name: &str| { + let end = at + name.len(); + code.get(at..end).is_some_and(|s| s.iter().copied().eq(name.chars())) + && !code.get(end).is_some_and(|c| word(*c)) + && !at.checked_sub(1).and_then(|j| code.get(j)).is_some_and(|c| word(*c)) + }; + let mut lines = Vec::new(); + for at in 0..code.len() { + let Some(root) = ["core", "std"].into_iter().find(|root| ident_at(at, root)) else { continue }; + let colons = skip_space(at + root.len()); + if code.get(colons..colons + 2) != Some(&[':', ':'][..]) { + continue; + } + let next = skip_space(colons + 2); + if ident_at(next, "arch") { + lines.push(line_of(next)); + } else if code.get(next) == Some(&'{') { + // Each element of the group begins after its `{` or a `,` at depth one. + let (mut depth, mut i, mut element) = (0usize, next, true); + while let Some(&c) = code.get(i) { + match c { + '{' => { + depth += 1; + element = depth == 1; + } + '}' => { + depth -= 1; + if depth == 0 { + break; + } + } + ',' if depth == 1 => element = true, + c if c.is_whitespace() => {} + _ => { + if element && depth == 1 && ident_at(i, "arch") { + lines.push(line_of(i)); + } + element = false; + } + } + i += 1; + } + } + } + lines +} + +/// The spelling of the first needle of `rule` that line `n` of a file holds, +/// `code` being that line's code and `arch_lines` the file's +/// [`arch_module_lines`]. +#[cfg(test)] +fn needle_on(rule: &PlaceRule, code: &str, n: usize, arch_lines: &[usize]) -> Option<&'static str> { + rule.needles + .iter() + .copied() + .find(|needle| code.contains(needle)) + .or_else(|| (rule.arch_module && arch_lines.contains(&n)).then_some(ARCH_MODULE)) +} /// The spellings that name one architecture's module from outside it. #[cfg(test)] @@ -1277,6 +1358,7 @@ const ARCH_RULES: &[PlaceRule] = &[ PlaceRule { name: "assembly lives in an architecture's own module", needles: ASSEMBLY, + arch_module: true, scope: &[], places: &[ ("kernel/src/arch/x86_64/", "the kernel's x86-64 module"), @@ -1308,6 +1390,7 @@ const ARCH_RULES: &[PlaceRule] = &[ PlaceRule { name: "an architecture is selected in one place", needles: &["target_arch"], + arch_module: false, scope: &[], places: &[ ("kernel/src/arch/mod.rs", "the kernel's one selector"), @@ -1332,15 +1415,17 @@ const ARCH_RULES: &[PlaceRule] = &[ PlaceRule { name: "generic kernel code reaches the machine through the arch interface", needles: ARCH_PATHS, + arch_module: false, scope: &["kernel/src/"], places: &[("kernel/src/arch/", "the architecture's own modules")], }, PlaceRule { name: "a pure crate names no architecture", needles: &[ - "asm!", "global_asm!", "naked_asm!", "#[naked]", "unsafe(naked)", "core::arch::", - "std::arch::", "target_arch", "arch::x86_64", "arch::aarch64", + "asm!", "global_asm!", "naked_asm!", "#[naked]", "unsafe(naked)", "target_arch", "arch::x86_64", + "arch::aarch64", ], + arch_module: true, scope: PURE_CRATES, places: &[], }, @@ -1357,9 +1442,10 @@ fn place_violations(rule: &PlaceRule, files: &[(String, String)]) -> Vec if !in_scope(at) || placed(at) { continue; } + let arch_lines = if rule.arch_module { arch_module_lines(text) } else { Vec::new() }; for (n, line) in text.lines().enumerate() { let code = code_only(line); - if let Some(needle) = rule.needles.iter().find(|needle| code.contains(**needle)) { + if let Some(needle) = needle_on(rule, &code, n, &arch_lines) { let places: Vec = rule.places.iter().map(|(place, why)| format!("{place} ({why})")).collect(); found.push(format!( @@ -1461,12 +1547,9 @@ mod tests { // A module is a place a needle may stand; a file is an exception // somebody declared, and one that holds nothing any more is stale. for (place, _) in rule.places.iter().filter(|(place, _)| !place.ends_with('/')) { - let used = files.iter().any(|(at, text)| { - at.starts_with(place) - && text.lines().any(|l| { - let code = code_only(l); - rule.needles.iter().any(|n| code.contains(n)) - }) + let used = files.iter().filter(|(at, _)| at.starts_with(place)).any(|(_, text)| { + let arch_lines = if rule.arch_module { arch_module_lines(text) } else { Vec::new() }; + text.lines().enumerate().any(|(n, l)| needle_on(rule, &code_only(l), n, &arch_lines).is_some()) }); if !used { complaints.push(format!( @@ -1497,15 +1580,21 @@ mod tests { file("kernel/src/sched/driver.rs", " unsafe { core::arch::asm!(\"nop\") };\n"), file("bootloader/src/main.rs", "#[unsafe(naked)]\n"), file("toyos/src/window.rs", " let t = core::arch::x86_64::_rdtsc();\n"), + // The module named by any path: renamed, grouped, over lines. + file("toyos/src/net.rs", "use core::arch as isa;\n"), + file("toyos/src/shm.rs", "use core::{arch::x86_64::_rdtsc};\n"), + file("toyos/src/ipc.rs", "use ::std::{\n fmt,\n arch::asm,\n};\n"), ]; let said = place_violations(asm, &planted); - assert_eq!(said.len(), 3, "{said:?}"); + assert_eq!(said.len(), 6, "{said:?}"); + assert!(said.iter().any(|s| s.starts_with("toyos/src/ipc.rs:3:")), "{said:?}"); assert!(said.iter().all(|s| s.contains(asm.name) && s.contains("kernel/src/arch/x86_64/")), "{said:?}"); let placed = [ file("kernel/src/arch/aarch64/cpu.rs", " unsafe { core::arch::asm!(\"wfi\") };\n"), file("kernel/src/sched/driver.rs", " // core::arch::asm! is the architecture's.\n"), + file("toyos/src/lib.rs", "use core::{fmt::{self, arch}, ptr};\nlet s = \"core::arch\";\nuse mycore::arch;\n"), ]; - assert!(place_violations(asm, &placed).is_empty()); + assert_eq!(place_violations(asm, &placed), Vec::::new()); } #[test] @@ -1534,9 +1623,12 @@ mod tests { file("toyos-sched/src/cpu.rs", "#[cfg(target_arch = \"aarch64\")]\n"), file("toyos-desktop/src/lib.rs", " core::arch::asm!(\"nop\");\n"), file("toyos-dma/src/lib.rs", "use crate::arch::aarch64::x;\n"), + file("toyos-sched/src/lib.rs", "use core::arch as isa;\nfn f() { unsafe { isa::aarch64::vdupq_n_u8(0) }; }\n"), + file("toyos-mixer/src/lib.rs", "use core::{arch::x86_64::_rdtsc};\n"), ]; let said = place_violations(pure, &planted); - assert_eq!(said.len(), 3, "{said:?}"); + assert_eq!(said.len(), 5, "{said:?}"); + assert!(said.iter().any(|s| s.starts_with("toyos-sched/src/lib.rs:1:")), "{said:?}"); assert!(said.iter().all(|s| s.contains(pure.name) && s.contains("no file at all")), "{said:?}"); } From 1ddfb48e72a3b233d0e821e1e74268383483ba39 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:41:20 +0200 Subject: [PATCH 33/50] compiler: the key names LLVM and the tools, and a missing primary record is refused A compiler's key now covers src/tools by content and src/llvm-project by the commit its index records and its checkout holds, so a fork that moves only those builds its own. On this fork the wider key costs 1.3 to 2.1 s to compute, 0.6 s of it src/tools. A primary with no record of its compiler was read as an empty record, which made every worktree build a compiler of its own; it is refused by name, and a_missing_primary_record_is_refused_and_builds_nothing reds when it is read as empty again (EXIT=101). The sweep test now sweeps while an unnamed compiler is still in use, so dropping sweep's keyed_idle guard reds it (EXIT=101). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/compiler.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 71 insertions(+), 6 deletions(-) diff --git a/src/compiler.rs b/src/compiler.rs index 794687565b0..4663b5da053 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -9,8 +9,8 @@ //! built by bootstrap in its own fork checkout, under that checkout's //! `build/toyos-compiler/`, and placed at `rust/build/compilers//`, where //! the key ([`key`]) is the identity (`src/identity.rs`) of the checkout's -//! `compiler/`, `src/bootstrap/`, `src/stage0` and `Cargo.lock`, with -//! [`RECIPE`]. Nothing writes that directory after its [`SOURCE`] file exists, +//! `compiler/`, `src/bootstrap/`, `src/tools/`, `src/stage0` and `Cargo.lock`, +//! the `src/llvm-project` commit, and [`RECIPE`]. Nothing writes that directory after its [`SOURCE`] file exists, //! and two worktrees naming the same compiler share one copy. //! //! **A compiler of a worktree's own never touches what the others build with**: @@ -47,7 +47,11 @@ use crate::toolchain::{self, host_triple}; const RECIPE: &str = "bootstrap stage 2 of compiler/rustc and library, profile compiler, host only, with rust-lld; 2"; /// What a compiler's key is the identity of, in its fork checkout. -const KEYED: [&str; 4] = ["compiler", "src/bootstrap", "src/stage0", "Cargo.lock"]; +const KEYED: [&str; 5] = ["compiler", "src/bootstrap", "src/tools", "src/stage0", "Cargo.lock"]; + +/// The submodule a compiler is built against by commit: its LLVM, which +/// bootstrap takes prebuilt for that commit, so its content is never read. +const LLVM: &str = "src/llvm-project"; /// The file a finished compiler carries last, naming what it was built from. A /// directory without it is a build that did not finish. @@ -147,10 +151,24 @@ pub fn record(rust_dir: &Path) { /// The key of the compiler `fork`'s sources name: their content, so committing /// what was built as local changes names the same compiler. pub fn key(fork: &Path) -> String { - let parts = [RECIPE.to_string(), tree_identity(fork, &KEYED)]; + let parts = [RECIPE.to_string(), tree_identity(fork, &KEYED), llvm_commit(fork)]; short(parts.join("\n\0\n").as_bytes()) } +/// The LLVM commit `fork` builds against: the one its index records and, where +/// the submodule is checked out, the one it has, which a local checkout of +/// another commit moves. +fn llvm_commit(fork: &Path) -> String { + let recorded = git_out(fork, &["ls-files", "--stage", "--", LLVM]); + let checkout = fork.join(LLVM); + let held = if checkout.join(".git").exists() { + git_out(&checkout, &["rev-parse", "HEAD"]) + } else { + String::new() + }; + format!("{} {}", recorded.trim(), held.trim()) +} + /// The compiler `root`'s fork checkout at `fork` names: the primary's where its /// `compiler/` is the one the primary's was built from, and otherwise its own, /// built if nobody has built it, held in use for as long as the returned value @@ -167,7 +185,15 @@ fn choose(root: &Path, rust_dir: &Path, fork: &Path, build: impl Fn(&Path) -> Pa if fork == rust_dir { return Compiler::primary(rust_dir); } - let built_from = fs::read_to_string(primary_record(rust_dir)).unwrap_or_default(); + let record = primary_record(rust_dir); + let built_from = fs::read_to_string(&record).unwrap_or_else(|e| { + panic!( + "{} cannot be read ({e}), so nothing says which compiler the primary's stage2 is, \ + and no worktree can know whether it names that one.\n\ + The primary checkout writes it: run `cargo run -- --build-only` there once.", + record.display(), + ) + }); if built_from.trim() == source(fork) { let _ = fs::remove_file(&recorded); return Compiler::primary(rust_dir); @@ -450,11 +476,50 @@ mod tests { assert_eq!(git(&rust_dir, &["rev-parse", "HEAD"]), git(&primary, &["rev-parse", "HEAD:rust"])); assert_eq!(toolchain::rustup_link(), link, "the machine-global toyos link moved"); - // A sweep takes the compiler nobody names, and only that one. + // A sweep takes the compiler nobody names, and only that one — and + // not while it is still in use, though nobody names it any more. let orphan = ca2.stage2.parent().unwrap().to_path_buf(); + choose(&a, &rust_dir, &a.join("rust"), fake); + assert_eq!(sweep(&primary), Vec::::new(), "the sweep took a compiler still in use"); + assert!(ca2.stage2.is_dir()); drop((mine, ca, cb, again, ca2, committed)); let kept = choose(&a, &rust_dir, &a.join("rust"), fake); assert_eq!(sweep(&primary), [orphan], "the sweep took a compiler a worktree names, or left one nobody does"); assert!(kept.stage2.is_dir()); } + /// **A primary with no record of its compiler is refused by name**, never + /// read as "no compiler": that reading made every worktree build its own. + #[test] + fn a_missing_primary_record_is_refused_and_builds_nothing() { + let scratch = TempDir::new("compiler-record"); + let (_primary, rust_dir, [same, _, _]) = estate(&scratch); + fs::remove_file(primary_record(&rust_dir)).unwrap(); + let builds = Cell::new(0); + let fake = |fork: &Path| { + builds.set(builds.get() + 1); + fork.join("build/toyos-compiler/stage2") + }; + let refused = std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + choose(&same, &rust_dir, &same.join("rust"), fake); + })); + let why = refused.expect_err("a worktree resolved a compiler with no primary record"); + let why = why.downcast_ref::().cloned().unwrap_or_default(); + assert!(why.contains("toyos-compiler cannot be read"), "{why}"); + assert_eq!(builds.get(), 0, "a missing record built a compiler"); + } + + /// Every source a compiler is built from moves its key: LLVM by commit, + /// the tools by content. + #[test] + fn llvm_and_the_tools_move_the_key() { + let scratch = TempDir::new("compiler-key"); + let (_primary, _rust_dir, [same, _, _]) = estate(&scratch); + let fork = same.join("rust"); + let before = key(&fork); + write(&fork.join("src/tools/lld-wrapper/src/main.rs"), "fn main() { 1; }\n"); + let tools = key(&fork); + assert_ne!(tools, before, "a tool's source did not move the key"); + git(&fork, &["update-index", "--add", "--cacheinfo", "160000,1111111111111111111111111111111111111111,src/llvm-project"]); + assert_ne!(key(&fork), tools, "another LLVM commit did not move the key"); + } } From eb110937e9c6e30cea3c4399850434eeedfc287f Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:41:20 +0200 Subject: [PATCH 34/50] libc: the architecture module's copies, differentially on the host toyos-libc-copies compiles userland/libc/src/arch/ for the host it runs on, with libc's std-runtime switch on so its _start stays out, and holds every copy, fill and square root against Rust's own: lengths to 300, source and destination offsets to 20, overlapping both ways (120,000 overlapping cases, plus disjoint copies and fills). Each host architecture checks its own module. A copy_backward whose chunk test reads 8 instead of 16 kills the test binary (EXIT=101). Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- Cargo.lock | 4 ++ Cargo.toml | 1 + toyos-libc-copies/Cargo.toml | 16 ++++++ toyos-libc-copies/src/lib.rs | 102 +++++++++++++++++++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 toyos-libc-copies/Cargo.toml create mode 100644 toyos-libc-copies/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 6f56e8b1fe6..eb3d6bc0b6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1238,6 +1238,10 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "toyos-libc-copies" +version = "0.1.0" + [[package]] name = "toyos-logstream" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 48085fcd086..dbb9b519616 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ members = [ "toyos-inspect", "toyos-keymap", "toyos-ld", + "toyos-libc-copies", "toyos-logstream", "toyos-manifest", "toyos-mdns", diff --git a/toyos-libc-copies/Cargo.toml b/toyos-libc-copies/Cargo.toml new file mode 100644 index 00000000000..97fe87c4b00 --- /dev/null +++ b/toyos-libc-copies/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "toyos-libc-copies" +version = "0.1.0" +edition = "2021" +license = "MIT OR Apache-2.0" +publish = false + +# `userland/libc/src/arch/`'s copies, fills and square roots, compiled for the +# host this runs on and held against Rust's own. A package of its own because +# libc cross-compiles and exports `memcpy`: this compiles only the architecture +# module, the way `kernel-loom` compiles kernel files. `std-runtime` is libc's +# own switch, on here so the module's `_start` stays out of a host binary that +# has an entry of its own. +[features] +default = ["std-runtime"] +std-runtime = [] diff --git a/toyos-libc-copies/src/lib.rs b/toyos-libc-copies/src/lib.rs new file mode 100644 index 00000000000..371c8d880e3 --- /dev/null +++ b/toyos-libc-copies/src/lib.rs @@ -0,0 +1,102 @@ +//! libc's architecture module on the host, differentially: every copy and fill +//! it has, over every length to 300 and every source and destination offset to +//! 20, against `copy_within` and `fill`, with the two buffers overlapping both +//! ways; and its square roots against `f64::sqrt` and `f32::sqrt`. Each host +//! architecture checks its own module. + +#[cfg(test)] +#[path = "../../userland/libc/src/arch/mod.rs"] +mod arch; + +#[cfg(test)] +mod tests { + use super::arch; + + const LENGTHS: usize = 300; + const OFFSETS: usize = 20; + + fn pattern(len: usize) -> Vec { + (0..len).map(|i| (i.wrapping_mul(31) ^ (i >> 3)) as u8).collect() + } + + /// One buffer, so the copy's two ends can overlap by any amount either way. + #[test] + fn every_copy_agrees_with_copy_within() { + let mut cases = 0u32; + for n in 0..LENGTHS { + for from in 0..OFFSETS { + for to in 0..OFFSETS { + let base = pattern(n + 2 * OFFSETS); + let mut want = base.clone(); + want.copy_within(from..from + n, to); + let mut got = base.clone(); + let p = got.as_mut_ptr(); + // SAFETY: both ranges are inside `got`, and the direction is + // the one each overlap needs: forward when the destination + // is below the source, backward when above. + unsafe { + if to <= from { + arch::copy_forward(p.add(to), p.add(from), n); + } else { + arch::copy_backward(p.add(to), p.add(from), n); + } + } + assert_eq!(got, want, "n {n} from {from} to {to}"); + cases += 1; + } + } + } + assert_eq!(cases, (LENGTHS * OFFSETS * OFFSETS) as u32); + } + + /// Two buffers, so neither direction leans on the other's order. + #[test] + fn a_disjoint_copy_agrees_either_way() { + for n in 0..LENGTHS { + for at in 0..OFFSETS { + let src = pattern(n + OFFSETS); + for backward in [false, true] { + let mut got = vec![0xAAu8; n + OFFSETS]; + // SAFETY: `n` bytes at `at` in each of two buffers of `n + OFFSETS`. + unsafe { + let (d, s) = (got.as_mut_ptr().add(at), src.as_ptr().add(at)); + if backward { + arch::copy_backward(d, s, n); + } else { + arch::copy_forward(d, s, n); + } + } + let mut want = vec![0xAAu8; n + OFFSETS]; + want[at..at + n].copy_from_slice(&src[at..at + n]); + assert_eq!(got, want, "n {n} at {at} backward {backward}"); + } + } + } + } + + #[test] + fn every_fill_agrees_with_fill() { + for n in 0..LENGTHS { + for at in 0..OFFSETS { + for byte in [0u8, 0x5A, 0xFF] { + let mut got = pattern(n + 2 * OFFSETS); + let mut want = got.clone(); + want[at..at + n].fill(byte); + // SAFETY: `n` bytes at `at` inside `got`. + unsafe { arch::fill(got.as_mut_ptr().add(at), byte, n) }; + assert_eq!(got, want, "n {n} at {at} byte {byte:#x}"); + } + } + } + } + + #[test] + fn the_square_roots_are_the_correctly_rounded_ones() { + for x in [0.0f64, 1.0, 2.0, 0.5, 1e-300, 1e300, f64::MAX, f64::MIN_POSITIVE, 123456.789] { + assert_eq!(arch::sqrt_f64(x).to_bits(), x.sqrt().to_bits(), "{x}"); + let y = x as f32; + assert_eq!(arch::sqrt_f32(y).to_bits(), y.sqrt().to_bits(), "{y}"); + } + assert!(arch::sqrt_f64(-1.0).is_nan() && arch::sqrt_f32(-1.0).is_nan()); + } +} From 1b69436905531bc17538cec95579db267177e966 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:41:32 +0200 Subject: [PATCH 35/50] issues: the x86 left in generic code, each owned by a stage of the port Five files, each with its stage and exit: KernelCtx's rsp and fs_base (stage 4); PCI's vector: u8 and remap_pin's apic_id (stage 4); the TSC naming of the boot-timing handoff (stage 4); the crash evidence's apic, rip and cr2 and its hardware_id() & 63 slot, which aliases a second cluster's CPU 0 onto slot 0 (stage 5); and the AArch64 kernel's blanket -Adead_code -Aunfulfilled_lint_expectations (stage 7). The ARM track lists them, says the TLS-descriptor resolver lands in stage 5 and that stage 6 owes the DMA-ordering fixes a test that reds with TrbRing::put as one write, and loses the stage 0 and 1 lines naming toyos-ld as AArch64's linker and TLSDESC handler. The boot-map issue gains the part-typed 2 MiB page stage 9 owes; the quiesce issue gains this branch's recurrence. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...b-and-firmware-decides-what-lands-in-it.md | 10 ++++++ ...-routing-take-an-x86-vector-and-apic-id.md | 22 ++++++++++++ ...ped-reds-wide-with-usb-transport-breaks.md | 13 +++++++ ...64-kernel-builds-with-dead-code-allowed.md | 21 +++++++++++ ...oot-timing-handoff-is-named-for-the-tsc.md | 21 +++++++++++ ...sh-evidence-records-x86-fault-registers.md | 30 ++++++++++++++++ ...aved-kernel-context-names-x86-registers.md | 20 +++++++++++ issues/kernel/toyos-runs-on-arm64.md | 35 +++++++++++++------ 8 files changed, 161 insertions(+), 11 deletions(-) create mode 100644 issues/kernel/msi-and-pin-routing-take-an-x86-vector-and-apic-id.md create mode 100644 issues/kernel/the-aarch64-kernel-builds-with-dead-code-allowed.md create mode 100644 issues/kernel/the-boot-timing-handoff-is-named-for-the-tsc.md create mode 100644 issues/kernel/the-crash-evidence-records-x86-fault-registers.md create mode 100644 issues/kernel/the-saved-kernel-context-names-x86-registers.md diff --git a/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md b/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md index 98afdb6af8f..d9bc0ef517c 100644 --- a/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md +++ b/issues/boot-media/the-boot-map-reaches-4-gib-and-firmware-decides-what-lands-in-it.md @@ -29,3 +29,13 @@ the same defect. reach all of firmware's write-back memory), the memory map is among what `report_reach` checks, and `Profile::Virt` boots with the 4 GiB every other profile has. + +**The AArch64 typing refuses a part-typed page.** `Typing::of` +(`toyos-bootmap/src/lib.rs`) refuses the boot (`Refusal::Mixed`) for any 2 MiB +page of the low 4 GiB that firmware's memory map types in part: written back +for some of it and not the rest. QEMU `virt`'s map has no such page. A +SystemReady machine whose map has 4 KiB holes there, which the PR #524 review +expects and nothing here has measured, is refused at stage 9 of +`issues/kernel/toyos-runs-on-arm64.md`; that stage owes the split of such a +page into 4 KiB leaves typed by the map, as the scanout's partial pages +already are. diff --git a/issues/kernel/msi-and-pin-routing-take-an-x86-vector-and-apic-id.md b/issues/kernel/msi-and-pin-routing-take-an-x86-vector-and-apic-id.md new file mode 100644 index 00000000000..6c9e88011c1 --- /dev/null +++ b/issues/kernel/msi-and-pin-routing-take-an-x86-vector-and-apic-id.md @@ -0,0 +1,22 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# MSI and pin routing take an x86 vector and APIC id in generic code + +`kernel/src/drivers/pci.rs`'s `enable_msix` and `enable_msi` take +`vector: u8`, and `kernel/src/iommu/mod.rs`'s `remap_pin` takes +`apic_id: u8` beside it. Both are x86's interrupt addressing: an 8-bit IDT +vector delivered to an xAPIC id. A GICv3 message names an LPI through the ITS +(a 32-bit event id, translated to an INTID above 8191) and a redistributor, +and neither fits a `u8`. + +Owned by stage 4 of `issues/kernel/toyos-runs-on-arm64.md`, which brings up +the GIC and its ITS. + +**Exit condition**: a PCI function's interrupt is programmed from an +arch-provided message (address and data, as `arch::msi` already provides the +doorbell), the routing names its target by the arch's own type, and no +generic signature carries `vector: u8` or `apic_id`. diff --git a/issues/kernel/quiesce-dump-holds-the-stopped-reds-wide-with-usb-transport-breaks.md b/issues/kernel/quiesce-dump-holds-the-stopped-reds-wide-with-usb-transport-breaks.md index 8e4cd9c9953..4faff8fa22d 100644 --- a/issues/kernel/quiesce-dump-holds-the-stopped-reds-wide-with-usb-transport-breaks.md +++ b/issues/kernel/quiesce-dump-holds-the-stopped-reds-wide-with-usb-transport-breaks.md @@ -18,3 +18,16 @@ The boot's console shows the stick's transport breaking twice on `SCSI 0x2a` console, not the USB stack, quiesce or its config. Exit: a cause, or a recurrence that shows it is not load-bound. + +**Recurrence, PR #524's fast tier at `396f5b4d`, dev host.** Red wide after +325 s with the same `QEMU never reported stopping: the guest asked for a +reboot and stayed up`, then `ALONE ... GREEN` in 4 s. The capture has the same +`quiesce_writers: 4 of 6 writers reached their loop in 5s` and +`test_rs_quiesce_writers exit=1`, and this time no transport break on the +stick. While it ran, the host's 12 guest slots were full, shared with the +suites of five other worktrees (`toyos-lld`, `toyos-tcp`, `toyos-update`, +`toyos-logtrack`, `toyos-guiplat`). +The branch reorders xHCI ring writes (`dma_wmb`) but touches no quiesce code. +A same-session A/B then gave 5 of 5 green on each arm, main at `e48604c0` and +the branch: the red did not come back alone or beside the other arm, so it +is still not shown to be anything but load-bound. diff --git a/issues/kernel/the-aarch64-kernel-builds-with-dead-code-allowed.md b/issues/kernel/the-aarch64-kernel-builds-with-dead-code-allowed.md new file mode 100644 index 00000000000..67ae56c3762 --- /dev/null +++ b/issues/kernel/the-aarch64-kernel-builds-with-dead-code-allowed.md @@ -0,0 +1,21 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# The AArch64 kernel builds with dead code allowed, blanket + +`kernel/.cargo/config.toml` gives `aarch64-unknown-none-softfloat` +`-Adead_code -Aunfulfilled_lint_expectations`: until the syscall gate, the +interrupt controller and the scheduler have a way in, every item only they +reach is unreachable on AArch64. The allowance covers the whole kernel, so a +genuinely dead item written anywhere, for either architecture's shared code, +is invisible on this target; only the x86 build, which keeps +`-Dwarnings` whole, still sees it. + +Owned by stage 7 of `issues/kernel/toyos-runs-on-arm64.md`, when userland +boots and the gate reaches everything. + +**Exit condition**: both `-A` flags are gone from the AArch64 target's +`rustflags` and the AArch64 kernel builds with `-Dwarnings` alone. diff --git a/issues/kernel/the-boot-timing-handoff-is-named-for-the-tsc.md b/issues/kernel/the-boot-timing-handoff-is-named-for-the-tsc.md new file mode 100644 index 00000000000..8da9acbaaed --- /dev/null +++ b/issues/kernel/the-boot-timing-handoff-is-named-for-the-tsc.md @@ -0,0 +1,21 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# The boot-timing handoff is named for the TSC + +`toyos-abi/src/boot.rs`'s `KernelArgs` carries `loader_entry_tsc` and +`loader_handoff_tsc`, and `kernel/src/main.rs`'s `report_power_on` reports +"the TSC went backwards". On AArch64 the loader fills both from `CNTVCT_EL0`, +the generic timer's count, so the ABI and the message name a counter the +machine does not have. + +Owned by stage 4 of `issues/kernel/toyos-runs-on-arm64.md`, which makes the +generic timer the clock. `KernelArgs` is the ABI, so the rename lands with +that stage's other ABI work. + +**Exit condition**: the two fields and the report name the CPU's counter +(`cpu::counter`) rather than the TSC, and both architectures' loaders fill +them. diff --git a/issues/kernel/the-crash-evidence-records-x86-fault-registers.md b/issues/kernel/the-crash-evidence-records-x86-fault-registers.md new file mode 100644 index 00000000000..e88e3da0f5c --- /dev/null +++ b/issues/kernel/the-crash-evidence-records-x86-fault-registers.md @@ -0,0 +1,30 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# The crash evidence records x86 fault registers, in slots an AArch64 CPU aliases + +`kernel/src/panic.rs`'s `Evidence` stores `apic`, `rip` and `cr2`, and +`record_fault` takes them by those names: the x86 APIC id, the faulting +instruction and x86's fault address. On AArch64 the same three are the MPIDR +affinity, `ELR_EL1` and `FAR_EL1`, and the report would print them under x86 +labels. + +The slot is `FIRST[cpu::hardware_id() & (SLOTS - 1)]`, `SLOTS = 64`, as is +`PANIC_DEPTH`'s. An APIC id below 64 is one slot per CPU. AArch64's +`hardware_id` is MPIDR's `Aff3:Aff2:Aff1:Aff0`, so a second cluster's CPU 0 +(`Aff1 = 1`, `0x100`) lands on slot 0 beside the first CPU of all. QEMU `virt` +numbers CPUs 16 and up that way, so two CPUs share one record and one panic +depth, which the `apic` field was left unmasked to make visible and not to +prevent. + +Owned by stage 5 of `issues/kernel/toyos-runs-on-arm64.md`, the first stage +that starts a second CPU. + +**Exit condition**: the evidence names the fault by role (the CPU, the +faulting PC, the faulting address) and each architecture's report labels +them; the slot is the CPU's dense index, not its hardware id masked, shown +by a test that panics a CPU whose `Aff1` is not zero beside CPU 0 and reads +both records. diff --git a/issues/kernel/the-saved-kernel-context-names-x86-registers.md b/issues/kernel/the-saved-kernel-context-names-x86-registers.md new file mode 100644 index 00000000000..7984c7af405 --- /dev/null +++ b/issues/kernel/the-saved-kernel-context-names-x86-registers.md @@ -0,0 +1,20 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# The saved kernel context names x86 registers in generic code + +`kernel/src/sched/payload.rs`'s `KernelCtx`, which every CPU's switch loads, +carries `rsp` and `fs_base`: the stack pointer and the user thread pointer by +their x86 names, in code outside `arch/`. AArch64 saves `sp` and +`TPIDR_EL0` in the same two roles, so the port either writes AArch64 state +into fields named for x86 or grows a second copy of the struct. + +Owned by stage 4 of `issues/kernel/toyos-runs-on-arm64.md`, which writes the +AArch64 context switch. + +**Exit condition**: the fields are named by role (the saved kernel stack +pointer, the user thread pointer), the x86 and AArch64 switches both load +them, and nothing outside `kernel/src/arch/` names `rsp` or `fs_base`. diff --git a/issues/kernel/toyos-runs-on-arm64.md b/issues/kernel/toyos-runs-on-arm64.md index 33ed6054363..f189e7c6a7b 100644 --- a/issues/kernel/toyos-runs-on-arm64.md +++ b/issues/kernel/toyos-runs-on-arm64.md @@ -239,29 +239,34 @@ before any aarch64 file exists, with x86 as its only user: in its own crate, as `toyos-bootmap` does: it grows a TTBR plan, and `toyos-pcid` becomes an ASID/PCID allocator. +## x86 left in generic code + +Each is its own issue, owned by the stage that removes it: + +- `issues/kernel/the-saved-kernel-context-names-x86-registers.md` (stage 4) +- `issues/kernel/msi-and-pin-routing-take-an-x86-vector-and-apic-id.md` (stage 4) +- `issues/kernel/the-boot-timing-handoff-is-named-for-the-tsc.md` (stage 4) +- `issues/kernel/the-crash-evidence-records-x86-fault-registers.md` (stage 5) +- `issues/kernel/the-aarch64-kernel-builds-with-dead-code-allowed.md` (stage 7) + ## Stages Each stage names its exit; "measured" means a number from a run. 0. **Rulings and shared seams, before any aarch64 file exists.** `src/` gains an `Arch`, replacing the 57 triple mentions. `arch/syscall/` minus - `gate.rs` moves out of `arch/`. `toyos-elf` and `toyos-ld` take a machine: - `EM_AARCH64`, `R_AARCH64_RELATIVE`, PE `0xAA64`. The MSI doorbell becomes + `gate.rs` moves out of `arch/`. The MSI doorbell becomes one arch-provided constant. `IrqGuard`/`LogCommitGuard` become one arch primitive. The loom model owed by `issues/kernel/the-stops-no-lost-wake-claim-rests-on-x86-locked-rmws.md` lands, and the `Mmio` barrier contract above is written and asserted. **Exit**: x86 builds and passes unchanged. `rg 'x86_64-unknown' src/` - names one `Arch` table. `toyos-elf` and `toyos-ld` host tests cover an - aarch64 PIE with relocations. + names one `Arch` table. -1. **`aarch64-unknown-toyos` in the rust fork and `toyos-ld`.** A target - spec: `aarch64-unknown-none-elf`, PIC, frame pointers, `toyos-ld` as the - linker. Std pal `_start` and TLS for variant I with TLSDESC. `toyos-ld` - handles the TLSDESC/TLSLE relocation families and `aarch64` stubs in ELF - output. **Exit**: `cargo +toyos build --target aarch64-unknown-toyos` - builds `std` plus a hello-world and the whole Rust userland. `toyos-ld`'s - output passes `toyos-elf` and `llvm-readobj` with no unknown relocations. +1. **`aarch64-unknown-toyos` in the rust fork.** A target spec: + `aarch64-unknown-none-elf`, PIC, frame pointers. Std pal `_start` and TLS + for variant I. **Exit**: `cargo +toyos build --target aarch64-unknown-toyos` + builds `std` plus a hello-world and the whole Rust userland. 2. **The UEFI loader on AArch64** (`aarch64-unknown-uefi`, tier 2 upstream, no fork work needed). Entry is `extern "C"` rather than `sysv64`. @@ -294,6 +299,9 @@ Each stage names its exit; "measured" means a number from a run. `-smp 8` boots all CPUs; every CPU asserts the control-register declaration; the shootdown stress test and the loom-checked stop both pass; `CPU_OFF`/`SYSTEM_RESET`/`SYSTEM_OFF` replace ACPI reset and PM1a. + The TLS-descriptor resolver lands here, in std with its loader half and a + `dlopen` test; until it does the kernel refuses `R_AARCH64_TLSDESC` by name + (`toyos_elf::RelocError::TlsDescriptor`). 6. **Virtio on `virt`.** virtio-pci (ECAM from MCFG) for blk, net, gpu, sound, input and rng. virtio-input replaces the i8042 as the @@ -301,6 +309,11 @@ Each stage names its exit; "measured" means a number from a run. alongside RNDR. SMMUv3 is on `virt` (`-M virt,iommu=smmuv3`), decoded from IORT. **Exit**: netd claims its NIC through an SMMUv3 domain; a foreign-DMA test faults into a `DMA FAULT` record, not a crash. + Stage 0's three DMA-ordering fixes (NVMe's phase before its body, xHCI + `TrbRing::put`'s body before its cycle bit, and the event ring's cycle bit + before its body) get a test here that reds with `put` written back as one + `self.buf.write(off, trb)`; x86's TSO hides all three from every guest + test until then. 7. **Userland boots.** `init`, `logd`, the compositor, netd, soundd and sshd, built for `aarch64-unknown-toyos`. C programs stay x86-only per the From dbd4d74760ca773eb89e6c516d06a335f1796ea4 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:41:33 +0200 Subject: [PATCH 36/50] Answer the review's notes: Mmio's store-only ordering, an inlined DF witness, two stale comments mm/mmio.rs says a write_* orders prior stores only, as writel does, so a doorbell handing back entries this CPU read is ordered by dependency alone. df_witness_mutate is #[inline(always)], so DF crosses no ret. The loader's SAFETY comment loses its clause about the call site's size, and panic.rs's copy_tail its clause about another CPU, both stale. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/src/main.rs | 6 ++---- kernel/src/arch/x86_64/cpu.rs | 3 ++- kernel/src/mm/mmio.rs | 4 ++++ kernel/src/panic.rs | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/bootloader/src/main.rs b/bootloader/src/main.rs index b15a245666b..2391bd7b41b 100644 --- a/bootloader/src/main.rs +++ b/bootloader/src/main.rs @@ -72,10 +72,8 @@ const MAP_MARGIN: usize = 64; fn alloc_kernel_memory(size: usize) -> vec::Vec { const KERNEL_ALIGN: usize = 2 * 1024 * 1024; // 2MB let layout = Layout::from_size_align(size, KERNEL_ALIGN).expect("invalid layout"); - // SAFETY: `layout` has non-zero size — `size` is `vaddr_max + stack_size` - // at the one call site, and `stack_size` alone is a fixed 8 MiB — so - // `alloc_zeroed`'s "layout must have non-zero size" precondition always - // holds. + // SAFETY: `layout` has non-zero size so `alloc_zeroed`'s "layout must have + // non-zero size" precondition always holds. let ptr = unsafe { alloc::alloc::alloc_zeroed(layout) }; assert!(!ptr.is_null(), "kernel allocation failed"); // SAFETY: `ptr` was just returned by the global allocator for exactly diff --git a/kernel/src/arch/x86_64/cpu.rs b/kernel/src/arch/x86_64/cpu.rs index e93f86e0322..2353b0f5868 100644 --- a/kernel/src/arch/x86_64/cpu.rs +++ b/kernel/src/arch/x86_64/cpu.rs @@ -451,8 +451,9 @@ pub unsafe fn run_on_stack(top: u64, func: extern "C" fn() -> !) -> ! { } /// `df-witness-mutate`'s staging: set `DF` one instruction before the reader -/// that must refuse it. +/// that must refuse it. Inlined, so `DF` crosses no `ret` to get there. #[cfg(feature = "df-witness-mutate")] +#[inline(always)] pub fn df_witness_mutate() { // SAFETY: a build that exists to stage the defect, and the reader after it // panics before any `rep movs` can run. Nothing runs in between, so no diff --git a/kernel/src/mm/mmio.rs b/kernel/src/mm/mmio.rs index 3613e32a541..32bade8a15c 100644 --- a/kernel/src/mm/mmio.rs +++ b/kernel/src/mm/mmio.rs @@ -9,6 +9,10 @@ //! forms: `arch::barrier::before_mmio_write` and `after_mmio_read` supply it, //! which is a compiler barrier on x86-64's TSO and a `dmb` on AArch64, where a //! plain `fence` is inner-shareable and orders nothing a device sees. +//! A `write_*` orders prior *stores* only, as `writel` does: a doorbell that +//! hands entries back to the device after this CPU *read* them (an NVMe +//! completion queue head, xHCI's ERDP) is ordered after those loads only by +//! its value depending on them. //! //! A store to device memory is not a store to plain memory, and `volatile` //! alone promises nothing about the two against each other: without the diff --git a/kernel/src/panic.rs b/kernel/src/panic.rs index 24e760f8b19..635ba88326f 100644 --- a/kernel/src/panic.rs +++ b/kernel/src/panic.rs @@ -161,7 +161,7 @@ fn copy_tail(dst: &[AtomicU8], len: &AtomicU8, cut: &AtomicU8, src: &[u8]) { slot.store(b, Ordering::Relaxed); } // `Release`: the bytes before the length, for a reader that interrupts - // this copy as much as for one on another CPU. + // this copy. len.store(tail.len() as u8, Ordering::Release); cut.store(u8::from(from > 0), Ordering::Relaxed); } From f1ff3b32919610e834dec071f43f4a4d21882a14 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:52:27 +0200 Subject: [PATCH 37/50] kernel: #525's domain room and lent RAM, named the way this branch names them #525 reached the unit's domain through `vtd::` and asked for `CachePolicy::DeferToMtrr`; this branch reaches the unit through `arch::iommu_unit` and calls ordinary memory `CachePolicy::Normal`. AArch64's unit, which gives no domain, answers `reserve` and `place` as unreachable like the rest of its domain calls. Both architectures' images build. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/arch/aarch64/iommu_unit.rs | 8 ++++++++ kernel/src/iommu/mod.rs | 4 ++-- kernel/src/object/shm.rs | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/src/arch/aarch64/iommu_unit.rs b/kernel/src/arch/aarch64/iommu_unit.rs index ce36f6dfd12..3593845081f 100644 --- a/kernel/src/arch/aarch64/iommu_unit.rs +++ b/kernel/src/arch/aarch64/iommu_unit.rs @@ -24,6 +24,14 @@ pub mod domain { unreachable!("no domain exists: `create` refuses every one") } + pub fn reserve(_id: DomainId, _bytes: u64) -> Result { + unreachable!("no domain exists: `create` refuses every one") + } + + pub fn place(_id: DomainId, _at: Iova, _phys: u64, _bytes: u64) -> Result { + unreachable!("no domain exists: `create` refuses every one") + } + pub fn unmap(_id: DomainId, _at: Iova, _bytes: u64) -> Result<(), IommuError> { unreachable!("no domain exists: `create` refuses every one") } diff --git a/kernel/src/iommu/mod.rs b/kernel/src/iommu/mod.rs index 52ce3145863..cbcb8c22011 100644 --- a/kernel/src/iommu/mod.rs +++ b/kernel/src/iommu/mod.rs @@ -204,7 +204,7 @@ impl DeviceSpace { pub fn reserve(self, bytes: u64) -> Result { match self { Self::Untranslated => panic!("iommu: an untranslated space was asked for room"), - Self::Own(id) => vtd::domain::reserve(id, bytes).map(Iova::raw), + Self::Own(id) => unit::domain::reserve(id, bytes).map(Iova::raw), } } @@ -214,7 +214,7 @@ impl DeviceSpace { pub fn place(self, at: u64, phys: u64, bytes: u64) -> Result<(), IommuError> { match self { Self::Untranslated => panic!("iommu: an untranslated space was asked to place {phys:#x} at {at:#x}"), - Self::Own(id) => vtd::domain::place(id, Iova::translated(at), phys, bytes).map(|_| ()), + Self::Own(id) => unit::domain::place(id, Iova::translated(at), phys, bytes).map(|_| ()), } } diff --git a/kernel/src/object/shm.rs b/kernel/src/object/shm.rs index b2275cc436d..dfa28dda66e 100644 --- a/kernel/src/object/shm.rs +++ b/kernel/src/object/shm.rs @@ -102,7 +102,7 @@ impl SharedMemObject { /// a second device's domain would be one device reaching another's /// registers. pub fn ram(&self) -> Option<(u64, u64)> { - (self.region.pages.is_some() && self.region.cache == CachePolicy::DeferToMtrr) + (self.region.pages.is_some() && self.region.cache == CachePolicy::Normal) .then(|| (self.region.phys.phys(), self.region.size)) } From fef790a6e2c8b7ed6961cd41e7109365dff0f9f9 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 19:58:46 +0200 Subject: [PATCH 38/50] Lint the serial-lock model clean, and measure the MPIDR the slot issue rests on clippy's redundant_clone: the last writer takes the lock and the cell by value. The crash-evidence issue now quotes QEMU virt's own MADT with 17 CPUs under TCG: CPU 16's mpidr is 0x100, which `& 63` puts on slot 0. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- .../the-crash-evidence-records-x86-fault-registers.md | 6 +++--- kernel-loom/tests/serial_lock.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/issues/kernel/the-crash-evidence-records-x86-fault-registers.md b/issues/kernel/the-crash-evidence-records-x86-fault-registers.md index e88e3da0f5c..5492759a8b6 100644 --- a/issues/kernel/the-crash-evidence-records-x86-fault-registers.md +++ b/issues/kernel/the-crash-evidence-records-x86-fault-registers.md @@ -16,9 +16,9 @@ The slot is `FIRST[cpu::hardware_id() & (SLOTS - 1)]`, `SLOTS = 64`, as is `PANIC_DEPTH`'s. An APIC id below 64 is one slot per CPU. AArch64's `hardware_id` is MPIDR's `Aff3:Aff2:Aff1:Aff0`, so a second cluster's CPU 0 (`Aff1 = 1`, `0x100`) lands on slot 0 beside the first CPU of all. QEMU `virt` -numbers CPUs 16 and up that way, so two CPUs share one record and one panic -depth, which the `apic` field was left unmasked to make visible and not to -prevent. +with 17 CPUs (TCG, `-cpu max`, GICv3) names CPU 16 `mpidr=0x100` in its MADT, +so there two CPUs share one record and one panic depth, which the `apic` +field was left unmasked to make visible and not to prevent. Owned by stage 5 of `issues/kernel/toyos-runs-on-arm64.md`, the first stage that starts a second CPU. diff --git a/kernel-loom/tests/serial_lock.rs b/kernel-loom/tests/serial_lock.rs index 780abde1465..58613469a37 100644 --- a/kernel-loom/tests/serial_lock.rs +++ b/kernel-loom/tests/serial_lock.rs @@ -45,7 +45,7 @@ fn two_writers_never_overlap() { } }; let other = thread::spawn(writer(lock.clone(), line.clone())); - writer(lock.clone(), line.clone())(); + writer(lock, line)(); other.join().unwrap(); }); } From aedb8395facba0ccd366d8931160996aa9c7e448 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 20:18:19 +0200 Subject: [PATCH 39/50] issues: the primary rebuilds its compiler on compiler/ alone A worktree's own compiler is now keyed on the tools, bootstrap, stage0, the lockfile and LLVM; the primary's rebuild and its record still read compiler/ only, so the two disagree about a fork that moves only the others. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...rebuilds-its-compiler-on-compiler-alone.md | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md diff --git a/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md b/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md new file mode 100644 index 00000000000..eedad036c2f --- /dev/null +++ b/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md @@ -0,0 +1,20 @@ +--- +status: open +kind: tooling +opened: 2026-09-26 +--- + +# The primary rebuilds its compiler on `compiler/` alone + +`src/toolchain.rs` rebuilds the primary's toolchain when the stamp over +`rust/compiler/` changes, and `compiler::record` writes that tree as the +compiler the primary's `stage2` is. A fork commit that moves only +`src/bootstrap`, `src/tools`, `src/stage0`, `Cargo.lock` or the LLVM submodule +leaves the primary on the compiler it had, and a worktree whose `compiler/` +matches the record is handed that compiler too. A worktree's own compiler is +keyed on all of them (`compiler::key`, PR #524), so the two answers to "which +compiler do these sources name" differ. + +**Exit condition**: the primary's rebuild and its record read the same sources +`compiler::key` does, and a worktree compares against that, shown by a test +in which a fork moving only `src/tools` gets a compiler of its own. From 446447cafc9c0bf0d2a720226f7ce597be8acb5d Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 20:22:49 +0200 Subject: [PATCH 40/50] issues: the lane-socket path issue is main's, filed first #531 landed issues/build/a-lane-s-tap-socket-path-is-past-sun-len-on-the-dev-host.md for the same defect this branch had filed as lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md, so this branch's copy goes. Its measurements, for the record: a same-session A/B with main at 17eb66a4 reddened lan_mdns_answer on every run with a verdict, 4 of 4 on main and 5 of 5 on the branch, each on `path must be shorter than SUN_LEN`; the pid in the path is what makes the harness's ALONE line call two readings of it "a DIFFERENT failure". Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...ite-s-tmpdir-pass-the-unix-socket-limit.md | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md diff --git a/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md b/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md deleted file mode 100644 index 0873070d249..00000000000 --- a/issues/build/lan-sockets-under-the-suite-s-tmpdir-pass-the-unix-socket-limit.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -status: open -kind: tooling -opened: 2026-09-26 ---- - -# The LAN tests' sockets under the suite's `$TMPDIR` pass the Unix socket limit - -Since #529 (`e48604c0`) a suite's scratch lives under a per-run directory in -`$TMPDIR`, and `tests/common/segment.rs` makes each lane's socket there -(`tap-in-{n}.sock`, `tap-out-{n}.sock`). On macOS `$TMPDIR` is -`/private/var/folders/<2>/<28>/T/`, and the result is 104 bytes: - -``` -/private/var/folders/gr/mr4_fg4n34jb417sx1g5cgxc0000gp/T/toyos-tmp-47355-0/tests-0/lane-0/tap-out-0.sock -``` - -`sockaddr_un.sun_path` holds 104 bytes with its terminator, so the connect -fails (`path must be shorter than SUN_LEN`), and `lan_mdns_answer` reds before -the lane carries a frame. Measured on PR #524's A/B: `main` at `e48604c0` -red 4 of 4 runs, the branch 5 of 5, every one on this sentence; the fast tier -at the branch's merge of `e48604c0` red on it too. The wide run's first -failure, `QEMU died before ===READY=== (status … 256)`, is the other end of the -same socket. The pid in the path also makes the harness's `ALONE` line call the -two readings "a DIFFERENT failure". - -**Exit condition**: every socket the harness makes has a path the platform's -`sun_path` holds, checked where the path is made rather than at `connect`, and -`lan_mdns_answer` is green again on the dev host. From 48dd778cb5383a727fe03f3d9a08f37fcfef597a Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 20:46:35 +0200 Subject: [PATCH 41/50] toolchain: the hosted rustc builds without lld, then stage2 is reassembled with it `lld = true` in the hosted-rustc config made bootstrap's Assemble for the x86_64-unknown-toyos stage-2 compiler ensure LldWrapper, hence llvm::Lld and a cmake LLVM for a ToyOS host. `lld = false` there instead wipes the host stage2 (Sysroot::run removes it on every assemble), and with it the rust-lld AArch64's std_config names. So the hosted build writes `lld = false`, and build_hosted_rustc then runs the host-only build once more under `lld = true`, which reassembles the host stage2 with rust-lld and compiles nothing new. This is #532's shape, so the two reconcile on it. The host's `default-linker-linux-override` is pinned off in every config that builds a host compiler: bootstrap ties it to `lld` on x86_64-unknown-linux-gnu, so without the pin the toggle would rebuild the host rustc in each of the two builds on Linux. Off is what main's `lld = false` already gave, so no host rustc changes. The worktree compiler's recipe moves with the pin. assert_toolchain_is_honest now refuses a toolchain with no rust-lld, by name, and its test holds that refusal. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/compiler.rs | 6 +++- src/sysroot.rs | 3 +- src/toolchain.rs | 75 ++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/compiler.rs b/src/compiler.rs index 4663b5da053..083d2c0bc6c 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -44,7 +44,7 @@ use crate::toolchain::{self, host_triple}; /// What changes how a key's sources become a compiler and is none of them: the /// build below. Moving it moves every key. -const RECIPE: &str = "bootstrap stage 2 of compiler/rustc and library, profile compiler, host only, with rust-lld; 2"; +const RECIPE: &str = "bootstrap stage 2 of compiler/rustc and library, profile compiler, host only, with rust-lld, host linker pinned; 3"; /// What a compiler's key is the identity of, in its fork checkout. const KEYED: [&str; 5] = ["compiler", "src/bootstrap", "src/tools", "src/stage0", "Cargo.lock"]; @@ -281,8 +281,12 @@ target = ["{host}"] [rust] incremental = true lld = true + +[target.{host}] +{pin} "#, build_dir = build_dir.display(), + pin = toolchain::HOST_LINKER_PIN, ) } diff --git a/src/sysroot.rs b/src/sysroot.rs index c1cd09703f9..0c5905e20e1 100644 --- a/src/sysroot.rs +++ b/src/sysroot.rs @@ -461,8 +461,7 @@ fn std_config(compiler: &Path, build_dir: &Path, host: &str, toyos_ld: &Path) -> let linker = if arch.links_through_toyos_ld() { format!("linker = \"{linker}\"") } else { - let lld = compiler.join(format!("lib/rustlib/{host}/bin/rust-lld")); - format!("linker = \"{}\"\nrpath = false", lld.display()) + format!("linker = \"{}\"\nrpath = false", toolchain::rust_lld(compiler).display()) }; format!("\n[target.{}]\n{linker}\n", arch.userland()) }) diff --git a/src/toolchain.rs b/src/toolchain.rs index ebddbae80fa..413519e64f8 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -325,7 +325,8 @@ pub(crate) fn provision_toolchain_cargo(stage2: &Path) { }); } -/// Refuse a toolchain layout that would make rustup narrate. +/// Refuse a toolchain layout that would make rustup narrate, or that has no +/// linker for the guest targets that name `rust-lld`. /// /// Unconditional and after the step that provisions, because the defect being /// gated is a provisioning step that silently stopped running: a check that only @@ -342,6 +343,21 @@ pub(crate) fn assert_toolchain_is_honest(stage2: &Path) { narrated.join(" and "), if narrated.len() == 1 { "it" } else { "them" }, ); + let lld = rust_lld(stage2); + assert!( + lld.is_file(), + "the toyos toolchain at {} carries no {}, the linker every guest target that does not \ + link through toyos-ld names: bootstrap puts it there when `write_config` says \ + `lld = true`, and it did not", + stage2.display(), + lld.display(), + ); +} + +/// The linker the guest targets name, as the toolchain at `toolchain` carries +/// it: `lib/rustlib//bin/rust-lld`, where rustc itself looks for it. +pub(crate) fn rust_lld(toolchain: &Path) -> PathBuf { + toolchain.join("lib/rustlib").join(host_triple()).join("bin/rust-lld") } /// Ensure the toolchain is up to date, and return the sysroot this checkout's @@ -779,11 +795,40 @@ fn build_hosted_rustc(rust_dir: &Path, toyos_ld: &Path) { if !ok { tolerated_failure(&log, "the hosted rustc build"); } - // No config restore needed — full_bootstrap writes the - // cross-only config before they run, so the next non-hosted build - // always starts with the correct config regardless of what's on disk. + + // That build reassembled the host's `stage2` without `rust-lld` + // (`write_config` says why), so the host-only build runs once more to put + // it back: everything it would compile is already built. + write_config(rust_dir, &host_triple(), toyos_ld, false); + let (ok, log) = x_build( + rust_dir, + &["build", "--stage", "2", "--warnings", "warn"], + "the toolchain, reassembled", + ); + refuse_on_compile_error(&log, "the toolchain, reassembled"); + assert!( + rust_lld(&stage2(rust_dir)).is_file(), + "the toolchain's reassembly after the hosted rustc left no {}", + rust_lld(&stage2(rust_dir)).display() + ); + if !ok { + tolerated_failure(&log, "the toolchain's reassembly"); + } } +/// `bootstrap.toml` for the host-only toolchain, or with the ToyOS-hosted rustc. +/// +/// `lld = true` is what puts `rust-lld` in every stage's sysroot, where rustc +/// finds the linker the targets that do not link through toyos-ld name. The +/// hosted rustc's build cannot have it: bootstrap would then build LLD for the +/// ToyOS host from C++, which nothing here can compile. Every assemble removes +/// the host's `stage2` first, so [`build_hosted_rustc`] reassembles it under +/// the host-only config after. +/// +/// The host's `default-linker-linux-override` is pinned off because bootstrap +/// otherwise ties it to `lld` for `x86_64-unknown-linux-gnu`, and a host rustc +/// whose build environment flips with the config is rebuilt by each of those +/// two builds. fn write_config(rust_dir: &Path, host: &str, toyos_ld: &Path, with_hosted_rustc: bool) { let linker = toyos_ld.display(); let host_line = if with_hosted_rustc { @@ -826,13 +871,21 @@ target = [{targets}] [rust] incremental = true -lld = true +lld = {lld} -{userland}"# +[target.{host}] +{HOST_LINKER_PIN} + +{userland}"#, + lld = !with_hosted_rustc, ); fs::write(rust_dir.join("bootstrap.toml"), config).unwrap(); } +/// What the host rustc links its own binaries with, held to one answer in every +/// `bootstrap.toml` that builds a host compiler: [`write_config`] says why. +pub(crate) const HOST_LINKER_PIN: &str = "default-linker-linux-override = \"off\""; + /// Path to the host toyos-ld binary (stable location, never wiped by sysroot rebuilds). /// /// The workspace root's `target/`, not `toyos-ld/target/`: `toyos-ld` is a @@ -1071,6 +1124,16 @@ mod tests { provision_toolchain_cargo(&stage2); assert!(narrated_binaries(&bin).is_empty()); assert!(!cargo_link_stale(&stage2)); + + // Nothing narrates, and the toolchain is still refused: it has no linker. + let refused = std::panic::catch_unwind(|| assert_toolchain_is_honest(&stage2)) + .expect_err("a toolchain with no rust-lld is refused"); + let said = refused.downcast_ref::().expect("a formatted refusal"); + assert!(said.contains("rust-lld"), "the refusal names the linker: {said}"); + + let lld = rust_lld(&stage2); + fs::create_dir_all(lld.parent().unwrap()).unwrap(); + fs::write(&lld, b"").unwrap(); assert_toolchain_is_honest(&stage2); } From 17f930ebf26c92a66cf4dc556addda38989f5fd6 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 20:46:35 +0200 Subject: [PATCH 42/50] sourcegate: a glob or a rename of core/std names the arch module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `use core::*;` then `arch::…`, and `use core as k;` / `extern crate core as k;` / `use core::{self as k}` then `k::arch::…`, all passed the arch rules. What they bring into scope is a question for name resolution, which a line scan does not have, so the import itself is refused, outside the places, rather than followed to a later `arch`. A rename is counted only in an import (`use`, `extern crate`, or a `use` group rooted at the crate root), so `core as u32` on a variable and `crate::core as c` are not reds; the fixture holds both. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/sourcegate.rs | 105 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 98 insertions(+), 7 deletions(-) diff --git a/src/sourcegate.rs b/src/sourcegate.rs index 012452ef3ab..a08c4669c45 100644 --- a/src/sourcegate.rs +++ b/src/sourcegate.rs @@ -1253,9 +1253,16 @@ const ASSEMBLY: &[&str] = &["asm!", "global_asm!", "naked_asm!", "#[naked]", "un const ARCH_MODULE: &str = "core::arch/std::arch"; /// The 0-based lines of `text` on which a path names `core::arch` or -/// `std::arch`: `core::arch::asm!`, `use core::arch as isa;`, and an `arch` -/// that begins an element of a `core::{…}` group, over any number of lines. -/// Comments and string literals are not code ([`code_only`]). +/// `std::arch`, or makes a name that can: `core::arch::asm!`, +/// `use core::arch as isa;`, an `arch` that begins an element of a `core::{…}` +/// group, over any number of lines — and any glob of `core`/`std` itself +/// (`use core::*;`, `core::{*}`) or rename of it (`use core as k;`, +/// `extern crate core as k;`, `core::{self as k}`). +/// +/// **The glob and the rename are refused whole**, not followed to an `arch` +/// after them: what they bring into scope is read by resolution, which a line +/// scan does not have, and code outside an arch module has no other use for +/// either. Comments and string literals are not code ([`code_only`]). #[cfg(test)] fn arch_module_lines(text: &str) -> Vec { let code: Vec = text.lines().map(code_only).collect::>().join("\n").chars().collect(); @@ -1273,15 +1280,71 @@ fn arch_module_lines(text: &str) -> Vec { && !code.get(end).is_some_and(|c| word(*c)) && !at.checked_sub(1).and_then(|j| code.get(j)).is_some_and(|c| word(*c)) }; + // The identifier that ends before `at`, over whitespace and `::`. + let ident_before = |at: usize| { + let mut end = at; + while end > 0 && (code[end - 1].is_whitespace() || code[end - 1] == ':') { + end -= 1; + } + let mut start = end; + while start > 0 && word(code[start - 1]) { + start -= 1; + } + (start, code[start..end].iter().collect::()) + }; + // Whether `at` begins an item that imports: `use …`, or `extern crate …`, + // or an element of a `use` group. + let imported = |at: usize| { + let mut at = at; + loop { + let (start, ident) = ident_before(at); + match ident.as_str() { + "use" => return true, + "crate" => return ident_before(start).1 == "extern", + "" => {} + _ => return false, + } + // Not after an identifier: inside a group only if a `{` opens it. + let mut back = start; + while back > 0 && code[back - 1].is_whitespace() { + back -= 1; + } + match back.checked_sub(1).map(|j| code[j]) { + Some('{') => at = back - 1, + Some(',') => { + let mut depth = 0usize; + let mut j = back - 1; + loop { + let Some(k) = j.checked_sub(1) else { return false }; + j = k; + match code[j] { + '}' => depth += 1, + '{' if depth == 0 => break, + '{' => depth -= 1, + ';' => return false, + _ => {} + } + } + at = j; + } + _ => return false, + } + } + }; let mut lines = Vec::new(); for at in 0..code.len() { let Some(root) = ["core", "std"].into_iter().find(|root| ident_at(at, root)) else { continue }; - let colons = skip_space(at + root.len()); + let after = skip_space(at + root.len()); + if ident_at(after, "as") && imported(at) { + lines.push(line_of(at)); + continue; + } + let colons = after; if code.get(colons..colons + 2) != Some(&[':', ':'][..]) { continue; } let next = skip_space(colons + 2); - if ident_at(next, "arch") { + if ident_at(next, "arch") || code.get(next) == Some(&'*') { lines.push(line_of(next)); } else if code.get(next) == Some(&'{') { // Each element of the group begins after its `{` or a `,` at depth one. @@ -1301,7 +1364,9 @@ fn arch_module_lines(text: &str) -> Vec { ',' if depth == 1 => element = true, c if c.is_whitespace() => {} _ => { - if element && depth == 1 && ident_at(i, "arch") { + let renamed_self = + ident_at(i, "self") && ident_at(skip_space(i + "self".len()), "as"); + if element && depth == 1 && (ident_at(i, "arch") || c == '*' || renamed_self) { lines.push(line_of(i)); } element = false; @@ -1625,11 +1690,37 @@ mod tests { file("toyos-dma/src/lib.rs", "use crate::arch::aarch64::x;\n"), file("toyos-sched/src/lib.rs", "use core::arch as isa;\nfn f() { unsafe { isa::aarch64::vdupq_n_u8(0) }; }\n"), file("toyos-mixer/src/lib.rs", "use core::{arch::x86_64::_rdtsc};\n"), + // A glob or a rename of the root brings `arch` in under a name no + // line scan resolves; each is red at the import, and the use after + // it is spelled so that no other needle matches. + file("toyos-elide/src/lib.rs", "use core::*;\nuse arch::{aarch64::vdupq_n_u8};\n"), + file("toyos-hda/src/lib.rs", "use core as k;\nuse k::arch::{aarch64::vdupq_n_u8};\n"), + file("toyos-pci/src/lib.rs", "extern crate core as k;\nuse k::arch::{aarch64::vdupq_n_u8};\n"), + file("toyos-wallclock/src/lib.rs", "use core::{self as k};\nuse k::arch::{aarch64::vdupq_n_u8};\n"), + file("toyos-userbound/src/lib.rs", "use std::{\n *,\n};\n"), + file("toyos-proclife/src/lib.rs", "use {alloc::vec, std as k};\n"), ]; let said = place_violations(pure, &planted); - assert_eq!(said.len(), 5, "{said:?}"); + assert_eq!(said.len(), 11, "{said:?}"); assert!(said.iter().any(|s| s.starts_with("toyos-sched/src/lib.rs:1:")), "{said:?}"); + for at in [ + "toyos-elide/src/lib.rs:1:", + "toyos-hda/src/lib.rs:1:", + "toyos-pci/src/lib.rs:1:", + "toyos-wallclock/src/lib.rs:1:", + "toyos-userbound/src/lib.rs:2:", + "toyos-proclife/src/lib.rs:1:", + ] { + assert!(said.iter().any(|s| s.starts_with(at) && s.contains(ARCH_MODULE)), "{at} is not red: {said:?}"); + } assert!(said.iter().all(|s| s.contains(pure.name) && s.contains("no file at all")), "{said:?}"); + + // What is not the root, or not an import, is not a rename of it. + let unrelated = [ + file("toyos-sched/src/cpu.rs", "fn f(core: u8) -> u32 { g(1, core as u32) + { core as u32 } }\n"), + file("toyos-dma/src/lib.rs", "use crate::core as c;\nuse a::{b, core as k};\n"), + ]; + assert_eq!(place_violations(pure, &unrelated), Vec::::new()); } /// **Two clauses, one rule each, and neither is checkable any other way.** From bc1fdaa399166039507dce78057ea44412d91173 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 21:03:35 +0200 Subject: [PATCH 43/50] aarch64: the loader refuses a CPU whose HCR_EL2.E2H is RES1, by name At EL2 the loader reads HCR_EL2.E2H and ID_AA64MMFR4_EL1.E2H0 (by its encoding, S3_0_C0_C7_4, which an older CPU reads as zero) before ExitBootServices, says what it found on the firmware console, and refuses a CPU without FEAT_E2H0, where E2H is RES1 and the kernel's drop cannot clear it. The kernel's own tbz branch to refused_hcr_el2_e2h is deleted: the read-back compare that follows it already refuses an E2H held set, since the declaration has it clear, and no test could tell the two apart. virt_early_panic and virt_el2_drop now assert the loader's line. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- bootloader/src/arch/aarch64.rs | 33 +++++++++++++++++++++++++ bootloader/src/arch/x86_64.rs | 7 ++++++ bootloader/src/main.rs | 10 ++++++++ kernel/src/arch/aarch64/boot.rs | 24 ++++-------------- kernel/src/arch/aarch64/control_regs.rs | 4 --- tests/toyos.rs | 14 +++++++---- 6 files changed, 64 insertions(+), 28 deletions(-) diff --git a/bootloader/src/arch/aarch64.rs b/bootloader/src/arch/aarch64.rs index 0e2b29d6d84..dbb0b327022 100644 --- a/bootloader/src/arch/aarch64.rs +++ b/bootloader/src/arch/aarch64.rs @@ -33,6 +33,39 @@ pub fn counter_origin() -> alloc::string::String { alloc::format!("CNTFRQ_EL0 {hz} Hz; the counter's origin is firmware's") } +/// What the loader says about the CPU as firmware handed it over, or why the +/// kernel cannot run on it: entered at EL2 on a CPU without FEAT_E2H0, +/// `HCR_EL2.E2H` is RES1, so the kernel's entry cannot clear it and every +/// `_el1` register its drop programs would be EL2's own. Refused here, where +/// the console still prints; the entry's read-back of `HCR_EL2` stays as the +/// last line of defence. +pub fn cpu_as_entered() -> Result, alloc::string::String> { + let current: u64; + // SAFETY: reads `CurrentEL`, which EL1 and above may read. + unsafe { core::arch::asm!("mrs {}, currentel", out(reg) current, options(nomem, nostack, preserves_flags)) }; + let el = (current >> 2) & 0b11; + if el != 2 { + return Ok(Some(alloc::format!("CPU: entered at EL{el}"))); + } + let (hcr, mmfr4): (u64, u64); + // SAFETY: at EL2 both are readable. `ID_AA64MMFR4_EL1` by its encoding, + // `S3_0_C0_C7_4`, which sits in the ID space an older CPU reads as zero. + unsafe { + core::arch::asm!("mrs {}, hcr_el2", out(reg) hcr, options(nomem, nostack, preserves_flags)); + core::arch::asm!("mrs {}, S3_0_C0_C7_4", out(reg) mmfr4, options(nomem, nostack, preserves_flags)); + } + let e2h = (hcr >> 34) & 1; + let e2h0 = (mmfr4 >> 24) & 0xF; + let state = alloc::format!("CPU: entered at EL2, HCR_EL2.E2H {e2h}, ID_AA64MMFR4_EL1.E2H0 {e2h0:#x}"); + if e2h0 != 0 { + return Err(alloc::format!( + "{state}: REFUSED, HCR_EL2.E2H is RES1 on a CPU without FEAT_E2H0, and the kernel's \ + drop to EL1 needs it clear" + )); + } + Ok(Some(alloc::format!("{state}: the kernel's entry writes E2H clear"))) +} + /// The smallest data cache line on this machine, from `CTR_EL0.DminLine`. fn line() -> u64 { let ctr: u64; diff --git a/bootloader/src/arch/x86_64.rs b/bootloader/src/arch/x86_64.rs index a48dee5e395..6a34eea1420 100644 --- a/bootloader/src/arch/x86_64.rs +++ b/bootloader/src/arch/x86_64.rs @@ -60,6 +60,13 @@ pub fn write_back(at: u64, len: usize) { unsafe { core::arch::asm!("sfence", options(nostack, preserves_flags)) }; } +/// What the loader says about the CPU as firmware handed it over, or why the +/// kernel cannot run on it. A UEFI x86-64 loader runs in long mode at CPL 0, +/// the state the kernel's entry takes, so there is nothing to say or refuse. +pub fn cpu_as_entered() -> Result, alloc::string::String> { + Ok(None) +} + /// The I/O port space the chipset's TCO block answers in. pub mod pio { /// Whether this architecture has an I/O port space at all. diff --git a/bootloader/src/main.rs b/bootloader/src/main.rs index 2391bd7b41b..d16e7820b60 100644 --- a/bootloader/src/main.rs +++ b/bootloader/src/main.rs @@ -615,6 +615,16 @@ fn tsc() -> u64 { #[allow(clippy::too_many_arguments)] fn start_kernel(kernel: LoadedKernel, kernel_elf_bytes: vec::Vec, cmdline: vec::Vec, rsdp_addr: u64, gop: Option, boot_part: Option, log_partition_guid: [u8; 16], rtc_utc_offset: Option, root_image: Option, entry_tsc: u64, system_table: SystemTable) -> ! { + // Said before it is refused, for `report_reach`'s reason. + match arch::cpu_as_entered() { + Ok(None) => {} + Ok(Some(line)) => println!("{line}"), + Err(why) => { + println!("{why}"); + panic!("{why}"); + } + } + // The last of the firmware questions, and asked here for the same reason // the GOP's was asked before this: the protocol dies with boot services. // diff --git a/kernel/src/arch/aarch64/boot.rs b/kernel/src/arch/aarch64/boot.rs index 16f3df77b25..37fb11c9eab 100644 --- a/kernel/src/arch/aarch64/boot.rs +++ b/kernel/src/arch/aarch64/boot.rs @@ -77,9 +77,6 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { "msr hcr_el2, x1", "isb", "mrs x6, hcr_el2", - "tbz x6, #{e2h}, 4f", - "b {refuse_e2h}", - "4:", "cmp x6, x1", "b.ne {refuse_hcr}", "msr mair_el1, x4", @@ -128,8 +125,6 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { sctlr = const regs::SCTLR, sctlr_off = const regs::SCTLR_MMU_OFF, hcr = const regs::HCR_EL2, - e2h = const regs::HCR_EL2_E2H, - refuse_e2h = sym refused_hcr_el2_e2h, refuse_hcr = sym refused_hcr_el2_readback, cnthctl = const regs::CNTHCTL_EL2, cptr = const regs::CPTR_EL2, @@ -141,21 +136,12 @@ pub unsafe extern "C" fn _start(_kernel_args: &KernelArgs) -> ! { ); } -/// Where a CPU entered at EL2 halts when `HCR_EL2.E2H` reads back set after the -/// entry wrote it clear: firmware's VHE it will not give up, or a CPU without -/// FEAT_E2H0, whose `E2H` is RES1. There, every `_el1` register the drop -/// programs would be EL2's own and `CPTR_EL2` has another layout, so the -/// kernel does not run. Nothing can report yet: the console is found after the -/// drop, so the refusal is this symbol, which the halted PC names. -#[unsafe(naked)] -#[no_mangle] -unsafe extern "C" fn refused_hcr_el2_e2h() -> ! { - core::arch::naked_asm!("1:", "wfe", "b 1b") -} - /// Where a CPU entered at EL2 halts when `HCR_EL2` reads back anything but the -/// declaration the entry wrote, for [`refused_hcr_el2_e2h`]'s reason and -/// with its silence. +/// declaration the entry wrote: `E2H` held set, which the loader refuses by +/// name first (`bootloader/src/arch/aarch64.rs`), or any other bit. There the +/// registers the drop programs are not the ones the declaration names, so the +/// kernel does not run. Nothing can report yet: the console is found +/// after the drop, so the refusal is this symbol, which the halted PC names. #[unsafe(naked)] #[no_mangle] unsafe extern "C" fn refused_hcr_el2_readback() -> ! { diff --git a/kernel/src/arch/aarch64/control_regs.rs b/kernel/src/arch/aarch64/control_regs.rs index 17f2acf3a08..9c82addbb2a 100644 --- a/kernel/src/arch/aarch64/control_regs.rs +++ b/kernel/src/arch/aarch64/control_regs.rs @@ -50,10 +50,6 @@ pub const CPACR: u64 = 0; /// no stage-2 translation, no trap, `E2H` clear. pub const HCR_EL2: u64 = 1 << 31; -/// `HCR_EL2.E2H`'s position. Set, EL2's registers take EL1's names and -/// layouts; the entry refuses a CPU on which it reads back set. -pub const HCR_EL2_E2H: u64 = 34; - /// `CNTHCTL_EL2` when entered at EL2: `EL1PCTEN` and `EL1PCEN`, so EL1 reads the /// physical counter and programs its timer without trapping. pub const CNTHCTL_EL2: u64 = 1 << 1 | 1 << 0; diff --git a/tests/toyos.rs b/tests/toyos.rs index 3390c9acaf8..d0e96489869 100644 --- a/tests/toyos.rs +++ b/tests/toyos.rs @@ -5899,8 +5899,9 @@ fn run_screen_test( let serial = format!("{}\n{rest}", qemu.boot_log()); eprintln!(" [virt] the panel is up {} ms after the boot began", started.elapsed().as_millis()); // What stage 3 prints before it panics: every item is a record - // only the AArch64 side of the kernel writes. + // only the AArch64 side of the loader or the kernel writes. for want in [ + "CPU: entered at EL1", "serial: PL011 at", "control registers: SCTLR_EL1=", "as declared; entered at EL", @@ -5933,10 +5934,11 @@ fn run_screen_test( "virt_el2_drop" => { // The entry's drop from EL2, which HVF never exercises: `virt` with // EL2 under TCG, where firmware hands the loader the CPU at EL2. A - // drop that leaves `HCR_EL2` other than declared halts in a named - // refusal and says nothing; one that lands anywhere but EL1 on - // `SP_EL1` panics in the declaration's read-back. Either way the - // line this waits for never comes. + // loader that refuses the CPU says so and stops; a drop that leaves + // `HCR_EL2` other than declared halts in a named refusal and says + // nothing; one that lands anywhere but EL1 on `SP_EL1` panics in the + // declaration's read-back. Each way the line this waits for never + // comes. let mut qemu = QemuInstance::boot_with_options( test_config, &[], @@ -5951,6 +5953,8 @@ fn run_screen_test( let rest = qemu.drain_until(Duration::from_secs(10), |l| l.contains(EARLY_PANIC_MESSAGE)); let serial = format!("{}\n{rest}", qemu.boot_log()); for want in [ + "CPU: entered at EL2, HCR_EL2.E2H ", + "ID_AA64MMFR4_EL1.E2H0 0x0: the kernel's entry writes E2H clear", "as declared; entered at EL2, HCR_EL2 read back as declared", "EARLY PANIC: panicked at", EARLY_PANIC_MESSAGE, From 61d8180e04e15aca3fffa55dd18b8e1a00ab5fad Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 21:03:36 +0200 Subject: [PATCH 44/50] kernel: an executable's TLS descriptor is refused on its count RelaCounts::for_executable in toyos-elf refuses a TLSDESC count, or a group too large for one allocation, and is the only way to an ExeReservation, the capacities parse_rela_entries reserves. The tlsdesc Vec, kept only to be refused, and its as_relas arm are deleted; the kernel cannot skip the refusal without losing the reservation. toyos-elf's tables test holds both refusals. Static::variant, which nothing called, is deleted. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/src/elf/index.rs | 31 +++++++++--------------- kernel/src/loader/mod.rs | 11 +++++---- toyos-elf/src/rela.rs | 50 +++++++++++++++++++++++++++++++++++++++ toyos-elf/src/tls.rs | 4 ---- toyos-elf/tests/tables.rs | 22 +++++++++++++++++ 5 files changed, 90 insertions(+), 28 deletions(-) diff --git a/kernel/src/elf/index.rs b/kernel/src/elf/index.rs index e20e9d6a1b3..2d807a0c144 100644 --- a/kernel/src/elf/index.rs +++ b/kernel/src/elf/index.rs @@ -7,6 +7,7 @@ use alloc::vec::Vec; use crate::mm::{KernelSlice, MAX_HEAP_ALLOC}; +use toyos_elf::rela::ExeRefusal; use toyos_elf::{Rela, RelaCounts, RelaTable, RelocKind}; /// Relocation entries the loader needs, grouped by what it does with them. @@ -17,8 +18,6 @@ pub struct ParsedRelaEntries { pub glob_dat: Vec<(u64, u32, i64)>, pub tpoff64: Vec<(u64, u32, i64)>, pub tpoff32: Vec<(u64, u32, i64)>, - /// `R_AARCH64_TLSDESC`, kept only so `rela::validate` refuses the image by name. - pub tlsdesc: Vec<(u64, u32, i64)>, } impl ParsedRelaEntries { @@ -37,15 +36,13 @@ impl ParsedRelaEntries { let t32 = self.tpoff32.iter().map(|&(offset, sym, addend)| Rela { offset, sym, kind: RelocKind::Tpoff32, addend, }); - let desc = self.tlsdesc.iter().map(|&(offset, sym, addend)| Rela { - offset, sym, kind: RelocKind::TlsDesc, addend, - }); - rel.chain(bind).chain(t64).chain(t32).chain(desc) + rel.chain(bind).chain(t64).chain(t32) } } -/// Groups both relocation tables, returning `None` when any one group would not fit a single kernel allocation. -pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Option { +/// Groups both relocation tables, reserved exactly from what +/// `RelaCounts::for_executable` allows, or its refusal. +pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Result { let entries = || { RelaTable::new(rela_data, crate::arch::ELF_MACHINE) .iter() @@ -54,17 +51,12 @@ pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Option(); - let kept = [RelocKind::Relative, RelocKind::GlobDat, RelocKind::Tpoff64, RelocKind::Tpoff32, RelocKind::TlsDesc]; - if counts.max_of(&kept).checked_mul(widest).is_none_or(|b| b > MAX_HEAP_ALLOC) { - log!("ELF: {:?} will not fit one allocation", counts); - return None; - } + let reserve = counts.for_executable(widest, MAX_HEAP_ALLOC).inspect_err(|_| log!("ELF: {:?} refused", counts))?; let mut out = ParsedRelaEntries { - relative: Vec::with_capacity(counts.relative), - glob_dat: Vec::with_capacity(counts.bind), - tpoff64: Vec::with_capacity(counts.tpoff64), - tpoff32: Vec::with_capacity(counts.tpoff32), - tlsdesc: Vec::with_capacity(counts.tlsdesc), + relative: Vec::with_capacity(reserve.relative), + glob_dat: Vec::with_capacity(reserve.bind), + tpoff64: Vec::with_capacity(reserve.tpoff64), + tpoff32: Vec::with_capacity(reserve.tpoff32), }; for r in entries() { match r.kind { @@ -74,11 +66,10 @@ pub fn parse_rela_entries(rela_data: &[u8], jmprel_data: &[u8]) -> Option out.tpoff64.push((r.offset, r.sym, r.addend)), RelocKind::Tpoff32 => out.tpoff32.push((r.offset, r.sym, r.addend)), - RelocKind::TlsDesc => out.tlsdesc.push((r.offset, r.sym, r.addend)), _ => {} } } - Some(out) + Ok(out) } /// Pre-computed writes, sorted by offset so a page's share is one binary search away. diff --git a/kernel/src/loader/mod.rs b/kernel/src/loader/mod.rs index ed52efd47f4..044a0eb05cb 100644 --- a/kernel/src/loader/mod.rs +++ b/kernel/src/loader/mod.rs @@ -272,10 +272,13 @@ fn read_exe_tables( } None => Vec::new(), }; - let Some(relas) = elf::parse_rela_entries(&rela_data, &jmprel_data) else { - log!("spawn: {}: relocation tables do not fit one allocation", path); - return Err(SyscallError::ResourceExhausted); - }; + let relas = elf::parse_rela_entries(&rela_data, &jmprel_data).map_err(|refused| { + log!("spawn: {}: {}", path, refused.as_str()); + match refused { + toyos_elf::rela::ExeRefusal::TooLarge => SyscallError::ResourceExhausted, + toyos_elf::rela::ExeRefusal::TlsDescriptor => SyscallError::InvalidArgument, + } + })?; let dynstr = match dyn_info.strtab_table() { Some(t) => { diff --git a/toyos-elf/src/rela.rs b/toyos-elf/src/rela.rs index 4b942a24ac5..b5759eb1215 100644 --- a/toyos-elf/src/rela.rs +++ b/toyos-elf/src/rela.rs @@ -186,6 +186,26 @@ impl RelaCounts { kinds.iter().map(|&k| self.count_of(k)).max().unwrap_or(0) } + /// What an executable's loader reserves for each group it keeps, at `width` + /// bytes an entry, or why it keeps none: a TLS descriptor, which only a + /// resolver this loader does not have can fill, or a group that would + /// not fit `max_bytes`. The reservation is had only through this refusal. + pub fn for_executable(&self, width: usize, max_bytes: usize) -> Result { + if self.tlsdesc != 0 { + return Err(ExeRefusal::TlsDescriptor); + } + let kept = [RelocKind::Relative, RelocKind::GlobDat, RelocKind::Tpoff64, RelocKind::Tpoff32]; + if self.max_of(&kept).checked_mul(width).is_none_or(|b| b > max_bytes) { + return Err(ExeRefusal::TooLarge); + } + Ok(ExeReservation { + relative: self.relative, + bind: self.bind, + tpoff64: self.tpoff64, + tpoff32: self.tpoff32, + }) + } + pub fn count_of(&self, kind: RelocKind) -> usize { match kind { RelocKind::Relative => self.relative, @@ -213,6 +233,36 @@ pub struct FillLattice { /// The demand-fault page an executable's relocations are filled in. pub const FILL_GRANULE: u64 = 4096; +/// How many entries of each group an executable's loader keeps: made only by +/// [`RelaCounts::for_executable`]. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[non_exhaustive] +pub struct ExeReservation { + pub relative: usize, + /// `GLOB_DAT` and `JUMP_SLOT`. + pub bind: usize, + pub tpoff64: usize, + pub tpoff32: usize, +} + +/// Why an executable's relocations are refused before any is kept. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum ExeRefusal { + /// [`RelocError::TlsDescriptor`]'s reason. + TlsDescriptor, + /// A group would not fit one allocation. + TooLarge, +} + +impl ExeRefusal { + pub const fn as_str(self) -> &'static str { + match self { + ExeRefusal::TlsDescriptor => RelocError::TlsDescriptor.as_str(), + ExeRefusal::TooLarge => "ELF: a relocation group does not fit one allocation", + } + } +} + /// Why a relocation cannot be applied. #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum RelocError { diff --git a/toyos-elf/src/tls.rs b/toyos-elf/src/tls.rs index c26d639dad3..91806cb2fab 100644 --- a/toyos-elf/src/tls.rs +++ b/toyos-elf/src/tls.rs @@ -75,10 +75,6 @@ impl Static { Some(Static { variant, total_memsz, max_align: effective(max_align)?, first_align: effective(first_align)? }) } - pub fn variant(self) -> Variant { - self.variant - } - pub fn total_memsz(self) -> usize { self.total_memsz } diff --git a/toyos-elf/tests/tables.rs b/toyos-elf/tests/tables.rs index cfa14adccf7..a93dbd3a33a 100644 --- a/toyos-elf/tests/tables.rs +++ b/toyos-elf/tests/tables.rs @@ -253,6 +253,28 @@ fn an_aarch64_tls_descriptor_is_refused_by_name() { assert_eq!(counts.count_of(RelocKind::TlsDesc), 1); } +/// An executable's loader keeps no group until the counts allow it: one TLS +/// descriptor refuses the image outright, before anything is reserved, and a +/// group too large for one allocation refuses it too. +#[test] +fn an_executable_s_reservation_is_had_only_through_its_refusals() { + let mixed = [rela(0, 0, 8, 0), rela(8, 1, 6, 0), rela(16, 2, 18, 0), rela(24, 3, 7, 0)].concat(); + let desc = [rela(0, 0, 1027, 0), rela(0x10, 1, 1031, 0)].concat(); + + let aarch64 = RelaCounts::of(RelaTable::new(&desc, Machine::Aarch64).iter()); + assert_eq!(aarch64.for_executable(24, usize::MAX), Err(rela::ExeRefusal::TlsDescriptor)); + assert!(rela::ExeRefusal::TlsDescriptor.as_str().contains("R_AARCH64_TLSDESC")); + + let kept = RelaCounts::of(RelaTable::new(&mixed, Machine::X86_64).iter()) + .for_executable(24, 48) + .expect("two entries of 24 bytes fit 48"); + assert_eq!((kept.relative, kept.bind, kept.tpoff64, kept.tpoff32), (1, 2, 1, 0)); + + let x86 = RelaCounts::of(RelaTable::new(&mixed, Machine::X86_64).iter()); + assert_eq!(x86.for_executable(24, 47), Err(rela::ExeRefusal::TooLarge)); + assert_eq!(x86.for_executable(usize::MAX, usize::MAX), Err(rela::ExeRefusal::TooLarge)); +} + #[test] fn a_symbol_index_past_the_table_is_refused_except_for_relative() { let window = (0u64, 0x100u64); From df5c6982bc821d5f8281c527c622a9f318b80b03 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 21:03:36 +0200 Subject: [PATCH 45/50] compiler: every placement sweeps the compilers nobody names A compiler edit loop placed one 583 MB compiler per edit and reclaimed none until --worktree remove. choose now sweeps after it places one; the keyed idle guard keeps the one in use. sweep takes the rust dir it is to sweep, so a linked worktree's call does not resolve the primary again. The test shows a placement removing the compiler it replaced and keeping the one another worktree names. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- src/compiler.rs | 29 ++++++++++++++++++++++++----- src/worktree.rs | 2 +- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/compiler.rs b/src/compiler.rs index 083d2c0bc6c..4293edf567d 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -26,7 +26,7 @@ //! directory is written. //! //! A compiler no worktree names any more is removed by [`sweep`], which -//! `--worktree remove` runs: each build records the key it used in its +//! `--worktree remove` and every placement run: each build records the key it used in its //! worktree's `target/`, and a key no registered worktree records, that nobody //! is making or using, goes. //! @@ -202,6 +202,7 @@ fn choose(root: &Path, rust_dir: &Path, fork: &Path, build: impl Fn(&Path) -> Pa let dir = compilers_dir(rust_dir).join(&key); fs::create_dir_all(recorded.parent().expect("a file under target/")).ok(); fs::write(&recorded, &key).unwrap_or_else(|e| panic!("write {}: {e}", recorded.display())); + let mut placed = false; let using = loop { let using = buildlock::keyed_using(root, Keyed::Compiler, &key); if dir.join(SOURCE).is_file() { @@ -211,8 +212,16 @@ fn choose(root: &Path, rust_dir: &Path, fork: &Path, build: impl Fn(&Path) -> Pa let _building = buildlock::keyed_building(root, Keyed::Compiler, &key); if !dir.join(SOURCE).is_file() { place(root, fork, &key, &dir, &build); + placed = true; } }; + // A compiler edit loop places one per edit, and the one this replaced is + // named by nobody now; the one in use is held, so the sweep leaves it. + if placed { + for gone in sweep(root, rust_dir) { + eprintln!("Removed compiler {}: no worktree names it", gone.display()); + } + } Compiler { stage2: dir.join("stage2"), record: dir.join(SOURCE), primary: false, _using: Some(using) } } @@ -297,8 +306,8 @@ pub fn recorded_key(root: &Path) -> Option { /// Remove every compiler no registered worktree records and nobody is making /// or using, and every half-built one nobody is making. Returns what went. -pub fn sweep(root: &Path) -> Vec { - let dir = compilers_dir(&toolchain::rust_dir(root)); +pub fn sweep(root: &Path, rust_dir: &Path) -> Vec { + let dir = compilers_dir(rust_dir); let Ok(entries) = fs::read_dir(&dir) else { return Vec::new() }; let named: std::collections::BTreeSet = git_out(root, &["worktree", "list", "--porcelain"]) .lines() @@ -484,12 +493,22 @@ mod tests { // not while it is still in use, though nobody names it any more. let orphan = ca2.stage2.parent().unwrap().to_path_buf(); choose(&a, &rust_dir, &a.join("rust"), fake); - assert_eq!(sweep(&primary), Vec::::new(), "the sweep took a compiler still in use"); + assert_eq!(sweep(&primary, &rust_dir), Vec::::new(), "the sweep took a compiler still in use"); assert!(ca2.stage2.is_dir()); drop((mine, ca, cb, again, ca2, committed)); let kept = choose(&a, &rust_dir, &a.join("rust"), fake); - assert_eq!(sweep(&primary), [orphan], "the sweep took a compiler a worktree names, or left one nobody does"); + assert_eq!(sweep(&primary, &rust_dir), [orphan], "the sweep took a compiler a worktree names, or left one nobody does"); assert!(kept.stage2.is_dir()); + + // A placement sweeps too: the compiler an edit replaces goes once nobody + // uses it, and the one another worktree names stays. + let replaced = kept.stage2.parent().unwrap().to_path_buf(); + let named = choose(&b, &rust_dir, &b.join("rust"), fake).stage2; + drop(kept); + write(&a.join("rust/compiler/rustc_target/src/another.rs"), "pub fn u() {}\n"); + let ca3 = choose(&a, &rust_dir, &a.join("rust"), fake); + assert!(!replaced.exists(), "placing a compiler left the one it replaced, which nobody names"); + assert!(ca3.stage2.is_dir() && named.is_dir()); } /// **A primary with no record of its compiler is refused by name**, never /// read as "no compiler": that reading made every worktree build its own. diff --git a/src/worktree.rs b/src/worktree.rs index 02d2079af09..cb2e968cee5 100644 --- a/src/worktree.rs +++ b/src/worktree.rs @@ -327,7 +327,7 @@ pub(crate) fn remove(root: &Path, path: &str) { if !swept.is_empty() { eprintln!("removed {} sysroot(s) no worktree names any more", swept.len()); } - let swept = crate::compiler::sweep(root); + let swept = crate::compiler::sweep(root, &crate::toolchain::rust_dir(root)); if !swept.is_empty() { eprintln!("removed {} compiler(s) no worktree names any more", swept.len()); } From 8846c021011637c1ea70fc2e0e285e701ce6d7cc Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 21:03:36 +0200 Subject: [PATCH 46/50] issues: stage 4 owns the EL2 writes stage 3 cannot red; the key issue has an owner Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...the-primary-rebuilds-its-compiler-on-compiler-alone.md | 6 +++++- issues/kernel/toyos-runs-on-arm64.md | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md b/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md index eedad036c2f..39616126a87 100644 --- a/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md +++ b/issues/build/the-primary-rebuilds-its-compiler-on-compiler-alone.md @@ -1,5 +1,5 @@ --- -status: open +status: assigned kind: tooling opened: 2026-09-26 --- @@ -15,6 +15,10 @@ matches the record is handed that compiler too. A worktree's own compiler is keyed on all of them (`compiler::key`, PR #524), so the two answers to "which compiler do these sources name" differ. +**Owner**: the ARM64 track (`issues/kernel/toyos-runs-on-arm64.md`), whose +PR #524 made the worktree key; it is closed before that track's stage 4 +lands. + **Exit condition**: the primary's rebuild and its record read the same sources `compiler::key` does, and a worktree compares against that, shown by a test in which a fork moving only `src/tools` gets a compiler of its own. diff --git a/issues/kernel/toyos-runs-on-arm64.md b/issues/kernel/toyos-runs-on-arm64.md index f189e7c6a7b..abf5a9b7218 100644 --- a/issues/kernel/toyos-runs-on-arm64.md +++ b/issues/kernel/toyos-runs-on-arm64.md @@ -293,6 +293,11 @@ Each stage names its exit; "measured" means a number from a run. **Exit**: a user process takes a page fault and a syscall on one CPU; the timer drives preemption; an interrupt storm test ends with no lost timer tick; the longest interrupts-off window is measured against x86's. + The entry's EL2 writes of `CNTHCTL_EL2`, `CNTVOFF_EL2` and `CPTR_EL2` + (`kernel/src/arch/aarch64/boot.rs`) are untested until here: deleting any + one stays green in `virt_el2_drop`, because stage 3 reads no counter and + runs no FP. This stage's timer and FP tests run under that EL2 profile too, + and each of the three deletions is shown red. 5. **SMP through PSCI.** `CPU_ON` from MADT GICC entries, SGIs as the IPI, broadcast TLBI behind the machine-wide invalidation contract. **Exit**: @@ -301,7 +306,8 @@ Each stage names its exit; "measured" means a number from a run. pass; `CPU_OFF`/`SYSTEM_RESET`/`SYSTEM_OFF` replace ACPI reset and PM1a. The TLS-descriptor resolver lands here, in std with its loader half and a `dlopen` test; until it does the kernel refuses `R_AARCH64_TLSDESC` by name - (`toyos_elf::RelocError::TlsDescriptor`). + (`toyos_elf::rela::ExeRefusal::TlsDescriptor` for an executable, + `toyos_elf::RelocError::TlsDescriptor` for a library). 6. **Virtio on `virt`.** virtio-pci (ECAM from MCFG) for blk, net, gpu, sound, input and rng. virtio-input replaces the i8042 as the From d8bee311016317a7ffc4791ec5d3580628cda5f5 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 21:39:46 +0200 Subject: [PATCH 47/50] issues: quiesce_wakes_on_the_last_exit lost its READY again, on #524's branch Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...-last-exit-lost-its-serial-ready-beside-other-guests.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/issues/build/quiesce-wakes-on-the-last-exit-lost-its-serial-ready-beside-other-guests.md b/issues/build/quiesce-wakes-on-the-last-exit-lost-its-serial-ready-beside-other-guests.md index 7b442238f29..2c18c525d26 100644 --- a/issues/build/quiesce-wakes-on-the-last-exit-lost-its-serial-ready-beside-other-guests.md +++ b/issues/build/quiesce-wakes-on-the-last-exit-lost-its-serial-ready-beside-other-guests.md @@ -22,3 +22,10 @@ its cause. **Exit**: a cause for the empty uart on a boot that rebooted as designed, or the marker waited for where the boot's reboot cannot race it. + +Again in the fast tier at `8846c021` (PR #524's branch, alone on the host): +the same `QEMU died before ===READY=== (status: exit 0)` with `uart: nothing +at all`, after `stop: 5 of 5 userland thread(s) stopped`, `usb-quiesce: disk 0 +SYNCHRONIZE CACHE ok` and `Rebooting.`; this time no usb-storage transport +break before it. The re-run alone was green. `cargo run -- --known-red` +answers NO. From 235c5a5bba145cffd5b70b98686f24a5328580f0 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 23:17:32 +0200 Subject: [PATCH 48/50] sdk: iced-counter's lock follows toyos-window to 0.19.0 #528's tests/iced-counter locks the path toyos-window, which the merge moved past main's 0.18.0. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- tests/iced-counter/Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/iced-counter/Cargo.lock b/tests/iced-counter/Cargo.lock index 0c505a36315..a9832d4828f 100644 --- a/tests/iced-counter/Cargo.lock +++ b/tests/iced-counter/Cargo.lock @@ -2976,7 +2976,7 @@ version = "0.1.0" [[package]] name = "toyos-window" -version = "0.18.0" +version = "0.19.0" dependencies = [ "toyos", "toyos-abi", From 8c5be843f1d35644899403a8c30642379d516339 Mon Sep 17 00:00:00 2001 From: japabu Date: Sat, 26 Sep 2026 23:37:03 +0200 Subject: [PATCH 49/50] issues: two main reds the nightly exposed, and two loaded recurrences fpu_isolation's probe thread is joined as NotFound on main at 17eb66a4, measured there by checking the base out in this worktree; the guest lanes leave the toolchain tarball in their TMPDIR. quiesce_stops_the_machine and sched_check_build recur under another worktree's load. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- ...ves-the-toolchain-tarball-in-its-tmpdir.md | 19 ++++++++++++ ...tes-ci-sample-is-eight-days-stale-twice.md | 6 ++++ ...s-thread-join-answers-not-found-on-main.md | 31 +++++++++++++++++++ ...e-machine-stayed-up-beside-other-guests.md | 6 ++++ 4 files changed, 62 insertions(+) create mode 100644 issues/build/a-guest-lane-leaves-the-toolchain-tarball-in-its-tmpdir.md create mode 100644 issues/kernel/fpu-isolation-s-thread-join-answers-not-found-on-main.md diff --git a/issues/build/a-guest-lane-leaves-the-toolchain-tarball-in-its-tmpdir.md b/issues/build/a-guest-lane-leaves-the-toolchain-tarball-in-its-tmpdir.md new file mode 100644 index 00000000000..ec08efc3e01 --- /dev/null +++ b/issues/build/a-guest-lane-leaves-the-toolchain-tarball-in-its-tmpdir.md @@ -0,0 +1,19 @@ +--- +status: open +kind: tooling +opened: 2026-09-26 +--- + +# A guest lane leaves the toolchain tarball in its `$TMPDIR` + +`src/ci.rs`'s guest lane points `$TMPDIR` at a `TempDir` and ends on +`nothing left in $TMPDIR`. Its `the toolchain` step is `release::install`, which +downloads `toyos-toolchain.tar.zst` to `std::env::temp_dir()`, unpacks it, +and never removes it. So every guest, tcg and audio job reds on +`left … : toyos-toolchain.tar.zst` whatever its suite did. Seen on all fifteen +of those jobs in the nightly on PR #524's branch (run 36266825579). Neither +side is that branch's: both are main's, the step from `ba68664b` (#529), the +install from before it. Main has had no nightly since #529 landed. + +**Exit**: the tarball goes into a `TempDir`, or is removed once it is +unpacked, and a guest lane's last step is green on a nightly. diff --git a/issues/build/the-pass-cost-gates-ci-sample-is-eight-days-stale-twice.md b/issues/build/the-pass-cost-gates-ci-sample-is-eight-days-stale-twice.md index 342c8c26a86..8e268f16a72 100644 --- a/issues/build/the-pass-cost-gates-ci-sample-is-eight-days-stale-twice.md +++ b/issues/build/the-pass-cost-gates-ci-sample-is-eight-days-stale-twice.md @@ -37,3 +37,9 @@ with the same rule; if the readings split by runner model, the gate names the model it judges and refuses to judge the rest. Until then, a CI red under this name is this file and the redlist row, and the landing it dequeues is re-queued once, not re-run until green. + +A second signature, which this file's quarantine row does not cover. The fast +tier on PR #524's branch at `235c5a5b` reds `sched_check_build` on `cpu0: 85 +passes … a 90th percentile needs at least 100 samples behind it and this has +85`. The host was loaded then by another worktree's spinner at 397% CPU. The +harness's re-run alone was green. diff --git a/issues/kernel/fpu-isolation-s-thread-join-answers-not-found-on-main.md b/issues/kernel/fpu-isolation-s-thread-join-answers-not-found-on-main.md new file mode 100644 index 00000000000..22f81548621 --- /dev/null +++ b/issues/kernel/fpu-isolation-s-thread-join-answers-not-found-on-main.md @@ -0,0 +1,31 @@ +--- +status: open +kind: defect +opened: 2026-09-26 +--- + +# `fpu_isolation`'s probe thread is joined as not found, on main + +`fpu_isolation` (nightly tier) is red on `main` at `17eb66a4`, and on every +branch built on it. Each `check` child spawns `thread_probe`, which records +its entry state and calls `SYS_THREAD_EXIT`. `thread_join` on that tid then +answers `18446744073709551614` (−2), where 0 is expected +(`tests/toyos-rust-tests/src/bin/fpu_isolation.rs:346`). The kernel logs the +thread's `exit … code=0`, so the thread ran, and `sys_thread_join` answers +`NotFound` from `wait_thread_zombie`'s `Err(())`: no zombie for a thread that +existed. The leak arm therefore reports `a process started with the previous +one's FP registers` in all three rounds; that is the arm's wording, and not +what failed. + +Measured by `cargo test --test toyos-build -- fpu_isolation --nightly`: +- at `17eb66a4`: EXIT=1, the harness's alone re-run red the same way; +- on PR #524's branch at `235c5a5b`, and on its nightly (run 36266825579, + `guest (12)`): the same. + +It passed on main's nightly at `e8d7c9c0` (run 36228604597, `guest (11)`). +Thirteen landings fall between the two, and none is bisected. One of them, +#513 ("One way to wait", `46056bfa`), rewrote `sys_thread_join`'s wait. + +**Exit**: `fpu_isolation` green, and a test that joins a thread which has +already exited by the time of the join, red on the tree this issue was +filed against. diff --git a/issues/kernel/quiesce-stops-the-machine-stayed-up-beside-other-guests.md b/issues/kernel/quiesce-stops-the-machine-stayed-up-beside-other-guests.md index f4b57f44be9..436dffd5fe4 100644 --- a/issues/kernel/quiesce-stops-the-machine-stayed-up-beside-other-guests.md +++ b/issues/kernel/quiesce-stops-the-machine-stayed-up-beside-other-guests.md @@ -20,3 +20,9 @@ Not shown: where the loaded run's stop went, since its capture has no `stop:` record. **Exit**: the stop's record, or its absence, explained on a loaded run. + +Again in the fast tier on PR #524's branch at `235c5a5b`: the same `QEMU +never reported stopping: the guest asked for a reboot and stayed up`, after +266 s, and the harness's re-run alone was green. The host was loaded +throughout by another worktree's spinner at 397% CPU, with the load average +between 20 and 28. From 50a1939cb21b2a0cab87937309f3dd61d7575217 Mon Sep 17 00:00:00 2001 From: japabu Date: Sun, 27 Sep 2026 01:05:48 +0200 Subject: [PATCH 50/50] src/ and kernel/ CLAUDE.md: a worktree builds its own compiler, and the moved syscall and fpu paths This branch lets a worktree whose fork compiler differs build its own, and moves the syscall layer out of arch/ and fpu.rs into arch/x86_64/. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_014iqcj4jDKpaiDX8B7CMvmK --- kernel/CLAUDE.md | 4 ++-- src/CLAUDE.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/CLAUDE.md b/kernel/CLAUDE.md index 0a247839023..6fffea753de 100644 --- a/kernel/CLAUDE.md +++ b/kernel/CLAUDE.md @@ -1,6 +1,6 @@ # Kernel -The module header at the site owns its subsystem — read it before changing a module. The scheduler core is `toyos-sched/`, driven from `kernel/src/sched/`; every Ring 3 transition's machine state is `kernel/src/arch/fpu.rs`; every syscall is `kernel/src/arch/syscall/`, and `dispatch.rs` decodes every user pointer the ABI takes. +The module header at the site owns its subsystem — read it before changing a module. The scheduler core is `toyos-sched/`, driven from `kernel/src/sched/`; every Ring 3 transition's machine state is `kernel/src/arch/x86_64/fpu.rs`; every syscall is `kernel/src/syscall/`, and `dispatch.rs` decodes every user pointer the ABI takes. ## Caveats that bite every agent @@ -12,7 +12,7 @@ The module header at the site owns its subsystem — read it before changing a m - **No disk wait in this kernel can park** — at the moment a transfer is waited for, the CPU is four ticket spinlocks deep, each disabling preemption. - **`crate::log!` may not be called inside `with_cpu`'s exclusive region unless a `panic!` follows it** — the log's readiness path re-enters `driver::pass` and wedges the machine. - **`drain_irqs` is the drivers' engine and nothing on it may wait** — a blocking call there empties the audio pipeline on every plug. -- **A syscall that can block resolves its handle and clones the object out before it blocks** — a `with_object`/`with_process_data` guard held across a park is a runtime panic no compile check catches; the `SYS_FSYNC` arm in `arch/syscall/dispatch.rs` is the pattern. +- **A syscall that can block resolves its handle and clones the object out before it blocks** — a `with_object`/`with_process_data` guard held across a park is a runtime panic no compile check catches; the `SYS_FSYNC` arm in `syscall/dispatch.rs` is the pattern. - **A block-layer `BudgetExpired` is not-durable-yet and never a loss** — it is retried on a fresh budget above every lock; a flush that discards its pages on one splits a FAT mirror. - **A decision the process table makes lives in `toyos-proclife`, never in `process.rs`** — its defects are interleavings and that crate is the only machine that can enumerate one. - **A task holds at most one watch registration** — a standing registration across a loop must not call anything that registers again. A double registration panics only at attempt ≥ 2, so the contention depth is the coverage. diff --git a/src/CLAUDE.md b/src/CLAUDE.md index d831ab24312..7d61612a283 100644 --- a/src/CLAUDE.md +++ b/src/CLAUDE.md @@ -20,7 +20,7 @@ Loads when you read a file under `src/` — the root cargo project, package name ## The host's locks and slots - **Sysroots are content-addressed** (`src/sysroot.rs`): one per key — the identity (`src/identity.rs`, so a comment is no change) of `toyos-abi/src`, `toyos/src`, `userland/libc/src` and their manifests, the std fork's `library/` and `src/bootstrap/`, and the compiler — at `rust/build/sysroots//`, made by whichever worktree first needs it and never written again. Every build compiles against its own key's, so two worktrees with different ABIs never refuse or wait for each other; the only shared step is the primary's compiler, which a sysroot build reads under the global lock in shared mode. A new key costs one std build of the three guest targets; `--worktree remove` sweeps the keys no worktree records. -- **The std fork is built per worktree, and nothing but the primary's own sync moves the primary's `rust/`.** A linked worktree's `rust/` becomes, on its first build, a git worktree of the primary's fork repository at the commit its tree pins — that is where the fork is edited, committed and pinned. A fork commit whose `compiler/` is not the one the primary's compiler was built from is refused by name: a compiler change lands, and the primary's sync and next build rebuild it. If that checkout later falls behind the commit its tree pins (a merge moved the pin), the build moves the checkout to it itself, fetching from the primary's repository first if it holds the commit, unless the checkout has local changes, which it refuses to move out from under. +- **The std fork is built per worktree, and nothing but the primary's own sync moves the primary's `rust/`.** A linked worktree's `rust/` becomes, on its first build, a git worktree of the primary's fork repository at the commit its tree pins — that is where the fork is edited, committed and pinned. A worktree whose fork `compiler/` differs from the one the primary built builds its own compiler, keyed by that source and placed beside the primary's without touching it. If that checkout later falls behind the commit its tree pins (a merge moved the pin), the build moves the checkout to it itself, fetching from the primary's repository first if it holds the commit, unless the checkout has local changes, which it refuses to move out from under. - `src/buildlock.rs` serialises the stateful phases in two scopes: `Global` (the primary's compiler and the rustup link — one directory in `.git/`, shared by every worktree) and `Worktree` (the crate-target cleans, and this worktree's std build). Only `./x.py` typed by hand in `rust/` escapes it. - **Never kill a build that has taken the global lock** — the kill removes the shell wrappers, not the bootstrap, which inherits the file descriptor and runs on regardless; a toolchain rebuild interrupted or unobserved this way can leave `stage2/bin` without a `cargo`. - **The host hands out guest slots and build slots** — `buildlock::guest_slot` (twelve across every worktree, one per task) and `buildlock::build_slot` (four), separate counts so a suite holding every guest slot can still compile. **The order is a constraint at every acquirer**: host slot → a sysroot key's lock → build lock → artifact. Every blocking lock names its holders and repeats itself every 30 s — a queue is never silence. `cargo test --test toyos-build -- --host-slots N --host-builds N` overrides, 0 turns either off.