From 9ca51596eac5df79994d9e57511862bcc0766863 Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Thu, 19 Feb 2026 15:46:49 +0100 Subject: [PATCH] feat: userspace overhaul, Intel GPU driver, and more --- kernel/src/Api/Syscall.cpp | 67 +- kernel/src/Api/Syscall.hpp | 4 + kernel/src/Common/Panic.cpp | 6 + kernel/src/Drivers/Graphics/IntelGPU.cpp | 564 ++++ kernel/src/Drivers/Graphics/IntelGPU.hpp | 420 +++ kernel/src/Graphics/Cursor.cpp | 14 + kernel/src/Graphics/Cursor.hpp | 3 + kernel/src/Hal/MSR.hpp | 29 + kernel/src/Main.cpp | 47 +- kernel/src/Memory/Paging.cpp | 55 + kernel/src/Memory/Paging.hpp | 4 + kernel/src/Net/Dns.cpp | 375 +++ kernel/src/Net/Dns.hpp | 16 + kernel/src/Net/NetConfig.cpp | 4 + kernel/src/Net/NetConfig.hpp | 4 + kernel/src/Net/Tcp.cpp | 3 - kernel/src/Terminal/Terminal.cpp | 126 +- kernel/src/Terminal/Terminal.hpp | 4 + programs/GNUmakefile | 37 +- programs/data/ca-certificates.crt | 3697 ++++++++++++++++++++++ programs/include/Api/Syscall.hpp | 4 + programs/include/zenith/syscall.h | 20 + programs/lib/bearssl | 1 + programs/lib/libc/Makefile | 64 + programs/lib/libc/libc.c | 662 ++++ programs/lib/libc/liblibc.a | Bin 0 -> 92130 bytes programs/lib/libc/obj/libc.o | Bin 0 -> 91408 bytes programs/man/fetch.1 | 62 + programs/man/file.2 | 11 +- programs/man/fontscale.1 | 43 + programs/man/intro.1 | 5 + programs/man/nslookup.1 | 36 + programs/man/ping.1 | 37 + programs/man/shell.1 | 12 +- programs/man/syscalls.2 | 40 +- programs/man/tls-errors.5 | 237 ++ programs/man/wiki.1 | 64 + programs/obj/hello/main.o | Bin 9000 -> 9168 bytes programs/obj/shell/main.o | Bin 119888 -> 121376 bytes programs/src/dhcp/main.cpp | 1 + programs/src/fetch/Makefile | 89 + programs/src/fetch/main.cpp | 924 ++++-- programs/src/fetch/obj/main.o | Bin 0 -> 162512 bytes programs/src/fontscale/main.cpp | 88 + programs/src/httpd/main.cpp | 2 +- programs/src/ifconfig/main.cpp | 3 + programs/src/irc/main.cpp | 27 +- programs/src/nslookup/main.cpp | 83 + programs/src/ping/main.cpp | 17 +- programs/src/shell/main.cpp | 2 + programs/src/tcpconnect/main.cpp | 25 +- programs/src/wiki/Makefile | 89 + programs/src/wiki/main.cpp | 1223 +++++++ programs/src/wiki/obj/main.o | Bin 0 -> 248496 bytes 54 files changed, 9080 insertions(+), 270 deletions(-) create mode 100644 kernel/src/Drivers/Graphics/IntelGPU.cpp create mode 100644 kernel/src/Drivers/Graphics/IntelGPU.hpp create mode 100644 kernel/src/Net/Dns.cpp create mode 100644 kernel/src/Net/Dns.hpp create mode 100644 programs/data/ca-certificates.crt create mode 160000 programs/lib/bearssl create mode 100644 programs/lib/libc/Makefile create mode 100644 programs/lib/libc/libc.c create mode 100644 programs/lib/libc/liblibc.a create mode 100644 programs/lib/libc/obj/libc.o create mode 100644 programs/man/fetch.1 create mode 100644 programs/man/fontscale.1 create mode 100644 programs/man/nslookup.1 create mode 100644 programs/man/ping.1 create mode 100644 programs/man/tls-errors.5 create mode 100644 programs/man/wiki.1 create mode 100644 programs/src/fetch/Makefile create mode 100644 programs/src/fetch/obj/main.o create mode 100644 programs/src/fontscale/main.cpp create mode 100644 programs/src/nslookup/main.cpp create mode 100644 programs/src/wiki/Makefile create mode 100644 programs/src/wiki/main.cpp create mode 100644 programs/src/wiki/obj/main.o diff --git a/kernel/src/Api/Syscall.cpp b/kernel/src/Api/Syscall.cpp index 583c7b2..9beebc1 100644 --- a/kernel/src/Api/Syscall.cpp +++ b/kernel/src/Api/Syscall.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -209,11 +210,18 @@ namespace Zenith { * Graphics::Cursor::GetFramebufferPitch(); uint64_t numPages = (fbSize + 0xFFF) / 0x1000; + Kt::KernelLogStream(Kt::INFO, "FbMap") << "fbPhys=" << kcp::hex << fbPhys + << " size=" << kcp::dec << fbSize + << " pages=" << numPages + << " (" << Graphics::Cursor::GetFramebufferWidth() + << "x" << Graphics::Cursor::GetFramebufferHeight() + << " pitch=" << Graphics::Cursor::GetFramebufferPitch() << ")"; + // Map at a fixed user VA constexpr uint64_t userVa = 0x50000000ULL; for (uint64_t i = 0; i < numPages; i++) { - Memory::VMM::Paging::MapUserIn( + Memory::VMM::Paging::MapUserInWC( proc->pml4Phys, fbPhys + i * 0x1000, userVa + i * 0x1000 @@ -335,6 +343,7 @@ namespace Zenith { } out->_pad[0] = 0; out->_pad[1] = 0; + out->dnsServer = Net::GetDnsServer(); } static int Sys_SetNetCfg(const NetCfg* in) { @@ -342,6 +351,7 @@ namespace Zenith { Net::SetIpAddress(in->ipAddress); Net::SetSubnetMask(in->subnetMask); Net::SetGateway(in->gateway); + Net::SetDnsServer(in->dnsServer); return 0; } @@ -372,6 +382,53 @@ namespace Zenith { return Fs::Vfs::VfsCreate(path); } + // ---- Terminal scaling ---- + + static int64_t Sys_TermScale(uint64_t scale_x, uint64_t scale_y) { + if (scale_x == 0) { + return (int64_t)((Kt::GetFontScaleY() << 32) | (Kt::GetFontScaleX() & 0xFFFFFFFF)); + } + Kt::Rescale((size_t)scale_x, (size_t)scale_y); + size_t cols = 0, rows = 0; + flanterm_get_dimensions(Kt::ctx, &cols, &rows); + return (int64_t)((rows << 32) | (cols & 0xFFFFFFFF)); + } + + // ---- DNS resolve ---- + + static int64_t Sys_Resolve(const char* hostname) { + uint32_t ip = Net::Dns::Resolve(hostname); + return (int64_t)ip; + } + + // ---- Random number generation ---- + // Uses RDTSC mixed with xorshift64* PRNG for entropy. + // RDRAND is intentionally avoided: some firmware disables the RDRAND + // hardware unit while CPUID still advertises support (bit 30 of ECX), + // causing #UD on real hardware. RDTSC-based entropy is sufficient for + // seeding BearSSL's PRNG for TLS session keys. + + static int64_t Sys_GetRandom(uint8_t* buf, uint64_t len) { + uint64_t tsc; + asm volatile("rdtsc; shl $32, %%rdx; or %%rdx, %%rax" : "=a"(tsc) :: "rdx"); + uint64_t state = tsc; + + for (uint64_t i = 0; i < len; i += 8) { + asm volatile("rdtsc; shl $32, %%rdx; or %%rdx, %%rax" : "=a"(tsc) :: "rdx"); + state ^= tsc; + state ^= state >> 12; + state ^= state << 25; + state ^= state >> 27; + uint64_t val = state * 0x2545F4914F6CDD1DULL; + + uint64_t remaining = len - i; + uint64_t toCopy = remaining < 8 ? remaining : 8; + for (uint64_t j = 0; j < toCopy; j++) + buf[i + j] = (uint8_t)(val >> (j * 8)); + } + return (int64_t)len; + } + // ---- Dispatch ---- extern "C" int64_t SyscallDispatch(SyscallFrame* frame) { @@ -486,6 +543,12 @@ namespace Zenith { frame->arg3, frame->arg4); case SYS_FCREATE: return (int64_t)Sys_FCreate((const char*)frame->arg1); + case SYS_TERMSCALE: + return Sys_TermScale(frame->arg1, frame->arg2); + case SYS_RESOLVE: + return Sys_Resolve((const char*)frame->arg1); + case SYS_GETRANDOM: + return Sys_GetRandom((uint8_t*)frame->arg1, frame->arg2); default: return -1; } @@ -512,7 +575,7 @@ namespace Zenith { Hal::WriteMSR(Hal::IA32_FMASK, 0x200); Kt::KernelLogStream(Kt::OK, "Syscall") << "SYSCALL/SYSRET initialized (LSTAR=" - << kcp::hex << (uint64_t)SyscallEntry << kcp::dec << ", 43 syscalls)"; + << kcp::hex << (uint64_t)SyscallEntry << kcp::dec << ", 46 syscalls)"; } } diff --git a/kernel/src/Api/Syscall.hpp b/kernel/src/Api/Syscall.hpp index 38fc400..dd9c207 100644 --- a/kernel/src/Api/Syscall.hpp +++ b/kernel/src/Api/Syscall.hpp @@ -54,6 +54,9 @@ namespace Zenith { static constexpr uint64_t SYS_RECVFROM = 40; static constexpr uint64_t SYS_FWRITE = 41; static constexpr uint64_t SYS_FCREATE = 42; + static constexpr uint64_t SYS_TERMSCALE = 43; + static constexpr uint64_t SYS_RESOLVE = 44; + static constexpr uint64_t SYS_GETRANDOM = 45; static constexpr int SOCK_TCP = 1; static constexpr int SOCK_UDP = 2; @@ -88,6 +91,7 @@ namespace Zenith { uint32_t gateway; // network byte order uint8_t macAddress[6]; uint8_t _pad[2]; + uint32_t dnsServer; // network byte order }; struct KeyEvent { diff --git a/kernel/src/Common/Panic.cpp b/kernel/src/Common/Panic.cpp index 31e9859..3c625a3 100644 --- a/kernel/src/Common/Panic.cpp +++ b/kernel/src/Common/Panic.cpp @@ -32,6 +32,12 @@ void Panic(const char *meditationString, System::PanicFrame* frame) { if (frame->InterruptVector == 0xE) { auto pf_frame = (System::PageFaultPanicFrame*)frame; frame = (System::PanicFrame*)&pf_frame->IP; + + // CR2 holds the faulting virtual address for page faults + uint64_t cr2; + asm volatile("mov %%cr2, %0" : "=r"(cr2)); + PrintBoxedHex(kerr, "Faulting Address (CR2)", cr2, boxWidth); + PrintBoxedLine(kerr, "Page Fault Error:", boxWidth, true); PrintBoxedDec(kerr, "Present", pf_frame->PageFaultError.Present, boxWidth); PrintBoxedDec(kerr, "Write", pf_frame->PageFaultError.Write, boxWidth); diff --git a/kernel/src/Drivers/Graphics/IntelGPU.cpp b/kernel/src/Drivers/Graphics/IntelGPU.cpp new file mode 100644 index 0000000..8cc0360 --- /dev/null +++ b/kernel/src/Drivers/Graphics/IntelGPU.cpp @@ -0,0 +1,564 @@ +/* + * IntelGPU.cpp + * Intel integrated graphics (i915) modesetting driver + * Scans PCI for Intel display controllers, maps MMIO, initializes GTT, + * and sets up a framebuffer using the firmware's existing display timings. + * Copyright (c) 2025 Daniel Hammer +*/ + +#include "IntelGPU.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Kt; + +namespace Drivers::Graphics::IntelGPU { + + // ========================================================================= + // Driver state + // ========================================================================= + + static bool g_initialized = false; + + static GpuInfo g_gpuInfo = {}; + + static volatile uint8_t* g_mmioBase = nullptr; + + // GTT state + static volatile void* g_gttBase = nullptr; // Virtual address of GTT entries + static uint64_t g_gttEntryCount = 0; // Number of GTT entries + static uint64_t g_scratchPagePhys = 0; // Physical address of scratch page + static uint8_t g_gpuGen = 0; // Cached generation number + + // Framebuffer state + static uint32_t* g_fbBase = nullptr; // HHDM virtual address of first FB page + static uint64_t g_fbPhysBase = 0; // Physical address of first FB page + static uint64_t g_fbWidth = 0; + static uint64_t g_fbHeight = 0; + static uint64_t g_fbPitch = 0; // Stride in bytes + static uint64_t g_fbSize = 0; // Total framebuffer size in bytes + static uint64_t g_fbGttOffset = 0; // GTT offset where FB starts (in bytes) + + // ========================================================================= + // Register access helpers + // ========================================================================= + + static void WriteReg(uint32_t reg, uint32_t val) { + *(volatile uint32_t*)(g_mmioBase + reg) = val; + } + + static uint32_t ReadReg(uint32_t reg) { + return *(volatile uint32_t*)(g_mmioBase + reg); + } + + // ========================================================================= + // PCI Detection + // ========================================================================= + + static bool DetectGpu() { + auto& devices = Pci::GetDevices(); + const Pci::PciDevice* found = nullptr; + const DeviceInfo* matchedInfo = nullptr; + + for (uint64_t i = 0; i < devices.size(); i++) { + if (devices[i].VendorId != VendorIntel) { + continue; + } + if (devices[i].ClassCode != ClassDisplay) { + continue; + } + + // Found an Intel display controller; try to match device ID + found = &devices[i]; + + for (int j = 0; j < SupportedDeviceCount; j++) { + if (devices[i].DeviceId == SupportedDevices[j].deviceId) { + matchedInfo = &SupportedDevices[j]; + break; + } + } + + // Stop at first Intel display controller + break; + } + + if (found == nullptr) { + KernelLogStream(WARNING, "IntelGPU") << "No Intel display controller found"; + return false; + } + + g_gpuInfo.pciBus = found->Bus; + g_gpuInfo.pciDevice = found->Device; + g_gpuInfo.pciFunction = found->Function; + g_gpuInfo.deviceId = found->DeviceId; + + if (matchedInfo != nullptr) { + g_gpuInfo.gen = matchedInfo->gen; + g_gpuInfo.name = matchedInfo->name; + + KernelLogStream(OK, "IntelGPU") << "Found " << matchedInfo->name + << " (device " << base::hex << (uint64_t)found->DeviceId << ")" + << " at PCI " << (uint64_t)found->Bus << ":" + << (uint64_t)found->Device << "." << (uint64_t)found->Function; + } else { + // Unknown device ID - accept generically but warn + g_gpuInfo.gen = 7; // Assume gen 7 as a safe default + g_gpuInfo.name = "Unknown Intel GPU"; + + KernelLogStream(WARNING, "IntelGPU") << "Unknown Intel display controller " + << "(device " << base::hex << (uint64_t)found->DeviceId << ")" + << " at PCI " << (uint64_t)found->Bus << ":" + << (uint64_t)found->Device << "." << (uint64_t)found->Function + << " - attempting generic initialization"; + } + + g_gpuGen = g_gpuInfo.gen; + return true; + } + + // ========================================================================= + // BAR0 MMIO Mapping + // ========================================================================= + + static bool MapMmio() { + uint8_t bus = g_gpuInfo.pciBus; + uint8_t dev = g_gpuInfo.pciDevice; + uint8_t func = g_gpuInfo.pciFunction; + + // Read BAR0 + uint32_t bar0Low = Pci::LegacyRead32(bus, dev, func, (uint8_t)PCI_REG_BAR0); + uint64_t mmioPhys = bar0Low & 0xFFFFFFF0u; // Mask off type/prefetchable bits + + // Check for 64-bit BAR (bit 2 of BAR type field) + if (bar0Low & 0x04) { + uint32_t bar0High = Pci::LegacyRead32(bus, dev, func, (uint8_t)(PCI_REG_BAR0 + 4)); + mmioPhys |= ((uint64_t)bar0High << 32); + } + + g_gpuInfo.mmioPhys = mmioPhys; + g_gpuInfo.mmioSize = 0x200000; // Map 2MB of MMIO space + + KernelLogStream(INFO, "IntelGPU") << "BAR0 physical: " << base::hex << mmioPhys; + + // Map 2MB of MMIO space (0x200 pages) + for (uint64_t offset = 0; offset < 0x200000; offset += 0x1000) { + Memory::VMM::g_paging->MapMMIO(mmioPhys + offset, Memory::HHDM(mmioPhys + offset)); + } + + g_mmioBase = (volatile uint8_t*)Memory::HHDM(mmioPhys); + + KernelLogStream(OK, "IntelGPU") << "MMIO mapped at virtual " << base::hex << (uint64_t)g_mmioBase; + + // Enable memory space and bus master in PCI command register + uint16_t pciCmd = Pci::LegacyRead16(bus, dev, func, (uint8_t)PCI_REG_COMMAND); + pciCmd |= PCI_CMD_MEM_SPACE | PCI_CMD_BUS_MASTER; + Pci::LegacyWrite16(bus, dev, func, (uint8_t)PCI_REG_COMMAND, pciCmd); + + KernelLogStream(OK, "IntelGPU") << "PCI memory space and bus mastering enabled"; + + return true; + } + + // ========================================================================= + // VGA Disable + // ========================================================================= + + static void DisableVga() { + // Check if VGA plane is already disabled (bit 31 of VGACNTRL). + // On modern Intel iGPUs with eDP/LVDS panels, the firmware typically + // disables VGA when it sets up GOP. Skip if already done. + uint32_t vgaCtrl = ReadReg(VGACNTRL); + if (vgaCtrl & VGACNTRL_DISABLE) { + KernelLogStream(INFO, "IntelGPU") << "VGA plane already disabled by firmware"; + return; + } + + // Step 1: Disable VGA screen via the VGA sequencer I/O ports + // SR01 bit 5 must be set BEFORE disabling the VGA plane register + Io::Out8(0x01, 0x3C4); + uint8_t sr01 = Io::In8(0x3C5); + sr01 |= (1 << 5); + Io::Out8(0x01, 0x3C4); + Io::Out8(sr01, 0x3C5); + + // Step 2: Set bit 31 of VGACNTRL MMIO register to disable VGA display plane + vgaCtrl |= VGACNTRL_DISABLE; + WriteReg(VGACNTRL, vgaCtrl); + + // Step 3: Read back to flush the write + (void)ReadReg(VGACNTRL); + + KernelLogStream(OK, "IntelGPU") << "VGA plane disabled"; + } + + // ========================================================================= + // Read Current Display State + // ========================================================================= + + static bool ReadDisplayState() { + // Read pipe A configuration + uint32_t pipeConf = ReadReg(PIPEACONF); + bool pipeEnabled = (pipeConf & PIPECONF_ENABLE) != 0; + + // Read plane A control + uint32_t dspaCntr = ReadReg(DSPACNTR); + bool planeEnabled = (dspaCntr & DISP_ENABLE) != 0; + + // Read current surface address and stride + uint32_t dspaSurf = ReadReg(DSPASURF); + uint32_t dspaStride = ReadReg(DSPASTRIDE); + + // Read timing registers + uint32_t htotal = ReadReg(HTOTAL_A); + uint32_t vtotal = ReadReg(VTOTAL_A); + uint32_t pipeSrc = ReadReg(PIPEASRC); + + KernelLogStream(INFO, "IntelGPU") << "Pipe A: " + << (pipeEnabled ? "ENABLED" : "DISABLED") + << ", Plane A: " << (planeEnabled ? "ENABLED" : "DISABLED"); + KernelLogStream(INFO, "IntelGPU") << "DSPASURF: " << base::hex << (uint64_t)dspaSurf + << ", DSPASTRIDE: " << (uint64_t)dspaStride; + KernelLogStream(INFO, "IntelGPU") << "HTOTAL_A: " << base::hex << (uint64_t)htotal + << ", VTOTAL_A: " << (uint64_t)vtotal + << ", PIPEASRC: " << (uint64_t)pipeSrc; + + // Extract resolution from PIPEASRC (preferred) or timing registers + if (pipeSrc != 0) { + // PIPEASRC: bits [31:16] = horizontal size - 1, bits [15:0] = vertical size - 1 + g_fbWidth = ((pipeSrc >> 16) & 0xFFFF) + 1; + g_fbHeight = (pipeSrc & 0xFFFF) + 1; + } else if (pipeEnabled) { + // Fallback to timing registers + g_fbWidth = (htotal & 0xFFF) + 1; + g_fbHeight = (vtotal & 0xFFF) + 1; + } + + // Read stride from hardware. + // On Gen 9+ (Skylake and later), PLANE_STRIDE (same offset as DSPASTRIDE) + // stores the stride in 64-byte units, not bytes. Detect this by checking + // whether the raw value is too small to be a byte stride. + if (dspaStride != 0) { + g_fbPitch = dspaStride; + if (g_fbWidth > 0 && g_fbPitch < g_fbWidth * 4) { + KernelLogStream(INFO, "IntelGPU") << "DSPASTRIDE=" << base::dec << g_fbPitch + << " is in 64-byte units (Gen 9+), converting to bytes"; + g_fbPitch *= 64; + } + } + + // If we still don't have valid dimensions, fall back to the firmware framebuffer + if (g_fbWidth == 0 || g_fbHeight == 0 || g_fbPitch == 0) { + g_fbWidth = ::Graphics::Cursor::GetFramebufferWidth(); + g_fbHeight = ::Graphics::Cursor::GetFramebufferHeight(); + g_fbPitch = ::Graphics::Cursor::GetFramebufferPitch(); + + KernelLogStream(INFO, "IntelGPU") << "Using firmware framebuffer dimensions: " + << base::dec << g_fbWidth << "x" << g_fbHeight + << " pitch=" << g_fbPitch; + } else { + KernelLogStream(INFO, "IntelGPU") << "Detected resolution: " + << base::dec << g_fbWidth << "x" << g_fbHeight + << " pitch=" << g_fbPitch; + } + + if (g_fbWidth == 0 || g_fbHeight == 0) { + KernelLogStream(ERROR, "IntelGPU") << "Could not determine display resolution"; + return false; + } + + // Ensure pitch is at least width * 4 (BGRX8888) + if (g_fbPitch == 0) { + g_fbPitch = g_fbWidth * 4; + KernelLogStream(WARNING, "IntelGPU") << "Stride not available, assuming " + << base::dec << g_fbPitch << " bytes"; + } + + g_fbSize = g_fbHeight * g_fbPitch; + + KernelLogStream(OK, "IntelGPU") << "Display state: " + << base::dec << g_fbWidth << "x" << g_fbHeight + << ", stride=" << g_fbPitch + << ", FB size=" << g_fbSize << " bytes"; + + return true; + } + + // ========================================================================= + // GTT Initialization + // ========================================================================= + + static bool InitializeGtt() { + uint8_t bus = g_gpuInfo.pciBus; + uint8_t dev = g_gpuInfo.pciDevice; + uint8_t func = g_gpuInfo.pciFunction; + + // Read GMCH_CTL to determine GTT size + uint16_t gmchCtl = Pci::LegacyRead16(bus, dev, func, (uint8_t)PCI_REG_GMCH_CTL); + uint8_t gttSizeBits = (gmchCtl >> 8) & 0x3; + + uint64_t gttSizeBytes = 0; + + if (g_gpuGen >= 8) { + // Gen 8+ has a different encoding for GTT size + switch (gttSizeBits) { + case 0: gttSizeBytes = 0; break; // No GTT + case 1: gttSizeBytes = 2 * 1024 * 1024; break; // 2MB + case 2: gttSizeBytes = 4 * 1024 * 1024; break; // 4MB + case 3: gttSizeBytes = 8 * 1024 * 1024; break; // 8MB + default: gttSizeBytes = 2 * 1024 * 1024; break; + } + } else { + // Gen 5-7 + switch (gttSizeBits) { + case 0: gttSizeBytes = 0; break; // No GTT + case 1: gttSizeBytes = 1024 * 1024; break; // 1MB + case 2: gttSizeBytes = 2 * 1024 * 1024; break; // 2MB + case 3: gttSizeBytes = 2 * 1024 * 1024; break; // Depends on gen, default 2MB + default: gttSizeBytes = 1024 * 1024; break; + } + } + + if (gttSizeBytes == 0) { + // If hardware reports no GTT, assume 1MB as a safe fallback + gttSizeBytes = 1024 * 1024; + KernelLogStream(WARNING, "IntelGPU") << "GMCH_CTL reports no GTT, assuming 1MB"; + } + + g_gpuInfo.gttSize = gttSizeBytes; + + KernelLogStream(INFO, "IntelGPU") << "GMCH_CTL: " << base::hex << (uint64_t)gmchCtl + << ", GTT size: " << base::dec << (gttSizeBytes / 1024) << " KB"; + + // The GTT entries reside at BAR0 + 2MB (offset 0x200000) + // This is correct for most Intel generations + uint64_t gttPhys = g_gpuInfo.mmioPhys + 0x200000; + + // Map the GTT region (it may overlap with already-mapped MMIO, but we map + // additional pages beyond the initial 2MB MMIO mapping) + uint64_t gttMapSize = gttSizeBytes; + // Ensure we map at least up to the GTT region end + for (uint64_t offset = 0; offset < gttMapSize; offset += 0x1000) { + Memory::VMM::g_paging->MapMMIO(gttPhys + offset, Memory::HHDM(gttPhys + offset)); + } + + g_gttBase = (volatile void*)Memory::HHDM(gttPhys); + + // Calculate number of GTT entries + if (g_gpuGen >= 8) { + // 64-bit PTEs + g_gttEntryCount = gttSizeBytes / sizeof(uint64_t); + } else { + // 32-bit PTEs + g_gttEntryCount = gttSizeBytes / sizeof(uint32_t); + } + + KernelLogStream(INFO, "IntelGPU") << "GTT at physical " << base::hex << gttPhys + << ", " << base::dec << g_gttEntryCount << " entries" + << (g_gpuGen >= 8 ? " (64-bit PTEs)" : " (32-bit PTEs)"); + + // Allocate a scratch page (zeroed) for future use + void* scratchPageVirt = Memory::g_pfa->AllocateZeroed(); + g_scratchPagePhys = Memory::SubHHDM(scratchPageVirt); + + // Do NOT clear the entire GTT here. The firmware has active GTT mappings + // that the display engine is currently scanning out from. Clearing them + // would cause the display to go black (or worse) before we remap. + // Instead, we only write the entries we need in SetupFramebuffer(). + + KernelLogStream(OK, "IntelGPU") << "GTT ready: " << base::dec << g_gttEntryCount + << " entries, scratch page at " << base::hex << g_scratchPagePhys; + + return true; + } + + // ========================================================================= + // Framebuffer Allocation and Setup + // ========================================================================= + + static bool SetupFramebuffer() { + // Map the firmware framebuffer's contiguous physical pages through our GTT. + // This keeps the same physical memory that the firmware set up (contiguous + // pages, already HHDM-mapped), so both kernel and userspace access continue + // to work via the original virtual/physical addresses. No copy is needed. + uint32_t* fwFb = ::Graphics::Cursor::GetFramebufferBase(); + if (fwFb == nullptr) { + KernelLogStream(ERROR, "IntelGPU") << "No firmware framebuffer available"; + return false; + } + + uint64_t fwFbPhys = Memory::SubHHDM((uint64_t)fwFb); + uint64_t pageCount = (g_fbSize + 0xFFF) / 0x1000; + + if (pageCount > g_gttEntryCount) { + KernelLogStream(ERROR, "IntelGPU") << "Framebuffer requires " << base::dec << pageCount + << " pages but GTT only has " << g_gttEntryCount << " entries"; + return false; + } + + KernelLogStream(INFO, "IntelGPU") << "Mapping " << base::dec << pageCount + << " firmware FB pages through GTT (phys base " << base::hex << fwFbPhys << ")"; + + // Program GTT entries to point to the firmware FB's contiguous physical pages + if (g_gpuGen >= 8) { + volatile uint64_t* gtt64 = (volatile uint64_t*)g_gttBase; + for (uint64_t i = 0; i < pageCount; i++) { + gtt64[i] = MakeGttPte64(fwFbPhys + i * 0x1000); + } + // Flush GTT writes + (void)gtt64[pageCount - 1]; + } else { + volatile uint32_t* gtt32 = (volatile uint32_t*)g_gttBase; + for (uint64_t i = 0; i < pageCount; i++) { + gtt32[i] = MakeGttPte32(fwFbPhys + i * 0x1000); + } + // Flush GTT writes + (void)gtt32[pageCount - 1]; + } + + // Keep using the same framebuffer memory + g_fbBase = fwFb; + g_fbPhysBase = fwFbPhys; + g_fbGttOffset = 0; // Starting at GTT entry 0 => offset 0 + + KernelLogStream(OK, "IntelGPU") << "Framebuffer mapped through GTT: " << base::dec << pageCount + << " pages, phys=" << base::hex << fwFbPhys; + + return true; + } + + static void ProgramDisplayPlane() { + // Preserve the firmware's DSPACNTR value entirely. The firmware already + // configured the correct pixel format, pipe assignment, and tiling mode. + // We only need to point DSPASURF to our GTT-mapped framebuffer. + uint32_t dspaCntr = ReadReg(DSPACNTR); + uint32_t fmtBits = (dspaCntr & DISP_FORMAT_MASK) >> DISP_FORMAT_SHIFT; + uint32_t oldDspaSurf = ReadReg(DSPASURF); + + KernelLogStream(INFO, "IntelGPU") << "Preserving firmware DSPACNTR: " << base::hex + << (uint64_t)dspaCntr << " (format=" << (uint64_t)fmtBits << ")"; + KernelLogStream(INFO, "IntelGPU") << "Firmware DSPASURF was: " << base::hex + << (uint64_t)oldDspaSurf; + + // Ensure the plane is enabled (it should already be) + if (!(dspaCntr & DISP_ENABLE)) { + dspaCntr |= DISP_ENABLE; + WriteReg(DSPACNTR, dspaCntr); + } + + // Do NOT write DSPASTRIDE — the firmware already set the correct value + // in the hardware's native format (bytes on Gen <9, 64-byte units on Gen 9+). + // Writing our byte-converted g_fbPitch would corrupt it on Gen 9+. + + // Write the GTT base offset to DSPASURF - this triggers the plane update + // Since we mapped at GTT entry 0, the offset is 0 + uint32_t surfAddr = (uint32_t)g_fbGttOffset; + WriteReg(DSPASURF, surfAddr); + + // Read back to flush + (void)ReadReg(DSPASURF); + + KernelLogStream(OK, "IntelGPU") << "Display plane A: DSPASURF=" + << base::hex << (uint64_t)surfAddr + << " (was " << (uint64_t)oldDspaSurf << ")" + << ", stride=" << base::dec << g_fbPitch; + } + + // ========================================================================= + // Public API + // ========================================================================= + + void Initialize() { + KernelLogStream(INFO, "IntelGPU") << "Scanning for Intel integrated graphics..."; + + // Step 1: Detect GPU on PCI bus + if (!DetectGpu()) { + return; + } + + // Step 2: Map BAR0 MMIO region + if (!MapMmio()) { + KernelLogStream(ERROR, "IntelGPU") << "Failed to map MMIO region"; + return; + } + + // Step 3: Disable VGA plane + DisableVga(); + + // Step 4: Read current display state from firmware + if (!ReadDisplayState()) { + KernelLogStream(ERROR, "IntelGPU") << "Failed to read display state"; + return; + } + + // Step 5: Initialize GTT + if (!InitializeGtt()) { + KernelLogStream(ERROR, "IntelGPU") << "Failed to initialize GTT"; + return; + } + + // Step 6: Map firmware framebuffer pages through GTT + if (!SetupFramebuffer()) { + KernelLogStream(ERROR, "IntelGPU") << "Failed to set up framebuffer"; + return; + } + + // Step 7: Program the display plane to use our GTT-mapped framebuffer + ProgramDisplayPlane(); + + g_initialized = true; + + // Diagnostic: compare GPU-detected values with firmware/Limine values + uint64_t fwWidth = ::Graphics::Cursor::GetFramebufferWidth(); + uint64_t fwHeight = ::Graphics::Cursor::GetFramebufferHeight(); + uint64_t fwPitch = ::Graphics::Cursor::GetFramebufferPitch(); + + if (g_fbWidth != fwWidth || g_fbHeight != fwHeight || g_fbPitch != fwPitch) { + KernelLogStream(WARNING, "IntelGPU") << "GPU dimensions differ from firmware!"; + KernelLogStream(WARNING, "IntelGPU") << " GPU: " + << base::dec << g_fbWidth << "x" << g_fbHeight + << " pitch=" << g_fbPitch; + KernelLogStream(WARNING, "IntelGPU") << " Firmware: " + << base::dec << fwWidth << "x" << fwHeight + << " pitch=" << fwPitch; + } + + KernelLogStream(OK, "IntelGPU") << "Initialization complete: " + << base::dec << g_fbWidth << "x" << g_fbHeight + << " @ " << base::hex << (uint64_t)g_fbBase; + } + + bool IsInitialized() { + return g_initialized; + } + + const GpuInfo* GetGpuInfo() { + return &g_gpuInfo; + } + + uint32_t* GetFramebufferBase() { + return g_fbBase; + } + + uint64_t GetFramebufferPhysBase() { + return g_fbPhysBase; + } + + uint64_t GetWidth() { + return g_fbWidth; + } + + uint64_t GetHeight() { + return g_fbHeight; + } + + uint64_t GetPitch() { + return g_fbPitch; + } + +}; diff --git a/kernel/src/Drivers/Graphics/IntelGPU.hpp b/kernel/src/Drivers/Graphics/IntelGPU.hpp new file mode 100644 index 0000000..0f3b42d --- /dev/null +++ b/kernel/src/Drivers/Graphics/IntelGPU.hpp @@ -0,0 +1,420 @@ +/* + * IntelGPU.hpp + * Intel integrated graphics (i915) modesetting driver + * Supports Gen 5 (Ironlake) through Gen 12 (Tiger Lake / Alder Lake) + * Copyright (c) 2025 Daniel Hammer +*/ + +#pragma once +#include + +namespace Drivers::Graphics::IntelGPU { + + // ========================================================================= + // PCI identification + // ========================================================================= + + static constexpr uint16_t VendorIntel = 0x8086; + static constexpr uint8_t ClassDisplay = 0x03; + static constexpr uint8_t SubclassVGA = 0x00; + + // PCI config space offsets + static constexpr uint16_t PCI_REG_BAR0 = 0x10; + static constexpr uint16_t PCI_REG_BAR2 = 0x18; + static constexpr uint16_t PCI_REG_COMMAND = 0x04; + static constexpr uint16_t PCI_CMD_MEM_SPACE = (1 << 1); + static constexpr uint16_t PCI_CMD_BUS_MASTER = (1 << 2); + + // Graphics control register (PCI config offset 0x50 on SNB+) + static constexpr uint16_t PCI_REG_GMCH_CTL = 0x50; + + // Supported Intel GPU device IDs (representative subset) + struct DeviceInfo { + uint16_t deviceId; + uint8_t gen; // Intel graphics generation (5-12) + const char* name; + }; + + static constexpr DeviceInfo SupportedDevices[] = { + // Gen 5 - Ironlake + {0x0042, 5, "Ironlake Desktop"}, + {0x0046, 5, "Ironlake Mobile"}, + + // Gen 6 - Sandy Bridge + {0x0102, 6, "Sandy Bridge GT1 Desktop"}, + {0x0112, 6, "Sandy Bridge GT2 Desktop"}, + {0x0122, 6, "Sandy Bridge GT2 Desktop"}, + {0x0106, 6, "Sandy Bridge GT1 Mobile"}, + {0x0116, 6, "Sandy Bridge GT2 Mobile"}, + {0x0126, 6, "Sandy Bridge GT2 Mobile"}, + {0x010A, 6, "Sandy Bridge GT1 Server"}, + + // Gen 7 - Ivy Bridge + {0x0152, 7, "Ivy Bridge GT1 Desktop"}, + {0x0162, 7, "Ivy Bridge GT2 Desktop"}, + {0x0156, 7, "Ivy Bridge GT1 Mobile"}, + {0x0166, 7, "Ivy Bridge GT2 Mobile"}, + {0x015A, 7, "Ivy Bridge GT1 Server"}, + {0x016A, 7, "Ivy Bridge GT2 Server"}, + + // Gen 7.5 - Haswell + {0x0402, 7, "Haswell GT1 Desktop"}, + {0x0412, 7, "Haswell GT2 Desktop"}, + {0x0422, 7, "Haswell GT3 Desktop"}, + {0x0406, 7, "Haswell GT1 Mobile"}, + {0x0416, 7, "Haswell GT2 Mobile"}, + {0x0426, 7, "Haswell GT3 Mobile"}, + {0x0A06, 7, "Haswell ULT GT1"}, + {0x0A16, 7, "Haswell ULT GT2"}, + {0x0A26, 7, "Haswell ULT GT3"}, + {0x0D12, 7, "Haswell CRW GT2"}, + {0x0D22, 7, "Haswell CRW GT3"}, + + // Gen 8 - Broadwell + {0x1602, 8, "Broadwell GT1"}, + {0x1612, 8, "Broadwell GT2"}, + {0x1616, 8, "Broadwell GT2 Mobile"}, + {0x1622, 8, "Broadwell GT3"}, + {0x1626, 8, "Broadwell GT3 Mobile"}, + {0x162A, 8, "Broadwell GT3 Server"}, + + // Gen 9 - Skylake + {0x1902, 9, "Skylake GT1 Desktop"}, + {0x1906, 9, "Skylake GT1 Mobile"}, + {0x1912, 9, "Skylake GT2 Desktop"}, + {0x1916, 9, "Skylake GT2 Mobile"}, + {0x191E, 9, "Skylake GT2 Mobile"}, + {0x1926, 9, "Skylake GT3 Mobile"}, + {0x1932, 9, "Skylake GT4 Desktop"}, + + // Gen 9.5 - Kaby Lake / Coffee Lake + {0x5902, 9, "Kaby Lake GT1 Desktop"}, + {0x5912, 9, "Kaby Lake GT2 Desktop"}, + {0x5916, 9, "Kaby Lake GT2 Mobile"}, + {0x5926, 9, "Kaby Lake GT3 Mobile"}, + {0x3E90, 9, "Coffee Lake GT1 Desktop"}, + {0x3E92, 9, "Coffee Lake GT2 Desktop"}, + {0x3EA0, 9, "Coffee Lake GT3"}, + {0x3E91, 9, "Coffee Lake GT2 Desktop"}, + {0x3E98, 9, "Coffee Lake GT2 Desktop"}, + {0x9B41, 9, "Comet Lake GT2"}, + {0x9BA5, 9, "Comet Lake GT2 Mobile"}, + + // Gen 11 - Ice Lake + {0x8A52, 11, "Ice Lake GT2"}, + {0x8A56, 11, "Ice Lake GT2 Mobile"}, + {0x8A5A, 11, "Ice Lake GT1.5"}, + {0x8A5C, 11, "Ice Lake GT1"}, + + // Gen 12 - Tiger Lake + {0x9A49, 12, "Tiger Lake GT2"}, + {0x9A78, 12, "Tiger Lake GT2"}, + {0x9A40, 12, "Tiger Lake GT2"}, + + // Gen 12 - Alder Lake + {0x4626, 12, "Alder Lake GT2"}, + {0x4680, 12, "Alder Lake-S GT1"}, + {0x4692, 12, "Alder Lake-S GT1"}, + {0x46A6, 12, "Alder Lake-P GT2"}, + }; + + static constexpr int SupportedDeviceCount = sizeof(SupportedDevices) / sizeof(SupportedDevices[0]); + + // ========================================================================= + // MMIO register offsets (relative to BAR0) + // ========================================================================= + + // --- VGA control --- + static constexpr uint32_t VGACNTRL = 0x71400; + static constexpr uint32_t VGACNTRL_DISABLE = (1u << 31); + + // --- DPLL (Display PLL) --- + static constexpr uint32_t DPLL_A = 0x06014; + static constexpr uint32_t DPLL_B = 0x06018; + static constexpr uint32_t FPA0 = 0x06040; + static constexpr uint32_t FPA1 = 0x06044; + static constexpr uint32_t FPB0 = 0x06048; + static constexpr uint32_t FPB1 = 0x0604C; + + // DPLL control bits + static constexpr uint32_t DPLL_VCO_ENABLE = (1u << 31); + static constexpr uint32_t DPLL_VGA_MODE_DIS = (1u << 28); + static constexpr uint32_t DPLL_MODE_DAC_SDVO = (1u << 26); + static constexpr uint32_t DPLL_MODE_LVDS = (2u << 26); + + // FP register fields + static constexpr uint32_t FP_N_DIV_SHIFT = 16; + static constexpr uint32_t FP_N_DIV_MASK = 0x3F0000; + static constexpr uint32_t FP_M1_DIV_SHIFT = 8; + static constexpr uint32_t FP_M1_DIV_MASK = 0x003F00; + static constexpr uint32_t FP_M2_DIV_SHIFT = 0; + static constexpr uint32_t FP_M2_DIV_MASK = 0x00003F; + + // --- Display timing registers (Pipe A) --- + static constexpr uint32_t HTOTAL_A = 0x60000; + static constexpr uint32_t HBLANK_A = 0x60004; + static constexpr uint32_t HSYNC_A = 0x60008; + static constexpr uint32_t VTOTAL_A = 0x6000C; + static constexpr uint32_t VBLANK_A = 0x60010; + static constexpr uint32_t VSYNC_A = 0x60014; + static constexpr uint32_t PIPEASRC = 0x6001C; + + // --- Display timing registers (Pipe B) --- + static constexpr uint32_t HTOTAL_B = 0x61000; + static constexpr uint32_t HBLANK_B = 0x61004; + static constexpr uint32_t HSYNC_B = 0x61008; + static constexpr uint32_t VTOTAL_B = 0x6100C; + static constexpr uint32_t VBLANK_B = 0x61010; + static constexpr uint32_t VSYNC_B = 0x61014; + static constexpr uint32_t PIPEBSRC = 0x6101C; + + // --- Pipe configuration --- + static constexpr uint32_t PIPEACONF = 0x70008; + static constexpr uint32_t PIPEBCONF = 0x71008; + + static constexpr uint32_t PIPECONF_ENABLE = (1u << 31); + static constexpr uint32_t PIPECONF_STATE = (1u << 30); + static constexpr uint32_t PIPECONF_8BPC = (0u << 5); + static constexpr uint32_t PIPECONF_10BPC = (1u << 5); + static constexpr uint32_t PIPECONF_6BPC = (2u << 5); + static constexpr uint32_t PIPECONF_12BPC = (3u << 5); + + // --- Display plane control (Plane A, pre-Skylake i9xx-style) --- + static constexpr uint32_t DSPACNTR = 0x70180; + static constexpr uint32_t DSPALINOFF = 0x70184; + static constexpr uint32_t DSPASTRIDE = 0x70188; + static constexpr uint32_t DSPAPOS = 0x7018C; + static constexpr uint32_t DSPASIZE = 0x70190; + static constexpr uint32_t DSPASURF = 0x7019C; + static constexpr uint32_t DSPATILEOFF = 0x701A4; + + // --- Display plane control (Plane B) --- + static constexpr uint32_t DSPBCNTR = 0x71180; + static constexpr uint32_t DSPBLINOFF = 0x71184; + static constexpr uint32_t DSPBSTRIDE = 0x71188; + static constexpr uint32_t DSPBPOS = 0x7118C; + static constexpr uint32_t DSPBSIZE = 0x71190; + static constexpr uint32_t DSPBSURF = 0x7119C; + static constexpr uint32_t DSPBTILEOFF = 0x711A4; + + // DSPCNTR bits + static constexpr uint32_t DISP_ENABLE = (1u << 31); + static constexpr uint32_t DISP_GAMMA_ENABLE = (1u << 30); + static constexpr uint32_t DISP_FORMAT_SHIFT = 26; + static constexpr uint32_t DISP_FORMAT_MASK = (0xFu << 26); + static constexpr uint32_t DISP_FORMAT_BGRX8888 = (0x6u << 26); // 32bpp BGRX (no alpha) + static constexpr uint32_t DISP_FORMAT_BGRA8888 = (0x7u << 26); // 32bpp BGRA (with alpha) + static constexpr uint32_t DISP_FORMAT_RGBX8888 = (0xEu << 26); // 32bpp RGBX + static constexpr uint32_t DISP_FORMAT_BGR565 = (0x5u << 26); // 16bpp BGR 5:6:5 + static constexpr uint32_t DISP_FORMAT_BGRX1010102 = (0xAu << 26); + static constexpr uint32_t DISP_PIPE_B_SELECT = (1u << 24); + static constexpr uint32_t DISP_TILED = (1u << 10); + + // --- Cursor plane (Pipe A) --- + static constexpr uint32_t CURACNTR = 0x70080; + static constexpr uint32_t CURABASE = 0x70084; + static constexpr uint32_t CURAPOS = 0x70088; + + // --- Output connectors --- + static constexpr uint32_t ADPA = 0x61100; // Analog Display Port (VGA/CRT) + static constexpr uint32_t DVOB = 0x61140; // DVO-B + static constexpr uint32_t DVOC = 0x61160; // DVO-C + static constexpr uint32_t LVDS = 0x61180; // LVDS panel + static constexpr uint32_t DP_B = 0x64100; // DisplayPort B + static constexpr uint32_t DP_C = 0x64200; // DisplayPort C + static constexpr uint32_t DP_D = 0x64300; // DisplayPort D + static constexpr uint32_t HDMI_B = 0x61140; // HDMI-B (same as DVOB on some gens) + static constexpr uint32_t HDMI_C = 0x61160; // HDMI-C (same as DVOC on some gens) + + // ADPA bits + static constexpr uint32_t ADPA_DAC_ENABLE = (1u << 31); + static constexpr uint32_t ADPA_PIPE_B_SELECT = (1u << 30); + static constexpr uint32_t ADPA_HSYNC_ACTIVE_LOW = (1u << 3); + static constexpr uint32_t ADPA_VSYNC_ACTIVE_LOW = (1u << 4); + + // LVDS bits + static constexpr uint32_t LVDS_PORT_ENABLE = (1u << 31); + static constexpr uint32_t LVDS_PIPE_B_SELECT = (1u << 30); + + // --- GMBUS (I2C for EDID) --- + static constexpr uint32_t GMBUS0 = 0x5100; // Clock/port select + static constexpr uint32_t GMBUS1 = 0x5104; // Command/status + static constexpr uint32_t GMBUS2 = 0x5108; // Status + static constexpr uint32_t GMBUS3 = 0x510C; // Data buffer + static constexpr uint32_t GMBUS4 = 0x5110; // Interrupt mask + static constexpr uint32_t GMBUS5 = 0x5120; // 2-byte index + + // --- Hardware status page --- + static constexpr uint32_t HWS_PGA = 0x02080; + + // --- Fence registers (tiling) --- + static constexpr uint32_t FENCE_REG_BASE = 0x02000; // Gen 2-3 + static constexpr uint32_t FENCE_REG_965_BASE = 0x03000; // Gen 4+ + + // ========================================================================= + // GTT (Graphics Translation Table) + // ========================================================================= + + // GTT PTE format for Gen 6/7 (Sandy Bridge through Haswell) - 32-bit entries + // Bits [31:12] = physical page address [31:12] + // Bits [10:4] = physical page address [38:32] + // Bits [3:1] = cacheability + // Bit [0] = valid + static constexpr uint32_t GTT_PTE_VALID = (1u << 0); + static constexpr uint32_t GTT_PTE_WB_LLC = (3u << 1); // Write-back LLC cache + static constexpr uint32_t GTT_PTE_UNCACHED = (0u << 1); + + // Gen 8+ uses 64-bit GTT PTEs + static constexpr uint64_t GTT_PTE64_VALID = (1ULL << 0); + + // Helper: Build a Gen 6/7 GTT PTE from a physical address + static inline uint32_t MakeGttPte32(uint64_t physAddr) { + uint32_t pte = (uint32_t)(physAddr & 0xFFFFF000u); // bits [31:12] + pte |= (uint32_t)((physAddr >> 28) & 0x7F0u); // bits [38:32] -> PTE [10:4] + pte |= GTT_PTE_VALID; + return pte; + } + + // Helper: Build a Gen 8+ GTT PTE from a physical address + static inline uint64_t MakeGttPte64(uint64_t physAddr) { + return (physAddr & ~0xFFFULL) | GTT_PTE64_VALID; + } + + // ========================================================================= + // DPLL clock calculation structures + // ========================================================================= + + struct DpllParams { + uint32_t n; + uint32_t m1; + uint32_t m2; + uint32_t p1; + uint32_t p2; + }; + + // DPLL parameter limits (Gen 6 / Sandy Bridge) + struct DpllLimits { + uint32_t nMin, nMax; + uint32_t m1Min, m1Max; + uint32_t m2Min, m2Max; + uint32_t p1Min, p1Max; + uint32_t p2Slow, p2Fast; // P2 values for slow/fast pixel clocks + uint32_t p2Threshold; // kHz threshold between slow/fast P2 + uint32_t vcoMin, vcoMax; // VCO range in kHz + uint32_t refClock; // Reference clock in kHz + }; + + // Sandy Bridge / Ivy Bridge DAC/SDVO limits + static constexpr DpllLimits SNB_DAC_LIMITS = { + .nMin = 1, .nMax = 5, + .m1Min = 12, .m1Max = 22, + .m2Min = 5, .m2Max = 9, + .p1Min = 1, .p1Max = 8, + .p2Slow = 10, .p2Fast = 5, + .p2Threshold = 225000, + .vcoMin = 1750000, .vcoMax = 3500000, + .refClock = 120000, + }; + + // Sandy Bridge / Ivy Bridge LVDS limits + static constexpr DpllLimits SNB_LVDS_LIMITS = { + .nMin = 1, .nMax = 3, + .m1Min = 12, .m1Max = 22, + .m2Min = 5, .m2Max = 9, + .p1Min = 1, .p1Max = 8, + .p2Slow = 14, .p2Fast = 7, + .p2Threshold = 225000, + .vcoMin = 1750000, .vcoMax = 3500000, + .refClock = 120000, + }; + + // ========================================================================= + // Display mode timing + // ========================================================================= + + struct DisplayMode { + uint32_t hdisplay; // Horizontal active pixels + uint32_t hsyncStart; + uint32_t hsyncEnd; + uint32_t htotal; + uint32_t vdisplay; // Vertical active lines + uint32_t vsyncStart; + uint32_t vsyncEnd; + uint32_t vtotal; + uint32_t pixelClock; // in kHz + bool hsyncPositive; + bool vsyncPositive; + }; + + // Common mode timings (CVT/DMT standard) + static constexpr DisplayMode MODE_1920x1080_60 = { + .hdisplay = 1920, .hsyncStart = 2008, .hsyncEnd = 2052, .htotal = 2200, + .vdisplay = 1080, .vsyncStart = 1084, .vsyncEnd = 1089, .vtotal = 1125, + .pixelClock = 148500, + .hsyncPositive = true, .vsyncPositive = true, + }; + + static constexpr DisplayMode MODE_1280x720_60 = { + .hdisplay = 1280, .hsyncStart = 1390, .hsyncEnd = 1430, .htotal = 1650, + .vdisplay = 720, .vsyncStart = 725, .vsyncEnd = 730, .vtotal = 750, + .pixelClock = 74250, + .hsyncPositive = true, .vsyncPositive = true, + }; + + static constexpr DisplayMode MODE_1024x768_60 = { + .hdisplay = 1024, .hsyncStart = 1048, .hsyncEnd = 1184, .htotal = 1344, + .vdisplay = 768, .vsyncStart = 771, .vsyncEnd = 777, .vtotal = 806, + .pixelClock = 65000, + .hsyncPositive = false, .vsyncPositive = false, + }; + + static constexpr DisplayMode MODE_800x600_60 = { + .hdisplay = 800, .hsyncStart = 840, .hsyncEnd = 968, .htotal = 1056, + .vdisplay = 600, .vsyncStart = 601, .vsyncEnd = 605, .vtotal = 628, + .pixelClock = 40000, + .hsyncPositive = true, .vsyncPositive = true, + }; + + // ========================================================================= + // Detected GPU information + // ========================================================================= + + struct GpuInfo { + uint16_t deviceId; + uint8_t gen; + const char* name; + uint8_t pciBus; + uint8_t pciDevice; + uint8_t pciFunction; + uint64_t mmioPhys; // BAR0 physical address + uint64_t mmioSize; // BAR0 region size + uint64_t gmadrPhys; // BAR2 physical (aperture) + uint64_t gttSize; // GTT size in bytes + uint32_t stolenMb; // Stolen memory in MB + }; + + // ========================================================================= + // Public API + // ========================================================================= + + // Initialize the Intel GPU driver (scans PCI, maps MMIO, sets up GTT + FB) + void Initialize(); + + // Check if an Intel GPU was found and initialized + bool IsInitialized(); + + // Get detected GPU information + const GpuInfo* GetGpuInfo(); + + // Framebuffer access (returns HHDM virtual address) + uint32_t* GetFramebufferBase(); + + // Framebuffer physical base (for userspace mapping) + uint64_t GetFramebufferPhysBase(); + + // Framebuffer dimensions + uint64_t GetWidth(); + uint64_t GetHeight(); + uint64_t GetPitch(); + +}; diff --git a/kernel/src/Graphics/Cursor.cpp b/kernel/src/Graphics/Cursor.cpp index 924dd56..c5515fe 100644 --- a/kernel/src/Graphics/Cursor.cpp +++ b/kernel/src/Graphics/Cursor.cpp @@ -6,6 +6,7 @@ #include "Cursor.hpp" #include +#include namespace Graphics::Cursor { @@ -30,4 +31,17 @@ namespace Graphics::Cursor { uint64_t GetFramebufferHeight() { return g_FbHeight; } uint64_t GetFramebufferPitch() { return g_FbPitch; } + void SetFramebuffer(uint32_t* base, uint64_t width, uint64_t height, uint64_t pitch) { + g_FbBase = base; + g_FbWidth = width; + g_FbHeight = height; + g_FbPitch = pitch; + Kt::KernelLogStream(Kt::OK, "Graphics") << "Framebuffer switched (" + << (uint64_t)g_FbWidth << "x" << (uint64_t)g_FbHeight << ")"; + } + + uint64_t GetFramebufferPhysBase() { + return Memory::SubHHDM((uint64_t)g_FbBase); + } + }; diff --git a/kernel/src/Graphics/Cursor.hpp b/kernel/src/Graphics/Cursor.hpp index 2c6e545..f81e492 100644 --- a/kernel/src/Graphics/Cursor.hpp +++ b/kernel/src/Graphics/Cursor.hpp @@ -17,4 +17,7 @@ namespace Graphics::Cursor { uint64_t GetFramebufferHeight(); uint64_t GetFramebufferPitch(); + void SetFramebuffer(uint32_t* base, uint64_t width, uint64_t height, uint64_t pitch); + uint64_t GetFramebufferPhysBase(); + }; diff --git a/kernel/src/Hal/MSR.hpp b/kernel/src/Hal/MSR.hpp index 6d0ddf6..d414c1f 100644 --- a/kernel/src/Hal/MSR.hpp +++ b/kernel/src/Hal/MSR.hpp @@ -26,5 +26,34 @@ namespace Hal { static constexpr uint32_t IA32_STAR = 0xC0000081; static constexpr uint32_t IA32_LSTAR = 0xC0000082; static constexpr uint32_t IA32_FMASK = 0xC0000084; + static constexpr uint32_t IA32_PAT = 0x00000277; + + // PAT memory type encodings + static constexpr uint8_t PAT_UC = 0x00; // Uncacheable + static constexpr uint8_t PAT_WC = 0x01; // Write Combining + static constexpr uint8_t PAT_WT = 0x04; // Write Through + static constexpr uint8_t PAT_WP = 0x05; // Write Protect + static constexpr uint8_t PAT_WB = 0x06; // Write Back + static constexpr uint8_t PAT_UCM = 0x07; // UC- (UC minus) + + // Program PAT so entry 1 = WC (default is WT). + // PAT index is selected by PTE bits: PAT(bit7) | PCD(bit4) | PWT(bit3) + // Entry 0 (000) = WB — normal memory (unchanged) + // Entry 1 (001) = WC — framebuffers (was WT) + // Entry 2 (010) = UC- — (unchanged) + // Entry 3 (011) = UC — MMIO registers (unchanged) + // Entries 4-7: unchanged from defaults + inline void InitializePAT() { + uint64_t pat = + ((uint64_t)PAT_WB << 0) | // Entry 0: WB + ((uint64_t)PAT_WC << 8) | // Entry 1: WC (was WT) + ((uint64_t)PAT_UCM << 16) | // Entry 2: UC- + ((uint64_t)PAT_UC << 24) | // Entry 3: UC + ((uint64_t)PAT_WB << 32) | // Entry 4: WB + ((uint64_t)PAT_WT << 40) | // Entry 5: WT + ((uint64_t)PAT_UCM << 48) | // Entry 6: UC- + ((uint64_t)PAT_UC << 56); // Entry 7: UC + WriteMSR(IA32_PAT, pat); + } } diff --git a/kernel/src/Main.cpp b/kernel/src/Main.cpp index 49ddec0..2ae8fee 100644 --- a/kernel/src/Main.cpp +++ b/kernel/src/Main.cpp @@ -35,9 +35,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -138,7 +140,38 @@ extern "C" void kmain() { Memory::VMM::g_paging = &g_paging; g_paging.Init((uint64_t)&KernelStartSymbol, ((uint64_t)&KernelEndSymbol - (uint64_t)&KernelStartSymbol), memmap_request.response); + // Reprogram PAT so entry 1 = Write-Combining (default is Write-Through). + // Must be done after paging init and before any WC mappings. + Hal::InitializePAT(); + Kt::KernelLogStream(OK, "Hal") << "PAT reprogrammed (entry 1 = WC)"; + #endif + + // Initialize Cursor early so we can WC-map the framebuffer before + // the bulk of boot logging begins (ACPI, PCI, drivers, etc.) + Graphics::Cursor::Initialize(framebuffer); + +#if defined (__x86_64__) + // Map framebuffer as Write-Combining immediately for faster screen writes. + // All subsequent log output benefits from WC burst transfers. + { + uint64_t fbPhys = Graphics::Cursor::GetFramebufferPhysBase(); + uint64_t fbSize = Graphics::Cursor::GetFramebufferHeight() + * Graphics::Cursor::GetFramebufferPitch(); + uint64_t numPages = (fbSize + 0xFFF) / 0x1000; + + for (uint64_t i = 0; i < numPages; i++) { + uint64_t phys = fbPhys + i * 0x1000; + g_paging.MapWC(phys, Memory::HHDM(phys)); + } + + asm volatile("mov %%cr3, %%rax; mov %%rax, %%cr3" ::: "rax", "memory"); + + Kt::KernelLogStream(OK, "Graphics") << "Framebuffer mapped as Write-Combining (" + << kcp::dec << numPages << " pages)"; + } +#endif + Hal::ACPI g_acpi((Hal::ACPI::XSDP*)Memory::HHDM(rsdp_request.response->address)); #if defined (__x86_64__) @@ -147,6 +180,18 @@ extern "C" void kmain() { Pci::Initialize(g_acpi.GetXSDT()); + // Intel GPU driver — initialize right after PCI so the native + // driver takes over early and all subsequent logs use it. + Drivers::Graphics::IntelGPU::Initialize(); + if (Drivers::Graphics::IntelGPU::IsInitialized()) { + Graphics::Cursor::SetFramebuffer( + Drivers::Graphics::IntelGPU::GetFramebufferBase(), + Drivers::Graphics::IntelGPU::GetWidth(), + Drivers::Graphics::IntelGPU::GetHeight(), + Drivers::Graphics::IntelGPU::GetPitch() + ); + } + Timekeeping::ApicTimerInitialize(); Drivers::PS2::Initialize(); @@ -199,8 +244,6 @@ extern "C" void kmain() { }; Fs::Vfs::RegisterDrive(0, &ramdiskDriver); - Graphics::Cursor::Initialize(framebuffer); - Hal::LoadTSS(); Zenith::InitializeSyscalls(); diff --git a/kernel/src/Memory/Paging.cpp b/kernel/src/Memory/Paging.cpp index 635b0ea..9016586 100644 --- a/kernel/src/Memory/Paging.cpp +++ b/kernel/src/Memory/Paging.cpp @@ -94,6 +94,26 @@ namespace Memory::VMM { pageEntry->Address = physicalAddress >> 12; } + void Paging::MapWC(std::uint64_t physicalAddress, std::uint64_t virtualAddress) { + if (virtualAddress % 0x1000 != 0 || physicalAddress % 0x1000 != 0) { + Panic("Value that isn't page-aligned passed as address to Paging::MapWC!", nullptr); + } + + VirtualAddress virtualAddressObj(virtualAddress); + + auto PML3 = HandleLevel(virtualAddressObj, PML4, 4); + auto PML2 = HandleLevel(virtualAddressObj, PML3, 3); + auto PML1 = HandleLevel(virtualAddressObj, PML2, 2); + + PageTableEntry* pageEntry = (PageTableEntry*)Memory::HHDM(&PML1->entries[virtualAddressObj.GetPageIndex()]); + + pageEntry->Present = true; + pageEntry->Writable = true; + pageEntry->WriteThrough = true; // PWT=1, PCD=0 → PAT entry 1 = WC + + pageEntry->Address = physicalAddress >> 12; + } + void Paging::MapMMIO(std::uint64_t physicalAddress, std::uint64_t virtualAddress) { if (virtualAddress % 0x1000 != 0 || physicalAddress % 0x1000 != 0) { Panic("Value that isn't page-aligned passed as address to Paging::MapMMIO!", nullptr); @@ -185,6 +205,41 @@ namespace Memory::VMM { pageEntry->Address = physicalAddress >> 12; } + void Paging::MapUserInWC(std::uint64_t pml4Phys, std::uint64_t physicalAddress, std::uint64_t virtualAddress) { + if (virtualAddress % 0x1000 != 0 || physicalAddress % 0x1000 != 0) { + Panic("Non-aligned address in Paging::MapUserInWC!", nullptr); + } + + VirtualAddress va(virtualAddress); + + auto walkLevel = [](PageTable* table, uint64_t index) -> PageTable* { + PageTableEntry* entry = (PageTableEntry*)Memory::HHDM(&table->entries[index]); + if (!entry->Present) { + entry->Present = true; + entry->Writable = true; + entry->Supervisor = 1; + uint64_t newPhys = Memory::SubHHDM((uint64_t)Memory::g_pfa->AllocateZeroed()); + entry->Address = newPhys >> 12; + return (PageTable*)newPhys; + } else { + entry->Supervisor = 1; + return (PageTable*)(entry->Address << 12); + } + }; + + PageTable* pml4 = (PageTable*)pml4Phys; + auto pml3 = walkLevel(pml4, va.GetL4Index()); + auto pml2 = walkLevel(pml3, va.GetL3Index()); + auto pml1 = walkLevel(pml2, va.GetL2Index()); + + PageTableEntry* pageEntry = (PageTableEntry*)Memory::HHDM(&pml1->entries[va.GetPageIndex()]); + pageEntry->Present = true; + pageEntry->Writable = true; + pageEntry->Supervisor = 1; + pageEntry->WriteThrough = true; // PWT=1, PCD=0 → PAT entry 1 = WC + pageEntry->Address = physicalAddress >> 12; + } + std::uint64_t Paging::GetPhysAddr(std::uint64_t pml4, std::uint64_t virtualAddress, bool use40BitL1) { VirtualAddress virtualAddressObj(virtualAddress); diff --git a/kernel/src/Memory/Paging.hpp b/kernel/src/Memory/Paging.hpp index 52b68f3..e96bfac 100644 --- a/kernel/src/Memory/Paging.hpp +++ b/kernel/src/Memory/Paging.hpp @@ -94,6 +94,7 @@ public: void Init(std::uint64_t kernelBaseVirt, std::uint64_t kernelSize, limine_memmap_response* memMap); void Map(std::uint64_t physicalAddress, std::uint64_t virtualAddress); void MapMMIO(std::uint64_t physicalAddress, std::uint64_t virtualAddress); + void MapWC(std::uint64_t physicalAddress, std::uint64_t virtualAddress); void MapUser(std::uint64_t physicalAddress, std::uint64_t virtualAddress); static std::uint64_t GetPhysAddr(std::uint64_t PML4, std::uint64_t virtualAddress, bool use40BitL1 = false); std::uint64_t GetPhysAddr(std::uint64_t virtualAddress); @@ -104,6 +105,9 @@ public: // Map a page into an arbitrary PML4 (specified by physical address) with User bit set. static void MapUserIn(std::uint64_t pml4Phys, std::uint64_t physicalAddress, std::uint64_t virtualAddress); + + // Map a page into an arbitrary PML4 with User + Write-Combining attributes. + static void MapUserInWC(std::uint64_t pml4Phys, std::uint64_t physicalAddress, std::uint64_t virtualAddress); }; extern Paging* g_paging; diff --git a/kernel/src/Net/Dns.cpp b/kernel/src/Net/Dns.cpp new file mode 100644 index 0000000..3eebc62 --- /dev/null +++ b/kernel/src/Net/Dns.cpp @@ -0,0 +1,375 @@ +/* + * Dns.cpp + * DNS resolver (kernel-level, RFC 1035) + * Copyright (c) 2025-2026 Daniel Hammer +*/ + +#include "Dns.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Net::Dns { + + // ---- DNS packet constants ---- + + static constexpr uint16_t DNS_PORT = 53; + static constexpr uint16_t DNS_FLAGS_RD = 0x0100; // Recursion Desired + static constexpr uint16_t DNS_QTYPE_A = 1; + static constexpr uint16_t DNS_QCLASS_IN = 1; + + // ---- Simple cache ---- + + static constexpr int CACHE_SIZE = 8; + + struct CacheEntry { + char hostname[128]; + uint32_t ip; + uint32_t ttl; // TTL in seconds + uint64_t timestamp; // ms when cached + bool valid; + }; + + static CacheEntry g_cache[CACHE_SIZE] = {}; + + static bool streq(const char* a, const char* b) { + while (*a && *b) { + if (*a != *b) return false; + a++; b++; + } + return *a == *b; + } + + static uint32_t CacheLookup(const char* hostname) { + uint64_t now = Timekeeping::GetMilliseconds(); + for (int i = 0; i < CACHE_SIZE; i++) { + if (!g_cache[i].valid) continue; + if (!streq(g_cache[i].hostname, hostname)) continue; + // Check TTL + uint64_t elapsed = (now - g_cache[i].timestamp) / 1000; + if (elapsed < g_cache[i].ttl) { + return g_cache[i].ip; + } + // Expired + g_cache[i].valid = false; + return 0; + } + return 0; + } + + static void CacheStore(const char* hostname, uint32_t ip, uint32_t ttl) { + if (ttl == 0) ttl = 60; // Minimum 60s TTL + + // Find free or oldest slot + int slot = 0; + uint64_t oldestTime = ~0ULL; + for (int i = 0; i < CACHE_SIZE; i++) { + if (!g_cache[i].valid) { slot = i; break; } + if (g_cache[i].timestamp < oldestTime) { + oldestTime = g_cache[i].timestamp; + slot = i; + } + } + + CacheEntry& e = g_cache[slot]; + // Copy hostname + int len = 0; + while (hostname[len] && len < 126) { e.hostname[len] = hostname[len]; len++; } + e.hostname[len] = '\0'; + e.ip = ip; + e.ttl = ttl; + e.timestamp = Timekeeping::GetMilliseconds(); + e.valid = true; + } + + // ---- DNS query building ---- + + // Encode a hostname as DNS labels: "example.com" -> "\x07example\x03com\x00" + // Returns number of bytes written, or 0 on error. + static int EncodeName(const char* hostname, uint8_t* out, int maxLen) { + int outPos = 0; + const char* p = hostname; + + while (*p) { + // Find the next dot or end + const char* dot = p; + while (*dot && *dot != '.') dot++; + int labelLen = (int)(dot - p); + + if (labelLen == 0 || labelLen > 63) return 0; + if (outPos + 1 + labelLen >= maxLen) return 0; + + out[outPos++] = (uint8_t)labelLen; + for (int i = 0; i < labelLen; i++) { + out[outPos++] = (uint8_t)p[i]; + } + + p = dot; + if (*p == '.') p++; + } + + if (outPos >= maxLen) return 0; + out[outPos++] = 0; // Root label terminator + return outPos; + } + + // Build a DNS query packet. Returns total packet length, or 0 on error. + static int BuildQuery(uint16_t id, const char* hostname, uint8_t* packet, int maxLen) { + if (maxLen < 12) return 0; + + // Header (12 bytes) + packet[0] = (uint8_t)(id >> 8); + packet[1] = (uint8_t)(id & 0xFF); + packet[2] = (uint8_t)(DNS_FLAGS_RD >> 8); // Flags high: RD=1 + packet[3] = (uint8_t)(DNS_FLAGS_RD & 0xFF); // Flags low + packet[4] = 0; packet[5] = 1; // QDCOUNT = 1 + packet[6] = 0; packet[7] = 0; // ANCOUNT = 0 + packet[8] = 0; packet[9] = 0; // NSCOUNT = 0 + packet[10] = 0; packet[11] = 0; // ARCOUNT = 0 + + // Question section + int nameLen = EncodeName(hostname, packet + 12, maxLen - 12 - 4); + if (nameLen == 0) return 0; + + int pos = 12 + nameLen; + if (pos + 4 > maxLen) return 0; + + // QTYPE = A (1) + packet[pos++] = 0; + packet[pos++] = DNS_QTYPE_A; + // QCLASS = IN (1) + packet[pos++] = 0; + packet[pos++] = DNS_QCLASS_IN; + + return pos; + } + + // ---- DNS response parsing ---- + + // Skip over a DNS name in the packet (handles compression pointers). + // Returns the new offset, or -1 on error. + static int SkipName(const uint8_t* packet, int packetLen, int offset) { + int maxJumps = 32; // prevent infinite loops + bool jumped = false; + int returnOffset = -1; + + while (offset < packetLen && maxJumps > 0) { + uint8_t len = packet[offset]; + + if (len == 0) { + // End of name + offset++; + return jumped ? returnOffset : offset; + } + + if ((len & 0xC0) == 0xC0) { + // Compression pointer + if (offset + 1 >= packetLen) return -1; + if (!jumped) returnOffset = offset + 2; + offset = ((len & 0x3F) << 8) | packet[offset + 1]; + jumped = true; + maxJumps--; + continue; + } + + // Regular label + offset += 1 + len; + maxJumps--; + } + + return -1; + } + + struct DnsAnswer { + uint32_t ip; + uint32_t ttl; + bool found; + }; + + // Parse a DNS response and extract the first A record. + static DnsAnswer ParseResponse(uint16_t expectedId, const uint8_t* packet, int packetLen) { + DnsAnswer result = {0, 0, false}; + + if (packetLen < 12) return result; + + // Check ID + uint16_t id = ((uint16_t)packet[0] << 8) | packet[1]; + if (id != expectedId) return result; + + // Check QR bit (must be response) + if (!(packet[2] & 0x80)) return result; + + // Check RCODE (must be 0 = no error) + uint8_t rcode = packet[3] & 0x0F; + if (rcode != 0) return result; + + uint16_t qdcount = ((uint16_t)packet[4] << 8) | packet[5]; + uint16_t ancount = ((uint16_t)packet[6] << 8) | packet[7]; + + // Skip question section + int offset = 12; + for (uint16_t i = 0; i < qdcount; i++) { + offset = SkipName(packet, packetLen, offset); + if (offset < 0) return result; + offset += 4; // QTYPE + QCLASS + if (offset > packetLen) return result; + } + + // Parse answers + for (uint16_t i = 0; i < ancount; i++) { + offset = SkipName(packet, packetLen, offset); + if (offset < 0 || offset + 10 > packetLen) return result; + + uint16_t atype = ((uint16_t)packet[offset] << 8) | packet[offset + 1]; + // uint16_t aclass = ((uint16_t)packet[offset + 2] << 8) | packet[offset + 3]; + uint32_t attl = ((uint32_t)packet[offset + 4] << 24) | + ((uint32_t)packet[offset + 5] << 16) | + ((uint32_t)packet[offset + 6] << 8) | + ((uint32_t)packet[offset + 7]); + uint16_t rdlen = ((uint16_t)packet[offset + 8] << 8) | packet[offset + 9]; + offset += 10; + + if (offset + rdlen > packetLen) return result; + + if (atype == DNS_QTYPE_A && rdlen == 4) { + // A record: 4-byte IPv4 address (already in network byte order) + result.ip = ((uint32_t)packet[offset]) + | ((uint32_t)packet[offset + 1] << 8) + | ((uint32_t)packet[offset + 2] << 16) + | ((uint32_t)packet[offset + 3] << 24); + result.ttl = attl; + result.found = true; + return result; + } + + offset += rdlen; + } + + return result; + } + + // ---- Resolve state (shared with UDP callback) ---- + + static volatile bool g_gotResponse = false; + static volatile uint16_t g_currentId = 0; + static uint8_t g_responseBuffer[512]; + static volatile int g_responseLen = 0; + + static void DnsRecvCallback(uint32_t srcIp, uint16_t srcPort, + uint16_t dstPort, + const uint8_t* data, uint16_t length) { + (void)srcIp; + (void)srcPort; + (void)dstPort; + + if (g_gotResponse) return; // Already got a response + if (length > sizeof(g_responseBuffer)) length = sizeof(g_responseBuffer); + + memcpy(g_responseBuffer, data, length); + g_responseLen = length; + g_gotResponse = true; + } + + // ---- Simple PRNG for transaction IDs ---- + + static uint16_t g_nextId = 0x4E53; // "NS" + + static uint16_t NextId() { + g_nextId = g_nextId * 25173 + 13849; + return g_nextId; + } + + // ---- Check if string is already an IP address ---- + + static bool IsIpAddress(const char* s) { + int dotCount = 0; + bool hasDigit = false; + for (int i = 0; s[i]; i++) { + if (s[i] >= '0' && s[i] <= '9') { + hasDigit = true; + } else if (s[i] == '.') { + if (!hasDigit) return false; + dotCount++; + hasDigit = false; + } else { + return false; + } + } + return hasDigit && dotCount == 3; + } + + // ---- Public API ---- + + uint32_t Resolve(const char* hostname, uint32_t timeoutMs) { + if (hostname == nullptr || hostname[0] == '\0') return 0; + + // Don't try to resolve IP addresses + if (IsIpAddress(hostname)) return 0; + + // Check cache first + uint32_t cached = CacheLookup(hostname); + if (cached != 0) return cached; + + // Check DNS server is configured + uint32_t dnsServer = Net::GetDnsServer(); + if (dnsServer == 0) return 0; + + // Pick a local port for receiving the response (ephemeral range) + uint16_t localPort = 10000 + (NextId() % 50000); + uint16_t txId = NextId(); + + // Build DNS query + uint8_t queryPacket[512]; + int queryLen = BuildQuery(txId, hostname, queryPacket, sizeof(queryPacket)); + if (queryLen == 0) return 0; + + // Reset response state + g_gotResponse = false; + g_responseLen = 0; + g_currentId = txId; + + // Bind our receive port + if (!Net::Udp::Bind(localPort, DnsRecvCallback)) { + // Port might be in use, try another + localPort = 10000 + (NextId() % 50000); + if (!Net::Udp::Bind(localPort, DnsRecvCallback)) { + return 0; + } + } + + // Send the query to DNS server port 53 + bool sent = Net::Udp::Send(dnsServer, localPort, DNS_PORT, queryPacket, (uint16_t)queryLen); + if (!sent) { + Net::Udp::Unbind(localPort); + return 0; + } + + // Wait for response with timeout + uint64_t start = Timekeeping::GetMilliseconds(); + while (!g_gotResponse) { + if (Timekeeping::GetMilliseconds() - start >= timeoutMs) { + Net::Udp::Unbind(localPort); + return 0; + } + Sched::Schedule(); + } + + // Unbind the port + Net::Udp::Unbind(localPort); + + // Parse the response + DnsAnswer answer = ParseResponse(txId, g_responseBuffer, g_responseLen); + if (!answer.found) return 0; + + // Cache the result + CacheStore(hostname, answer.ip, answer.ttl); + + return answer.ip; + } + +} diff --git a/kernel/src/Net/Dns.hpp b/kernel/src/Net/Dns.hpp new file mode 100644 index 0000000..69af04e --- /dev/null +++ b/kernel/src/Net/Dns.hpp @@ -0,0 +1,16 @@ +/* + * Dns.hpp + * DNS resolver (kernel-level) + * Copyright (c) 2025-2026 Daniel Hammer +*/ + +#pragma once +#include + +namespace Net::Dns { + + // Resolve a hostname to an IPv4 address. + // Returns the IP in network byte order, or 0 on failure. + uint32_t Resolve(const char* hostname, uint32_t timeoutMs = 5000); + +} diff --git a/kernel/src/Net/NetConfig.cpp b/kernel/src/Net/NetConfig.cpp index ae965ad..f166ebf 100644 --- a/kernel/src/Net/NetConfig.cpp +++ b/kernel/src/Net/NetConfig.cpp @@ -12,6 +12,7 @@ namespace Net { static uint32_t g_ipAddress = Ipv4Addr(10, 0, 68, 99); static uint32_t g_subnetMask = Ipv4Addr(255, 255, 255, 0); static uint32_t g_gateway = Ipv4Addr(10, 0, 68, 1); + static uint32_t g_dnsServer = Ipv4Addr(10, 0, 68, 1); uint32_t GetIpAddress() { return g_ipAddress; } void SetIpAddress(uint32_t ip) { g_ipAddress = ip; } @@ -22,6 +23,9 @@ namespace Net { uint32_t GetGateway() { return g_gateway; } void SetGateway(uint32_t gw) { g_gateway = gw; } + uint32_t GetDnsServer() { return g_dnsServer; } + void SetDnsServer(uint32_t dns) { g_dnsServer = dns; } + bool IsLocalSubnet(uint32_t destIp) { return (destIp & g_subnetMask) == (g_ipAddress & g_subnetMask); } diff --git a/kernel/src/Net/NetConfig.hpp b/kernel/src/Net/NetConfig.hpp index e4e1f97..c70d3a2 100644 --- a/kernel/src/Net/NetConfig.hpp +++ b/kernel/src/Net/NetConfig.hpp @@ -27,6 +27,10 @@ namespace Net { uint32_t GetGateway(); void SetGateway(uint32_t gw); + // Get/set the DNS server (network byte order) + uint32_t GetDnsServer(); + void SetDnsServer(uint32_t dns); + // Check if a destination IP is on the local subnet bool IsLocalSubnet(uint32_t destIp); diff --git a/kernel/src/Net/Tcp.cpp b/kernel/src/Net/Tcp.cpp index da2fe37..65d835b 100644 --- a/kernel/src/Net/Tcp.cpp +++ b/kernel/src/Net/Tcp.cpp @@ -255,9 +255,6 @@ namespace Net::Tcp { // Send ACK SendSegment(conn, FLAG_ACK, nullptr, 0); - - KernelLogStream(INFO, "Net") << "TCP connection established to port " - << base::dec << (uint64_t)conn->RemotePort; } } break; diff --git a/kernel/src/Terminal/Terminal.cpp b/kernel/src/Terminal/Terminal.cpp index 959ce25..f0fddd2 100644 --- a/kernel/src/Terminal/Terminal.cpp +++ b/kernel/src/Terminal/Terminal.cpp @@ -5,16 +5,131 @@ */ #include "Terminal.hpp" + +#define FLANTERM_IN_FLANTERM #include "../Libraries/flanterm/src/flanterm_backends/fb.h" #include "../Libraries/flanterm/src/flanterm.h" #include "../Libraries/String.hpp" +#include "../Libraries/Memory.hpp" #include namespace Kt { flanterm_context *ctx; std::size_t g_terminal_width = 0; + // Maximum grid cells allocated at init (scale 1,1). Used to validate + // that a requested scale does not exceed the original buffer capacity. + static std::size_t g_max_grid_cells = 0; + + // Custom plot_char that works for any font_scale_x/y >= 1. + // This is the same algorithm as flanterm's plot_char_scaled_uncanvas + // but lives outside fb.c so we can install it after rescaling. + static void plot_char_universal(struct flanterm_context *_ctx, + struct flanterm_fb_char *c, + size_t x, size_t y) { + struct flanterm_fb_context *fbctx = (struct flanterm_fb_context *)_ctx; + + if (x >= _ctx->cols || y >= _ctx->rows) { + return; + } + + uint32_t default_bg = fbctx->default_bg; + uint32_t bg = c->bg == 0xffffffff ? default_bg : c->bg; + uint32_t fg = c->fg == 0xffffffff ? fbctx->default_fg : c->fg; + + x = fbctx->offset_x + x * fbctx->glyph_width; + y = fbctx->offset_y + y * fbctx->glyph_height; + + bool *glyph = &fbctx->font_bool[c->c * fbctx->font_height * fbctx->font_width]; + + // Only ROTATE_0 is used in ZenithOS + volatile uint32_t *dest = fbctx->framebuffer + x + y * (fbctx->pitch / 4); + size_t stride = fbctx->pitch / 4; + + for (size_t gy = 0; gy < fbctx->glyph_height; gy++) { + size_t fy = gy / fbctx->font_scale_y; + volatile uint32_t *fb_line = dest; + bool *glyph_pointer = glyph + (fy * fbctx->font_width); + for (size_t fx = 0; fx < fbctx->font_width; fx++) { + for (size_t i = 0; i < fbctx->font_scale_x; i++) { + *fb_line = *glyph_pointer ? fg : bg; + fb_line++; + } + glyph_pointer++; + } + dest += stride; + } + } + + void Rescale(std::size_t scale_x, std::size_t scale_y) { + if (scale_x == 0) scale_x = 1; + if (scale_y == 0) scale_y = 1; + + struct flanterm_fb_context *fbctx = (struct flanterm_fb_context *)ctx; + + // Calculate new dimensions + size_t new_glyph_w = fbctx->font_width * scale_x; + size_t new_glyph_h = fbctx->font_height * scale_y; + size_t new_cols = fbctx->width / new_glyph_w; + size_t new_rows = fbctx->height / new_glyph_h; + + if (new_cols == 0 || new_rows == 0) return; + + // Ensure the new grid fits within original buffer allocation + if (new_cols * new_rows > g_max_grid_cells) return; + + // Update scale and glyph dimensions + fbctx->font_scale_x = scale_x; + fbctx->font_scale_y = scale_y; + fbctx->glyph_width = new_glyph_w; + fbctx->glyph_height = new_glyph_h; + + // Update terminal grid dimensions + ctx->cols = new_cols; + ctx->rows = new_rows; + + // Center the text area + fbctx->offset_x = (fbctx->width % new_glyph_w) / 2; + fbctx->offset_y = (fbctx->height % new_glyph_h) / 2; + + // Install our universal plot_char + fbctx->plot_char = plot_char_universal; + + // Reinitialize grid data (reuse existing buffers) + for (size_t i = 0; i < new_rows * new_cols; i++) { + fbctx->grid[i].c = ' '; + fbctx->grid[i].fg = fbctx->text_fg; + fbctx->grid[i].bg = fbctx->text_bg; + } + + fbctx->queue_i = 0; + memset(fbctx->queue, 0, new_rows * new_cols * sizeof(struct flanterm_fb_queue_item)); + memset(fbctx->map, 0, new_rows * new_cols * sizeof(struct flanterm_fb_queue_item *)); + + // Clear the framebuffer + for (size_t y = 0; y < fbctx->height; y++) { + volatile uint32_t *row = fbctx->framebuffer + y * (fbctx->pitch / 4); + for (size_t x = 0; x < fbctx->width; x++) { + row[x] = fbctx->default_bg; + } + } + + // Reset terminal state and refresh + flanterm_context_reinit(ctx); + flanterm_full_refresh(ctx); + } + + std::size_t GetFontScaleX() { + struct flanterm_fb_context *fbctx = (struct flanterm_fb_context *)ctx; + return fbctx->font_scale_x; + } + + std::size_t GetFontScaleY() { + struct flanterm_fb_context *fbctx = (struct flanterm_fb_context *)ctx; + return fbctx->font_scale_y; + } + void UpdatePanelBar(CString panelText) { kout << "\033[s"; kout << "\033[H"; @@ -48,13 +163,20 @@ namespace Kt { NULL, NULL, NULL, NULL, NULL, 0, 0, 1, - 0, 0, + 1, 1, 0, FLANTERM_FB_ROTATE_0 ); g_terminal_width = width; + // Store max grid cells for rescale buffer bounds checking + g_max_grid_cells = ctx->cols * ctx->rows; + + // Install our universal plot_char so rescaling works at any scale + struct flanterm_fb_context *fbctx = (struct flanterm_fb_context *)ctx; + fbctx->plot_char = plot_char_universal; + UpdatePanelBar("Initializing..."); kout << "\n\n\n"; } @@ -73,4 +195,4 @@ namespace Kt { } } -}; \ No newline at end of file +}; diff --git a/kernel/src/Terminal/Terminal.hpp b/kernel/src/Terminal/Terminal.hpp index 829b444..a0fadb3 100644 --- a/kernel/src/Terminal/Terminal.hpp +++ b/kernel/src/Terminal/Terminal.hpp @@ -44,6 +44,10 @@ namespace Kt void UpdatePanelBar(const char* panelText); + void Rescale(std::size_t font_scale_x, std::size_t font_scale_y); + std::size_t GetFontScaleX(); + std::size_t GetFontScaleY(); + inline base base_custom(int custom) { return (base)custom; diff --git a/programs/GNUmakefile b/programs/GNUmakefile index 149cf99..7505807 100644 --- a/programs/GNUmakefile +++ b/programs/GNUmakefile @@ -56,9 +56,9 @@ BINDIR := bin # Discover all programs (each subdirectory under src/ is a program). PROGRAMS := $(notdir $(wildcard src/*)) -# Games are built separately (doom has its own Makefile). -GAMES := doom -SYSTEM_PROGRAMS := $(filter-out $(GAMES),$(PROGRAMS)) +# Programs with custom Makefiles (built separately). +CUSTOM_BUILDS := doom fetch wiki +SYSTEM_PROGRAMS := $(filter-out $(CUSTOM_BUILDS),$(PROGRAMS)) # Build targets: system programs go to bin/os/, games are handled separately. TARGETS := $(addprefix $(BINDIR)/os/,$(addsuffix .elf,$(SYSTEM_PROGRAMS))) @@ -76,12 +76,31 @@ WWWDIR := www WWWSRC := $(wildcard $(WWWDIR)/*.*) WWWDST := $(patsubst $(WWWDIR)/%,$(BINDIR)/www/%,$(WWWSRC)) +# CA certificate bundle. +CA_CERTS := $(BINDIR)/etc/ca-certificates.crt + # Home directory placeholder. HOMEKEEP := $(BINDIR)/home/.keep -.PHONY: all clean doom +.PHONY: all clean doom fetch wiki bearssl libc -all: $(TARGETS) doom $(GAME_DATA) $(MANDST) $(WWWDST) $(HOMEKEEP) +all: bearssl libc $(TARGETS) fetch wiki doom $(GAME_DATA) $(MANDST) $(WWWDST) $(CA_CERTS) $(HOMEKEEP) + +# Build BearSSL static library. +bearssl: + $(MAKE) -C lib/bearssl + +# Build shared libc static library. +libc: + $(MAKE) -C lib/libc + +# Build fetch via its own Makefile (depends on bearssl and libc). +fetch: bearssl libc + $(MAKE) -C src/fetch + +# Build wiki via its own Makefile (depends on bearssl and libc). +wiki: bearssl libc + $(MAKE) -C src/wiki # Build doom via its own Makefile. doom: @@ -102,6 +121,11 @@ $(BINDIR)/www/%: $(WWWDIR)/% mkdir -p $(BINDIR)/www cp $< $@ +# Copy CA certificate bundle into bin/etc/. +$(CA_CERTS): data/ca-certificates.crt + mkdir -p $(BINDIR)/etc + cp $< $@ + # Create empty home directory with a keep file. $(HOMEKEEP): mkdir -p $(BINDIR)/home @@ -115,4 +139,7 @@ $(BINDIR)/os/%.elf: src/%/main.cpp link.ld GNUmakefile clean: rm -rf $(BINDIR) obj + $(MAKE) -C lib/bearssl clean + $(MAKE) -C lib/libc clean + $(MAKE) -C src/fetch clean $(MAKE) -C src/doom clean diff --git a/programs/data/ca-certificates.crt b/programs/data/ca-certificates.crt new file mode 100644 index 0000000..f8a62e6 --- /dev/null +++ b/programs/data/ca-certificates.crt @@ -0,0 +1,3697 @@ +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE +AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw +CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ +BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND +VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb +qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY +HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo +G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA +lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr +IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ +0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH +k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 +4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO +m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa +cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl +uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI +KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls +ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG +AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT +VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG +CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA +cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA +QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA +7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA +cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA +QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA +czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu +aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt +aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud +DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF +BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp +D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU +JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m +AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD +vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms +tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH +7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA +h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF +d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H +pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx +CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ +WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ +BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG +Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ +yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf +BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz +WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF +tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z +374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC +IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL +mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 +wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS +MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 +ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet +UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H +YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 +LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 +RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM +LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf +77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N +JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm +fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp +6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp +1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B +9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok +RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv +uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw +CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw +FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S +Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 +MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL +DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS +QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH +sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK +Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu +SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC +MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy +v+c= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK +gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ +W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg +1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K +8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r +2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me +z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR +8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj +mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz +7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 ++XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI +0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm +UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 +LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS +k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl +7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm +btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl +urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ +fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 +n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE +76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H +9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT +4PsJYGw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl +ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr +ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr +BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM +YyRIHN8wfdVoOw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 +MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g +Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG +A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg +Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi +9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk +M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB +MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw +CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW +1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE +AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG +EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM +FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC +REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp +Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM +VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ +SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ +4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L +cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi +eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG +A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 +DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j +vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP +DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc +maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D +lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv +KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w +LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w +CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 +MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF +Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X +tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 +AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 +KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD +aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu +CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo +9H1/IISpQuQo +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM +MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx +MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 +MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD +QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z +4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv +Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ +kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs +GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln +nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh +3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD +0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy +geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 +ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB +c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI +pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS +4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs +o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ +qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw +xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM +rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 +AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR +0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY +o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 +dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE +oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 +MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc +tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd +IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC +AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw +ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m +iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF +Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ +hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P +Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE +EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV +1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t +CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR +5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw +f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 +ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK +GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU +MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI +T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz +MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF +SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh +bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z +xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ +spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 +58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR +at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll +5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq +nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK +V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ +pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO +z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn +jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ +WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF +7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli +awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u ++2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 +X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN +SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo +P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI ++pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz +znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 +eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 +YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy +r/6zcCwupvI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw +CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ +VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy +MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ +TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS +b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B +IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ ++kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK +sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA +94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B +43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx +MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP +T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 +sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL +TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 +/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp +7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz +EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt +hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP +a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot +aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg +TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV +PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv +cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL +tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd +BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT +ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL +jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS +ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy +P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 +xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d +Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN +5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe +/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z +AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ +5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB +hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV +BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT +EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR +6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X +pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC +9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV +/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf +Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z ++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w +qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah +SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC +u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf +Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq +crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB +/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl +wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM +4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV +2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna +FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ +CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK +boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke +jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL +S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb +QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl +0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB +NVOFBkpdn627G190 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw +CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu +bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ +BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s +eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK ++IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 +QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 +hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm +ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG +BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw +PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy +dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 +YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 +1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT +vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed +aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 +1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 +r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 +cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ +wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ +6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA +2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH +Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR +eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u +d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr +PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi +1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd +rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di +taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 +lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj +yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn +Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy +yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n +wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 +OV+KmalBWQewLK8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw +WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw +MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x +MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD +VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX +BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO +ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M +CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu +I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm +TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh +C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf +ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz +IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT +Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k +JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 +hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB +GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov +L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo +dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr +aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq +hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L +6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG +HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 +0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB +lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi +o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 +gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v +faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 +Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh +jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw +3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw +CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw +JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT +EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 +WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT +LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX +BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE +KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm +Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 +EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J +UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn +nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB +gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu +QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG +A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz +OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ +VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 +b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA +DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn +0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB +OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE +fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E +Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m +o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i +sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW +OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez +Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS +adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n +3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ +F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf +CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 +XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm +djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ +WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb +AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq +P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko +b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj +XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P +5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi +DrW5viSP +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMw +TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t +bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNa +Fw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv +cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDEw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLxeP0C +flfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJE +hRGnSjot6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggq +hkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg +2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liWpDVfG2XqYZpwI7UNo5uS +Um9poIyNStDuiw7LR47QjRE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMw +TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t +bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRa +Fw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv +cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDIw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/MMDAL +j2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmU +v4RDsNuESgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggq +hkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/n +ich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs73u1Z/GtMMH9ZzkXpc2AV +mkzw5l4lIhVtwodZ0LKOag== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQEL +BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi +Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1 +NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t +U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt +MDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45FtnYSk +YZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslh +suitQDy6uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0al +DrJLpA6lfO741GIDuZNqihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3Oj +WiE260f6GBfZumbCk6SP/F2krfxQapWsvCQz0b2If4b19bJzKo98rwjyGpg/qYFl +P8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/cZip8UlF1y5mO6D1cv547 +KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTifBSeolz7p +UcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/ +kQO9lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JO +Hg9O5j9ZpSPcPYeoKFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkB +Ea801M/XrmLTBQe0MXXgDW1XT2mH+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6U +CBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm45P3luG0wDQYJ +KoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6 +NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQ +nmhUQo8mUuJM3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+ +QgvfKNmwrZggvkN80V4aCRckjXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2v +trV0KnahP/t1MJ+UXjulYPPLXAziDslg+MkfFoom3ecnf+slpoq9uC02EJqxWE2a +aE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/WNyVntHKLr4W96ioD +j8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+o/E4 +Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0w +lREQKC6/oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHn +YfkUyq+Dj7+vsQpZXdxc1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVoc +icCMb3SgazNNtQEo/a2tiRc7ppqEvOuM6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQEL +BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi +Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2 +NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t +U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt +MDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3VrCLE +NQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0 +kyI9p+Kx7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1C +rWDaSWqVcN3SAOLMV2MCe5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxz +hkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2WWy09X6GDRl224yW4fKcZgBzqZUPckXk2 +LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rpM9kzXzehxfCrPfp4sOcs +n/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIfhs1w/tku +FT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5 +kQMreyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3 +wNemKfrb3vOTlycEVS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6v +wQcQeKwRoi9C8DfF8rhW3Q5iLc4tVn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs +5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7GxcJXvYXowDQYJ +KoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB +KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3 ++VGXu6TwYofF1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbyme +APnCKfWxkxlSaRosTKCL4BWaMS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3Nyq +pgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xdgSGn2rtO/+YHqP65DSdsu3BaVXoT +6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2OHG1QAk8mGEPej1WF +sQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+NmYWvt +PjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2d +lklyALKrdVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670 +v64fG9PiO/yzcnMcmyiQiRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17O +rg3bhzjlP1v9mxnhMUF6cKojawHhRUzNlM47ni3niAIi9G7oyOzWPPO5std3eqx7 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 +NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS +zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 +QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ +VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW +wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV +dWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQczswBEhb2U14LnNLyaHcZjANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEJSIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA4NTYzMVoXDTM4MDUw +OTA4NTYzMFowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAK7/CVmRgApKaOYkP7in5Mg6CjoWzckjYaCTcfKr +i3OPoGdlYNJUa2NRb0kz4HIHE304zQaSBylSa053bATTlfrdTIzZXcFhfUvnKLNE +gXtRr90zsWh81k5M/itoucpmacTsXld/9w3HnDY25QdgrMBM6ghs7wZ8T1soegj8 +k12b9py0i4a6Ibn08OhZWiihNIQaJZG2tY/vsvmA+vk9PBFy2OMvhnbFeSzBqZCT +Rphny4NqoFAjpzv2gTng7fC5v2Xx2Mt6++9zA84A9H3X4F07ZrjcjrqDy4d2A/wl +2ecjbwb9Z/Pg/4S8R7+1FhhGaRTMBffb00msa8yr5LULQyReS2tNZ9/WtT5PeB+U +cSTq3nD88ZP+npNa5JRal1QMNXtfbO4AHyTsA7oC9Xb0n9Sa7YUsOCIvx9gvdhFP +/Wxc6PWOJ4d/GUohR5AdeY0cW/jPSoXk7bNbjb7EZChdQcRurDhaTyN0dKkSw/bS +uREVMweR2Ds3OmMwBtHFIjYoYiMQ4EbMl6zWK11kJNXuHA7e+whadSr2Y23OC0K+ +0bpwHJwh5Q8xaRfX/Aq03u2AnMuStIv13lmiWAmlY0cL4UEyNEHZmrHZqLAbWt4N +DfTisl01gLmB1IRpkQLLddCNxbU9CZEJjxShFHR5PtbJFR2kWVki3PaKRT08EtY+ +XTIvAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUZ5Dw1t61 +GNVGKX5cq/ieCLxklRAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfYnJfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQA097N3U9swFrktpSHxQCF16+tI +FoE9c+CeJyrrd6kTpGoKWloUMz1oH4Guaf2Mn2VsNELZLdB/eBaxOqwjMa1ef67n +riv6uvw8l5VAk1/DLQOj7aRvU9f6QA4w9QAgLABMjDu0ox+2v5Eyq6+SmNMW5tTR +VFxDWy6u71cqqLRvpO8NVhTaIasgdp4D/Ca4nj8+AybmTNudX0KEPUUDAxxZiMrc +LmEkWqTqJwtzEr5SswrPMhfiHocaFpVIbVrg0M8JkiZmkdijYQ6qgYF/6FKC0ULn +4B0Y+qSFNueG4A3rvNTJ1jxD8V1Jbn6Bm2m1iWKPiFLY1/4nwSPFyysCu7Ff/vtD +hQNGvl3GyiEm/9cCnnRK3PgTFbGBVzbLZVzRHTF36SXDw7IyN9XxmAnkbWOACKsG +koHU6XCPpz+y7YaMgmo1yEJagtFSGkUPFaUA8JR7ZSdXOUPPfH/mvTWze/EZTN46 +ls/pdu4D58JDUjxqgejBWoC9EV2Ta/vH5mQ/u2kc6d0li690yVRAysuTEwrt+2aS +Ecr1wPrYg1UDfNPFIkZ1cGt5SAYqgpq/5usWDiJFAbzdNpQ0qTUmiteXue4Icr80 +knCDgKs4qllo3UCkGJCy89UDyibK79XH4I9TjvAA46jtn/mtd+ArY0+ew+43u3gJ +hJ65bvspmZDogNOfJA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw +CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS +VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 +NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG +A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB +BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC +/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD +wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 +OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g +PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf +Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l +dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 +c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO +PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA +y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb +gfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFqTCCA5GgAwIBAgIQaSYJfoBLTKCnjHhiU19abzANBgkqhkiG9w0BAQ0FADBI +MQswCQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlE +LVRSVVNUIEVWIFJvb3QgQ0EgMiAyMDIzMB4XDTIzMDUwOTA5MTAzM1oXDTM4MDUw +OTA5MTAzMlowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEi +MCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDIgMjAyMzCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBANiOo4mAC7JXUtypU0w3uX9jFxPvp1sjW2l1sJkK +F8GLxNuo4MwxusLyzV3pt/gdr2rElYfXR8mV2IIEUD2BCP/kPbOx1sWy/YgJ25yE +7CUXFId/MHibaljJtnMoPDT3mfd/06b4HEV8rSyMlD/YZxBTfiLNTiVR8CUkNRFe +EMbsh2aJgWi6zCudR3Mfvc2RpHJqnKIbGKBv7FD0fUDCqDDPvXPIEysQEx6Lmqg6 +lHPTGGkKSv/BAQP/eX+1SH977ugpbzZMlWGG2Pmic4ruri+W7mjNPU0oQvlFKzIb +RlUWaqZLKfm7lVa/Rh3sHZMdwGWyH6FDrlaeoLGPaxK3YG14C8qKXO0elg6DpkiV +jTujIcSuWMYAsoS0I6SWhjW42J7YrDRJmGOVxcttSEfi8i4YHtAxq9107PncjLgc +jmgjutDzUNzPZY9zOjLHfP7KgiJPvo5iR2blzYfi6NUPGJ/lBHJLRjwQ8kTCZFZx +TnXonMkmdMV9WdEKWw9t/p51HBjGGjp82A0EzM23RWV6sY+4roRIPrN6TagD4uJ+ +ARZZaBhDM7DS3LAaQzXupdqpRlyuhoFBAUp0JuyfBr/CBTdkdXgpaP3F9ev+R/nk +hbDhezGdpn9yo7nELC7MmVcOIQxFAZRl62UJxmMiCzNJkkg8/M3OsD6Onov4/knF +NXJHAgMBAAGjgY4wgYswDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqvyREBuH +kV8Wub9PS5FeAByxMoAwDgYDVR0PAQH/BAQDAgEGMEkGA1UdHwRCMEAwPqA8oDqG +OGh0dHA6Ly9jcmwuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3RfZXZfcm9vdF9jYV8y +XzIwMjMuY3JsMA0GCSqGSIb3DQEBDQUAA4ICAQCTy6UfmRHsmg1fLBWTxj++EI14 +QvBukEdHjqOSMo1wj/Zbjb6JzkcBahsgIIlbyIIQbODnmaprxiqgYzWRaoUlrRc4 +pZt+UPJ26oUFKidBK7GB0aL2QHWpDsvxVUjY7NHss+jOFKE17MJeNRqrphYBBo7q +3C+jisosketSjl8MmxfPy3MHGcRqwnNU73xDUmPBEcrCRbH0O1P1aa4846XerOhU +t7KR/aypH/KH5BfGSah82ApB9PI+53c0BFLd6IHyTS9URZ0V4U/M5d40VxDJI3IX +cI1QcB9WbMy5/zpaT2N6w25lBx2Eof+pDGOJbbJAiDnXH3dotfyc1dZnaVuodNv8 +ifYbMvekJKZ2t0dT741Jj6m2g1qllpBFYfXeA08mD6iL8AOWsKwV0HFaanuU5nCT +2vFp4LJiTZ6P/4mdm13NRemUAiKN4DV/6PEEeXFsVIP4M7kFMhtYVRFP0OUnR3Hs +7dpn1mKmS00PaaLJvOwiS5THaJQXfuKOKD62xur1NGyfN4gHONuGcfrNlUhDbqNP +gofXNJhuS5N5YHVpD/Aa1VP6IQzCP+k/HxiMkl14p3ZnGbuy6n/pcAlWVqOwDAst +Nl7F6cTVg8uGF5csbBNvh1qvSaYd2804BC5f4ko1Di1L+KIkBI3Y4WNeApI02phh +XBxvWHZks/wCuPWdCg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp +Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 +MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ +bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS +7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp +0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS +B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 +BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ +LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 +DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN +MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT +HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN +NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs +IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ +ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 +2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp +wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM +pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD +nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po +sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx +Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd +Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX +KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe +XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL +tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv +TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN +AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H +PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF +O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ +REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik +AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv +/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ +p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw +MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF +qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK +ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw +CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE +YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB +IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf +e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C +cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O +BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO +PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw +hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG +XSaQpYXFuXqUPoeovQA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 +MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w +HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj +Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj +TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u +KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj +qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm +MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 +ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP +zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk +L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC +jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA +HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC +AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm +DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 +COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry +L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf +JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg +IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io +2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV +09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ +XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq +T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe +MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG +A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw +FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx +MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u +aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b +RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z +YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 +QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw +yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ +BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ +SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH +r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 +4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me +dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw +q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 +nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu +H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC +XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd +6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf ++I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi +kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 +wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB +TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C +MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn +4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I +aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy +qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo +27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w +Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw +TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl +qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH +szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 +Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk +MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p +aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN +VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb +C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy +h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 +7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J +ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef +MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ +Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT +6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ +0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm +2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb +bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw +CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU +MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw +MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp +Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt +nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY +6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu +MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k +RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg +f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV ++3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo +dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa +G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq +gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID +AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H +vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC +B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u +NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg +yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev +HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 +xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR +TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg +JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV +7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl +6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G +jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 +4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 +VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm +ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD +VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG +A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw +WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz +IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi +QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR +HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D +9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 +p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD +VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw +MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g +UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT +BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx +uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV +HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ ++wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 +bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg +MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh +bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx +MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET +MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI +xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k +ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD +aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw +LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw +1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX +k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 +SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h +bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n +WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY +rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce +MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu +bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt +Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 +55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj +vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf +cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz +oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp +nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs +pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v +JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R +8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 +5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx +CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD +ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw +MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex +HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq +R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd +yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ +7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 ++RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA +MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD +VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy +MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt +c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ +OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG +vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud +316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo +0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE +y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF +zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE ++cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN +I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs +x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa +ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC +4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 +7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti +2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk +pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF +FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt +rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk +ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 +u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP +4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 +N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 +vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw +CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh +cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v +dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG +A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg +Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 +KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y +STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD +AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw +SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN +nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs +MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg +Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL +MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv +b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l +mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE +4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv +a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M +pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw +Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b +LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY +AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB +AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq +E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr +W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ +CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU +X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 +f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja +H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP +JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P +zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt +jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 +/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT +BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 +aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW +xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU +63ZTGI0RmLo= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN +BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl +bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv +b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ +BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj +YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 +MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 +dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg +QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa +jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi +C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep +lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof +TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix +DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k +IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT +N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v +dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG +A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh +ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx +QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA +4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 +AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 +4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C +ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV +9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD +gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 +Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq +NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko +LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd +ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I +XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI +M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot +9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V +Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea +j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh +X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ +l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf +bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 +pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK +e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 +vm9qp/UsQu0yrbYhnr68 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa +Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 +YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw +qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv +Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 +lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz +Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ +KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK +FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj +HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr +y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ +/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM +a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 +fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG +SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc +SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza +ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc +XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg +iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho +L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF +Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr +kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ +vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU +YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +mpv0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw +CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg +R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 +MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT +ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW ++1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 +ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI +zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW +tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 +/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD +VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw +MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy +b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR +ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb +hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 +FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV +L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB +iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl +MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 +IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N +aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ +Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 +ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 +HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm +gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ +jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc +aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG +YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 +W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K +UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH ++FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q +W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC +LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC +gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 +tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh +SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 +TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 +pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR +xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp +GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 +dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN +AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB +RA+GsCyRxj3qrg+E +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM +BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG +T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx +CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD +b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA +iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH +38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE +HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz +kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP +szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq +vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf +nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG +YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo +0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a +CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K +AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I +36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN +qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj +cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm ++LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL +hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe +lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 +p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 +piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR +LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX +5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO +dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul +9XXeifdy +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw +CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 +bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg +Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ +BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu +ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS +b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni +eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W +p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T +rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV +57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg +Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx +NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv +bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA +VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku +WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX +5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ +ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg +h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV +BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE +CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy +MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G +A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD +DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq +M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf +OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa +4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 +HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR +aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA +b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ +Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV +PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO +pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu +UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY +MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 +9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW +s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 +Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg +cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM +79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz +/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt +ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm +Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK +QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ +w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi +S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 +mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC +VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T +U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz +WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 +b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS +b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI +7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg +CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud +EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD +VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T +kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ +gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE +BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK +DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz +OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv +dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN +AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R +xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX +qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC +C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 +6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh +/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF +YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E +JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc +US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 +ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm ++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi +M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV +HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G +A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV +cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc +Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs +PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ +q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 +cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr +a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I +H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y +K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu +nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf +oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY +Ic2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw +CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT +U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 +MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh +dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm +acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN +SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME +GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW +uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp +15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN +b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO +MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD +DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX +DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw +b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP +L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY +t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins +S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 +PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO +L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 +R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w +dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS ++YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS +d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG +AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f +gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j +BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z +NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt +hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM +QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf +R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ +DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW +P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy +lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq +bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w +AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q +r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji +Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU +98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 +ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw +NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg +Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN +QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT +3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw +3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 +3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 +BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN +XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF +AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw +8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG +nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP +oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy +d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg +LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw +CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T +ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN +MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG +A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT +ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC +WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ +6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B +Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa +qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q +4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD +Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw +HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY +MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp +YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa +ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz +SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf +iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X +ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 +IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS +VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE +SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu ++Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt +8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L +HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt +zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P +AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c +mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ +YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 +gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA +Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB +JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX +DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui +TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 +dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 +LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp +0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY +QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw +NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF +KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt +p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd +J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur +FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J +hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K +h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF +AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld +mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ +mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA +8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV +55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ +yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM +BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u +LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw +NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD +eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS +b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ +FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg +vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy +6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo +/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J +kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ +0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib +y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac +18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs +0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB +SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL +ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk +86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E +rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib +ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT +zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS +DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 +2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo +FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy +K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 +dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl +Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB +365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c +JRNItX+S +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw +UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM +dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy +NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl +cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 +IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 +wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR +ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT +9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp +4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 +bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT +AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD +VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx +NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT +HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 +IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi +AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl +dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK +ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu +9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O +be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx +GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp +bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w +KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 +BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy +dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG +EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll +IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU +QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT +TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg +LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 +a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr +LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr +N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X +YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ +iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f +AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH +V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf +IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 +lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c +8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf +lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ +MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 +IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 +WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO +LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P +40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF +avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ +34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i +JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu +j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf +Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP +2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA +S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA +oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC +kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW +5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd +BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB +AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t +tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn +68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn +TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t +RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx +f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI +Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz +8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 +NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX +xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 +t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw +CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH +bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw +MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx +JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE +AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O +tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP +f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA +MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di +z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn +27iQ7t0l +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj +MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 +eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy +MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC +REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG +A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 +cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV +cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA +U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 +Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug +BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy +8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J +co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg +8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 +rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 +mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg ++y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX +gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 +p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ +pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm +9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw +M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd +GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ +CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t +xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ +w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK +L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj +X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q +ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm +dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx +CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE +AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 +NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ +MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq +AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 +vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 +lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD +n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT +7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o +6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC +TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 +WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R +DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI +pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj +YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy +rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi +0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM +A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS +SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K +TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF +6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er +3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt +Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT +VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW +ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA +rBPuUBQemMc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM +BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp +ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe +Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw +IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU +cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS +T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK +AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 +nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep +qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA +yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs +hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX +zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv +kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT +f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA +uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB +o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih +MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E +BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 +wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 +XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 +JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j +ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV +VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx +xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on +AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d +7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj +gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV ++Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo +FGWsJwt0ivKH +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw +WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs +IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y +MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD +VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz +dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx +s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw +LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD +pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE +AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR +UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj +/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw +CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x +ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 +c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx +OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI +SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn +swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu +7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 +1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW +80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP +JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l +RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw +hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 +coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc +BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n +twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud +DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W +0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe +uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q +lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB +aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE +sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT +MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe +qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh +VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 +h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 +EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK +yeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG +SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN +FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w +DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw +CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh +DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf +BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 +YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x +NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G +A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 +d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF +Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB +BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ +j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF +1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G +A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 +AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC +MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu +Sw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL +BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg +Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv +b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG +EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u +IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ +n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd +2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF +VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ +GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF +li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU +r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 +eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb +MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg +jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB +7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW +5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE +ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 +90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z +xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu +QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 +FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH +22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP +xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn +dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 +Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b +nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ +CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH +u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj +d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF +eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx +MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV +BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog +D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS +sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop +O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk +sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi +c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj +VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz +KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ +TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G +sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs +1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD +fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN +l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ +VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 +c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp +4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s +t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj +2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO +vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C +xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx +cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM +fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 +MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH +bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x +CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds +b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr +b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 +kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm +VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R +VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc +C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj +tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY +D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv +j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl +NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 +iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP +O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV +ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj +L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl +1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU +b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV +PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj +y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb +EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg +DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI ++Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy +YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX +UB+K+wb1whnw0A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL +MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl +eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT +JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx +MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg +VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo +I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng +o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G +A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB +zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW +RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB +iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl +cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV +BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw +MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV +BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK +AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B +3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY +tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ +Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 +VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT +79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 +c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT +Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l +c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee +UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE +Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G +A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF +Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO +VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 +ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs +8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR +iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze +Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ +XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ +qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB +VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB +L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG +jjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV +BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g +Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ +BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ +R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF +dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw +vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ +uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp +n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs +cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW +xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P +rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF +DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx +DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy +LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C +eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ +d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq +kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl +qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 +OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c +NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk +ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO +pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj +03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk +PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE +1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX +QRBdJ3NghVdJIgc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV +BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk +LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv +b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ +BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg +THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v +IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv +xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H +Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB +eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo +jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ ++efcMQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG +EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx +IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND +IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci +MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti +sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O +BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB +Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c +3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J +0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG +EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo +bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ +TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s +b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 +WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS +fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB +zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq +hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB +CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD ++JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG +A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg +SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw +MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln +biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v +dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ +BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ +HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH +3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH +GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c +xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 +aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq +TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 +/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 +kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG +YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT ++xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo +WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD +VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU +ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH +MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO +MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv +Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz +f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO +8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq +d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM +tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt +Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB +o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x +PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM +wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d +GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH +6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby +RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw +RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY +BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz +MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u +LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 +v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd +e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw +V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA +AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG +GJTO +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL +BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x +FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx +MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s +THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc +IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU +AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ +GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 +8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH +flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt +J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim +0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN +pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ +UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW +OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB +AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet +8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j +bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM +Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv +TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS +S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr +I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 +b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB +UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P +Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven +sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= +-----END CERTIFICATE----- diff --git a/programs/include/Api/Syscall.hpp b/programs/include/Api/Syscall.hpp index e87d038..9c00699 100644 --- a/programs/include/Api/Syscall.hpp +++ b/programs/include/Api/Syscall.hpp @@ -54,6 +54,9 @@ namespace Zenith { static constexpr uint64_t SYS_RECVFROM = 40; static constexpr uint64_t SYS_FWRITE = 41; static constexpr uint64_t SYS_FCREATE = 42; + static constexpr uint64_t SYS_TERMSCALE = 43; + static constexpr uint64_t SYS_RESOLVE = 44; + static constexpr uint64_t SYS_GETRANDOM = 45; static constexpr int SOCK_TCP = 1; static constexpr int SOCK_UDP = 2; @@ -64,6 +67,7 @@ namespace Zenith { uint32_t gateway; // network byte order uint8_t macAddress[6]; uint8_t _pad[2]; + uint32_t dnsServer; // network byte order }; struct DateTime { diff --git a/programs/include/zenith/syscall.h b/programs/include/zenith/syscall.h index f770d22..a07486b 100644 --- a/programs/include/zenith/syscall.h +++ b/programs/include/zenith/syscall.h @@ -165,6 +165,11 @@ namespace zenith { return (int32_t)syscall2(Zenith::SYS_PING, (uint64_t)ip, (uint64_t)timeoutMs); } + // DNS resolve: returns IP in network byte order, or 0 on failure + inline uint32_t resolve(const char* hostname) { + return (uint32_t)syscall1(Zenith::SYS_RESOLVE, (uint64_t)hostname); + } + // Network configuration inline void get_netcfg(Zenith::NetCfg* out) { syscall1(Zenith::SYS_GETNETCFG, (uint64_t)out); } inline int set_netcfg(const Zenith::NetCfg* cfg) { return (int)syscall1(Zenith::SYS_SETNETCFG, (uint64_t)cfg); } @@ -222,9 +227,24 @@ namespace zenith { if (rows) *rows = (int)(r >> 32); } + inline void termscale(int scale_x, int scale_y) { + syscall2(Zenith::SYS_TERMSCALE, (uint64_t)scale_x, (uint64_t)scale_y); + } + + inline void get_termscale(int* scale_x, int* scale_y) { + uint64_t r = (uint64_t)syscall2(Zenith::SYS_TERMSCALE, 0, 0); + if (scale_x) *scale_x = (int)(r & 0xFFFFFFFF); + if (scale_y) *scale_y = (int)(r >> 32); + } + // Timekeeping (wall-clock) inline void gettime(Zenith::DateTime* out) { syscall1(Zenith::SYS_GETTIME, (uint64_t)out); } + // Random number generation + inline int64_t getrandom(void* buf, uint32_t len) { + return syscall2(Zenith::SYS_GETRANDOM, (uint64_t)buf, (uint64_t)len); + } + // Power management [[noreturn]] inline void reset() { syscall0(Zenith::SYS_RESET); diff --git a/programs/lib/bearssl b/programs/lib/bearssl new file mode 160000 index 0000000..3d9be2f --- /dev/null +++ b/programs/lib/bearssl @@ -0,0 +1 @@ +Subproject commit 3d9be2f60b7764e46836514bcd6e453abdfa864a diff --git a/programs/lib/libc/Makefile b/programs/lib/libc/Makefile new file mode 100644 index 0000000..0f1d29b --- /dev/null +++ b/programs/lib/libc/Makefile @@ -0,0 +1,64 @@ +# Makefile for shared libc static library on ZenithOS +# Copyright (c) 2025-2026 Daniel Hammer + +MAKEFLAGS += -rR +.SUFFIXES: + +# ---- Toolchain ---- + +TOOLCHAIN_PREFIX := $(shell cd ../../.. && pwd)/toolchain/local/bin/x86_64-elf- +ifneq ($(wildcard $(TOOLCHAIN_PREFIX)gcc),) + CC := $(TOOLCHAIN_PREFIX)gcc + AR := $(TOOLCHAIN_PREFIX)ar +else + CC := gcc + AR := ar +endif + +# ---- Paths ---- + +LIBC_INC := ../../include/libc +OBJDIR := obj + +# ---- Compiler flags ---- + +CFLAGS := \ + -std=gnu11 \ + -g -O2 -pipe \ + -Wall \ + -Wno-unused-parameter \ + -nostdinc \ + -ffreestanding \ + -fno-stack-protector \ + -fno-stack-check \ + -fno-PIC \ + -ffunction-sections \ + -fdata-sections \ + -m64 \ + -march=x86-64 \ + -mno-80387 \ + -mno-mmx \ + -mno-sse \ + -mno-sse2 \ + -mno-red-zone \ + -mcmodel=small \ + -isystem $(LIBC_INC) \ + -isystem $(shell $(CC) -print-file-name=include) + +# ---- Target ---- + +TARGET := liblibc.a + +.PHONY: all clean + +all: $(TARGET) + +$(TARGET): $(OBJDIR)/libc.o + $(AR) rcs $@ $^ + +$(OBJDIR)/libc.o: libc.c Makefile + @mkdir -p $(OBJDIR) + $(CC) $(CFLAGS) -c $< -o $@ + +clean: + rm -rf $(OBJDIR) $(TARGET) diff --git a/programs/lib/libc/libc.c b/programs/lib/libc/libc.c new file mode 100644 index 0000000..dd7c81d --- /dev/null +++ b/programs/lib/libc/libc.c @@ -0,0 +1,662 @@ +/* + * libc.c + * Minimal C standard library for ZenithOS userspace programs + * Based on the proven libc from the DOOM port. + * Copyright (c) 2025-2026 Daniel Hammer +*/ + +#include +#include +#include +#include + +/* ======================================================================== + Raw syscall wrappers (C versions matching kernel ABI) + ======================================================================== */ + +static inline long _zos_syscall0(long nr) { + long ret; + __asm__ volatile("syscall" : "=a"(ret) : "a"(nr) + : "rcx", "r11", "rdi", "rsi", "rdx", "r8", "r9", "r10", "memory"); + return ret; +} + +static inline long _zos_syscall1(long nr, long a1) { + long ret; + __asm__ volatile( + "mov %[a1], %%rdi\n\t" + "syscall" + : "=a"(ret) + : "a"(nr), [a1] "r"(a1) + : "rcx", "r11", "rdi", "rsi", "rdx", "r8", "r9", "r10", "memory"); + return ret; +} + +static inline long _zos_syscall4(long nr, long a1, long a2, long a3, long a4) { + long ret; + __asm__ volatile( + "mov %[a1], %%rdi\n\t" + "mov %[a2], %%rsi\n\t" + "mov %[a3], %%rdx\n\t" + "mov %[a4], %%r10\n\t" + "syscall" + : "=a"(ret) + : "a"(nr), [a1] "r"(a1), [a2] "r"(a2), [a3] "r"(a3), [a4] "r"(a4) + : "rcx", "r11", "rdi", "rsi", "rdx", "r8", "r9", "r10", "memory"); + return ret; +} + +/* Syscall numbers */ +#define SYS_EXIT 0 +#define SYS_PRINT 4 +#define SYS_PUTCHAR 5 +#define SYS_ALLOC 11 +#define SYS_FREE 12 + +/* ======================================================================== + errno + ======================================================================== */ + +int errno = 0; + +/* ======================================================================== + string.h functions + ======================================================================== */ + +void *memcpy(void *dest, const void *src, size_t n) { + unsigned char *d = (unsigned char *)dest; + const unsigned char *s = (const unsigned char *)src; + for (size_t i = 0; i < n; i++) + d[i] = s[i]; + return dest; +} + +void *memset(void *s, int c, size_t n) { + unsigned char *p = (unsigned char *)s; + for (size_t i = 0; i < n; i++) + p[i] = (unsigned char)c; + return s; +} + +void *memmove(void *dest, const void *src, size_t n) { + unsigned char *d = (unsigned char *)dest; + const unsigned char *s = (const unsigned char *)src; + if (s < d && d < s + n) { + for (size_t i = n; i > 0; i--) + d[i - 1] = s[i - 1]; + } else { + for (size_t i = 0; i < n; i++) + d[i] = s[i]; + } + return dest; +} + +int memcmp(const void *s1, const void *s2, size_t n) { + const unsigned char *a = (const unsigned char *)s1; + const unsigned char *b = (const unsigned char *)s2; + for (size_t i = 0; i < n; i++) { + if (a[i] != b[i]) + return a[i] < b[i] ? -1 : 1; + } + return 0; +} + +size_t strlen(const char *s) { + size_t len = 0; + while (s[len]) len++; + return len; +} + +int strcmp(const char *a, const char *b) { + while (*a && *a == *b) { a++; b++; } + return (unsigned char)*a - (unsigned char)*b; +} + +int strncmp(const char *a, const char *b, size_t n) { + for (size_t i = 0; i < n; i++) { + if (a[i] != b[i] || a[i] == 0) + return (unsigned char)a[i] - (unsigned char)b[i]; + } + return 0; +} + +char *strcpy(char *dest, const char *src) { + char *d = dest; + while ((*d++ = *src++)); + return dest; +} + +char *strncpy(char *dest, const char *src, size_t n) { + size_t i; + for (i = 0; i < n && src[i]; i++) + dest[i] = src[i]; + for (; i < n; i++) + dest[i] = '\0'; + return dest; +} + +char *strcat(char *dest, const char *src) { + char *d = dest + strlen(dest); + while ((*d++ = *src++)); + return dest; +} + +char *strncat(char *dest, const char *src, size_t n) { + char *d = dest + strlen(dest); + size_t i; + for (i = 0; i < n && src[i]; i++) + d[i] = src[i]; + d[i] = '\0'; + return dest; +} + +char *strchr(const char *s, int c) { + while (*s) { + if (*s == (char)c) return (char *)s; + s++; + } + return (c == 0) ? (char *)s : NULL; +} + +char *strrchr(const char *s, int c) { + const char *last = NULL; + while (*s) { + if (*s == (char)c) last = s; + s++; + } + if (c == 0) return (char *)s; + return (char *)last; +} + +int strcasecmp(const char *a, const char *b) { + while (*a && ((*a >= 'A' && *a <= 'Z') ? *a + 32 : *a) == + ((*b >= 'A' && *b <= 'Z') ? *b + 32 : *b)) { a++; b++; } + int ca = (*a >= 'A' && *a <= 'Z') ? *a + 32 : *a; + int cb = (*b >= 'A' && *b <= 'Z') ? *b + 32 : *b; + return ca - cb; +} + +int strncasecmp(const char *a, const char *b, size_t n) { + for (size_t i = 0; i < n; i++) { + int ca = (a[i] >= 'A' && a[i] <= 'Z') ? a[i] + 32 : a[i]; + int cb = (b[i] >= 'A' && b[i] <= 'Z') ? b[i] + 32 : b[i]; + if (ca != cb || ca == 0) return ca - cb; + } + return 0; +} + +char *strstr(const char *haystack, const char *needle) { + if (!*needle) return (char *)haystack; + size_t nlen = strlen(needle); + while (*haystack) { + if (strncmp(haystack, needle, nlen) == 0) + return (char *)haystack; + haystack++; + } + return NULL; +} + +/* Forward declaration for strdup */ +void *malloc(size_t size); + +char *strdup(const char *s) { + size_t len = strlen(s) + 1; + char *d = (char *)malloc(len); + if (d) memcpy(d, s, len); + return d; +} + +/* ======================================================================== + ctype.h functions + ======================================================================== */ + +int isalpha(int c) { return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); } +int isdigit(int c) { return c >= '0' && c <= '9'; } +int isalnum(int c) { return isalpha(c) || isdigit(c); } +int isspace(int c) { return c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\f' || c == '\v'; } +int isupper(int c) { return c >= 'A' && c <= 'Z'; } +int islower(int c) { return c >= 'a' && c <= 'z'; } +int isprint(int c) { return c >= 0x20 && c <= 0x7E; } +int ispunct(int c) { return isprint(c) && !isalnum(c) && c != ' '; } +int isxdigit(int c) { return isdigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } +int iscntrl(int c) { return (c >= 0 && c < 0x20) || c == 0x7F; } +int isgraph(int c) { return c > 0x20 && c <= 0x7E; } +int toupper(int c) { return (c >= 'a' && c <= 'z') ? c - 32 : c; } +int tolower(int c) { return (c >= 'A' && c <= 'Z') ? c + 32 : c; } + +/* ======================================================================== + Heap allocator (free-list, backed by SYS_ALLOC) + ======================================================================== */ + +#define HEAP_MAGIC 0x5A484541ULL /* "ZHEA" */ + +struct HeapHeader { + uint64_t magic; + uint64_t size; +} __attribute__((packed)); + +struct FreeNode { + uint64_t size; + struct FreeNode *next; +}; + +static struct FreeNode g_heapHead = { 0, NULL }; +static int g_heapInit = 0; + +static void heap_insert_free(void *ptr, uint64_t size) { + struct FreeNode *node = (struct FreeNode *)ptr; + node->size = size; + node->next = g_heapHead.next; + g_heapHead.next = node; +} + +static void heap_grow(uint64_t bytes) { + uint64_t pages = (bytes + 0xFFF) / 0x1000; + if (pages < 4) pages = 4; + void *mem = (void *)_zos_syscall1(SYS_ALLOC, (long)(pages * 0x1000)); + if (mem != NULL) + heap_insert_free(mem, pages * 0x1000); +} + +void *malloc(size_t size) { + if (!g_heapInit) { + heap_grow(16 * 0x1000); + g_heapInit = 1; + } + + uint64_t needed = size + sizeof(struct HeapHeader); + needed = (needed + 15) & ~15ULL; + + struct FreeNode *prev = &g_heapHead; + struct FreeNode *cur = g_heapHead.next; + + while (cur != NULL) { + if (cur->size >= needed) { + uint64_t blockSize = cur->size; + prev->next = cur->next; + + if (blockSize > needed + sizeof(struct FreeNode) + 16) { + void *rest = (void *)((uint8_t *)cur + needed); + heap_insert_free(rest, blockSize - needed); + } + + struct HeapHeader *hdr = (struct HeapHeader *)cur; + hdr->magic = HEAP_MAGIC; + hdr->size = size; + return (void *)((uint8_t *)hdr + sizeof(struct HeapHeader)); + } + prev = cur; + cur = cur->next; + } + + heap_grow(needed); + return malloc(size); +} + +void free(void *ptr) { + if (ptr == NULL) return; + + struct HeapHeader *hdr = (struct HeapHeader *)((uint8_t *)ptr - sizeof(struct HeapHeader)); + uint64_t blockSize = hdr->size + sizeof(struct HeapHeader); + blockSize = (blockSize + 15) & ~15ULL; + heap_insert_free((void *)hdr, blockSize); +} + +void *calloc(size_t nmemb, size_t size) { + size_t total = nmemb * size; + void *p = malloc(total); + if (p) memset(p, 0, total); + return p; +} + +void *realloc(void *ptr, size_t size) { + if (ptr == NULL) return malloc(size); + if (size == 0) { free(ptr); return NULL; } + + struct HeapHeader *hdr = (struct HeapHeader *)((uint8_t *)ptr - sizeof(struct HeapHeader)); + uint64_t old = hdr->size; + + void *newp = malloc(size); + if (newp == NULL) return NULL; + + size_t copySize = old < size ? old : size; + memcpy(newp, ptr, copySize); + free(ptr); + return newp; +} + +/* ======================================================================== + stdlib.h functions + ======================================================================== */ + +int abs(int x) { return x < 0 ? -x : x; } +long labs(long x) { return x < 0 ? -x : x; } + +int atoi(const char *s) { + int neg = 0, val = 0; + while (isspace((unsigned char)*s)) s++; + if (*s == '-') { neg = 1; s++; } + else if (*s == '+') { s++; } + while (isdigit((unsigned char)*s)) { + val = val * 10 + (*s - '0'); + s++; + } + return neg ? -val : val; +} + +long strtol(const char *nptr, char **endptr, int base) { + const char *s = nptr; + long val = 0; + int neg = 0; + + while (isspace((unsigned char)*s)) s++; + if (*s == '-') { neg = 1; s++; } + else if (*s == '+') { s++; } + + if (base == 0) { + if (*s == '0' && (s[1] == 'x' || s[1] == 'X')) { base = 16; s += 2; } + else if (*s == '0') { base = 8; s++; } + else base = 10; + } else if (base == 16 && *s == '0' && (s[1] == 'x' || s[1] == 'X')) { + s += 2; + } + + while (*s) { + int digit; + if (*s >= '0' && *s <= '9') digit = *s - '0'; + else if (*s >= 'a' && *s <= 'z') digit = *s - 'a' + 10; + else if (*s >= 'A' && *s <= 'Z') digit = *s - 'A' + 10; + else break; + if (digit >= base) break; + val = val * base + digit; + s++; + } + + if (endptr) *endptr = (char *)s; + return neg ? -val : val; +} + +unsigned long strtoul(const char *nptr, char **endptr, int base) { + return (unsigned long)strtol(nptr, endptr, base); +} + +char *getenv(const char *name) { + (void)name; + return NULL; +} + +void exit(int status) { + _zos_syscall1(SYS_EXIT, (long)status); + __builtin_unreachable(); +} + +void abort(void) { + _zos_syscall1(SYS_PRINT, (long)"abort() called\n"); + _zos_syscall1(SYS_EXIT, 1); + __builtin_unreachable(); +} + +int system(const char *command) { + (void)command; + return -1; +} + +/* ======================================================================== + printf family — vsnprintf core + ======================================================================== */ + +struct _pf_state { + char *buf; + size_t pos; + size_t max; +}; + +static void _pf_putc(struct _pf_state *st, char c) { + if (st->pos < st->max) + st->buf[st->pos] = c; + st->pos++; +} + +static void _pf_puts(struct _pf_state *st, const char *s) { + while (*s) _pf_putc(st, *s++); +} + +static void _pf_putnum(struct _pf_state *st, unsigned long val, int base, int upper, int width, char pad, int neg, int precision) { + char tmp[24]; + int i = 0; + const char *digits = upper ? "0123456789ABCDEF" : "0123456789abcdef"; + + if (val == 0) { + tmp[i++] = '0'; + } else { + while (val > 0) { + tmp[i++] = digits[val % base]; + val /= base; + } + } + + int digitCount = i; + int precPad = 0; + if (precision > digitCount) + precPad = precision - digitCount; + + int total = (neg ? 1 : 0) + precPad + digitCount; + + if (neg && pad == '0' && precision < 0) { + _pf_putc(st, '-'); + } + if (precision < 0 && pad == '0') { + for (int w = total; w < width; w++) + _pf_putc(st, '0'); + } else { + for (int w = total; w < width; w++) + _pf_putc(st, ' '); + } + if (neg && !(pad == '0' && precision < 0)) { + _pf_putc(st, '-'); + } + + for (int p = 0; p < precPad; p++) + _pf_putc(st, '0'); + + while (i > 0) + _pf_putc(st, tmp[--i]); +} + +int vsnprintf(char *buf, size_t size, const char *fmt, va_list ap) { + struct _pf_state st; + st.buf = buf; + st.pos = 0; + st.max = size > 0 ? size - 1 : 0; + + while (*fmt) { + if (*fmt != '%') { + _pf_putc(&st, *fmt++); + continue; + } + fmt++; + + char pad = ' '; + int left_align = 0; + while (*fmt == '0' || *fmt == '-' || *fmt == '+' || *fmt == ' ') { + if (*fmt == '0') pad = '0'; + if (*fmt == '-') { left_align = 1; pad = ' '; } + fmt++; + } + + int width = 0; + if (*fmt == '*') { + width = va_arg(ap, int); + fmt++; + } else { + while (*fmt >= '0' && *fmt <= '9') { + width = width * 10 + (*fmt - '0'); + fmt++; + } + } + + int precision = -1; + if (*fmt == '.') { + fmt++; + precision = 0; + if (*fmt == '*') { + precision = va_arg(ap, int); + fmt++; + } else { + while (*fmt >= '0' && *fmt <= '9') { + precision = precision * 10 + (*fmt - '0'); + fmt++; + } + } + } + + int is_long = 0; + if (*fmt == 'l') { is_long = 1; fmt++; if (*fmt == 'l') { is_long = 2; fmt++; } } + else if (*fmt == 'h') { fmt++; if (*fmt == 'h') fmt++; } + else if (*fmt == 'z') { is_long = 1; fmt++; } + + switch (*fmt) { + case 'd': case 'i': { + long val; + if (is_long >= 1) val = va_arg(ap, long); + else val = va_arg(ap, int); + int neg = 0; + unsigned long uval; + if (val < 0) { neg = 1; uval = (unsigned long)(-val); } + else uval = (unsigned long)val; + if (left_align) { + size_t before = st.pos; + _pf_putnum(&st, uval, 10, 0, 0, pad, neg, precision); + size_t len = st.pos - before; + for (size_t w = len; (int)w < width; w++) _pf_putc(&st, ' '); + } else { + _pf_putnum(&st, uval, 10, 0, width, pad, neg, precision); + } + break; + } + case 'u': { + unsigned long val; + if (is_long >= 1) val = va_arg(ap, unsigned long); + else val = va_arg(ap, unsigned int); + if (left_align) { + size_t before = st.pos; + _pf_putnum(&st, val, 10, 0, 0, ' ', 0, precision); + size_t len = st.pos - before; + for (size_t w = len; (int)w < width; w++) _pf_putc(&st, ' '); + } else { + _pf_putnum(&st, val, 10, 0, width, pad, 0, precision); + } + break; + } + case 'x': case 'X': { + unsigned long val; + if (is_long >= 1) val = va_arg(ap, unsigned long); + else val = va_arg(ap, unsigned int); + int upper = (*fmt == 'X'); + if (left_align) { + size_t before = st.pos; + _pf_putnum(&st, val, 16, upper, 0, pad, 0, precision); + size_t len = st.pos - before; + for (size_t w = len; (int)w < width; w++) _pf_putc(&st, ' '); + } else { + _pf_putnum(&st, val, 16, upper, width, pad, 0, precision); + } + break; + } + case 'p': { + void *val = va_arg(ap, void *); + _pf_puts(&st, "0x"); + _pf_putnum(&st, (unsigned long)val, 16, 0, 0, '0', 0, -1); + break; + } + case 's': { + const char *s = va_arg(ap, const char *); + if (s == NULL) s = "(null)"; + int slen = (int)strlen(s); + if (precision >= 0 && precision < slen) slen = precision; + if (!left_align) { + for (int w = slen; w < width; w++) _pf_putc(&st, ' '); + } + for (int i = 0; i < slen; i++) _pf_putc(&st, s[i]); + if (left_align) { + for (int w = slen; w < width; w++) _pf_putc(&st, ' '); + } + break; + } + case 'c': { + char c = (char)va_arg(ap, int); + _pf_putc(&st, c); + break; + } + case '%': + _pf_putc(&st, '%'); + break; + default: + _pf_putc(&st, '%'); + _pf_putc(&st, *fmt); + break; + } + if (*fmt) fmt++; + } + + if (size > 0) { + if (st.pos < size) + st.buf[st.pos] = '\0'; + else + st.buf[size - 1] = '\0'; + } + + return (int)st.pos; +} + +int snprintf(char *buf, size_t size, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = vsnprintf(buf, size, fmt, ap); + va_end(ap); + return ret; +} + +int sprintf(char *buf, const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = vsnprintf(buf, (size_t)-1, fmt, ap); + va_end(ap); + return ret; +} + +static char _printbuf[4096]; + +int printf(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + int ret = vsnprintf(_printbuf, sizeof(_printbuf), fmt, ap); + va_end(ap); + _zos_syscall1(SYS_PRINT, (long)_printbuf); + return ret; +} + +int puts(const char *s) { + _zos_syscall1(SYS_PRINT, (long)s); + _zos_syscall1(SYS_PUTCHAR, (long)'\n'); + return 0; +} + +int putchar(int c) { + _zos_syscall1(SYS_PUTCHAR, (long)c); + return c; +} + +/* ======================================================================== + assert.h support + ======================================================================== */ + +void __assert_fail(const char *expr, const char *file, int line, const char *func) { + _zos_syscall1(SYS_PRINT, (long)"Assertion failed: "); + _zos_syscall1(SYS_PRINT, (long)expr); + _zos_syscall1(SYS_PRINT, (long)" at "); + _zos_syscall1(SYS_PRINT, (long)file); + _zos_syscall1(SYS_PRINT, (long)"\n"); + (void)line; (void)func; + abort(); +} diff --git a/programs/lib/libc/liblibc.a b/programs/lib/libc/liblibc.a new file mode 100644 index 0000000000000000000000000000000000000000..3b155115b0632cca00a7bcebc621f02369bc2b34 GIT binary patch literal 92130 zcmeGFd3;sX)d!59bI&=KoAG8Mgh?(kPay$>1cQ)};7th16b&k32nnQyBqle26CeTQ z7GuF$>p-Q$Q)|^)TYacg5k(QSR-{f<&>!fp->(d>93*CDTPyHg$oi5 z!e`lz4cyx5B6M5byrz!swX0i%YNae}&G*`xwz^pTcp4N&Lt9N_%c>gOS2V0_h;Y8CeKqcFEj6`uxVN{o)Dc}{ z^IE>Qv^F#mT}yjYE#23tinUD;7Qo8ZnwC{Yq*+vqG>eL>YZ@DyYe}jV?JY)qYh9gD zE1=doaj#k4W;D`EO{BSj2vJqs+8d3Pb&+s`X~HSRWg4d$@ti^p<4|QBoyG7hqsF+v$jhHJ8Gb*l zps=`Pc4^rh4X9aOyP~c>&Z5Uu)qMnqqyH>EtGKH8kCZ81yeQo9uh5o*rQ7P#wk^%6 z43@nU-tt*+%PNSlzwAKX{Ul0w+v$PuwzJa;{~GN4oN7g1F6o>yta!|mrG@*0owI$0 zQD2`M9I}~M_L2+^F~Wt1+JfP2{r20wkYX9`*lTv|H^b4>1I2~MHXJG2@@8<$WH2n- zayT+6|1*v6cCCJ15A{n6UuZwl(Pf5f4;~$))vH&6kqTiVfE;O%Be*+~a$wfhDL!Tf zK}d=%2iso^cRUt4xA?r`rN!qj-4|D^c;gp&(0gcc@VZBfKYPp!ZoUcXmTf*9+`I#c zEw2QlQJ6~;bAm1=aVL9SeJ_Z+7M(b8A~<9tl163i%f%0nohv)rpU?%5Hys>ON%Yxw(F7T*Jpd85HXv7)e^{&C%`9E1M1!v1oQTBH=RnSudh$OK z9^vBH4>@8t7j#GOjP)-!c>^{1FzOw>MseAU9FY$azSq6=Cx}4yf7b)Zz*aq6;pp)& zymD;*!JaKu8r*HCmTt8J;f_b(WKXugzt6>m>PNo_cNR@AjvgaUx#8%S;W3YPykSN% z!<}Js*4Dgm;TMq{=@+G2O>pv+ZY_rRU$h_F=Vs^PO&Q`}_;uUpaA$IMxbT^_A=JjH zaVH9QylVz`CueU>PHX>oU;Xy{gG4YiX20O>qSRSii(=w`un$G>JJl?+%inu6)U*2A z*@T6UMli6F{RPQ=BJcO#+i}3$r^a9YUd2g>p1*hFOe4}i);`tWSk%X8{|r^Mc9o*R z-F-IiZ6AMhRxj-bcb^V}Jz<7B&oVdfjiiO6F9dgI7d#qyYs?{VG=jU&GV}LRdUrO| zc$f5Y{_k$+;m?HzMK+5>v9eBgCJ*9i8{Kdi|nZ5_t& z+!nCr7yz|lDdrct81TB8AZpUA+{SvEY$#u=GXcMKJyQ#HaMdaFpCA|!IEcrILtDFduTjR1w|~1_F!}ndh}_xcIDB3(~y~8hB1?m@zk+5gb-U2 z+>`8&K2zFR9_sj@c-F=f1B!zs2MZ6h=V9JyA6JeJszgv2Fgv)%wmR2642u419^1T^ zX3?XMvR&nPa*rnX+iC2ti_u+j{=>`+e=W*}ziuorA_bbgAP*)34CPq{#&IazS%DDz zVq{=A`Xu~1ZF+Kc?d4Z|ePX6ztU0|B)BgzL7#1DT zvP0qMKIkn}CSBj4#f`8_c-vAGliE39p=H-&C{_I*exmGq?e-)7*%BV#fvyh z|2tBizgKIW#syiAr&tT)r?PXouQK}fJEUX&VYUy(Nu~_{m4$D#AA@pB;cQ0nLuBWp z&xW_0h>XCB7Mg#6Nn$Vh`Ze@*pRnvqtZ&278N^U{eN{O4+pi(hqHy%z+)jAQE0M8S zo#b@<0}IwiBdOue`R0DuxbVqHM*a5vK1^wk`u3N|`3veFKd22L){nL>@S;x^L7L#^ z8_`(hwq~rW{$1I*7K^ISB1^*2&$+dEh5xFIeo!8q^A#4K5Is%P522y`Sa@68ajX@f z#v4#$5%Qv&ql=E8TNyot6j7T1;Xgvp@{Y%clz03SRZc&izqc~le5^b5Myh-+B#{id zC?7rk`Afm@6ETf2nT0=pDI9~s_n-Ldi4*8x_{G<}Uhx-&)+`C`K2$UzxcM4zC>j^} zUdOw6`6oKQObA}}V<1?I#@6SZS<&F0y9ff%G~{uw>+`Ae`@*?}l8 zVnqBvY>vqQw>*xbhv^8XC@;7<2jFImj?-|*CaCtAql310ypvaW{PM!`;BTJ|-@pqC^HH>g zrQe9omP4~Pex0!9NN39~B>Jzd?Re+x!sD0yMH>>^=WW>=vC5-x+C%6EY&fxKz<8s{ zej}R2{8&s2a3%azm9%B^U%I_)mp&?(_0A%9*soLs#p9ek5BQ}a8Ro6?5Vx3HMQS2g!VS5HK zdpHf^GsgoUBI<_&K)N14F8^?sg=Q#=fBo{V&#UtH^60I7m7^0MrHmdEs>KmZ-3oL} z)qOUq6A7X=B@ngq_dbXo66yQU%!z%Yo7x*2#~69*jH>eJM--wkH9W&d5IB5@{spta z=-}=QK6N+@hWUGGLwz-vlA92dFnTxMevkTfD7b$Cnd>R}BDV^o5Q`1LfA*wBl&L z(rvlH-EHOrWC&^;HFATSH=!M*8iSi35UEwc&BsORlHlgIEG``p+?)(<9q(6zG!(q5 zA2PFoyFWWI{8Nw`6wf=)I#ibb-bM-q8!-oN?|46NcIV>XpySa}aL;F@o#W4fx*!A1 zn%7whmSD?z$U}l52MvaUwbI}Qw61HgEgN)j&V4?Xc*_}7Q?5TG2k5a7wWNL{BGppn zwJSaHmTy}dK)el>mnq96;9Xq1h*JyOCPW3|KO$-Ad&rlG*^r}@(ZVA zzddS1d1vKt@{DldBf(9jg3=fB2lA`YJRbI$T@PWKFURM+!smjU{@^o=lKrLqF!#8- zTJwj_IoL4mGxHB)DGj3+fR`>G?BAJnt+IY+78$=3b%=V+8(j$?S7z=+Ytd)fQO+bs zA=NrYK;LcY|8P4?0T81Zxeb3y?T~!%OhKo70HImc4&6X*U)Dn zBs=&$qb&MP{=o-m+UmL;R%5w4=bV7=Z5jV>MBlwf7pd_>o+850h~SndzB+NDYXI7h z`y0xANBm+w7?Mp-3JZZXQ1oY9#)s&dR*#f6{ZNH=(mfz~|!U*4IVg~-Ly96jcS4waW ziQti7J^DqHpniKV?RQ-YBaxnBlFi2;VE=cwv_!U4d=58*<}_t9sj1%hyYwq9d_NpK zGp^rgn7g#_-OJA?j{XH9q-@MTbdlp@N5v0}|7kGYezUAId2(4{*JbY(cedkr`rw!s zV9fI186S#Raya;dl`vh`kG_b{ce-=%P<6R{*T3KcE|Rbp=mg-da{~|@DR6G=IuyQ$CD8Cy{^A}PABT`brl}(?Wh_f;s3k--);fg zFJpB*KipZC7LLw)C)_#jKFs!*!6@pK9jlDaJN`u3eL1ib-~&8fz5DHW{i@dxm%>l% zhhJiU+AB9&R`kdX`vqG3FD`zF`ehLdMZ!hf59~2eD;%xD=Icv7#{vJBAnk2nbT69;_<7>@f|t{+o&9?sF>saw^4@S7$#Z3D500Z^wQIn6(B{8 zljz0wLO(i_$qMwL+-%#SNAi*&D~)6`vP?hUeDPXVZcZDQaBGt}?PCsEHs6@HHLXAK z=CnO};4hIbB~EwYe;}{>~b~2@}q?cIA<`fkMVyQG^PC)QpnL{T% zr&A5H$e}h8u-X(CAJlYB#}qP*fOk_n>Bi}!oDLXF@;)sz82%tDPI4@p;DFJW7)+&_ zALmdq&Y!_glHHAli89B$!3;bK;!(@n>x~=DBuX2jTAJI8o6O{VqywW?*Q_&c7MV1o z?-L-9)}Bo1k@WH={>#ZoI4Yfnn-TH-1yEdq(F9)OqgT4B#LX~w{s~4%pxiaS5T(^6 zu}M8(MchG>P|}^D(`D`(uGqkNIQavgb1PEjb6Sb{cP+zy6MTn}{(AkmOzcPCw%zCa z>l=9qHob63m7?wNIg`M)It6oVVvhSbK!;~<# z_}HIS=^&Xfchcr4y%y!^rK%8jziwWEU+HstH-z3bqQMRB2FJu2{DK;6GdB3Ld-VrF zyV2+D2JLribdWA^+#m2%fUhgQNqFf}Y^ODDu^VK4bLStSVtW1Rh_S|(qYFM}a7~M` z)|c`rD6JhgY_MAKo~es{3A#0VaP~`m&JV%yyD2w7N?}lJw9P8tWq4g|B^qhAxxo5` zS!J6GscqTUjcy&3B<9X41mJWEB8|RG4kD5->(%HR-c7I7O0V05Ud?X3ymARq7W)!T z2)P!sT(>E?R=DNjhzAMGoun4awZfOB%f*3Xg)c-gPF*bP3ZEqLXI&2AfZ6DEpl6FB$?;*6aqnTD8VpUj~ISb@iZGCHndshJF8U?(LV&l)s{- zZ{U#GoxyxxN-Est8!EY4#fnm1YF)9&mvZJeGjJ&?YA^m~MUB3+pQ#{P^EOj?voTh# zYRsKqqxB(}GHx@+QqrtSry+HlS)|8jcD~!pGTogdcBYPnsGZx)a|ko5htQ03n^`Yr zoFOz9+-5dYnQw;?!VTGVA{!VS!P~)qZ6;b6lGcvD`9b?jGp= z&;$0M8)JWZ4J%>{!AHytT@9C+g`YiYrX-R-neOR>nT&wlz~r%SW%BqpF!>%aX)&HM zQ+t&}c+8*7gq|en!6EmU3A?CEdmjfqR61ZLJon9&T-FgXJ=3#HeQ6QG`$Y=Oys7SI zOs9_jACtzdn4`(>hPEM9zD&yea_+v$-B8TC*3f5SWkc7bp8P@-)%kJ%VvQ+0}X96opHPg9Y?!Q zQ*IAfqRlahU;w_%ofku*5T!SpL2?AM%C&nE=H8-s_PV2$+a|M*zNl0?8FT0Ds+A4q z0J1r3#74c;4C=$4<1h)ab9{!}wO?uu(+402flJLiDp!}pT)XyDRbf5|vFVVDdu_pt z{UyoDVw`LG$Epgr|3uo!+?kvy#W>e=O|jhMx#q}jVw`JE(uWf!=kweVgqJ}}%|yLD zUbUXzL$r7s!gCl}?Oqof{#VoLbi3^#NpJ4_U#Nzi?3t!(C(EMD zcZ4OpS?N}c&BXLsSxjFkOr|`o!0hue@srnHc{g`%$c7zS@X?(Dv#(CUU0mSa z5m~ENv>HWb4%JbY)!ewkm|=<&H3_mXGtDHOA7drrluOmkJinhxLNiWIH?ybrMW#_J z5zCWx8sgimW&G#HHWh}!2aiUs>6mpIYPM(@!R}HGp_covMYvFx9016wc4nK-<0RLW zI@Jz6vs26XeyL~f(lW#Upk)+u-+da02&tRJW|>M&X90}DV#9QdeP)u|XRH=uvfH!f z6=>F*s2ZALCYPhB#M4ojIGmFT*dyi@H<=U!w+U`&6l)uMHK>ph|eNk>4bA zD28UQkWw_}q?T@yQwS|w7z@Off{zq=lNP>*y_*SF~6TKh09$^W)j{_e{Rw=zZ#{o>W&JA^!g z*B<{N%S<2z{u3gn$))7i9M8w%W1|pI#BnD6>?#nakmG+goE(MgeKsjp?{nd(9ED$Z zox#PIT=#-SMy>HWpIKvmV&d0&A%0yDzvd!-)kUmUe&)`sfrgP(YrN_@4Hx|X?y90z zPv*{IRDm#mck%z5i+Bhb1edupBKZH!wRsWzkGQI+!Da3|55o&09dU_t8lmcn?@JYO z&On791X=%%d(?)8UI8QZ9UK|ew<|!JDF;icgsJ0PZWb#GNDn(3% zudtr&V3tyAydt#X4t&{VfOwzW22vQ{WtRbj&Hma;6ntzy)L+6uh7nJkJF)MZxo;fHis2wTQn!n#0^V1l}942 zID)j&2+|7UyR0lQn8c-KwabuYr5|!BT_efNoo}GYJjy-fQhNkLdAyfd%n@S`+n`ui z8S5p!_GI2gg42nU`;h6(VnB46ds7nUBb~T}UY6q}|3X>hYm^B=DWtuJ`%WT8txT9Z z8!=XsYK(gZ>wBh*<;FeZg`^ox#ywMMg<&q>=$qPL+?%eiI0RZ-WBjk{&^@(wxv|@Y zfCt;{4wodqk4f^JkmQa*x+F=YvJ3J0nBvls_A& zvqeDr*~z7#F&ED#O7rKgQyjtZMi)nA1as#K!SO~{e}m(VLj^}sd%LT4JGFw#-1+a2 zVX$*-=k29gmC@E(Yiu7Cv;X$V!v5JSj2%2$&VQJGaqB-Zyw>Q=+}-R2sAn!vE9#2=eodwIDa&!7h~X`FC8zn##lC> z85HVDU2a_90@Unn%#tLqe2ptiV5idr4h#BT0tyytfoprcL{>C+PDW(r{$AkPUGu0| zFiHrAo?hVY=@rJpEUKxl)HY+0OT#`cf$=M{Xnlt{vtnQ=C7O(i5!5%?Eyi4yjrzY*T7|2ZaCLf=&#S@`!GOkD$w*QZ zEK1mOF!X0Li|jU|l+_|$Ws=uIG-8-JS#;WAeL})CwHi62D4SA~Z{*}rDw`hE_ZO!~ zIr?Nd8HIG2J6FN^UEB46G-;ZP2hy}@F8GdH^w{>$y+zN__nal7Nwj&8+N2$)x(3qD z(_C!Q-cwyZ+JmYqU+qOb`_CLb2&&#QcYc8e2GT@|_Yt_B*W{?Flo*#u?pWSpgENq3 zR<4TZ}V%8zKo2o*}n%q?$u+CzIu!=_kKu(uH&s7ed!vCNtQkeg!%$@ zmfo_D>0UhPjc)D!A6Kn8`azvqkYFu`)(6sYA@(0R`f5C`$x;%~wFqCNpUaGkY2rGR z@qM>rDw}Kn7w0jiW8`Q0`u(8%!THCB~Dep>Y?Tm=WHA^_Q^G8_P0{0Zc<^=sQ%@d>1IZsSvi;VH#4!#2461I z`6f6$fQcj-B0b7j5HO1gl1%LryA)R`LY5L+rw)={I6H|8hQ_^ur7KRlU>OP&?4WsO zca=$wtl>sd(rHN+9!K>J8c9O~L zyxiP?#6a#h2sEfCQao5!Z3}fkcv3bQIf*)jgd3t%ixGr?XkCLULtQj@=VS^~IHwLZ z$}NoNl|iJF+%QwgT>Sus3j4Is#hp*IWV6OD z!-~@dh)&O&OZ9B3r#SUHvpMfOvk`J>+GfFCSp#5=0fU6SG`+HXr@#bp`TYr(8G+F7 zKxkwSX3YSjj6void(fC}j50_wTya*8S*1?5058(z4^pd|m4d$MJv28K&5d1v_YN*- z5Y2Vd%rWQNPC5ii?`zK2yDQPtU5UD#iH&BSVl-1++Di)q@D9cS#gKt1*pp&P`Ov0^ z*JSXTJT=ZsYi2SyaS=0dNiZ4wxrp7d8-Gt5GttJ(PZGEh`;&yNiO6qFd_E)IYPSlD zWrfANM1{qwf|SKDO`llOA;mi3P8Sw2j4PDN^t3mp+jTIs8axx7GjpcZwqch&bDq^^ z?y~1q1FBxh(8^m)WS%lVrQ4_GCLdF5^8M6@{O!Jf(d}QpPXMF-C%$Veqfb*P#{ABF#kZPT?pE_5Gax8I_z;XH zTYAcT+Scfvwm;XipL?@A9F2H~bC(lmdKU~YneKMp^J{eP`8W5`vYY$-yia1g5fl68 zeQxX1hjS3^wmx_EiSxX(&)r(??mo8$G(NWm4s&*~(Ef1XWj*_H;MD*z5{0h@-qx$W z9oU!f6B!7~k)&3-9YpPy*YwC{FnB{k*UY|th zPc(RKFvjQF;0?hzpBsYr1T{YQ1dni`;BzGSv5U{g!LQ<_Ff z@D_FZ-oP^fDtsXAFKJYnCFaSCQd$_&WY3}sC(WYQ-y>|${UP&+>C4|`Z}Hv6(tp)w zYk=}M1#Xh}+XKEyyX@Bk?{jnSB|eoz^&Stt7^M3V#V3B-^xd7tC$WrYccW)p8-s@~-PoxgkQ{m}X~{!M+jbysr} zQD@?5{&mJ>#vrVrdyr-HeWF7fGQX)yR-o!1@QZcMx!NA^Yy-K%Ntu9M$OV}}VzbFK+!W|Y?h6{FyY76XN68*V$mvy_JaZw4c zT2~Ze2#I=FfpT*TQI9KNlWfIen%pZe3$1z{^<-Wl#kaz@P4If#{FiBA;bH&F-0DMq zt8c51^ILs8Eaa&PsWYKYnn_x6Ow+XPfT_zEEsW9!p@= zjO}dR7<>a&cIGbo2R>t8bQ`V!_d3#%{ti1}~i^jTbfHM}`=?72k_Y)e|v9mDpDvkXz^un_HP0Shho9~iuylYbna81AFbeeD_fP9^d04fIRMd zn(|NkUJ?0Md>>Q(W8X%L={H(8A;7RNDIqi~Rnh1?ZxwXCXa_AicbjkX!tibLYs!9Y z-b7(Z3_7aLflsSnK=liDn;7fysu1uT2>3Kdgr|M4`6v#)=7SvPun1cHESzRd$mi%y z{;riI2U?BmOkU9Z5i6c}?pgEIcuuIqQg!RW6j(E*0zF@G1`o_LZXh?f!TdFayZfEz(8F7Beu>Wx`3G`#uQR;<*(T&zXlCdiCIGYoC5tVtFjbN8Q7ShgbhWY|}x* z%=3*v0>4GvtykQp$(kjT(T3e`kgu)99yH9i9&e>{*V4FB30<14zLAr7F0N5aUSr^4 zW5#J7=3&Yc$eg%KYaD1Bkw!(`=OjLIpB}(KKpXoBX6uy= zkQ;sC>f3#W0U0*V*AlSDVGC@Z(u91|6{gjKF+z;vwBEs*g@BgT&)0&s+`1%zMbb&c z0eH+1Iqsc_$dZ7XZWfkx8))5VrGR-#j_)Gc@4Hx#o?4BO&U&K=TaKzmkep)i~G1RMVQj{`V&#XiE~e(*7Uq!(0lts+zk$q z4N_l3`3n^#wzU3CF39AmN!f)(Izm^d`1Tq_^7 zm|C3eYsEC^>=0HGD5rVXGwbkDgyS6xt23r&Nr~s7;?f$neoTxMZ3F5Og;(}=8irC@ z4tzLgC{kF&h;5oC6E8q&aaJP+u3kdYrYy#C^xRr`oS~JDhA?Gf@^iJDfyO3I>)sBp zQh!gI0sYb#RwArbE`pScuBN&9Y8+i6a~@iw0x_j7ueoj-#N<6Wm4 zIN9S$Msk2tR4F-KqF(uiKtAy4wn$<5@@Mp5i3zANp|yJ~D1*dhtvyapGhx-4RD>;) zCw{WolS+i&co*=rvrbD>Mo1eNH^RV>Gy?Uaw;JtKQd0cw!VD=nsMaoQmopgEknZL$ zqfuq_e3(JMwC)%WNyhVIVc6WBQ3{1h%h^B6=kv-uHZW&{i58`2qZIG@(0x-l%#`jH zWanJclaFPiz3f~zpq;w}Ztd~1SWT_vCFC4z98Hf*Fv=WYT?CgHfak$dTaAE)%NPc4 z9zL#z&YuK3O`6c#cQsSQR@y zCk`f&yA5q_HEkdTjG;u(E#iqD!31ib+Jg){V+0{X_hSMvnZ#x}S2y>CN%{_^GJ9}H z)c!B#FsnTzoYlpfgZEggJ#CjgcAVht36B9XL#~neqMRKdG+aE#pVK) zkoR$({2WhyuP5*J9=!k7Q+~*kS6}X+U<&5?6(3sy^~xX8iII+Zx5U+VttqmpDk1Ns zo_vERKgN^Cd$e7bdrFHJwc?aOy`wLt6GAD@@b>uZM}1HFc;4a)7}&No%Pw7Pzl_6k z9CqL7=!I!^R*pSzhz{BI$$5CLaMZ*@gU2lUed}w>-emv4w*P1!vh9D_U)lCXXRBj( zIzMu;a_r1u_NZxmL~Yagw9d50cJd1Bf-1b_=uyjl$lmLs&#~7(ZQ9S8ubbb(#jq1+ z=_CdAtTH`s+5V7SFv9~4wp-eD2sWy=FR0a_5q56ap1(+khT3`gdfsRENzwBucJ@#` z-^cF6`>u4vZ;zN`m(RD)sqvtb^n4#28rl6$vPVzUQQJ-^*7Jt#&vEDbB-$wx?EHMY z`T}=B=1F?KkKHH9Zn(@|zsa;a%#2Jgu!LZZ3P@8~yf9|NVY@PvG|n_C1M@C+bYH@D6}$`sj$y zPRO*g#llk#VB79LN+)^6v>&pbw!r&me)|spZohp~!lp#~uZbVKc<1obUcF);JFy(k zoo`RjLB~#X87N>UEyBCx4!i7c+5ho#wph5`33gl=HsS)06t;gYJK0f-*-+p_C5Z`U7eF< zf8qO^rPqViGVHz;I%M0STs`l%b(4mMWqd`gO)nyEt=VaayC;o?(o)ET$?#rZ6f zlVhopSZYZuH9M9X8cWTOrOINdP%K3;U0gF_srFbZKbESDrG9V5lC`l^O)M3RrIKT* zcyoPYSiH2S)c6?PkXVX7&mgXNjd*ME)Cu~!RB>GpOO1=A=EPEarK*gVPB!2i0fSbhc=OS}@r8W2 z(b^sVNDL86T;zR72R(}gqT_QA@nSd~rjZbvGUljRH{$|6uy_H~9( z3)y~aE#4`D*qTs8x9v`f-#0wdT0*i&#!H+5sMe?5=^G~ISxz#tV?b?L!z!F)YiUu1 z$oj2ereKTO=W^|S#MFNszg9z(#pVl;#hPF`Db~VoYhxI3piR3aHnf8};y)`c%PS5=Yn`2gyMa0J~K}tX|_X;Kql;R*0*srJE}>S z5ikM_Atd{?qVUvti+92qg90uoP<3(1zHzwluTA*Gjl%(|3IIz#kgSz=q|#S z@SCP{iau5zF<6UJ{OMqITBeg|Is=G<>7@IssmlUOkiuxFc0#}{f4L~Hh&7Xi&d>DW z!LaF!);S+!&N|1@{xm1;XQKY8RG)mTL*&tZ>Rj2xsY--|2jO03H#D<*6)6=t;<-2o zge+5aSq=$VGM%Xi2!WYS4z*tG1nE}coW!~;;n!+*t^R(%*%i)kV3z+>K_M;6WPSNH z0^%J`Ux=8YXv+m{+&q2BJP~0ZmrQ?CGPz7%!P@%#fqJ1N0?rZ+6V%cOZk6T8rQ`!n zGORyQFh5CG_-$$YWFj;D90Mm(y4uOY&FA0FL*EC{nFOQRc`)9QV|8BdF)v{(MQ(~L zN4k1e*&>kzFX6hDiZjYIvJRRe^ZWb}=Ha6tI@dV~l9&^niRBa+b7R>dnD)Fb`;m~x zWj0}~-$>&rA0^w717%k`$rVo45_DIEGaBE*CG1v@{5Z<{ENWz&uJo6pk#S;NU=A>I zrFM6+1@T>8P6iniF@tVw36gzo+={O5-iQ`3DanWnM@(~)PZK%r%X%7Xb9t;$c(yUn zct}?`gORlmo+)b~N>g+GbNIEIUb$)U!sCgCtLWrY1uD3NTLmg}oTC8w3;tZ(}sUj3~kkwUGuF`@s(GLNKB4^Ml8Hk;e zS%q3>yig@q^i6>-(1SuCS`ieS>I7zB$#Lg~+*~+|ASt+Kh9 z$f}*Pekivt!5r&Wx$LSQlsO_=!qVG0KX6MA1b-6*BT0;UXL7w$+>=fIE~wbTr}U)J ztAYS3JAI3s(@4@>XZH3U8hq`WCp<&b#QJ4)FLDN37w0+yFU7+A zN9&QWj$%G=ux2N>&$bfkF@db5@Y;c;?HU@Pm>ILI8`g93&wkTyy$&G;`K@(WJYNRF z9UzQwsgvd>+F*r~hCKnewj=AeQlXaBdJ8e7w9_{;D>KVULv#KhgBgK4GpP!~Uk7-Y z&fry$Hw|lmC7DhR@+sJ{oQ8W^1%}KLryr8(n9ftI^F_PqnBy=4(6cod^F$ayW-hJ& zXd!3~g;NVY?GOm*a-g&v7{Ki>zXd2b`G2M)bF9n&)|+CBDE5dmcR2kIfTk#JjjhTW zWILB32BDF(wz=h?pOMMSP_zAjFGz!Gu-;4fCQvOMU=hKJZ04vXy>%SjiQq$%kK9CvI7%yO4qow9 zvPJ6(ER^MP6S2@LWa>CA_N+(!B^MqCD>ZKgN zm5(OY34b4>v%Ooe9fO%6d8jj{+)18GCgq98q1_gZ6>?6x`yXI+7(;~~HZAS{#iqr2 z7r$eIxBnqt=#u?GNHz)$1ztq=wDBf8H3C1wvupGyMggWyI66)&$TgRUGX)xIeXJ9g zvu*U*FE(%R5{#yZOr9Tb*dexe-FgN->$m;`!Ti<=Vwcr}*@K&e!7KD(fogw(OZ2tw z-4LRIVm*Z%x;Ph;T{c_NibMc6^~5#Pnu6^C4e?5>*xCM%7!^*?YNOB#FcYkF{{+Hm5qF&2x@GF+e?oa* z4(-l(8L|88<$vaG%XG&3t*bEP`dgnHx5x>76(7D()Px#WZ78BC0<#_4kMr0HrM2e9hPev$ltWChhq~auSF%RBJ!bPtkZD_Rp%*jNJfv7ygNht?_rDK{i zOf&b3agzr`6};hc-}AhN&DZ+!vrXzs?clU`AV zn++w%mu#HB48$GA{x|4`!LJ5U7J~_`$C}RV-ZYb)?IaY+F1yPa0&TOn4v(@hyC$a9 zVU=XGO&fY(LVF|Mb+i}eHHB-%^|Ba51sFth#DNh)f?+cCr{s#>C?>wg*Q?He(t!{` zQJhdv)TKU1@TWQ{vw&`9h^DSgI>9^3A4Qqfy2;73`sT_ldJQ&{WD5$|vuFXyeL$Tu zpu$ObaG7#=MR@Q0~cS)6YR#_#o8Yu4-(BeQ3`^DtvPl^gE6KX#+!3Vt1K| z$(uq?4yf!T+j&9d+a#K!>2U{0`Z`Ic%hN)?b@7{U`@X`7PA4WfkYRzYApc15XA7U7 zBb=jNP_Qrk95IyX*$~yvbmV-nQ5l)LzcZ7vv{oUmzUm5yzeJt2VhbotPWvLLry=W5#Q!o zKf1ige?A4?x5RYiicVVx zN=B#qPv<+xCUS!JS={GhpdLrap}q~!+S9z@09v=UY>3cylze3u$3xWK<+lik|C-{Hrzr_jpt@^;7{x?xHl!CQ01k1A}&Ul>A&{7e{mTA1S z!wE=&e=8Oxw2+{~rd=>7vEvoxE(iXCEKU?)3T#NTtTnXBw-PX!k(}(jekcSl#KAk; z0Ptkth~w#Y3+T`A*CW)_1|o7hZw){a$HhzldN!drb7T5>SR_4Z1gfn+^Xi&Ahr3R8 z%H230%)zYq)OwuxL$cqQlFObF^PtglBfK$Yu}r;tp3Vf{-~ z5mN)xA8^uer<2kY>*5~FA>5itvx(hx=Jpr-_5MH+PEfu_&TCCUcUzUA3M@w{121~P z!O1c;_#5fZJK(avzKpoT2Z)#H|A{;b5P{rvLfekY9PzE^Fd$Q41KP)=_&?@5Jz((p zx9}_clDJLda}28(X{(++1jn?b(91Cki8Bz(`X%+4-#W6snjccdhAmD0mLER=BTjV@ zI;fRR^h#F54g?~MWUzx@VE}SnIOm&8*O>!PCAbOh^d#xTm-C(UMoUvuW0&LU2-6ttCXe*l9j)A}dkN(!cDn%c~g12|eD<*lD# z36hScwTavj0@Eco+D9%6hmpPj`e$>3=2$<#ERqhV&z2=v)T3{hh*34%PZVbg)QB;&o3bYk_KV||3Z z$aj(C0N8FLmsE3N50cR13{8?-AVabV?_&(c=qADmoTzZ2bp;H9Q-<#%37#uj|M?c1 zY;@a%$2jefd}Pq6YLr_Sasf=n9a|{IFR!Z9$mbAqL~pH!q5m__(5Hsz>3~lT37G+HSY>1&~X*dkmPfvdCGDGEEmd5%-=6m3M- z{~L8`AeK`6DAILsepFV^71eXOdhX4VNp7!9PS$1kR5Cf4m{|XFX}xo@b;QPL%*oEl zVQiDjug9y*r_sA%3&(MD?|JO-e_lKQ{9SC?W&qqqmh2;D_#<5jWjnJ%a$!~ zZ)l7(G%ZtYE^Db@*3urSHMqsu&Fx@=Uv42W2qsRE=JuABx>iHHHni0?MOqt;HmTw= zzSD0@H?+01H`PXrIjwbdXEd*WpQVG`B5lySS~krm-aAS1 zs;;J`ya^h&H%T2>9kjz5uU=i#w8ChjO!Jz$*80ZgwaaQ+SK_~}M(F6O*U+X!1tA2N zIySYhHX7^dBg<+UVJB{URjbidv%1cp_Lr?}ZC-1vZCDXm#T{m}t!i$Kgj}4dKWp0R zs81Vf&||PEx3H?_;kxbP@beXI;|@`t_T-*4CzG6s>Hn zX<3DCtXt7oXDkO>V`W{Wu4xS!zRhTPJvSl@GZFQ}Y zW%V@;ka=B8t5FkaZisgcJ4F+9Ff%9rW=oNxt7}#^)Ee~-EN)FBnS3=mzPT3CtX$Ss zv!+gTTHQKyb{JO2{|a;w^Q?#au<07w8k(Don&q&+vAnLnxwVdc5-qXdZALv@Om%A; zCt&^v1X2nuN0S$dVFGVnPSt6+L11_@oEOyXZ3g)yL_^_f_?5Bz;s{JmqqG2nv_3XS z;k^<3m=QZkLzA!#2>|co`lp{!6`Gx&AIhJSJ1I9WG-37BDR`+tPs~_XFm(dwnwlpR z&I}u&5 zZ0eK=b&d5CMF&l6XsT^&=lI0JNSR>Q6?OHw82k~KGco~nMFx=ui6V}i6B?RM!=Y9BmHesX>5@Me??<({^ht~~{PV}wa95w?A#4@?>7w^d(nZ*1oH7jc zi5|kXOH6&Lhp_*V*id;V>^_;EuVH_ZY4r&oqI*qZA$ce46PZ?@^dT(3Z_UJ4S8H^G zB&I&`Lv(o(Q=j@FtW;u^THR`isZak9U8BU*Cx8gsD6tx??sXDVpF|H^(Z_c{`CrL1?18hBjM1q3oUD5R(!y_N zr}$@IZFS)6pK35|X_EM@LizC@^(mwfs$@xwKZ(R`pPu3`?yxS~zYlJ181q3>AZhj@ z9cyC_jg70F(hk4x{KS3b@u4v%=^R%+oK(E8EM5#2WUs3wPc*?7VLz3a`jiu4_e$)L zAmh3RB&I&?M07_aram1+*fEL8n}M%7H`I68a-XoiWvnlig>1agonBN7fGvnukt|bh zay}0jz8!)u{!|px&*6TnxCS2;x*Fg5=DW+&X>*dSBe6gtJ92K4^$VYet~iO}(cO|i zf69vaqi-*w@FU{YAz5BZQmFC`qMUr=m@MZ{VX5+xtF1HP9P^cLfG&jpLDF#i2`#2Y z{Dbc2OFtM6npu*DW2K@2ztRr7T(P5eS4lelG*_(MYpigmUB(^*ns2&jxZ1{tCwii> zP}0+-eK;akOunUk7|HeNOUsD8(LF{_3GFk<9z4O7R~d`HhDGJ#cdOfH^+cIvsE8A% zrIcl)xB;274E%~k50_=AsNycP#7K98$XP~uH;e$wP*KcXY#I2f{vIwXHjBCoEki|N zFOHv;?cuV-uM%}Dv3QhrgCS@C?jR7$i2dxHtK2g1GmAZ3R&1ts7h1+(Hz0GCfnT@l z;j#=hBe)AK5k1@>a+Wc)8%BU-oZJgOtQVX{qWhwrGL5-0P>m3h+%zg9cXo;U1bzzjTjEUVaf#>yttJR0Q*fJ)$0hzOSHP^k! zGEV6Z0{*d%D@2_EF;_tuC=RCSek!oF!;p%(~X~@XJcuL zS0u4)EMXZ7Vre~L89WQ=5T`BU>~0tVR&0gtF18Huje9yuYyJ#v9#MM$@`Q}|_dLY* z0n~$dNE~CK_5$UMt1s=skGV*S`HZX8kP(X@BzcB5j}RSQ=i@&^n@3bn*E1fUM?%Qc zwHp5!+C0+AsDbYsAw2FhYM(%Rm<(+mAv(G?<39s`>QW$%#G4pDHO5DMOF}c_@p!Ignstm9$LLFC>LSL~=r@c8 ziEm_Fjb_6bBk?Va&x!F-9@)uwJU&-RikpF_8}nlHYMr1CeY9g(?Zj6k`G_fglq^r6 z<*A)IpCgn`8^y6OZZg*-?{sL*N0Q=RD^AXvUXCbZltd}^+L%6!0l?gBZBfa1h@8}|W zyjhW(l6-aeS9Va5-OEQsKrgO#XkI=l9(wUw5)zk}PqTo#;T^r;Kj{U3 zNaEghr5U(CXpUFG-GJp~vTJxx#^e%~$zLZq$ z9+iPo(W8hj^?`OT{gslT7eCeuuK1A}6y-0L?Wy@i;nlhcPk@FGll;>>xZf2WzTJbXc5m?Ds@NEmzdGUaNdEKRG2pZW7eul)qiBFNFp_^K#(fmlb+A)_> zAufgIh-~bngZN*Bew{PsSy+uOysKd1x-DOYO83E>Qg5u}lz7 zvbD(ZqT3<9OOd}64?5NERkFU?p(#97;1HK zxSkTXn4Q&0!}A_|pVaGB557doN#_)FDSa~}{bvG>;S*$DtS`Yq&v?uM`>7v^#O2})S zhn~(q=-RB&(>_IAv=66C$+KGO`=kfYlQ_N>&PD&O$QmDN{Pp3$=|OVNbhi9zCq_p>gz>loQ`P$QMD2pC@YctOImP4aK`;9DeqsfUkRpKa0TOQ{WMhaYJ;@&C2tbE60UmBfGU!5@^kT1TsX z`Gdso(CACGb{~{Dk&(V?UUQ@^Oo zk#?f$1q#G{l*E<3YQ7xj!9S7h&h_AGJ#(f9&zAmBEpgSZnx~d)^retvtjxD+IN4{K z#7}te^%A%Iq9N5U>m;uBXA0jb@lhW7nBjk|Cq$@@ZkTD_-{S7idJ=`Zx)XGlCEaW#JTO1rPu=!yRT z$^ZKrPI|49e6I1}^%DQF2fsw(H+%4P692ixl|0{<^6b;-NgnlH;1@NVLZoaDJv%Hxx9PTAoq zN$>aI9TE>pT=mN=*)RPydgA}Ela2WxF?e@I4a$xd(q);xAB)-yvMltA>+a>KtLShLc`bN&2lGyhGwUB(C(DCGB&wMo;`pB(CNk z)n7l8eD2Wbsoh-?|AU9WimPhgQ0;D%{NMD@EBq@D|9d2V^_Eg4&+jCjApKY2k4rqo zgYT1gj>MHb|FED0u9G!-vco_rXRd~mzAs5WlRWry5}&5wI-gk@PJBL>^rasBLy1>v zIPs~La;kW*^v#h6Rm(Mc;-4k)3ni}fRp*%P8a?q>=Z05kIPsY%`E2pv6C{3(2cIqR zYd!c(iT^*Pod^r<>zXlJ{}^b@F2!f0cY7xy3V@ z<1<9;F+P1bKBI+Wd{$DY%<&J&Cpf;5{2a%BBcCE1#|wKOYbrV7WGG=SoL`7N;@O7} zBw9YO@o!ANNbI5Cf&E=796HC+{(Z;u$Uhbi9XmfHu>?wp<{XG6ydOMo)i9sa=PRDkPj6OowwI_)oZ{2KBp!lAPh*W>lVp|h6uH#`10`846!&XkbN`7CnluidYHMC=jIfbc?@FC6jg#y3b7I=&yCFPU+j1%@(;)@o<&%_?_ zJd0pL`B^yP8BLuHj*lX5%>B>u+wca7Oy)4hA4qX#kmGOCzJMIz9YR}7COZ4$8UJOD z_omL(qSHZi?vL=fqJwd;``!zMV;rj3-fMXH@vJ&bM_B%dzkI`%^Zh$qSMwy!t_mNKac%dE*$-Ojq!i%_{-$0 zg(LnZ)cH<0biSayL&P5X zQ^O0To7f+mqU8TTXK&+^FC6`9$_EV#9p9bY@&w}4@u_t7y=gze@gvC36|UoRnQ+8& z3GJ_Ryo~%-$2XAQ;rL4OhaDfy9rB-!4jo>?#U@N3U~)n~tLyV|NrSQyIIj&G#?4#E-VTa14X za`-(60xX@y9`W~~epkm2CqLftE6MvgKAC)|<8#S}JN_VfDY?bTYG#7iV|?s+tjmNW z{*S41rQ`3B-$-uyEjbQ%iaqr2=D5uk4*l(SOB+1u_*Ufegk$_KO3gD1$l(lnrFB+r^v*ge@Q0#k(J>tw~JbfJRPkx+m#A)y64iXNXhiHGA<1@)^|FiA$ zWAZX*znuJh$A2Tg$ng#2mkCFl?`#$Rg>s#6#JSDx3C`T)cti5rg+u4G)I4*qaOmto zd&?8nuieNWqrHuP6?L8$9c(}L9Yb#lhkk47yzO`k^7n+R&L_g5(}VV(Io^%@JI4#i z*E)VG`LE=@Uk$k5U>p!nKkgSh2}e9PQfF7kuO;8d@yE!sjz3J^Lb&?P6%M~EXn%;~ zACPw^w|?0tefvguk<wP$-{E)%@_Whs_&n?Ehtd88$A^%==5+d{!;o1f_E?W2xcz)C9P9BM>U`z+1oH2N ztIm4i$#zKl-yFY|yaDry?blC`H*|b9c@DXakM(OWu}3`P*{_zu5zn{OY2)}B@{W#g zvu9`&N+-wbk#`lYevc9kzny5`*YOVICy`sf?3!e>v8I3;n0~x`_~*FN4{7%bnL#?hr*$A1MOEjK9&4C z$Nx#b*6~NleZs$6d?`?eS15B&M9)5qL z{yN9I?UnYx^0(=h zJMs$#7COEy`Rk4!OupFhHss66EzT~C^V105=yZ;xPJM3gHlAI`a~wa8ys_hb$@e9< zc#dT}2S#|F(>aYgy&WG+ev;$G%4*Uyq1A;(3YvvV3pr_W|lG6nn&ZANlK! zKTW>a@h8cb30J=>ghT&z+OKx}Rr2r1tzSbz8*Dwm4Z^}udOO~e=Z9xFzKr%~Ic~?( za~)qzohgp5;dow0j%u?clJwsb&i)N9dqM28V*jbLZ%)78iT!?Jza7WP*5mg3qziX) zyb*a5;TX>kskI+D;3TsYJ5uH>^LI!{FSVy82hI!hfNM83l5U_GGNet6K=$hw#~URC&7Aw{T;M#<@k-{d5%9yek?iSZ;?tT|BJ;Q@vmeYrH)&F zCOck_^~)Xqi#peld%x4f9^3hLjB~bd#M7AdM;*6ud0e>aJTDwN9a&%Ccw5%r;MC&m z651q%NzL;nI`)JC-NfUh!ZcAG1+92e9s0SQAxn1z@L|)IubB5Ss9PmA|C?ka& zNy4G?CGF31{8RGD!ZDtQg%`>{$m@l9KJuCHd!4;)Z*zphZzh|VXC8O_5Bh!4@jYn& zisOyRmpR^%e7WQ8$iHy>1oE#PKbHJQ;TVSv^}@eUekDiMo~;AVX^#K3`NYPdm2iy1 znORtcX9FBB%qBR~+3}g=T^+xTyr*!)`DOi7XQJc$I8o*za>S2)z{*`>k2v4Wrc3T| z{B82Nj{ibF&+)IxpA(KakK%Z)a=d?ourQQw$YEyZEZ_(4kN>rKxLLEb-rn*3$h$e- zp1gjhc$oA2y<(7w>|Zsg;HqrVR~NaMVK9Qw9Su;eCZZ`;od;k|<0Y1E(P z_#pE6j*lf@=y)0VV#jYFU+VZ&@>PyMNdCFw_mh83UXT5?WA@eupx3qQ@p;;B>-dx8 zIpn6(K5d?9?d(_5zOCby7rF??dYRfF6`JVy^VGl0aa%9{a(r6^7Rs;WsM<4V;Ej3l zhJCJAc>T#Z_i)_uOFPG#aDV9N_|D{A9k=|F=Xh({_a(PDISiR0&ffCQFvl%Vm5R>R z=qSq+XMZyNUgday@@bBjlFx9wnEV09r;tDF_$B1?g!c|H*5mqmK{(dSblSh@_%!mj z$kCi1MNN9V*4bNr{Mqq`sIyUY?AbI3<+e=ZlH80qcV?WOgd@(S)H%}eH_7{uqj{55 zGWlQN?AOu0$no#V$A}K!Voh|eaQ55ppE|k5@kZpghz{TSOBy`p><^^UicPM(!Psu z-U3YcK&LZ`I)fb_PCiU@7;>UB$=P2*`|}(>pZrqC?k-zA8JMvc?Z$bWs@ZRG0UE%OsLi-OK zA4P8WDA2ENX^6>xJCFAKWZHOM9^scq_^lB>OL$k#WAaboh?C)G7DV_G$L*QvRT2KJ zaQL-x*&rN#k6_(CpJC%*e0P9QjQ32dnN|^gh;aC|eXN)8BdLK2ey;)r6Xj<)Zr6}k z3AY&0-k!(DV&%^{d%Jd85kj?jm(Mg1&-VId%PjMV{l2gnU92HJ2(5E z9Usc=dut{l8z1AlJN_B%J379Re1PN4xP2EoUd8n?F2e0|(-zNe+#Y5+d;4C9#~rut zXLvcnKXBao^@ZcRGyV;ZoBf_V5Lle{eFg0!ymy4#=afySd%F2#N}av&^BuS6-ls?S zGmhKm^xuf^PaL<;(f<|UO?guo@pDs1dT?BXUmW4~c~7sie@;3e#(BDx=`0*6-|i>$ za6D}tzL!fl;}YoG&~t)OlFQ zJS<%8S2%8Y;78%A^Sf~9nEkfA>40$qw{31u$1OkTbK|f-C%jO4I(y^8BK)QZe>}oh zM)(HDEzX9#z_ETA-z~yhM0n>2?=L(r^uG}XA(TSl7$5U{uH%;XZi?`E5&m6-Z@XvW zKDl0lU(@d#;r)f@1$&D>U$|`}P(C}tZ*-ieRhhYtGc9KpMELu{o5LYXy}i;ItVi(k z$afT;M~2D%5&n1Ks?$$6bZi{#xkva_eudaW=gIIwx!dto2@Rj4b$k)|YZ1O8!Z${^ zJ>O{KvnysoX}fniHQs}~tK;^(w?4;+ewqF0&fcEK9v$J69Pg2ak-0L$Z+H9z+CS*H z={ytRZ#Zr`A2~jR`rkzO9}&L8K50V?Bj1`$fIUwL-ZV8y{`U}j&L;fS2p{b@FK;vU zd?55;!rebJIbwf<<7R)4aBfOTJk`Rv3nu&%;k+fE@cQf|;sNiH&~Pu^apKIO5kA0i z( z(?7zeIDSE59X`kA_~qpDgWKe;dX6-1wRSrB|>7q!~V%6>96Gm zkk-O^Dw-Jfjqt&aTka?p&O=b5Gg-J@i(tWhj@!Cxd;(dX1~*OcJp2mv> z^TQ0`nwRDX*L+wloVRuovP5_e=P_BudGy!zMWD69Z5v4t3`4<0k83%?^|+Z8uG@2a z;krHN3D@nppKv>;KpaDb>-j^ua6R9s60Y0%RN*}JfP7|#a65K^&k@c;A8@8xI1e=m zUm`r4ko4aw;mw4v70#59F0G$Vu(*ZT=LpAsWF;$Hucz7zKhTWBG*5VI;r)cS5k6G7 z-uEaMZs#m$RwZ2T3r!VnxgYj3gxkFV@HxUe0I*aGKg3{|E)jmH@KwSO7rs__C*hV{ zF#er|=P>DjA0a#|{7B*U`*^VLCfxRMa5S~^Ql`U<@qTR6gHz*GtPga2D(hD{{xItg zI9|>AbB-@z{R7ACzUz;U=W!hE{WQd>`F0n8P%zPa*j%{gx5I>Memh3E=B3je&q=(6 zH*UWxg~hNxA-qt&bM}vxUMd(98C9JieH zoN(j~+a{Jeej5FLC0z4^{!X9fhaF{qL>|ba&LN&t_h`rM{g+c6Z@{|!ZV$!*`u0B5 zInLgGclc_@r?Xz|xV=AXzh`IqfAA#b3uoW3QQEOz9G}nnK3k>BO~>9x%XQq|@3Y^J zGkbf#Z-BEOOuwTXx8G^I-tpc{1`j*FGy7HT_`c*z9JlxT*E?>%*VTv{yv2VVb@q0A z2D$y78tjqhEoU7m_Q>;Cj$*&FhC1@R@gZWbdHyWnTqTgnoGYBO3BOdh#exM>g){WT z{x;!UB?+G;T+de@5pKB+4W1Hi`y%*4;d;LMhHyKU!Tvqrn$K4W*L?nsaLd`y`B}K0 zuWl5s=d0Uru&_QXH$!Jv;mH41nhMwRRr|d*=;--s2eG%@39TcA>-p+Y!u5RhMB#eA zda7_eUo8}F#}N1}6|U#26NKye>V?AfeDzA+$F(;d;LMr*J)AZOEMsese9DFtxk|uE(Rj z#a@p`_IwKL^?bFR*yA{2Wl<}q8> z$QehAR?9GtV!Sl1)|_Vf?Q{%6&Zm}7Ei@dwDf1mZ?G_p56=>=dH5yanumAd zpg>3Su>HOkxaQ$OVy}5vpDWWme2ds?9CFubh6=P{LQ}4JtVB3dMMA2CYaY8n zxaP6@g>%rx8DQsf2G3dv4kZvFC7MuX!wsfe8g%^O$`e8l0Op z%rbW009^Cf8KT2YHL))ju6gVd;hM*85w3acA>o?Gs)cjYOZ+Yqu6gV$;hM+n{s8)= zc`OGY6ihUa+2=XHHILbI>EN2jju#!xV?%{&9vdq>8?>xU5#G#TnA-0oV{vog%f(*v z*jC)=u~_ri9>O(`brr68%szJr9nE92#9s5*Q^GZmy&+ul*ecSfhUg+2GabX?Q+Ki|u3L)3l3pZ<1QACuCK*6xEog{N5wX+3d#}tzW z416H}y%CV~fIov&s0%vScJj)X}VF z8DsHHHVKh3o3K<_k&&ePVF$612(yKw3c|X!{U^Vmva+aRZ2pLX;*vT-%h%<}t{3(y zY!So8jYz8_^G6jGl=m&e@Ps`xH?1F2R4_cP7gbc0jbUiRi-wIGnO|HsB7k(hVA!yV zqAd4oZqE5wXC6ih{C{MVqpUvXPq`mK2wTjU-h{b`6RKoS)PS$CQ>9VT(@G zi$>*-s3<5c3aRV=U2sgrAz9C`2*$%i4bQ8Y+jPda$1x7)XaCps zI95SZj~$^}6Mu75q?mu39v7Bj-uJ(XZQ8iN^2lw{C(PgwlV^a_ym{$Nd)9}9DGnia zE^6mQX9QN4|7!Z}$o4kL+6KzBkil%eq30tC99P%|6_R7wf*GrVocBV(A4|?BhtQ# z?T<$zDOs7vEWR(JF8{Wp&2{#9uD*AqeKmK~LTB&eZyRZEzaL+)h4x28+Rxy{sa_L8 z%KOLlVED7mrN-MFw%2RZy4nwlw6A9SY>i?%A2<_|gKk>=5m7OQRf6MUl{`ZRbucm*!#)qQ!kKfy?%l}mR zZ;wWy!2f~a<^8vb_+Lx^eb88n_mAg1>hfP*NB`Rd9q+$u#D5-dzEz8F%zFQwBL0`t z|5Ua||FJK7|HnrB+f6>Rr_5&l2S(cG@FwAQ){s*le}1HWmhG3g_E}fQ^C8&8dAP4x zx|Z$jcNJ`b_kV7r{ZtzAG{~B7*8d5ieO>E+)Kh5_-TrZoZ{unFiirOi^zTmJH}ijU zr2QPW-%|dX$@Yj%%L{DJNzEclM>fUtLv@Y+5;n}%v`lBb-jktyUE^0($M|&$5`O#^ zMf}_EMf>f-`+qmm|MfIv8m{Su_1mWZj`+8m+xEVl31n@C(;p)JzlHs;rXBWQ+|Tp< zZxl8V#1dpSDT8?v+U`HwLThhzJV#a6_z%W~K`8AxfbfrVacghe?|$^}$GMz0we=n+ z^!)hm74bji1z6Xd@ZSg~n<9U#)NA1OspTacB?CJZ&82hgPTH zn1SgO+wTeC<;VZ~i2r7N(soC?1F-iG=bN$6bQErkg>umW>D2yv+utMc-`_a3T*No| z5P$#h^6@u``2S{1>akzY*W&%>g!bWYv+*m>O)XbpVJPrFAiTW)))D_lRH9Y5KgRnI zX>Ied!uwiv`R~^;^>5cf@Q;1b`~Q2y|D3Z^j~_QT&*{|nze~h_=I^QH6s~{xKP9}p z|6}RD{ibd*SKX0RGb?>tWuwSE75-{Hf3X1;Ug z%sFSyoLTOYwdGY)eWq!sWEy7}@sdIf<3Lp$EoQjbs5LG$^76-xpK!{lrxg^Ilujut zpQ-`13+oouH^fm;9LuC39wn+x`{WxW8<3ecI-EIaR^(cf%V$ z4{lrn5%!kv%X@%C32#0#5Z-)lTH)VcPVN7_2faNYi+{j_!sN-$C(Oazc44RQo`MpE__Z<^p^W)Os=*toy- zrEuHhq4P^FD4AC>f8L(BVkPUo%!A$oOM*8%R`U7dW^ltTP`7-;q2PwC$ZUKi7>&YQ znwVpBF^N0b>)QK3+%fyai4(yA>yS07>Rv8+knCL5-uk32c)aW2fHE4nWBG@wq6aI! z_@pGbb52iV%BHOBaP;Gfw#Oj)-m1cvTaI+h_$J1e1o|V`vV^}yhDYmV5Om#1H)w2N zHO0EJe{B3VtU?!LtkwWT*t8U-^87rQ6rNF^E!{f0zjjy?}^w$xMqk?;@~$6hEA zyJ?_1dRJ_GxyzfV%SX`e=yi(A29$`rpYXlTy+26=a{N0UL;<$yB88*J!|=+H`TM)J zR9SGRom#fZ4usntg_Awi`oSI-7iu5~P_;Ed!{J)8kGQZhOxR z?o7_!l$_T3$)1KS`TL1rV9b8Ookgj|n~GxMf4B!#@H^Elv&-LoG}N{FTiAq!k3}%C zlKlnAJt80U-rcs(+@t1S{%*xdh@QWD-DD%uJJvt7Usu$_X#E^bw0@PM!JR!e>~0-> zw78r8gFDZJ!Jah3?dO;qc1O~}(HDa|vkM-JyglLoI2ys7=a~7sDZeutYP?7Kj7KI* z+Iz$P$Y`ZQUmDCFq)17@zQ{i@-*%7KC+z_}SU&LDr)vcJ=O5B!leP|HdT!X?`q3V$ zCzH1h+M`j$$47IW$P{*_a_HL;E@To3M2O^t+s`$F1B#7`=mC;#-DM|?)=%;eZ6SF};2cumW6*LP*}fur{OId= z%Jxgb?PtsO`$>d#mvVd7Y{bzCx@vLVsK4?}c7l>QGp=8SxxWOW@7Ype9^{Pjmx}0@ zM{g$qWD4%=1^G7|ikuYv=xAyK-faR&E;tB%rM&rvHhvxsmOrMC4Y6SVi4;aZ za*a}4#)3z~!LpZ>7s2!&5TCM_!clUcVngs1WhK*p^9=4H|E=n{6^**KQrD=mM{t+R zzl+JgcV(Bg&v>M)Jsc{D?kQRKRiCo<(nrdJrGIO$43(@q-X}QasglB{BafFw4^t6n zu=F5LhhihRi{=A0P{g8Y7iI^cN1t(PR}uX;O_>?xm^1m9Pi?zH2(hKXUCI9Fvt{iS zp|%f8ir1a!QxYuQU%0O|59?0rs0s{F6@o&aDZyQ~)xP=>Q1o8;_=erIiXMH8?JDP! zdp5z}&R~C?gW;0vA691gYf(1*bzOlGDbVZ%d9WB@Di<4=$Dwe0B|`8^k-p*RQ}FAw ziOJcKcR0Wl7_Bez435P$rDfYYujTKC4s9oT2X92IYWpw`E0c)g5K}w`A89}Hi?-u7sM}72pj^TM1P$E>!J7C9=HS=%VXdbeqVjyzU;DWv z&sXzSr9{7Kd-Jun_e$En>b)ufz9=?YG5LNXx{>8mS7n9oKVhvw4{MBY@R!Gf*Y9RY z+D;5$;nsE~9LqD1`kxo;|Lh&n%yqq@C%}i&Ip8~kA$mf>h6x@9rZbxC>nJa|!BRrJE+ z*d+$!F0o_*_K90GnKm8@ZoCLPJY9w@6<2+8VzObZJhKYR{}AICHXYIO1L5c%=q*$x zUEie5jj&62^E_0O+BspNWyj;FRpTFiviyKiY#0yG%h3moYO?#B*&L?-9jVCQt@Tdx zf~?0&tcCeg)xOYI6@BMj(lP%K+XwR`Q-=Sl!Z%xwLAiNwHlyTWvh&e{;f*IEL$ITT z<{x5_*p0D%9b?@iEC&<&+i-LeF%({39S;8f8^|;}9Q`-<6W;hrWF&ScIc@*IhV`*X zYPfxdxfeDrd@7RBuw}0gOWI?;y`^&fg8IkzYZHj|qoWJF=+oJdCb;2dbXK)_1@=|{ zu4-R}P1Wa-x#8#++}rfRe^o_4tO!p18ks6&A8AE9SO+Y@eS`+{6(RabAvk%6paaPxDFhOMnx`adoM5lMB7&h z!E1g31bflg{=7Xa8r-!zjN?>$)eHom?C1dygLLITqx-%%411ODi}EH$#1F)VM}xZ# zH2bN^(XH*5eb#ouT>0_Qo8>x6`=xOES*BvMYD75t*ZdPlH*58e@DxOQMHIYxDHO=x zkB+d}jlNV7Jr>+$w$J!t-B)(-YC46)_IpL4;D(z>D`*!2A1o$Cqk6J$tm@mbQ2E3Xfk|SP}gF!SGGIu`nM)U)cH$X>U4EyzZNX zl}Fl}b|BMxRbAV==N2Bn;yGk_Ymr`73ezmqlNn zPJ#RgGzz!ZAJ&3B#{;w*8Qi!KmMz)btL>|?!E5?}GWufMV}S~5Ra!~3SJ~#=;LaBF zK{5n&juyGW4eQYla?64n9u&DH!41bn?y}&9w=J$665NmsZfzgbfHV}mrWXpu!JVI< z82lMX4T|UO=Nu@{e}5f?f^}E}x3qnbH>G{f?=bM_DY)zNvi8yEKwXf5X5||!1xv7T z4dfxgP=W@7!CGl>6MEM**qjYIIOiT8OT6(cYAN?0k^}UZg;r9(A(0v>^Qy%jc`G)r z3LxGFDzM;oyusePj&%`|zzSz-e1aPd^rg>NjDK+bB9O@OKbkA%9r=Y*y4M~yq@ulQ zFnLC}@X_GuG$QAb2(O!%&N`R_mtFhJjSA**7gm2{2ua_ z=&`oFf$7$nko~mjn+-(L;08bJU4m_SaKlJ=WB%t`Xjv&)SCnV8epV9w2s3HZL8wyr zaj<#JB_$k z6n@m&(cXMwdi$aYCNX>)qgqn#f+3kx)n;kDx^UXrfpjXd|&3R-?vLe|~*$&-q{092Wf@J$IGRmXx z=I?)ymaUFEU^SMzed-DL-p0}YM)ci%bhes5pRYT;MrTqSykW0C3R}?0tmsD=0e0?-;NGux4AF*kg_mpj=A5Iq%K^W7 zA!>CEE9&w(Xth@Lsh;|h&3PS1!M!Z{RL596Ilgub`U)-hqP^owm~0lz5dA1F56`ly z&E=S2SMENKW?2<(ZZXT|p4FZ_tZKyDC54~iN;i0&f!;j+U(ueNg~-<8l_MxFC{pSMDR$k2IHbh z(6FVO{yQ#*kw{Om$mU}bu>ZSznk#!MIgh(Rcbc-9)Kz!vklm?J0=*e#diP(2e^09filcyQ;=a`2W-Y*DXNjW$dnJgxky0 z!qMsPhTEs#kJTP47)71(V^z`V$Db^}KL>UKypQLr_q-i%U;R4bQuxWe@JpOeyX8jP ziY~d~yg-}(IVBI%xXfmuNVsV0zFh`dg`?Fte0|0DIN*O6(%ue6_ka-VZTahv_T4AT zZx0Cm_p`LoJ$wYgJqGTJ+8&<~r9Jw*J=6hG{CtAz0Y07FPgg|`(c&x*E3PYsYOZD> ztLomF&0KK?V3s81SKZON+a2fEYr^qU%Zu-o72KI+}n80`B0GUo=<{6 zT6;X@htkVi_+LRr!d2;Mco-4ibAaL!3@7k9AH7nl77xSR_7@l-flAl;LX=lYV&l5N zigsxsV zHr;SZm7;C+Ipe^)dx^f4i<0GfpR@XZ=b~i!k?IO?c^2Y^RlOv6ssB=C(gW#q@^d5o4t)q6c+Ske7L!#a zo>2XpY8M%=nW+@M&AA-3UpHwu%~>2=-Z4|u;8HurKJEfDeJ;9WB7O|i*2>ytM!=Ub zk^q^k#`?uZk~s3pZ?@@r};8z6K2lom#K|y-2X?Tl2U;$#T=nioTL@{ zb#@(UqbAm`&9rZGBVpHR(BEn?Ci!~nbCj(**=-W2%t!J0zU??GpMQI$3hX zLk!YnUw`u{4P~G6J*OccWzBBFt5s)A^JP#NQ>hEhsxa2yGVObR`)I#xru+>(eG7-o z&J1SwQc~eA-_pp{D|VDJseQ$4U&`6v&cLOpXg%lK6*YR&d8U$R&D%}o&BjQ%t1-8I zgWd;V$++DdNm;Wxou<_7W|1DB+4*ia%XN2>*x5Q3qJC~S&m+vN89*z}?Ph~maR$&@ zaJ#vJ>U>*`5FRM57R5mS$nqxRw`QV+DQRuJe=Xei4%4;o;c0ZIncit??d*c?PhDUS zxiR*q*RdnU6nxao(A996S@_vwW=bOYlj&YQn8^^>4NM;YP9{%$3zLh8Nt5xkncA%+ z!ejnoCUhl97Y@10OxQs~+WkD}qR~Dx;rVZGDjJj>PedrJ}**W=0kNaV_%D48Y0Ub}1wZQGSCNBu6l-U8g5u?v09PwqFG*Gw z<9yRUQZ>Nyr_xU5w&YAH#`&geiRCWOH-~l-<9u_RKAo^QU*L`)ybYRXChGn1u62GF z(c&El&tYh}dtYq$Ur}e^nAjJZ$>w`5lvO+1?Y0Lby}9lGpc+oHXPd5*EQ>P3EeeY~ z!yRlgI}0$=Ox^;XZXx_B{bLf!#di(_?Wdt~45qusfIbRG$=vo9m=0KNOgGcWX7HS8 zwF_Gev&yX)n~CYOvY5U~m`r(Ef!X5|;wRH?`82n!&4wMCBF#pD*;A+BAue#Ah^!@x znvEhehuWxQtys3mm}H6@H3_mXlg%WZA7iEBmP@tGoZm}jp&4f5!;j1 z8sgia75wMN4i$#M7mr4+>6rBzYBp&F!R~Smp`LrMLby;#P5=~DKT}NS36kq-oocII z*rpYHzt#(PYlXpo(h7>X?|uzLgw)MqvrJ{CGZRMtpUslUT>b~MR4J2efv`&4bAAkCWL zW;%KKNSYa=#LOrns?laUJ=hkG+ZJnM;WZaN$a*_&TQG+t=D;RMHTedb7*ew8TAPia z8{_5g$9SKH8)TZ<+`XVTc;5CkL;AcOE$a*wGr3_evzI<;T~kYlonxl|w^J*V^i)Z3 z8EiW9dSgrqP$TB!6phArmR4|G^Gef!8H-Cy&ECDi$+dS#q@~{{?wV!4{q!Ia=Q31Q z`^*HFR*4iae4ZHL@2p1;v?Co<`VL)OdmpAH`QP!%-+7ziR>tUJT)Y~5kC12Z-s3-H znK7ime?sImxs?5eT05PPv*7~ zG=VU$y7>RyMLd8Ef@E%s2>yR}9bN?gBd#WDa+%vM!1RJhM_eMEL8wacbE!g(97aFp z#Ttz<_EWvYgh$4hmbQ&JW2jb$^HkI1rO{wuo}$qhll8rc>KoBTW?%B`Qp8gD3hUVl zW+`>XD?%$Cz?WSHh>ywbAcX;5b{Rm}>~GyPp}iHF{LS425!Wyda}zQKx<4!kxZ)+Q zAdOJ*l2-8|SCDZ~@uF7o0#{5H6)%Vi*5oPICjLTc4s+WCyw8}_Vm!q=c!?U>bYc25 zzmb=^$oPwRdrwvt>o+fANS@Ak5*>c$$ z>5}A+F-e{mlHA!(mn3PSapx!^5=bZwg_lH zKe-Gv=A0QsY5u}>iz7JR?Bb}5U~XF^INt0UZ*aVMpx`K4Z*jG5rCyNCZT}7#20On_cs_3qdx2UqP;N3DO)BJ8A_;pxvQs8tS6dVJQA1dDqrqZ`3jfHBFML}Q?CMplv<;OPyQ(j zjh5kLt&~QiWgHFRxa_4yL{1)_3XQI*z>Wtpa~lmOCS{}RomWhSMwhyx=OqDR{TlV$ zVk}{&<_Nn~D9-)Ncl9$Rrts21Sjt=Sjrlp0BhMRW%pcDAIhgqKrQ@a68VmZY0EJ4a z3ylk1fLgtcVo3ta*Sf+4PCAX?Ftg`npkSe9x{lX#WkYk@ctmC%@0qUCHP4Ef!-Q}c z>6z}4US!P5qLwP9wivTrA{MF|wK)lb8e&$v&QwNB6L=jbkkq(IjGlC|;Weg`b)cmO z#;?qx{TeV2&FQUt-W8S#1~kt~hmxXTQOcf! zsXv8TWVaY)tQPSqm%L`76T{5OqT3GZQxc}J*~l42#gy87BPWk?+4M$zZ*hy1qc4`@ zQAx?%wgk@aIPsh2bB;-8 zPnCRh2309vokcz8&m27ns?jsIeTfeG(n5;Q5xCy3$x%xwF)o+fvAx9sr!TFnW_4d$ zTcJL!uI9|{*4G?;8yVlTUj#nx-D8fvdyH@Qenf<>>#ZDp>l%tlmOc!G`UbXG@7c$6 zFP-#er+)v-U2BehQKvQ}*vp~!zI0uP^GA-p8;@%;j|6mW!e{IEGNWRexGrUU-|w2r z=GOnieT?ZC`I)|6e=5b4^G%57tqFz|m^jcp-6>3}Py}{`;mcWrO93aztVRQWe=|RG zmU(}vQ{Ag(pgGq$7uSqEa?Q!TtyF58RG2iZcSUBpnbD&-=d#{rCXU(Q%XK>61g8ry zkt9Q;M;!|SW-&pMsefXZ;;Kc+Qex}WLDCC%Cvm~hxmU1s#Yq<|LxF-FG|%j;GRcuO z*hoq`Bgw+sQ9Xl3(!f9kz-*T=2#Rq5q-8<_O=_K!3p?so>K*HaP-$AC>=QPxG}j{2 zm&XkP_3MfhZ>+1ng*qTSDVvO(M1w-Y4N$7Z2tq)#p+S>@E*gAtGKDFe(+3(AnFSc@ zK?2~B7RcZvsR}j=ieJolLrt?Hlhhc7c5&|_PQ&B2aS8|ehxOLYF#@s}BV8I9#wfBt zKQtYkge#;BteRt79pdHzEtDUU%41`u67HHr?waRnBxgcCX+a)7F3B{E@k605-v1)4 z$D+w8nWmMRG%!uL_`m>ZbgHW_9|S&4A3e-6e3f@iMe1VCfdN1VZEhC zoKEAs-t0|7U8FHeB|#>sCQ0BNYjQ?RJLNM;=MFrHx|rNm4VLoa7#_0+k(Ur0=aEEM zX}UQiH8aT?(04#}uXHmFrkNsL9ybDI0<0^rS6?yyoN<^^$@9uq%_0un)IN#~MHLkylxbWl8L zF8jd@T}bH$GqGA2v!p<3%5vk``iuq98Z5z1{0{P z$O;$59D8usyuc0<#T-H5s-I~OrmC4;RLv4qvvwFh@j-3kKiD_HT~4%Qx5f^`iqi#% zPA{AD^kS-~I`wbi}e&%eu--u3(GDtI|I4j4jR<~P#XY29@saMTPLEpqKx*Lh^M$W`%2WKu7-F4E; zF=yCLIs{7ZY0l7xE73DtiMpMMjb@$_bW>8+O%HwW3C2Dpkbx=KlVVEw(5Hvjc<>s3 zYMhtW&3JI)DrVx6U_AJ96}w|6{+>Q2qmRj-CU7VArwN-9QQnmJLPosTP7UVB26J|Z z26I#cDT`s6KCz`kj&;J55;if6E0pT=ytky=wLi4#KN*8Fd9u~Ac85KAy47Otu&37m zs#(m?;@eCVo;E+D$7kkxA5*ON{mh5*9ln3j<6pi{0i*q=zUwTMud{YqOt#b7g^X{9 zz02B175l6=Ma7%eyHx(#+G^vm)xN`K`aA6VsJzqJ=WuzS^Sp!d>&|=hc+dF=FuM83 zY4fAZhMjHSka$}nO1CB6m&lFoOWaB2orwoU`TfNARpv8fAkAlqUlGNZ$uFhg@mfj; zJr1V-gWUAf^q*wl@o>fqcnCXtUNwiAY|gSL?>Ef__I~qe6Qet82TXOJ1K>Vqrz3!! z&Zh|gSlU?_)uV|h9feS$`hEC?xxlb&v7z;J_FYByNPic#x8BuS)5~zGe-!vpnr#eC zKqhYo3ITg)UXm;jVCPNN>LyR8!UaDH%s|cbIa*=PZKhVb&3xDl2uct>45P`Oo;IJc zHM(c)FZALU-r`nABi`!V?Zlbh4Z};OJDvCa8r}Q;4L!8th91A@k=Sa)#QsH(+k5oj z5=6Vb$6Y<*Jn!mpk5;;;$87>x8%=0WAd5GfFgMw?J>fRJ{VKlW4Cccswx4`>}*CcC|*ChWkS?}zZ$$!zS|C0QrtNP32 zPgAtkpQda|)mv{$-I^M+{MOVPQ>ot?cDfr=|By;8Q6j1Tkb0aeMd^5IG^q252Coms z_*@^nDH!K-Q}EuP#^>JP5v~+`js!n(@%be9b)3)F!S!izKI_xAr)hk)ryb@>!RK(= z+gvF}D)}ue{de=e6d2%<*A!uZeZ!KI@Q0oc?8fXaz1Y@&`wZlXuu3T36vC>h^ts zX9HCEVA^wO)R-ma#fx%U7}8|Vq6Q}w)9W7*Ht6}VdBpVP@31%eZfEJg?y)IAWKE<2~abjet_SSpWl7Ml<3WPc-GYCy@@&Cc!x%Xb^{W|~p9^AXDyRm39_6+}O z;|il6_Rw9(GW>s%Wuke${eLDF$n)9cu0AvU5hHM-&kj3t2v*UbnfI6y@b*6hV*ku+ z^SO;St{bC``+kD@;^t4$H=eY$(#ByT+uWX5j7u(4Ya)k2L(nZHt!*Ma_Ky>OkwEM;X)`)E?~E`*+Dyiz zfZ(w_J{nE$YMX{nSCINk$$<{{Vech$a9JSeYc}j)7L7>UQd!D&-%YAKKHfN$dAVBl zWPbLS{Riw53$#5byx9^k1hgn71F zzeX^ycU!N~<29?plE)Hu4BamZ!K-kqg`MHd9irJx``1K&zTIKn;b&Yl!mBnEg_uI3 z9d@AH-7K`@1~?>Jv6v>$3d}-lo<}2@S4i=#@EsGp-ZB4WTG)8l|1vlEP~PO*Vn$rww|`E%djPX+B#yH=h;Wlr^#Q?w>wn)6HXd_FOdquFw*Acr zpIGvqwXdOh{WIrfJUEz<)ir@qQM=}_iPyte&n)b|>?7vCQP!u)01I0+YR#uRt@Sjt zn|3z0I(r`S&)VFNHp9?VE(>b7wdSl}W-c1$j$DfQ96=QgEAly&C zNXYVBBxLFF+_RP?CbX)%6FV^|4|tk&@G(r=rgNLTvT{|;5mlWp2WW@Gt>j&m%M7?< zv7KJ<)LuWOc^$h8Bd^lfFTf})c)-M(@qqar`Nn(ZRX&ui^8FMJCR|Xx(scH^1tO!J z8b)8?86tYjs6l~wRfEYtd?@|H_qk70e(u|3`HFYgo2*ST*le>DlgR~_$( z`cnOQ`y`&eYN&QWBVHOWv6|t^m)u6v@;2Yy2pBkP-|f4X%J=%75CP-~-!oKx#`lUS zzvBCZ%AfewSxmpqx&;A-eMt$SS*e<4=LJik>m^%h)49`phc|}rnBP$G8}k+lOJdSd za}Io3`vPiTu+zj`k2i&Y=Rv?{I3hgbd)-HI@O2;LIFCip+GpW5YfL^zZ}NAoCOOb- z++gyC=Fiyi#7hUw*Wx9i5=+%-1XEzmluC?z$P$gy!jqFq+D_#V~iyG`E?0fCS2dIsZPiJWRo5VJ4 zPJ_xVTPbsR_YutTFSeu_vPJ_g;pX2B$gb5x6P7O-m*G-o*`?N+v>o=Pm#4%Q5C0$l zmm|Q;wr|0C1SY)C+)Xzz-OV$Oe6840wq6b@+_qi*2pRSf(F$|h6UAnk^X*x4;=d9B zbz{2Bz&fSvRh$o!iPRit@SNs%VpWj_)zzPwyxrAcd;59 zM$Hy8SZ5dK@vz4DVjj}sQumNT0GC_$Ab;)A3tKFY<@l<55b^Np-;ZtDZ;(0P2qf@F z#NB$uZJMlEG8ui?z54lDn(Tgqd~5JgI(I9LE7efaZ1t_2#QWkJwd6Gd9yVf>=3ySD zynsxNyR^oEjuB~8)p3Oa#=PL=!tU7^l$4#fyCIr#>lZ%tvD~jsD!kRQVjy z)z`Ed;q?Ta!tm=j7+a09hqmI{gGM1nwwpKNi;;q*fwy1$0rbwx2Vu6}*Z{fFBd)&P zV-S!*qkK&PdlZhq_9=}hH(q60O_(FZI8N)GtXT+XS-pHs=*z835?CaiL>z#}43XnL znTR3@sOe^5Tep_>jaCYnr{wr9q4U0r1?j1^80xGsig4tpUM4cSt%s56;|KVF?{o+h zFT)l(b#D~4zD{!27TLu`gR!}f3sZz8U2i`Y4V*al6zWYc3kKcyKfvAL0NEjprAS0T zNz)#i2ir=vS_g`?#9K4KYL%;uRx=1~294$#pB-aPA1pzNM;t7Wu1YU$oKiOJESKH- z2E37y*1ZtfZhcf%d8+dvUH(kOs+r=wOuPC*-Z;i&=?5#o->`6KOu1D)S~0b_+t;dT z(%B*GBv4Q5u4mQZtq8|E7FK6W?B4i^b2?Zw5LWds^pyc$fM|It=JZ zV_1c-Ry7+^&c2q`=4)|viNXzZBA~s`Z%j0%EwRUF$&jNjW|%!}IGL1^#?%6fz9&f= zX?QN|nOg;6C}g-=@YP|c0PTvZx?q@!hN*dS2Dlp11&p0A3F?EHyy~z!aenF3B#TQ)Xy1E?IHKItT_Co$u%T4m*Dm8OFO$H*mAZjf~^~ z=crL~x13Ujri_r*H*SQ!A!!5}MQ<}YsidU%TZI`?a?q?**e<6(njzoGUxuT}@EI_J zp0wc@4M|4x+rqH9J*f-|l~u5RR?Og?d2C`%0TV4sPeCm{^`ZNwaF_|5Ey&I}w<{mZ zMt|A4Y(P7AF5KGVWwDl8&vVH+*f^RVnP8OJ$GQYA(FgAbOKmj*7A|8Dym|1bE(U)b z>@;qCXVJ$3A4}6i+iK)N0MBUi&aVI1&QXHnTxn;%Jt1$;QsFrsonuYx_?px%@QM+H44tnD#9|U#M8b1AzZ-Ac$JaQ zQcqcZ)Lg++R7O4rddgzY69?62g%uJ~8TnLST~M(4PK7GNg04iL5!X|dUO@hjo^qY1 zT0Ln#0BBDXSlMP%s5^J;mpiK)v#ZbYkRV-Ys$UTWgB!RF#p>GEaG_r#!+_ z#%Hu$$-Sh-tD133pgz$T(+QyzcX+#e_G7-Me7tUP159k&Dz?k!*e~Pq9GBg9IeKN9 zot0zv9iT(DeR3Y&S2$|oO@qfR`vdD6%U*B)(6;|v*}v2yIp zLH4lI_=?)5`)QqNm;K}w*ag-2$kAh#{jj~;MW17@dB(I4ns1oj!Nsr>i*=F$ySQ90 zTed%B7fkX%{q3e!9fFN&>}B`rV>exDuifHe zY1w1)?8qwnW^fm7`p&AVM7es;ma`v7hkOuwC&r9&xpR+GKO zJWLLHe}a7=;ig3UcZomFaMPsa*zfzl@Vh~JUrZ}UIkw|52pm|)+V_(Y=4BnzJaxUPqe`0RvCJ6mi# zlq8Yf9|*M^zZcBw|rNX;C<&i5_Hh9 z6I})h*h#bTDY-)~`&;&Zd>>i%N7knnJ_LA!ZU5DN%CY~9k4)LuCEV!ZmyE-!eUEvU z&pzfHcUjQ11L=0w0=;vJHF|lb{e=01Y43wi*tc0fuHvp{rw4JnXQdOcdRL;l&2h4v0Yq5@imIN@0O}#zZ>_>7 zMG#vPis-S$N%8vzXIgVf7Rh+7(+ACZv^qV*#5~JMMsWnFEo)GvlWff^suV@PHOLff z(fWLD-HVv|Z{XJ&h%(1~5wcigOee*f^<8}o;yy-FALpPCF8ZyJro&uWY=4cD>hI|< zD#~?wS~CMh>xp|FamP<#c{O+l(u0}bT#rU1gXyo@0?fMjMJEe-C4|W`$eK=|(&SwaP;4#Q*D%uW{2DUrd{=1Ob0qzr>bn0ZH<5+2d3^o&w zg+CzL@fe(%XCk$o`LqK;GeuUpNom2F= z@~FXDoZ?Rht1~j4MAPX*984$OUqeF{n2Q`{LyZ#xZuu)jePyhhEDV084{r>c&TyUc ze&(!m9PUqZ(ta-5pHA(`$J#_0{ijZoU7W5&NO%bDWp+X{J2#P1kt3dui$KV7sxHd` zAxoxnDgr`avXeu-*Em6XR5~ZIE_3;{hFz<-A8>Z1GZ>iVKV48r%Q9I{evN>5tJ4!A zW+>VUK^r$uPclzL*vBQ)-<3=*lUK5~K7XJ=D2aeGm%{}0G=zI)IdUocppy*ij}^>M z(iMJ38b6uHOh3oKv6QcIvheWvxA4^WL3Ad;Y<3=s59COl*Za&%7)z0xqR5f1fmOCh zWWh_guBGCPGL3A5uE_j8e}sAXD2PsTPJ$%nSZ8bn1;*T1aR8P*ugiWc*Y zEre$(T8Prro&P+3t)W-$TD_syrvvenYnru>`nqVS@gk!nv z5@j{8{>&5V2nTaU`K?fqummC~N!1`3O8a0TVTt$AD=Qq5_OwnG;(9I0Qz&Lp85S>C zFJhR>v_Dibo$He6RKGP;$#hu&=^S3(bqdAaQaU(Kwf`75j**QxDL}ItZNw+SgC3w7s z`E2SUSMTBuA#qUHELgO~ne6vXK$n;>#nYTJOtf)v}9A1Xn*dVl7;bO!YP$_ansAwartEgP91!bZi01ib?za=sdJ14UWbF$>!8nwd@kzEwxV<&xzk!D%!^4sCJHZ*Z2@ zbkQF^MjGSRr9glCE`pZ@0qcBfS1P?C2%L0uL_@_g+UkBpN&jF#8F)}@H`3+P$o^tUd}b^2b8jrot)AY&cH zdf;HsPHvxVB{X0GSw-Qs4O`olG()j6W?46_;p|`irr&x4LiF=ntFd{$0)$&Z7~xtc z%}=z!N+%6x0&s0b(Ql^)--*l{Tm;o5sTFiMOjG!=$_J6byvup*l|YD;e&$8aL}(BdNx5h9M#j+%p4e3xv|z5*L% zxhb%2T^kX>JX=@fH$I^V_i`TjOo|m2D#2AwF`b;S)33@2R?<3QRk=nf$8Y7Mi`By4 zN9b(t5o||bWk??AjHqyur;$l{;c@7+MRSFmlb-$uSsljEpo>FG>;G_QvEIYqF~P_G z5HEDe{v;$DhK>R+VR%~jkewQVpW(f0j3{OSmQFZ2ZY;<(=ZZT8nrc0)6IZfr^wlr6 zZtxb2mWWJVA8^?rj(43#20rVz{sY1M)*@n;)rHxE>xIE9^=W}-e}PN%wC-CQqKRTX zjS_}97mHmsThfX|05^8UHPf1a;{i?aD(u+V{*M}!PS9$h&?Q) zl3ldCMT99dBWMs?LXK&rAU=swgdR0y_6*(ZPs8k4rb7{Tlsvj+>h*s?eNPVU&S)92 zd+YUoOP2*O4|f+kWn3qD5acp5&xd0KnEU%^4&*UB4Db z2_d|g`QM-y$A5v`24jr2<~rwFC)R9tMpruL<35P&@AF$uO5b_PJ(EN;WIEX=NnWpz*$8EyUA zE|}2S$ae#sg?Ufm+Ht)sCQ$(<5nXX$hLB)bO#LajVl+yK@9{NiFraiGL{Jnr6clx7 z3=;gQPD(M*4GhuJl}R^v=lG+jvzpgCnO4tSc|@xqCa4sYrVj;_9oZg!psST`P`&!sK*5V;;%B5;qW~`uzS% zcvN4%h#eul?i)Gx=~9e+v6o)k##hr=+Yr&HC|`MgI8| zc;6Pwl`A@JQarAcJTm;&hsKN1ovUyL&)26|hK*p!5xW$Z4^que`hF!Qr8kgK`h<2XnA0 zKD`Ea{*desCgr;rN4|%oL9y#s3LE=?w;-eAFeFrC?)Whv+=+xj3TRi^b%#FZ2*&$P6erTcKTM9Nz~#}*_Vi&GI5 zc^Rq1CU0U5*1}BdG82z}Ru(;A&=+6pwHASI!8;)#13D~F== zxmf$K%FC9g6w@`O;g%W9bI%rJOZBB{YAuOzw12v4R?pN3nwV+*2_Z(cK@`o zbH=sX&6m^qpUIomH$awU{Y0|eF4(>)*oxbnEM18W4o{3M=K5oB&9aW#HGbCE@Dh=uCG69#iDv++0w>(W5H!BS{Afi+EQ1$Y+1hO1(XX&GByv?TfAUN zeQi@kBQ$Pplsd3F=!Z34zPz?^kkp;EOU?=W;Nwd*dyS(0@{ueB6Ua`tpwRBNr2@jajvSdYbB;?{u<5}BM zPh+~Q79$3mat}*tFKvm`)?Lg@$#l*2bu(%gkx9rAKo`Lu>a1^EM1TFJzPY(^1*#S| z*ETJ|FxD?xR&Oi>TVrv3q`q+_8NS76s$ELAVH z1ueBJ>&2keuf|}9VRigpgdt*{4R9Ye-O`q&D;ka3g|NS|u)bkMb3OYcdSby_j0U)v z8rBxh!2A&iq!e0+E-x0-1m3)mn$vWH!0=``FQ{8v4Dv~chRWseD`VlM5ty82X#pl_ zLu``5dn5Q`M(iX@8-;C10C*p_Kl7~W(3JfAQ2vD6ak+V+G0RV#fR|c~#H7^)r;g!L z3$R7Ck=j^U&P*C3c-X2Y_=b!d3nI0Pjj>BsEUzECsJ3xw{jxDjYL_psZyvj- ze&yKn>M@m1~*#TI2L1CyNvr> zTvs<1L$Kh~31jM)HH;MlGbB> zY2z9Ak>e>-CWeM%*hk1Qr_Ul9S^R1k=4JR5kJV{r-{c+vd~(~E09<_&VI+M;q9ir# zYF{|TUv{0n!UFu! zO#F1UM%Pbb>Ki{qmnSjxtslb5Bvz%ht&y1e_7Bl5lbHGj5Mk>iR;#tWL1OBgC`5O= z#MHNM2zyv!A+7BJiK%Y|5#3u|v_0MhmMlMss`n9+*l4Yf2@+G^6rw)D5>ww6BJ6@L z_%%sP*KLCbD?r{<65Vz&F`C^xThjMHKrz==PHMjO7@h;tHFZob*f264cSK_9+d+gKlbC!M_^ES4{gy3{3F}+V`chrU#tS{^Ma2Nv zf_N3lI`tvv3xMI*Avp23qL_Xvk6Yz+_^Qyg_|-Sx-JU_4nq(b`1rj-s(~_)T`aEG<1Rv3{?!!tHiBdkkp4Ezxwf zjgL-rMPs3+tE7E7B34blrF|L6_3cZ`h<(sKMo$^-JINkA!BtiTi+_eimEupU(|7em zon@$q6Q`w|Wu&+PS+WfL6^kyCWvHm)uC&BVcY`QdMtUcV0LxHO%w266_^JLbk`-G; z-IbQ1qOcdopOx(*S>mq}b*iy=mUe<6XYbA+5X*@D**jOgW#G>&c9E>uO7E_;jQ(yw zmMjB*-L8vd8EQpvS6U)^xIvUGV_+wY0LwVJ8+=eVIL$jqc54|la?jB^9B zWbtmUbCqSB(isF|8Q$-(3Np($tsDB-U*~ewTgF6JSrx4KA5&HkKdspA%LPN8$!WL+l(tBZxPNV=UBJpn`Grqh0u8E|Ovf<7zi##3Beuo}sNHL`P{p{%2_Gh#Khz z#^dWq2xUsk@jpXbN17Qm@S7uq$DKx<6X*<+p{*lCM`;88XW*YoYQ}D6Jid;ok^T|m z>NFPr)qw4c_f%|RfBN$d#^dWqt)%z^<0Ho7>xjyI#dt_kk<23DZ9U`% z#&E?yk@5ICqU?~tczhjEcpt{&>xlZ*f`N?3*M$pZPx$#;^h-NCkw(eq7{*5`I2J)B zFs`&TjNOuA663isdfJ~+Dq=joE+~&LVLVR|;q`#bO=VnpnPI4Nz;wpr>w?^d8r6)` zDPJT@J}+SW6a~j-LM`L*_#cuKiy4o{f4{^V89zP7NBv5|3dZB{T&*;#883;^m&x2E zjH}si7)vF-j&U`c4P%7FH!?mo#z%Q%JLB>ATrDYX1)gq9kI}1rg1Yq4u3@zsUyb;&~Kt zKkB|Gr83=QstZ`}{j$2{RTto~`+Id)uI_r(O}e@^mRFtuPE@44OOt7ti5@~F=z4wa`WHLqy}Av~Qx zBsJ3rBQN~=ghi4J&l!_izoYWWEz4TX0hF<(wH@M%|MY;ZxiVt|GXX&x~&9YdpC6DXj}V_)nyLmUwWbS5r6m>Td9L z-Qb%%xaxO{2Uq>x)D8Z#Zt&Z?!SCq?zrP!Nw+A09{dk`TS8^Wc20!e`vVgVVlH=dbvv_YJ6;=A*(3 zx}h)b23K*(%V$P6^fle!7kY3tFP3=lLvq8|mFRqi+4S^;&aS{-$n}@(s2*2=y@SU zJyq-e7Lf5?;mZH>h#3;GZNY!FPMtv@k{1sMnDRU#=oM-*c>9mM|<{8#epa+XS3dZ>L1@tKPM@5{KP&Xt7IEf1~bl+;OE;R40q zJC+&3Nwy|AUvxXfPbu;*#e+`udyQ1+XViliNc=hv-cy!u@!;w`#M?ahPh|NK z5B?H40MgUq5wo+pX?Ved?~!`F=E3JmIq9B)lF~Or(tj@C7(Pap)&5-3_mlPsN`CaX zOw!ULN8*Zph~$5=2R|71exox>?9d6r9kpYq^&635TNx#-^$MdKrlzaD?S^3Xpd?WV^= zb$3UsddYev&wg1xS;MD*PQ`_x9$eiwjnZ(6C*R2OsTxjv)Q!tT53b_fWDO@ij?|}8 z!->xv{HJu52cIEeW44A9pHrkg=W96eQRl9O9{gg-=VFPI7`okBHF}DB^JLuHsNuwa zljIZi;8#ohdJle+#BcQAH%k0g4cGgd`QlFB>f8>{BDWA>cMwQ z{7nzOOX43%T*;$u{{Gz!-b;=T`60>ktmMIkXPgDZc&QsPRUQbBH9(+&Ph51(ww|2G~yOXBx<@Sze{ zpPf*49xU-kJpHP5^pM7f=F#I)PWQi0evLly5Car@00YmYV^eaaf#pQ!T%xg-+S=a zB>t=i|61bDdGN0!epupUAJSLt$JEby`n|d$dkCzD_z=if(KWB z{ismGiNCUs`sGo@r&RI@YxHEFi4w2z;15Xr0uO$%#4q;XU&?r~!h`=);%hwkLFupS zJ-C|x*JwD+uN2wuEgDYx-b4mO`i%#FK;nPY@F}3XC4tF}ogVyJi9e*_#9!HGuZ9z! zcP0H(9{fd#Kda%y=Oii5%NkC6&Y=N9dewuUA@P4`IN9M@Y0ob-ocQdP^#AtY4@*2r zURY3(=--fd(1X7u@hlA|`PF`XfQA#FAiZIMG{}P|Nqo45ll-4a`NwED@vpRq3)U13 zC;lTOpCS)FMB-H*yhP$NJosdZtG^vZYLYxXq#rK!(9e?e7klutBp#8tn!mfH-PdUJ z#J`W^{{syty_QHm*Lm;;iT}idUncQeJ@{&g|3czQo*zhg_Gt7ZkNPa|OBzn{v`ap( zc<`viU)ONrqxQ8O8m^Dyry5TDeov$PVyYI@Paf* z!>Qj_CH*iD{<6gLB(CfhlJZT|=!ySZlK)fs*EUn%jU9y}uPV;WBK+$H7l$vCI% zaE+w*d+;`i2PLk?rC5$jZ;hV#KO*@L(Qwl1r;^VI4}Pn}$9eGIOZ-$1{yT|JlDLv5 zLCRC3(UUxvS$IKe@zASydu2EHk2O9d|8Cju%^rN0#DC$zUzYf79{fd#|6bxs{tKm? z4|Ibc^ziva@_E67e-cv8cufmRLb+UhLat#)d5n@Z>lCdL*kBx zlb@^eewv08{WwXV<-tcwytjsvJhP-LV4<3>D#U8v_;>{XPdZ~Ma4H`~*T_fo?dGI!gZpE4e-&5Nx}o}AC;7kSp;!3V9{%@A{^}#8N}fMRJVE-e!k>_M ziU;2#@f?XOdH!KR38a%Xda^@bDQB*RlfH)~pK%`id5NE<;X0pU4JSTdNcu7l{*lD1 zG@SUiehJ@L_AhtGME&yya!M&buN_%ew<@4+vU_^T3+^()Vt?`rg9 zpL}Wm;~Gx(xl;1^+Jj#zaTQ0^c>Pr3338kjezU|gC9dRA?<4o`1~2sRc|h`+BXK3qMbbX=HF~noRB4}!G@R`7s^rt?!C#j6Di8jR#4q>YUrBtE zhSPeX-pAS^agtMtf*kf28a>I=Pkta##RFykEQ#;a=!t*6)b}|JCq9*u{v{7yEb${6 zPJGn<@Er{&KI@logWzS15fKjG@!t>&N7>ru()OpTuUy;I^<8cuvv zoHm?yda(L!TU-4LJcQAe`IQ$gEgG^ESB^uJoo~MM>L%HoS*?kTC3s2XS<|t z^WfJ>e3OO~pP(GaA89!8IVS0U;=$jN_%;nEKR=BBl_DODH0!kAfhg>qiJ7Kr{(4 zp}DqLP^^otZ51&hRxGRqJ4W19?5K!XP_SWL!BrOfcm6Z~H~I6D^RUnNohLUl=QnRV zXU@EHX71d3mkNjd;k0ANjqTrIXAdj%FhM*5QTnU4-wm$zw?{Y4)3XM`8ZVIsd@hSLAT zoV@iy&s+{PFB2gk)596xW0Jlbo|y?r1Y?fsH=K63ms z@~_D;9f=c|l=Cvy1R7Y0~*iag>U zK>NKMKZyKj$1f!x?D#bDQI0=AKF0C8$t%b$PF9mCB9H#D=dmslj`-iFol6~GN`4Kw z+3(1HxLM?3|5oF<3q@g5{@|S{oLWgVdoyopXB&#ay$NPe7;X!>ExG@pY8Zh zf8PdNF}lz-ask>oErJA<=sNS25^_TyNNpHGBiKb}E5pF2K<{2SqFXRYvb98&%# z$FC%B!MtL}^~2;X9iK~{M{fON?b=1;5zl0{tD|tl^A+uMc6=3icgHu|IVgqF!|`V1 zy@adZ!-d0d56Ta6yc_v(MjMIw*(7P0@QIbKU{c^ZBpzXkbBvEMFm zE0(`a-sTSr#6J3SDdSw|_^ag43x{9(e!Vvwx4Dkxd+Q(j0Mkm5hu@!Qe~sgZ?UJ>? z^0(RPLjIG;TU}S33Rz`Pbyuu8~0pWv$4={#$HUa~`kOu6Jo?Q^%K)Z{zqEbI?MwCiWecX0ei@~*;>Z*9CC?D)ei!p2bgJKmS`!;>9fLiy7ixAW5i{re_ln7YTGoD?BByq{$*}^TI6#g|B;h#N55Z-{GKAe1^dbNI*uNd=cY@>X$R`O$Jm14eDCdZMil%&) z$isdiH_mpv7x~@TdE-}dA-9xh;gZ^zGLy&IQiCl_p?92((6oSnb2e!SyXvi?89v42}~JWqDq zKF?K4j(9la5l(Wm$Ya0HVf|Le>sY@_IQ*UkgP}Y~jw(}Q%HI%q*ngV!rH((r`uoCR ze;C{KgX1k)q~?>Yd5~bgK>jAm@9p?C9iro91De@TSTQJVK!Vynv*6(-R`sE?vYUe58u+yFOXB_Xs`paBeoCgP; zv@of8-iF+cm*c3vv*X8*=OT6v6nX65W9YWG$n#cTx@EYN{}zFTGDJM3_%Pa^Mvf}tX%${5w~0LbPN)659KVqKLE+e66}10qgug8u_HU-0_Z+{5 z{A1y0m%Z=s4LRKL7JgU@?+@^#X#4Sb+R1bLS@L~_BmN^8e^23vb0y__IsP7bAK|cb z673u-9Cm)E{7}b#CNFk;N4B%n@$Jbggrk4nrr#;#sPe6?u$Cm(iag@!N;@|=zAyP5 zjt?fE>v(_i#~itl7b7#?Ywgi`|U~L=m$Ga>K)&l{rCbo;#d1` ziaf^u0c`IF!eKw3c0O{vGx;jvYG<`@*cm|i?;Y<;{)=$*jeUN9)3%`!3c}-~WNCeO za^F7(2#4RXwBOV5lgSTvypDX3<956qN8ZfEbF#>zAMic0DC2}9o>yuARL5T=uM)0y zP8SY4pHcoS$3G&UCLH~FV0fYYg}hl<=Odpfzun2(c$+62ev@1(o;>9EFZBDY<2zCQ zdBG2~x3ekA#~!qE@wnuUL%{78Wx!to(3!p2a(B!`&IS-|&ekN=H%xNY04Uf}qiXP`Cyp5ka;r)W#Nwh!5 z@!{kP9G^(O(D6$0*Brl^{7uJakgst3Zt_nYzmxn6@@8zWowGOH3$1S4k55s4bH^Vc z&m%WG1(|x%$;p2}`7VxIUN~4d_REYGnW3qUKSlc&Id1#qAC7O1z(VEtc%jCS1eRE5~t z6b)sW?&OcB-^&~yLO#>+3i3L~%gFC?d^-8Pj$c4NUwHozV>9lrr-fs`%%c3Wj?W~2 zl^p8)C~Df`)lS~>}^cmUy!{6g#d@p#3czKc0LCa_kqr#gytF zES$FhQ$Ebu8BaSS93MkITI?|7)XwQn{sPLM<@nj;7dn1B`6Z6eCjYDBi^#8Y{7LdU za`Xe@{6iXLc%EA1u^;zpo^6;fyk9`u?3MAy9p8fdS;xDQKks-4@|T787r$=_hu?C_ zzvK9La=S-?b{&?5nEtnUwCBfD#`CHOzc|AG7U6S*_u@Jhe;1B88GiCigfDj7o|#?| z;a>@dU+b53!r}K2*6s5d)(^&a1PH}=->jPK9pU>6hhIC!`UyXjHn70&RiI#@{4~ey z8uBvX79;fSd3Q&Y1bO8*Ir+ZSxli~(V&{bj|0KeHb^HL@vhQI&+xJg6`H-;(?p$N$AdY2SNb^2Y6Z2|Vx2 zNrv$)HqHF{?+vi;T^j1-jh8uY-;;AjgkRzK!c8*2cRKzm`9jCH<3-qq5&nbYIm)-> z#ksZD_%4q3WUdj@?-IvrxnCwlxP5Ng;@N@YVYZXE?}d2C zar=IT=OX+a$E{tTI=&<0U+1{V@5~c{#cAJHP!Qq$BiufxY<7BQ!zZb5^2X10+@5=% z72%INZlBYCIl@15+&)MDdxY=Ko5F~nLm_R!Q4xNAgxlvmy`A=XS%(I;K zIdz|2ufea`?-}7kgck;Ri@!*?jS*P>bA(^xIHy&~1CBE-C(lIq+rrzyAxpDevK8z{ z@UzIb7G6k(Mf(We1k%yf}!VBeA$5*5@e2&)fMdU9=`0@z< zEyC^jM(dyLu@Xv`U9+X}KIFX|x97d}IYzY0k4N~+j+>qL93M&hUq<*Z5x&)KnIgK8Z_TE_o+kv~Jrha)_Yrxnru@VRKgDrg z-X`{ZAnZeghkr6HB7e2xCV!i74y81ndf_|-Q~sfF-jYvwb2bw3fFGRFa4+3);^cq` zAL_W-sT9tsL2AmL$Ae$+JUXaz@-~-RB;3yJQ28jr?O|WohdfW0$xeLU#JJ6w3WReC z2J^{~2%qlwIjMB`9Gl}8lP?f%xf7d~MfiV&Ti-x_TMkylk4p_UKk4c?WKoWY@NvR< z>66Oe;&?8l;rp8%Cr(yHcrz*@PF`ZBDmzE`0TF&|gqI7qb5s(_t&ZD#b*XSW79qbj z!rQgQ*6e<%okLLX7U6v({7=GL!T`&p2)`!6=SKJf$8BtV=y*Q;{wCbsi@>HGaFPh6 zS$Kh4zwH;{heh~s;k>m3vq@!yUmW2#NBD!nc?%=8zeKoQTVTU?!g-01%5T*^U8L=` z+yK%^IH#hi;GhT};kf0FGT}T0rFNzXw`&n>xWjSVH!noEJ|_S>CSSleIItg;S46n& zBODWb!pn-~9N1}LFf4Oi2RENUmZ!nZCU_zKg#xbQe{f1SJibN=*Zo^1T#w&c;kw^v z2-o~jCtUN=JmH!T>xJ{yPD&OF&*M54E4YsK+OY_nN&l8U0$VyJQUQZPW-^YZ*vQT&@;e&;D7CuV2 z-uI{yZgUo>)e6`9LNkP0?uUGxaJx4EK2LZz0G4{;`x^|)#ljB|zC!px!dDCLA>5J+ z`oE{}JSH9RLxksqA1d5_9}n_}3AbY$9I7@iWjaiZ52j8ZE{)f+KFskMtY7B%y{zBm zcs=V+I=-0ocO19-uHQOd$bPi<(-5cT+wA~C!9w$4JK>t&4iv8WZJ=`~Yq_nT_(sQ4_KRrh&*_0c%h7Qd~k*vJ_lfSj9()1njhvkZaM2o z;m8{{Cf;=XB>MeaxaJ4_oj%PETg&l?JWxnG`+H8iM>uZpzntiJ3)by-d(aQCZ|_5$ z;pFXihc9=07VGtn+xxTjdv<337fw<>b@DA+Wexkm@dd2!wn?_#?AZHg`HtKBefIlt zCU5We4R!J(=y$y1_B(BVb-X{5!M%=e%XZZ}z6beY$L;<8wT|2Gb+zJvxA?E3on0NT zBe&mEgFN!Q<*Y+R9(f+yQS5itP)D9OK2qd0&z~loy98#EGlg?CJ+aE6}B z-yod3B;|92>wNV-;g;K=@ThP*7Qq(^*ZJzp!tGoJ`K7`&pRW+E`TR@ama}2!d*M1? z{Y|*eS2ts4VSiX|hMnz&BmZ03UAWFy?f2SXN9U{EMBZ{IY#l0G=c|Vc*ZJzP!gaoS zqHvwBmI$|V2>ezE*ZJxc;W}SESGdksFBP7HVU}xzw>21+Hw$kk{BGeLgg+#_qwod7 z_ZGfLIL=2_?04d@Uv$2@T;z4Wx=Og7kG>PG^VMI4>wL8(4>tJCw_w83@)o$Bk9HM# zJs;WgDUjFsYFClRdBn;g!gaoCze5K*I$u3T?li68)fgxK_@a zOf9M8yTUm%Qa)DBJM5~I>+@-vhfk1vrFr;P;b^m!?lKNF4__}_^Y9nKH4o2|{iu1k zKZ8R*Xdd2_!GUWYK3=%y;YWpQ9v;QUz>enOHNrIypU*}@Ui0uA;hKm4DO~gLHtZDG z(L8LwuLZ7oc(}-G9@gi|G!I`d@|uU6v(sT;^Kg6NnuiAo*F0>$ivc^i@Un8X$hS2Z zmJ5X2v5C$0ef6-TdAJLADtJc-vRoj1Z-ZgE2X{8)H4k6IoekbeJR_Z42k zK>$1Z34fS78@!9~*M(~y*5?p34|nI_fE~@l(}nLZ_HP%idH8``CIma0ht~-2k%^@L z4{DoLAg_7&HsO}*Ao;U!&BFt^Q(;H*a1KhLG!HM$VkQY&2Z*ww-{ zkKHMphki<)6s~z}v2Y%;DX~0__<2aBe4WU1Xs5)U!-c%&u^c)k6mZRB_IYS<4sD1f zcHaP8^VrE^heI`$uM)0#>;mDM$F3KydF&qHn#byebLgdhmk8H9_PKD)V|IT4?b1A! z2M`Jtn#b((9N?PA?74Js&0|N49nE8-glis~C_EQzS(z@pt--Lg-$};icEXp5yyme@ zIOwri^Vm+pHIMZYu6fKpcL+P0$L5H<=CMbGYaV-9xaP4H!ZnZC@8H3&=CM|sSAc6C zv)_vc*F0v|<=~pfhKU``V-E?}Jhnu*=CSXEYaYunxxlaHvHrp}kChA8JeK6woL(`p zcyw4!tj?C>ZEa%d)QL&{nBs}WN&e`Xnk2t^0xJ1MRbz{)CQYoIQ~{-K`Q5^n((>Yb z$jing0~MteB~_<4R%%Lv(Nr{SshBXiw6RuFQN>EITV7h(SXpmN<$AS7<3Xu%y;@1J zxk@)_tz>+4qxI_bY9+-rrR#a9+<*jg)Gn(jF0UFNIw);XS8?97Lsw`=&Ot=7HgSTwm^gth z8h2Giae4WK65V;BU1KJNeb6W~wz@Qg+*mK!K&QHtDD8pb(P5mVYvqlr#SST z61A9;N!EmMr4vglCsVj|D*BS6u6Xo>>WNJZxRjgq(`zP{h7PC72bLC($?B!m)s+(%+L+SOlg1U5RgMiHTQ43xy1F#< zak^JC6vjb$Sq&lI0u69G||8d8`joe@%lK&VSe_1)yKIC zHuc;QstxhCLq&@Dx8+e`8`gdMYpK)O1y)FIiveK;rd7A?M{7L+9roE{RQ(!>cL%Q9N&+==5{0enCXPp8EZq zyw|@nqMyg}ZCj`BM?=&zvv+(z`Di|E^ctakd| z-jaxZEeG^^bCn?L<6jxkuc!W`uw6?|D`EZH@M>!O6!KzB=Xy}}{(p(+*HZszC`rl5 zI#%(08BO`O1MLAPU+C()M)d1>pq4m!AAgsKzWsiD@kaCyiRjny;#98*Vaof*^osIk{;MPU_J;Mw;;)V9=kX$bWBPcX zJp66Yf4Tose`Z9#fcpDwr2p`F@233Q{YSkfZL0qsi|E(V|8^Vk|9nKh?!RpRTM_+v z)Zf_n{Wzju|6l5_jp(nS{yAa0mYi0?`kJu4sq=Rg&)==6kMs9l;pNZYt(r&n9|zv3 zprgefKP`fOQ~swul4;pI0scFNm-oL*#D6{g>oqL}oTvMSt*fbTzpG#yy#F&J z`ZFlVX^^RJ(Ecewzp4E{{?SZD$3N!y)}O{NiTJOhe>Z*K!2fj-{dv^iSpJ$#eZ;2a zY3g&)u*uSqE%E$NQ~ke~in#{OY{lDqBQo2;PLY z`_Hz~^sSEPsG92k5x6i2rGOm>|Co!LzK!2K>EHKr6>n8j{STx*+TSm{ zy#JvQ|5beRpcD0N;r)+{=+{x7-Dv6?#9vN*pFf_YzP=X%BX-=_@`{N671Tez!E?6a zUQwn)$a=u6*!vx7cZSgcnH_h8jI%&jLCzCUUs`iM=7uRpU9edm6I z{(pTV`re-@*-aVv6pfQ& z{%v`DME|tenbJDZ#j5GqvNWP!c59}n?^!pcUqk)onRvthTI$< + fetch [-v] [path] + +.SH DESCRIPTION + fetch performs an HTTP/1.0 GET request and prints the response + body to the terminal. Supports both plain HTTP and HTTPS (TLS 1.2) + connections. By default only the body is printed. + + In URL mode, the scheme (http:// or https://) determines whether + TLS is used. The port defaults to 80 for HTTP and 443 for HTTPS. + + In legacy mode, the host and port are specified as separate + arguments and the connection is always plain HTTP. + + The host may be an IP address or a hostname. Hostnames are + resolved via the configured DNS server. + + If no path is given, "/" is used. + +.SH OPTIONS +.B -v + Verbose mode. Print connection info, trust anchor count, TLS + handshake progress, and the HTTP status/size header before + the body. + +.SH EXAMPLES + fetch https://icanhazip.com + Print your public IP address over HTTPS. + + fetch http://icanhazip.com + Same, but over plain HTTP. + + fetch -v https://example.com + Fetch a page with verbose output showing: + Connecting to example.com:443 (HTTPS)... + Loaded 128 trust anchors + TLS handshake... + TLS connection established + GET / + HTTP 200 OK (1256 bytes) + + fetch 10.0.68.1 80 / + Fetch from a local server by IP (legacy syntax). + +.SH TLS SUPPORT + HTTPS connections use BearSSL for TLS 1.2. Server certificates + are validated against the system CA bundle at + 0:/etc/ca-certificates.crt. + + Entropy for the TLS handshake is provided by RDTSC-seeded + random data via the SYS_GETRANDOM syscall. + +.SH KEYBOARD + Ctrl+Q Abort the request + +.SH SEE ALSO + ping(1), nslookup(1), tcpconnect(1), shell(1), syscalls(2) diff --git a/programs/man/file.2 b/programs/man/file.2 index 601cf3f..a65fff2 100644 --- a/programs/man/file.2 +++ b/programs/man/file.2 @@ -67,8 +67,17 @@ } zenith::close(h); +.SH WRITING FILES + Files can be created and written on the ramdisk: + +.BI int zenith::fcreate(const char* path); +.BI int zenith::fwrite(int handle, const uint8_t* buf, uint64_t offset, uint64_t size); + + fcreate creates a new file and returns a handle. fwrite writes + bytes at the given offset. Changes persist only until reboot -- + the ramdisk is reloaded from the USTAR archive on each boot. + .SH NOTES - The filesystem is read-only. There are no write or create calls. All files live on the ramdisk which is loaded at boot from a USTAR tar archive. diff --git a/programs/man/fontscale.1 b/programs/man/fontscale.1 new file mode 100644 index 0000000..044483b --- /dev/null +++ b/programs/man/fontscale.1 @@ -0,0 +1,43 @@ +.TH FONTSCALE 1 +.SH NAME + fontscale - get or set terminal font scale + +.SH SYNOPSIS + fontscale + fontscale + fontscale + +.SH DESCRIPTION + Controls the terminal font scale factor. The Flanterm terminal + emulator renders text at a configurable scale multiplier. + Increasing the scale makes text larger, which is useful on + high-resolution displays or real hardware where text may be + too small to read comfortably. + + With no arguments, prints the current scale factor and terminal + dimensions. + + With one argument, sets both the horizontal and vertical scale + to the same value. + + With two arguments, sets asymmetric horizontal and vertical + scale factors independently. + + Valid scale values are 1 through 8. After rescaling, the screen + is cleared. + +.SH OUTPUT + fontscale + Scale: 1x1 (160 cols x 50 rows) + + fontscale 2 + Scale set to 2x2 (80 cols x 25 rows) + +.SH EXAMPLES + fontscale Show current scale and dimensions + fontscale 2 Double the font size + fontscale 3 2 3x horizontal, 2x vertical + fontscale 1 Reset to default size + +.SH SEE ALSO + shell(1), syscalls(2) diff --git a/programs/man/intro.1 b/programs/man/intro.1 index e7068b7..61f19b2 100644 --- a/programs/man/intro.1 +++ b/programs/man/intro.1 @@ -53,6 +53,11 @@ shell(1) Shell commands reference init(1) Init system dhcp(1) DHCP client + fetch(1) HTTP client + ping(1) ICMP ping + nslookup(1) DNS lookup + fontscale(1) Terminal font scaling + edit(1) Text editor man(1) The man command itself legal(7) Copyright and legal information syscalls(2) Overview of all syscalls diff --git a/programs/man/nslookup.1 b/programs/man/nslookup.1 new file mode 100644 index 0000000..8845b41 --- /dev/null +++ b/programs/man/nslookup.1 @@ -0,0 +1,36 @@ +.TH NSLOOKUP 1 +.SH NAME + nslookup - DNS hostname lookup + +.SH SYNOPSIS + nslookup + +.SH DESCRIPTION + Resolves a hostname to an IPv4 address using the configured + DNS server and prints the result. + + The kernel DNS resolver sends a UDP query to port 53 of the + configured DNS server and waits up to 5 seconds for a reply. + Results are cached in an 8-entry kernel cache with TTL support. + +.SH OUTPUT + Server: 10.0.68.1 + Name: example.com + Address: 93.184.216.34 + Time: 3ms + + If the lookup fails: + + Could not resolve: badhost.invalid + +.SH DNS CONFIGURATION + The DNS server address is obtained automatically via DHCP. + It can also be viewed and set with ifconfig. The default + is 10.0.68.1 (QEMU user-mode networking). + +.SH EXAMPLES + nslookup google.com + nslookup icanhazip.com + +.SH SEE ALSO + ping(1), fetch(1), dhcp(1), ifconfig(1), syscalls(2) diff --git a/programs/man/ping.1 b/programs/man/ping.1 new file mode 100644 index 0000000..da050b0 --- /dev/null +++ b/programs/man/ping.1 @@ -0,0 +1,37 @@ +.TH PING 1 +.SH NAME + ping - send ICMP echo requests + +.SH SYNOPSIS + ping + +.SH DESCRIPTION + Sends 4 ICMP echo requests to the specified host and prints + the round-trip time for each reply. + + The host may be an IP address or a hostname. Hostnames are + resolved via the configured DNS server. + + Each request has a 3-second timeout. Requests are sent at + 1-second intervals. + +.SH OUTPUT + PING example.com (93.184.216.34) + Reply from 93.184.216.34: time=12ms + Reply from 93.184.216.34: time=11ms + Reply from 93.184.216.34: time=13ms + Reply from 93.184.216.34: time=11ms + + If a reply is not received within the timeout: + + Request timed out + +.SH EXAMPLES + ping 10.0.68.1 + Ping the gateway by IP address. + + ping google.com + Ping by hostname (requires DNS). + +.SH SEE ALSO + nslookup(1), ifconfig(1), shell(1), syscalls(2) diff --git a/programs/man/shell.1 b/programs/man/shell.1 index c7cc971..574c5b4 100644 --- a/programs/man/shell.1 +++ b/programs/man/shell.1 @@ -61,18 +61,24 @@ date Show current date and time uptime Show system uptime clear Clear the screen and framebuffer + fontscale [n] Get or set terminal font scale reset Reboot the system shutdown Shut down the system .SS Network commands (0:/os/) - ping Send ICMP echo requests + ping Send ICMP echo requests + nslookup DNS lookup ifconfig Show/set network configuration - tcpconnect Interactive TCP client + tcpconnect Interactive TCP client irc IRC client dhcp DHCP client - fetch HTTP client + fetch HTTP/HTTPS client (TLS 1.2) + wiki Wikipedia article viewer httpd HTTP server + Network commands accept both IP addresses and hostnames. + Hostnames are resolved via the configured DNS server. + .SS Games (0:/games/) doom DOOM diff --git a/programs/man/syscalls.2 b/programs/man/syscalls.2 index 6d4d8eb..14c21a1 100644 --- a/programs/man/syscalls.2 +++ b/programs/man/syscalls.2 @@ -3,7 +3,7 @@ syscalls - overview of ZenithOS system calls .SH DESCRIPTION - ZenithOS provides 41 system calls (numbers 0-40) for userspace + ZenithOS provides 46 system calls (numbers 0-45) for userspace programs. Syscalls use the x86-64 SYSCALL instruction with the following register convention: @@ -121,13 +121,22 @@ int32_t zenith::ping(uint32_t ip, uint32_t timeoutMs); .B SYS_GETNETCFG (37) - Get the current network configuration (IP, mask, gateway, MAC). + Get the current network configuration (IP, mask, gateway, MAC, + DNS server). void zenith::get_netcfg(Zenith::NetCfg* out); .B SYS_SETNETCFG (38) - Set the network configuration (IP, mask, gateway). + Set the network configuration (IP, mask, gateway, DNS server). int zenith::set_netcfg(const Zenith::NetCfg* cfg); +.B SYS_RESOLVE (44) + Resolve a hostname to an IPv4 address via DNS. Sends a UDP + query to the configured DNS server and waits up to 5 seconds + for a reply. Returns the IP in network byte order, or 0 on + failure. IP address strings (e.g. "10.0.0.1") are detected + and returned directly without a DNS query. + uint32_t zenith::resolve(const char* hostname); + .SH SOCKETS .B SYS_SOCKET (29) Create a socket. type=SOCK_TCP (1) or SOCK_UDP (2). @@ -174,6 +183,17 @@ int zenith::recvfrom(int fd, void* buf, uint32_t maxLen, uint32_t* srcIp, uint16_t* srcPort); +.SH FILE WRITE +.B SYS_FWRITE (41) + Write bytes to a file at a given offset. + int zenith::fwrite(int handle, const uint8_t* buf, + uint64_t offset, uint64_t size); + +.B SYS_FCREATE (42) + Create a new file on the ramdisk. Returns a handle or negative + on error. + int zenith::fcreate(const char* path); + .SH FRAMEBUFFER .B SYS_FBINFO (21) Get framebuffer dimensions and format. @@ -188,11 +208,25 @@ Get terminal dimensions (columns and rows). void zenith::termsize(int* cols, int* rows); +.B SYS_TERMSCALE (43) + Get or set the terminal font scale factor. When scale_x is 0, + returns the current scale as (scale_y << 32 | scale_x). When + scale_x is non-zero, sets the font scale and returns the new + terminal dimensions as (rows << 32 | cols). + void zenith::termscale(int scale_x, int scale_y); + void zenith::get_termscale(int* scale_x, int* scale_y); + .SH ARGUMENTS .B SYS_GETARGS (25) Get the argument string passed to this process at spawn time. int zenith::getargs(char* buf, uint64_t maxLen); +.SH RANDOM +.B SYS_GETRANDOM (45) + Fill a buffer with random bytes using RDTSC-seeded entropy. + Returns the number of bytes written. + int64_t zenith::getrandom(void* buf, uint32_t len); + .SH POWER MANAGEMENT .B SYS_RESET (26) Reboot the system. diff --git a/programs/man/tls-errors.5 b/programs/man/tls-errors.5 new file mode 100644 index 0000000..c678de2 --- /dev/null +++ b/programs/man/tls-errors.5 @@ -0,0 +1,237 @@ +.TH TLS-ERRORS 5 +.SH NAME + tls-errors - BearSSL TLS and X.509 error codes + +.SH DESCRIPTION + ZenithOS uses BearSSL for TLS 1.2 connections. When a TLS + operation fails, an integer error code is reported. This page + lists all possible error codes. + +.SH SSL/TLS ENGINE ERRORS + +.B 0 BR_ERR_OK + No error. + +.B 1 BR_ERR_BAD_PARAM + Caller-provided parameter is incorrect. + +.B 2 BR_ERR_BAD_STATE + Operation cannot be applied in the current engine state. + +.B 3 BR_ERR_UNSUPPORTED_VERSION + Incoming protocol or record version is unsupported. + +.B 4 BR_ERR_BAD_VERSION + Incoming record version does not match the expected version. + +.B 5 BR_ERR_BAD_LENGTH + Incoming record length is invalid. + +.B 6 BR_ERR_TOO_LARGE + Incoming record is too large, or buffer is too small for the + handshake message to send. + +.B 7 BR_ERR_BAD_MAC + Decryption found invalid padding, or the record MAC is + not correct. + +.B 8 BR_ERR_NO_RANDOM + No initial entropy was provided and none could be obtained + from the OS. + +.B 9 BR_ERR_UNKNOWN_TYPE + Incoming record type is unknown. + +.B 10 BR_ERR_UNEXPECTED + Incoming record or message has wrong type for the current + engine state. + +.B 12 BR_ERR_BAD_CCS + ChangeCipherSpec message from the peer has invalid contents. + +.B 13 BR_ERR_BAD_ALERT + Alert message from the peer has invalid contents (odd length). + +.B 14 BR_ERR_BAD_HANDSHAKE + Incoming handshake message decoding failed. + +.B 15 BR_ERR_OVERSIZED_ID + ServerHello contains a session ID larger than 32 bytes. + +.B 16 BR_ERR_BAD_CIPHER_SUITE + Server wants to use a cipher suite that we did not advertise, + or we tried to advertise a cipher suite that we do not support. + +.B 17 BR_ERR_BAD_COMPRESSION + Server wants to use a compression method that we did not + advertise. + +.B 18 BR_ERR_BAD_FRAGLEN + Server's max fragment length does not match client's. + +.B 19 BR_ERR_BAD_SECRENEG + Secure renegotiation failed. + +.B 20 BR_ERR_EXTRA_EXTENSION + Server sent an extension type that we did not announce, or + used the same extension type more than once in ServerHello. + +.B 21 BR_ERR_BAD_SNI + Invalid Server Name Indication contents (when used by the + server, this extension shall be empty). + +.B 22 BR_ERR_BAD_HELLO_DONE + Invalid ServerHelloDone from the server (length is not 0). + +.B 23 BR_ERR_LIMIT_EXCEEDED + Internal limit exceeded (e.g. server's public key is too + large). + +.B 24 BR_ERR_BAD_FINISHED + Finished message from peer does not match the expected value. + +.B 25 BR_ERR_RESUME_MISMATCH + Session resumption attempted with a different version or + cipher suite. + +.B 26 BR_ERR_INVALID_ALGORITHM + Unsupported or invalid algorithm (ECDHE curve, signature + algorithm, hash function). + +.B 27 BR_ERR_BAD_SIGNATURE + Invalid signature on ServerKeyExchange or CertificateVerify. + +.B 28 BR_ERR_WRONG_KEY_USAGE + Peer's public key does not have the proper type or is not + allowed for the requested operation. + +.B 29 BR_ERR_NO_CLIENT_AUTH + Client did not send a certificate upon request, or the client + certificate could not be validated. + +.B 31 BR_ERR_IO + I/O error or premature close on the underlying transport. + +.SH X.509 CERTIFICATE ERRORS + +.B 32 BR_ERR_X509_OK + X.509 validation was successful (not an error). + +.B 33 BR_ERR_X509_INVALID_VALUE + Invalid value in an ASN.1 structure. + +.B 34 BR_ERR_X509_TRUNCATED + Truncated certificate. + +.B 35 BR_ERR_X509_EMPTY_CHAIN + Empty certificate chain (no certificate at all). + +.B 36 BR_ERR_X509_INNER_TRUNC + Inner element extends beyond outer element size. + +.B 37 BR_ERR_X509_BAD_TAG_CLASS + Unsupported tag class (application or private). + +.B 38 BR_ERR_X509_BAD_TAG_VALUE + Unsupported tag value. + +.B 39 BR_ERR_X509_INDEFINITE_LENGTH + Indefinite length encoding found. + +.B 40 BR_ERR_X509_EXTRA_ELEMENT + Extraneous element in certificate. + +.B 41 BR_ERR_X509_UNEXPECTED + Unexpected element in certificate. + +.B 42 BR_ERR_X509_NOT_CONSTRUCTED + Expected constructed element, but found primitive. + +.B 43 BR_ERR_X509_NOT_PRIMITIVE + Expected primitive element, but found constructed. + +.B 44 BR_ERR_X509_PARTIAL_BYTE + BIT STRING length is not a multiple of 8. + +.B 45 BR_ERR_X509_BAD_BOOLEAN + BOOLEAN value has invalid length. + +.B 46 BR_ERR_X509_OVERFLOW + Value is off-limits (overflow). + +.B 47 BR_ERR_X509_BAD_DN + Invalid distinguished name. + +.B 48 BR_ERR_X509_BAD_TIME + Invalid date/time representation in certificate. + +.B 49 BR_ERR_X509_UNSUPPORTED + Certificate contains unsupported features that cannot be + ignored. + +.B 50 BR_ERR_X509_LIMIT_EXCEEDED + Key or signature size exceeds internal limits. + +.B 51 BR_ERR_X509_WRONG_KEY_TYPE + Key type does not match that which was expected. + +.B 52 BR_ERR_X509_BAD_SIGNATURE + Signature is invalid. + +.B 53 BR_ERR_X509_TIME_UNKNOWN + Validation time is unknown (no time was set). + +.B 54 BR_ERR_X509_EXPIRED + Certificate is expired or not yet valid. + +.B 55 BR_ERR_X509_DN_MISMATCH + Issuer/subject DN mismatch in the chain. + +.B 56 BR_ERR_X509_BAD_SERVER_NAME + Expected server name was not found in the chain. + +.B 57 BR_ERR_X509_CRITICAL_EXTENSION + Unknown critical extension in certificate. + +.B 58 BR_ERR_X509_NOT_CA + Not a CA, or path length constraint violation. + +.B 59 BR_ERR_X509_FORBIDDEN_KEY_USAGE + Key Usage extension prohibits the intended usage. + +.B 60 BR_ERR_X509_WEAK_PUBLIC_KEY + Public key found in certificate is too small. + +.B 62 BR_ERR_X509_NOT_TRUSTED + Chain could not be linked to a trust anchor. + +.SH FATAL ALERTS + When a fatal alert is received from the peer, the error code + is 256 + the TLS alert value. When a fatal alert is sent to + the peer, the error code is 512 + the TLS alert value. + + Common alert values: + 0 close_notify + 10 unexpected_message + 20 bad_record_mac + 40 handshake_failure + 42 bad_certificate + 43 unsupported_certificate + 44 certificate_revoked + 45 certificate_expired + 46 certificate_unknown + 47 illegal_parameter + 48 unknown_ca + 50 decode_error + 51 decrypt_error + 70 protocol_version + 71 insufficient_security + 80 internal_error + 86 unrecognized_name + 112 no_application_protocol + + For example, error 296 means a handshake_failure alert was + received (256 + 40 = 296). + +.SH SEE ALSO + fetch(1), syscalls(2) diff --git a/programs/man/wiki.1 b/programs/man/wiki.1 new file mode 100644 index 0000000..386135d --- /dev/null +++ b/programs/man/wiki.1 @@ -0,0 +1,64 @@ +.TH WIKI 1 +.SH NAME + wiki - Wikipedia article viewer for ZenithOS + +.SH SYNOPSIS + wiki + wiki -f <title> + wiki -s <query> + +.SH DESCRIPTION + wiki fetches and displays Wikipedia articles in the terminal. + It connects to en.wikipedia.org over HTTPS (TLS 1.2) and + uses the Wikipedia REST and Action APIs to retrieve article + content as plain text. + + Articles are displayed in a fullscreen interactive pager with + color-coded headings and word-wrapped text. Multi-word titles + are accepted as separate arguments and joined automatically. + +.SH OPTIONS +.B -f + Full article mode. Display the complete article text instead + of just the summary. Section headings are color-coded. + +.B -s + Search mode. Search Wikipedia for articles matching the + query and display a numbered list of up to 10 results. + Press a number key to view that article's summary. + +.SH EXAMPLES + wiki Linux + Show a summary of the Linux article. + + wiki -f C programming language + Show the full text of the C programming language article. + + wiki -s operating system + Search for articles related to "operating system". + +.SH TLS SUPPORT + Connections use BearSSL for TLS 1.2. Server certificates + are validated against the system CA bundle at + 0:/etc/ca-certificates.crt. + +.SH KEYBOARD + +.SS Article pager + j / Down Scroll down one line + k / Up Scroll up one line + Space / PgDn Scroll down one page + b / PgUp Scroll up one page + g / Home Jump to top + G / End Jump to bottom + q Quit pager + +.SS Search results + 1-9, 0 View article (0 = result 10) + q Quit search + +.SS General + Ctrl+Q Abort during network request + +.SH SEE ALSO + fetch(1), ping(1), nslookup(1), shell(1) diff --git a/programs/obj/hello/main.o b/programs/obj/hello/main.o index 66a8d23ffc74912a2989e7daed5c9b4641b122c5..dcdbf6c95a526ed130725a66007d8576bc848915 100644 GIT binary patch delta 2064 zcmZ9MU1(HC6vt<7_9nUO5_hvP)0@WZN8$&5;D$(|w(fPcsjkGYT^phz+4QNPqLLy7 z4QqYMK1f}TAJB)^&{BjdSoXny4<?Y878N5XiqaBki#~|vp(Tn)&)j=%UC%tsocaIG z$K12CbLrDNo6jsYb}lS0+bQ>zkN+)KR6ds>qjPQSm=I#Q#7V4k?G>*5k!!DX?e#4V zQt8@hI9~JAHtK4GFrs>j;Z!4Qb$p;T0EYtY#mfO9f-i9LhoKD_YBcAn#Gq;V97DBf zjC7d|Ride?Hci@NL7WuJ^$$M7xMtTJiRk4P?rY^U2%E`7JKFQE;iT)>o>RLH5c9O# zO0$wThXcX<p8R00H@~B=zcOWw8P@LJ+_wCtOkXb)LQZWiv;C7D+bS1A(!h_XoNMSZ zZ2j4Kto9ZW#8sc?Gnff0`(L+BLgW}d36Y4hU%9OiqQGbYGDx$O`5>cxa1`kuL`#fr zfia{vsqRHazkz9_LsWO1(dQr=mEBF5XBa&Uok(Yi&M~?KhLHY1nZs1y??ykA8&$TS zVwW<i?~fj<nf@p3H!yt|X0cXE|9UtE7)?PUs_YV-<Orih*cDaTHlm}9Hc-y9Odq8E zMW&C#FVR&p2Qyf)j&j~%J`O~hls!fCDWg{*gY-1j73Agj?F1Y}`Z3WD82uT>kRBs7 z#pqp_M*1W5b_=8XK`v1CFwp{|-O!2jHmP4R`UHlME}>JMVf0rhBRx-<FELt#Nu=jU zonUkk%p(1cdh~$NC?uLy@k6TnlF{o_@eR|PC|f;ozqj5qBSaI|y=x`nOwW3Cw~81Y zz)w^r$K_1#q=Wbu)%V{>{yi|=tnl*S9NAYDTZab-!I)AIR`vFQDxx3O5FPJJ9cPbJ zQ5_c}T7n_<?po=}I<|x8c_<_OwklRr{|WmZCY35)siOKp^ZzR2On*&ZbA##EsO`6z z{*bzIkLh2~{*|{D|9?s2lqf~7z2C-?-$tfir2=WDzok6AOn**#-+Ou&_L2(Z-vdHC zqJX_jUstj09#bBHOxtET2&J~3;Aq(Ec*=s`+PdXKkTFN@g-pzWlks{OjjfSC!DP%a zQY~P_)ABxK;*L>hfm89cwYc63z5z20QFt8hkP{#ij`bJm7a*JHktg8mgd=~4Nu1|E mCLLo#D{M@rjWzS(R5EQ1&=DeDmSl%D(CX#=$5mPvhW-P~;L;-i delta 1856 zcmZ9MO-NKx6vyv<Gvkb-*~~b4eOZl9E5{*9(=@DRlpxbK**C2;2~mVJTl6I&W@xl< zIzdtkwIsBH(gAVNLIc}H+M<Lu2_cRYXcCwvb>F-*F`l=$@16he{Li`f%y6g529I`o zmBFn+-wEyw-kjsM&_$l8Y%1OoV2p7t7j_VOP4jjWkJAHl*aUs%tk&yh#_Vt85`7f? zgD1KylQE+GV@weFR9f;aUt&bdx0t}K*GTz+O1vH^_E8z8Mm}4d`s<O5<M=2Xv1DqC zCdLwOOF{3W8cA8YfhFi^tLD%hOS3s-vG*!4l2{yCP5jM6D@nPEYL!m?DKK8lF5h~? zawv5Qbs=(a#!eD?6`Gs^s$4c_6(OggU-}MX)doUKU|P~iq+Ns_0`3y(IQHx#v>oy! zJrkKPV`GHQLbaqmtUOC-4Fo0qjC6(2beNFzAy#%^|L7ztV96!QE70pDbPZhvM4!R9 zgy^+UnJiSB{?o|kJfS<FP0|*u*+^(J3@3|n7t&5b=WvG)h<*y=KBB(_r+Y8=L8)7) zYsjWZPChib1vuO`=R6?;&@X+L@Ei>H6rEWkOiSuUnnq|Z@D!oeqnb<T801OXgQq!0 z=zge{v=(U<p*{#o`WDq|gnohvN&lj^o6uLVB<WqGgM^*~Emf#psE!k=LZzhlaYi$Q zTA?jfv@T=iMM8~#0%L!OuHp2)qc1w!4vbfbz7zfHL@zXAg_)sR2=0ljUI+@I7GMj# zw0^54;a(2Fgv>0BWXiw4%sfjncVXrQ(9(pnhR{Oj7xH>Yv$ZzF5Ucd;L*I=UUB7N_ z;pjSu{uK{%kLWKj|1r_u;}D)0dh7rDtOOI^5rZ2GtrNWk8=Ec0j-%5bzy=9K|A}>6 z8}#Fh%_2}Y0LGHBK?c!3V172y_k@PkA`5pwczYS&4SAj-yVqgtZQce~Jcaxj40!@P z8^UsRKu$)0H$z=UK<QNBd4``qg|H09RPbqjW!Vb#nxCh^kQRs^u^DwP!;)6SHOR>f p@OG$^YYz-%29%z3SjhA%GfCjf@+&Kwp+3tW|2o|;{et0bo`1x@$Ugu8 diff --git a/programs/obj/shell/main.o b/programs/obj/shell/main.o index fad637ac6d647e1bcf05aaa5e3c30110899e6dd3..c92f767c6765edcf6be45da207b55b98902a868c 100644 GIT binary patch literal 121376 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 YJ?zz$tI>U;|8#pj0b~i?fUZXV2Z=vU7XSbN literal 119888 zcmeFa34D}A(m(z@^E@+|BqWo}<Rk%x`%VZq7?6+zCJ+uGXgsqq2Sh`H$wXj94oQ^A zM)6u*71&+eT~~2kU1bqn1P{dfzSi~F^^CZ$_p$2AzpA==rl*s^==$ROd;jmlhiAIK zU0q#WU0q$>&peZL#ig?xrfJB_G^QKjoJ0-diHF1J41#AE1C0L0l0f^L1t%07U$CU4 z{n>)D#et3QWo+&nXg~LfKzqx<wwF8?-3!#kd4~(`azdhDuN&^4-D?KZO50y6ZU5Zk zEVvsvZ~V#(W_$V>5|y6?8y|2KP5G+jZH0xOS@=RkAr_eulAqnxmm++p`gt!EtUuQ< zcB8Ptids*<R!A5|p#7e}#(ieN`ZdnOM$3o04+B<kH+FT(J)ZgZ6z9EBTJ=Fud&_;E ze(M1=0-KAUnCsbl%3x#Wrfh#{`xk-sS3S;>jrW=Jro7ei_foUviOr|phg1iM_+WcR zVB>umCl{PjaB9J61r?{>yR4>ug;C#ZR8<?fMox~gyt2WlSydM_;taq4q?(4h;Iaja z<BTy=bB*bKV=<7|`%iDFs}I&SG*68)7O!p&)-3l|H7<vW)rk20HPv-N|H-v=^);vZ z{r<9=RY8Ipo3OBDMX+vp4d8SwUe>shp*UlHO>kvn)0vUX>YAz~F?^ORD)d*?*VQxx zkyrJysukhFqCnw7rLeXpShdWb-_le+9cTh&WoqHFU~olss45jU*EF4710v3@TwWvk zQQg?MJVfI!TCiYVoH49s`HJA`;n+H;Y^uMZ(cjzx?Nrw_)l>x=n^sTt8%vrim)1=6 zgF^iI!NwJJRnw82F2b6DvaYdVdbqR<>tR`4L$IllwB6X83qVdyeXTLOv9bE})ipU1 zHwc9hS&E|O8dIglK$@Vxwy~w5Iu4BkF2BF9amDJUx~0p4{$W+a{bR?BoiG}16a7V% z4Rtm3{y^pO<=AV!V7OMVsPPX)s~8Hbn*5b#SJu^6o?c%g8)*hPfG<*rKH;6lF}SR* zS>PZR>Hxc4-|Rmbl!KN4S7}`{NC=kE3|$Q?O=-WXTBR>sR@tz$#*b!E*RZr}1u!<S zRlytY#h42&tMNCZp<?^WC_wq~bu}vyYN@REuK)>~xn;k<sxs)$N6FAy{6%%mE9xs( zlc><~h9FoR()vN{+D4=h7xlYY%mFNET3(4mtMsS3G8nRU)>BnWQxov>QxVJ>Kh6kI z1>~r&sce$${e_gH4plYP)PxxO{Y^E^HQ|mgsyV$8#-0dCnoz%*m$d||8&@_+d0U`e z%tn&>{VPzv`E@I(`~Jl>AXZ7?yoLUns%4GP*jX(#&7=WgD4>U0P)lvyQpvY*WiATT z5SqhS*wV!6@cV;RE1*IHm_F7h<YchXU+FJ{c`Iih+hIY&YCl@JzfnlqRJpvmuK7$q z7+B4!nyQu{S|k`^aZ^)c(^P*g*k}#t5hi1>vMES|el`rXV%gHdkNnB&&)rCcs}L+f zciNB+w7(G8@ZK13#HH<rVUf8D2>>i@e_PKH+Jz>B5^Kmk(Dulehta(Yj_apk(g-F% z(VdtgN4^`|4rlK?3|DE#O;171g1eKT3_QNa8ED%VtlgbV+4nup^?!K=IR{_&>}q=& zQmy-f<@s@*)+AVK^4*@+-9VV%Z|!}7sw+^04PSl(z`ENz=9rsWQ(yQBTJY?BZ8xqt z?Hx!!eLQr9r(Y4TS03k~3wZs3CQz9CfT#5qkTrjyr>zcT#D)3};IQ$Kc}yQ*WOzCj z0lXQR8i9`6k!_&kFWA_|ef@^N(7u2FzxwU(%<4#SZ~RBU;SU9>o(k;$hdZ$09<1;V z-a3<k!IsUWwYGhpiyV;M_>QT@0qs;6TB`T@p;|bH%e2gO-uKPn!=8RK4C>~cI9W*F zfhuBgpw)?@8PGfYY~AN+{TP&2v^f<B;UfV*irb#@T$Bx+F6cO}U;C4y1Li{!@^{>d zl%8Fe;z#RKp4Rs)(CU8f`XPHuY5N0{pY*gn3$SO`@n&G-0n@W<fmzxy+iZO*XtzGt z^77<|JZ-l_dA{G%wmS{gw-tqgkO9WSv#Ss)-D~FigP)+7r66XYqoW)M@}4?0V9UlY z*LhlFKu9FoWNy3%sP{t?781WtTw7iOZ69b*x%J;XVhT;*8|E@Nq^0aM=g>F2M z_Y!hx_8CTqelK=3&~XKl-LVYPhukD*Y5Rf6`&+U-yJms__dx$<nOOHPAem>^d=vZG z{smROqdv^xkQJrgNS9LYOEhS-Ds1#nA8HSkng>EkrD9M83XSpXazk5xpPJ-p^Fnc; z?WL9#2goW7{-~|Zk--?mk2LuUNU-pPrMV2DX3ytrXW7@n-f$Q^yL{`v#PND6*h=x= zq0Er}P|m=#_0S(r>+7J{O<S;Uo?R(c>r*ZN2wZgli$JSG6fu?L7A_CK%mAklyPi~& z8+^yJi~P%s*2A7wAIzL~p)~5)p}yfRPkyqcU-vqDb8?cW^#zzV5mmF;4}43#AUG$_ zE}A{mV;HRG{|yrhX2fK0V~5hD%BlYwzW}4X0DGU}^6VlFK=0oOR6WrVFu_t^fU3D0 z|8?%lJm}^guy`YIRiFdrEZ~Qn8~?R7m@#A1nj}#49#j?>JlY)ez2)^l)q@9G6Ohp8 ze8B^AxBYJg5G;E({Ruo$(J_OO-qZ10$aLqcirQZXcU3g}wVwE^N?@|3r0QSo`}4q= zz3mQk{293`qopKe|2OqYLs>n$eny_S^}%3lV8fTVOtidF03A8dIu)51MePsm|FYly zce4u2Ckr<Iy<frbCyUz2EfsA1vY+ST$6+cI0HdOIQhMjzIBmh-fk(qxqRe=lhJOT2 z;B@YsMrMkBrR~@M0v(VygiS|#+dk+Gy4`o7@$1cCKXRO6`$gNXjekK3aK|_t!3phK z??N4JMNlWDyx6O4ybpF`ueZFsS&&mJ(A@Q=r|ls0MsR7rH*BBG%MXnZhp4;??xJlO zaWsP&Ob3fK3wkHXDY`)moI-K0V+sl0^7p)_4$ul<Y<&1|JFS+T7k&Z0H{>GLuQfqe z1)x&lDUJ{q94Thd%7hoi=mIyiKMc<wgp2fiM_Z<zwA(#R=TxvjF-lK^MT5ilw7%#- zZ-fh7FLixm2Za-2FHwwRU)AwEObhT;ZM^`V(fV1-(9WMEM$Tk8f5ZOkZLr@No5sUb z9&cftH^F&>ivmuD=g+j_cy?WZ*#m8V1rc*=+uL5i$pULKL<+%)6#Ai`1Q1sAXK7{% zkC*~WnWy!a5VeGti<UQcufs{v@f&n**b>yESOJ-0fK%H3n?FK&Ui(`Gcg=u21U#kf zpOv=%!{fw>Jq>8`K3o46k}#N4x|yiKb#-(gB+nb#pF{t&K0n!L`ItFwJm3I73}MM@ z&~p3jIPtl5pu@g5Abdxl>Hws!hq6O?u&z??!t<_RuaFSTy`=qb0WtkNt!rVf!HVf7 zYOxB_l-S&cjm+CTXb>!Nx3L~UX_NByDLz$A%JC_foMN|}hidcex|~J>R+e`In@O?~ z^S-cLomH?*MzR3E7#`oNd*S*7Y}ECssAC2#P@u3}81&$xf{kCCyRx)nA%wXO3~Glz zt+EXJ5h<Urn4tAdN&7xvFvD}j1Hi$vjZTGTv_9YR%Dk$5Go>MQ-U=E=d-Z`gYk#0~ z?PoAh5z8!_ZcA$CAL7Acw}j=N4f#m<J5R##i;Sj}^*tChE@(Ls<EV_zZ(tCW?%{eP z;vJZ3!B0`nzX8SW6fi#FK)?V3?XQsiZJLJRSk()=(}ihzoSo~TH|<~05-x+g6bK?A zKA8mz`T<(hVQ&L5T^z)8Z%%f2TF-$_!5J7%@>jtBdv+Z|5zkYQF7oW6S(o?OjP-~8 zEhmZi`HpWua~;Q<!#@No#sRAOEMR`f;YmbaT0t)4cn-9CuX(^u^CKTmTM5byQz9_s z$(FzGJq+wVvtISI&H}i!W3E}+{*c0EOQ8M9K*u8UGxOD!Pud?U8valbY`cn4H8+Ed z9Va}o{>xa;1;2pw`g6>wo>oj1b)04uZ1@UUdoIccz6I?c7wj>>7nM|fRn&ffBB0{o ze=Y5}ZW@I^6O|T~B#lSMPtAf&!4xnPiblZ3Jgt+k3+-Q)PI;>3)#A1XgHx#+fvRuv zo+|CQT=48G^yS%=?*r8rY|8gyrwgV$>AC1*ka5E|C|=8JT=TP#ADTe17Pu9#EyL5g zAO@Q1xE(#p9b-VBc~6zJf2PO?@sDTMg{Wy{uZBNwV&DhW40chTR*dgO^w&XVPW@B; z6BQP9%%Uk0hn=kYrnIBu1X!(0&Cd@FQ`(jDZ&OkF;R4UDqGa%Ab6|@S^ak1=D(L8y zwBcXhfKY2+-T1EAVW)+Cc}SXTK?~}7A@s%Px$E;y@RuN4)i*@5CkL3JWGF{}MUG8n zF)%dbQUVa{f=>eh4uSv%3-AiKTJwW&`@3N$BtoIKeX9oG1cH9@;Q>xG@Rz0SZ_yNM z-wNv6Lt5Wg+Ww)^YS<5jJpy_PXx<%|M$zY6(&vOaybp#_?J(`T0__iAMbTey%ouDE zQBlWi3ilsI1E~5uGz_0bbbrgHG8gK<%mn>+*Zo(q`(K2+AChKD7irc*??DmdIsa$q zzYi#b_l%y_a+oi9I1YzALd8KZC?Ay<UQ$9zr)3zUkU;wr;q^Cg6^w46{XpRJR}Ljk zL;GCk+msR`cwCN#0g*(D%0#U#94oRo<U^i<K@zM$%wa5rEppsJ1hqEr@kxa5Q$N)D zXNSm>h}IJ~^>PXE(WSpF+x{*_z8j*vu#tZUd!7u-gX&HWS!g^RGufEipNlkS@G205 z`JqyzS4qVw{H-Re%;1m-Uj&CC>V!f8o(Oa-<Y)_osrr)2?-1T&CV7vvO{M5EHsNRo zI#!_11eftaLC1J-%H*@iWjqm{Gv7s<XFvo-JDXB*yb>kIe)hj$nuGYtS!L&bzyeow zp7ALZ;mTXU=W!6@MQj#5tqVVbg<jb(cBTQKx~H&zLgNU~`M@d&lxJ+phXVpS<G|fL zo{xxA09dE5pg6eguP|wHDX6Y}pbgiLF;l^-<&v-v+R~irxcymJoyb&DTu_=!t<Wh< zODBcZc)qX|BWkg~m3A5EAeJTV2ROop+4zc#s5ceTCW7RU!-_J&lpNZ54V0-pl<QBp ze~my9I{g7p4Cf#6^ry4-pK!dl54NVbsKS1^^Y<`Jy8a7*DCBMWQ4KQa8RmMLd`8O$ zdHXg#co@y>13oB11M(Cd3{1JF<=u_{g0rHx--AJfGm{NyUPk9XAq!#8XiwYH&krAl zxan?O_DicEDt!>5r{Un&ufT(y(%~-!%;!tYCl3u&dI@pAXIId7xM0(GZ=j>eESd6Q zurSd6QDDmREpK)12afH}QM`61Br%F=+XEpWL`T5^GBSD*q`=51m=tJ#u{iI+&Q~!= zd@j)bu#ENAL0u7zcv>4EO;K8F3XpYH!7WhrT<rtm2x-jJj^i=rlP5|ThPCYg8X0W0 zzK@xXW^-QEOAvGSL3QUsfaGa=4LP+xeCWag^XWrR>|Tqy$p)kSj)wr9TMxmw;l8c2 zztn8&IM{b|_Jv#CzRrUm_JAkNuJ9RlX8@QUXgeN-EfCBPehl0`>s$-!fR8sp_`Ih& zCt&Vy=Lujs0R96li288_RD`B4!jGpqH^G_(%;4NF_YM+t4+ts<FM`<wgv$kkS73H% zCYZMm!U2yHXnFw`KDX{XwG)gs+BIhCHzkJQG)#!5V1DDRKi;~#JSHu19tXws1-26& zo*Kg@18FXjkIYyAcaNJ&3CYQ*1!UOq2#W?h4hS0{XVV7}P0HMiMCTyvCU~Yl$@zOT z2?_VY|M8f(!A!ukTjXvuJ@-Q{DM>cxNkV666ynW!n`z<se^OC%u-b5sH{(Bm+<=&A z@sD8f1iZQ8Yr&mScM|)ZPYB*Tlos7gqO^l(k|}Lb+DmDh(mqN%DV;)T7o}4v9Yg6f zO1mkYPU%=mXHYth(wUTwr*v;h_o8$br4uNfP3c5R_o1|h(tRnNMCpE%PNuY<(q2mU zr?ijK11OzB>4B6^rSu?5r%`$^rPC=rgwh$59!lv<N)MxSZ%PlRbQYyYP&%8^BPrd7 z(xWKdm(rst-H*~al=f3Pm(u+yJ%-W)D4j>?fs`Ig=|PkpN9n<o9#82Zl%7E8p_HCT z>0y+fMCsv_o=oWxl%CrASQvdV?#EEtQA|eRI<?n8Oq_-`Y*4adHkg`8$)7BSq=S-` zn6xN)IwtK|mGwcxRh5hxm=Q5wLH(E*aNaR^b`aAKZzJ(G32%jXTY$Hd@wOCi&3Idf zx6OFF5^p>3b~E1aJT>M4ygiM#SMhcTZ=d7Mg2gPxgSRZa4aM6yyd8_Txp+GPZ&i51 zl`rNTyj_5|%kZ`xZ#UxY&v?5RZ;#{cCA__jw~z657;o_wPH@uXFw~C61e9l*BW@lP z;LgafdeNLlhp`T*dSL;Vc=2JXfx6lzOVr}tp<;Z1MI~zSfDEjS?4Fm!#vp_q$J-&q zuu*~i5>tl}>lc93Y|J{ghZ-PB9T$Wo9S4Ia8ax)r6+Y)<#o1U&yhXhYp?a0Fo@f<4 zz0ragDo9}GBGw+F6C75BI9xAFL|0K*!_h*5g3E^VioW>q5Rxe(j3YipQ1UUBpkLK) zLg$X5Awrz!-P2@;XeLI`7;~^`M{1~;svE}O`Ov!oW}K&nKI1(&&;!g~9vs#IW`YOD zuOF)5JmBX?&%e%?TeY&<F#9Jo0Tc_SB(75YFvq0f%=A;0J7txARPnGe97*yLeiKoT zz_Fx}Ff#(jY2XN~ew|qf_W-4TL+OQ-{w<~FQu=q4o;MHa%^OV`0!%N>#5-Wu&YWQw z^C@|o8HX9`l7lNJu4rsFZZ~6baI8!2Y8i<HyF?z7cum4vPQGDGtU24*XZB8q{#%#a z(?SD^Wk10iTqE7^9}^Fnsi8u|5qrq&Lz4;9a3x$YOC<0v6#9@kCJ{K8S1Bc69#DLp zg21=l5W}mn&@e`sORyiK%rX?;FhcDfCuoeFQmCiR{!s-0e+1Xl=J<>MV*wHd1-NDS zARlAwH`CK%p<|<!5_@e)m<()<uQ>j6{BnwUfkI(ks$?8nDU&c&;U`phr#WO<EQBC8 zDAc4va39B*f6`HFuYy3!3DYAKjk5gJ^vA}7>;a`DwTv@yAg*<yQsUmGh$NJ1mW?%k zr=V`N<3ei3+L6&aOX72n4I{OhTWiCn>%OJwB|l`-LxM_cGHJEQ6zD3V_hRVH<BuSM z820bbdn2K%em^m@m*W8aU^<R_R~aoahG+;B_QK~~X72}~JzF&~F^npeqh(-(xjBTT zbtC_Onf}r6*yIP4U)51qvP2XQuJ=v<4!ymI$tdOvlFBMa93eK%xb9oUCl`2qVEQxR z;a@~Af9O`jW91Qz8gH1{7ay_JuzF;bp7b^07RBgAt8bYZ`1sSjQz=P(fHR3uVjWaU z>_;i2VJSl&(>Y~M^_tHq6y|G62Bz6*5m~Hc=Es@q71Ug&W`asaEGR!y5U8H8Xa;f- zmzcP3o7s;{1;(e&kT}K2hLK(e2rM~gTP;eFwNA;zU8%4S`}Y3KX|0+5I_m0|3Y9Tb zt&`1^KQpruU|=FC6IA61?O$Rh&P2NCO3RX!E;Cb?_mK1oGxe%(A^oC2NcwZra|e7k z$8^kO$>Bq2dZ2=&=RgKjcTV~gkyxExBoZyw0)@^xNy&^+6$2BOu6xr4Lkt?Jmps|U z$NDb7!syBvBPo$rmf&bSlh}6TT4Spfsmi#P0|G5a9d@EcDIIf28Cp5)&!)cu4J3a8 zMb<Y;xiMtDQWd_;N0+rh0b$+i;Oq!!(7IG9v#wP#M(Xc4SB!Mmt3{d5Dl<?_{EvNi z0h#%^QeeKSW)3MCF`kwp`H%!9BW>17R6yuTW|6X-h-N?apX`NZ=P3o|iE5@s$+(?L zj3RuqV^be9Q9;d2H8V)f<SH4_fvE}t;>F&owB-=GhdUTEU7x2tfui225JkA{@a&c~ z9OsUU9?bA!5z%Pa2g~*5i?m{#Oi>#ZT0r?^jh-}WcfUfx45!QdS4K}(CrRFub;2;> z>I#`Xd<b8K`D;0OshNBkOphq)kQzPHTLyc$o~T3C=!rU_G%7V(?|ra`jmjE7K%>jO z)8VUmJ?ZHW*l2_IPe;GeM(;52bVs?TE4*8eexql3y$}Q*<(@WqFF5**HhaH5`i%y? zXJs69^|pB5I{J;C?L8UJa*nbgt@J)|^c!8}E$)5Pd%D`Y=jb>3Q*SQBpGRp--Mkc^ z<GrqjjmjE7z|ywHn+Xx(QR=B&9nbY%bo3it>$UnE^`5Ttt~&aSuJ``)=r_8-dpbN* zILd}}p7;5q-{?kfX}_b^Q#sXJz59FEsI2h=IEOaxME_CisdNtKdv82?jY?%*;Pu0X zrzh4cYxG3Dwz`S!x}P*Rd3(~LR7_7=G_vmFvxUn|k8cQc=`rQ3fi|e=e+2|idse5v zB@!*^ABw~|*4GNL6{GAC^W<sIMQJeufNR7VS!zC04uB%7K&fV=j^f-jEXs>0@^Y>Q zi_(=MtG|*lBF;w~v{qj4`y15xVa`Xu*68ZN`N)m_a|S}Q-{X8lH1R{8kL1attUvYN z0YcI7l{iR=IKwi=mMXgJ<i2hn3>u%O6l8WigSabW)F9|=)W;X%u;Ylw4MZXz5k>6l z!$%JC!P=hQzkueF@oXjHAje{n;mm?lJ(&hk8iR8_x^|@{f(D|`y>O$lMvof3G4h0s z8=J|We;z&`8@){-GWRJN!>xJ?Vd&=W-lUR<hjZd=OP44apF~Dz+=y^Lf+5NxkBZEj z(xR&%e1Im&^#;3p^l2DFyF0_Z(oCI$z9{<9Z`LyfLQPkhNy)>3^i|FyO1-iUDM-Yr zJUsQH%VnnRz*ZuBQ`|wYD0zj=PM%05n%Tz;g*s2FR4*$Td$w{e8MX^q-?6%nxlo}n zPgXOvO2#@%$$&L?9c+}6z7zqUNoLwDC|A_8#_u;i5v_LBhTBXVI_yZTcB6nE9IHmO z8fGEawOBK4>k(U}@uxAAReEBJ*{X)Swi;(1!TP^ni}1keXER7nx(WSmGt>SI-;6M? zR7-X!8EPy2W<Y3BzEdR5u^v!p5`JD_gf20YgJ$v{M*`p9C?)1CN{0Aae^C(Y0VNX` zt5|v1IlyB{y84?bqecLGuR_(G7kYeD^iy?`K>Gi<O$w*5^-8avWoF)h?Omc$sb5KO zh59e6I5td+-nJ#aiy<q;H7R^ei5jxEeN1m}ROUGfRYY%v{W#7a9lgbf-e#+ACv1GO zy?$nP4_yv%C3$7t@9lEHJl~uV>bmf%#tCNf&QZ{Fw_+OR2MU?_wUQAwm7>sEeU;3( zVVrRchlDjjDY6QbOu`x^BP5z(j{6D9u~{uioyWOLp~zaK6pcHDGuEjJY8d0{Bz{H& z4h~m+I&Fs3fL{^A>tr)7W;C?FURjZ&KdrVR9#kjvRw{|9bcz{!6|&1$O3XoOW{i>% zrV{|fTCBis8RMaVV#=6lDJDLtl$RKg$dC`lxvM~@nz6%kel&sNy818d!5HqwX=btu z($Rg{5!~3fx)n1QIR9vF<t%Ldf45s1s?IDq>nhE-V_`^>aXuyEw?2~b+aBLKZ%#L3 zpFm6aA2V;N%-G7jA5EZdnK#vD^7L^aT+|rgKbbdE#scRbZQlGITmRoZZ?fdPS!O1l z1;eP#72(<=7MkuHd!3o^CECDuoiPqvX@1BR<_t4o<M{sxf}Ck4^qTNLL6CYg;fkX# z$hY{6<z{NrB+$-(i_cg-5jg*7KI3I<{eQR5h*)bOD5mQyGwwzhQq6yS>ss4n#^%G< z^1rj^_-~6*o6Xoqe>{OAPAS40VtFF7()1SMKK@Q+ix_cI8Q#;%DnGy}#VYfMe?(w} zzI6HvGxZ<Xr|9Q$QIsOj1g|#J%JJK{Jy43Q(j%q3uP8aZdyZjyzs5|3-<9ADd_)Wb zEt^y($sK1UN8h!};|XKxhFM{bV))-ReVOVZk{IE+-r{4lE=L>{h=YnFc2n&4_=F<L zS+(5mm-gMGHy6?0uzF;TBR0+bjW`+(vyg*i&g+rcN%Eew2)j~MmqNokP4A`oM^dIx z`4Ra?C^N!d!~K%yhBujB_cX1&2yKR~M^-sv+pNuRY4s1LckR(@)y-ynv+4b$hpoyg zKR{n^F}-KN`vTED!VjupDfq3X_q86jDy#IQuif~B-DZ5ZKH)?-NQ&t6f3Ht?Om8m2 zio=HgKiwzL%bAO2@cW#H4LCD1jB`yqM(;0@!|~<7w5sLR#(8EOzUG-$XKWNNLc*6^ z4C6vGnO+~Hnv2Y5pk@wIFEWQBPFxn5lQB*7i^WTpls?{!LwZV=Gar)ZO+XiH2JVMV zAySUH5>7UVS&lgbndLOL1dSYXtb!i{!HbdBXygg;(pDH_1=9>_VXB!LlHwRM0f`Bp zVJ70+%f0dFGVKhb*i6QvjI=Y2fSHC#k(nbi#$bF278V7=7-C{gJY36ZhRg`$FG@10 z1fQyr(3$1{EaUWeOs6d~vZSDO)kZ&lxs>$iH1Q3RoXV!9hEu$rnYIFG5}5|Rb7L6y z+&0rN;*rF>$Bzt$BYGe?@>N`VQ1$@5$4bf9X$&d(Q8@WYGBP9dQ=(0*Gt6%&)f?Zi zNUX1EFwAF3XGHZJB{Puhd9Tn>Z+yi9fj6lv@eD|%P!W;6M<~2OjH2R~B<Mw8!=S!& zoLDIP(m{PmgrC8OolIE5--VMmBqKG6abvh+w+d<T`wl3?6*Pz_#1$DNL~s0(1eRP& zB}Q+2Fpv3P3&BXp+Y?1!NJ#vSJ_&iO0c)gToUst^=E-tS8%-tx09`v}mSIf8<jH=t zM|mBGZxNd(kHlhm39@|Dg1o?U8pbK2Wq}cLnu@^w0$y4!GK@ta@=sVyK^*aVr4Y$H zJ@Tc62xn+fwVr=-z{pfze-#a!n&g8%b^rFOyBH1{qrUy>pw^H0_A5*&xW0pcW98eg zSZ@a2;JO&ai25chi*ckkVZXB&5pTlIAR$16qx&Z8V)@L%JS{Eimr{(uXj(M$7Gc;O zPt$u*A4GejE^%Iz2_x%`ulHhpiOADDIi3xW=Ea;c?5a641#Q~IcOc{Is#gIp2>B(_ z94MmMDVm&sFI>UfLqI%XFxJVSxjcm(1c@~WpP<B(6BslMY2wk{n}f#T^b&Ok;pUkn z8%)eIaIz0mnWW+YUwm~lR7}mlit)`&Rgk77O)yCvi%h8fG~$9iO;?2V;1{n14^L*8 zhlgCf;Ncl31xXSWlkk@k@XILi&4x8#3{CYU{1pZKZbp1_u*tA`hh?yOPZbpSdkZ*v z@s)<<9Y~!%9a3XODgG)0J~Bq0z37eo#0JAk5dBTUAJ4$w#E8db!tpqbq%jzOkst|w zLj&K4Ck;A&If8yV<5>I^4N`uR2O>gzI!m2#Trdcm<Mbr_-HiC<m8%TL1v9aeMiTy} z20ro;6z69N6n{$tzrrNY4dMp{lJIvlaL*B61(Ufi{dh(a{*DGdn-!GjQa6nx{3Q*1 zy;`8FXszTlt(C^H_=_4zx4{ixdlN+~hKk1VS2XZjBJmAPhGX22b3n{^cxK=jH%=tS zLUM*kj)UYpOeQwf1P#ad<Ra=6{@MmU>n09E!yJZ&ISeHZqS`R7mJXW2*S)D)cDPzL zRTH#*n06x2J}hZdiB=G#2?CD|GT_gzB+-XMeAwbc{I-%ONsuJPAjuMI8@OWAY2^7F z>3^P?4i0lXq`~3f2SaurGtalk+&$BoY<gqL<4=q~0lux{j5n76y=%N-B~I<{IwpQf ze2FhVGdsRM6W(VZZ_EZR?oiDo>9SsI2qSL&O=M>Raa@-IrznVb8kT!%yl4S_sKjZM z0C_@)9C!m4CQbx-6k^XHBR+n5yagM<q#Sd$&)?s|wvw^OU;@B7G0fQ~`eMqKQgX~= zGbKSoB6bfer^bUmmZW1cjaut(9^=H`!~4smwhZt_@u1gCO+@Z!?|2jIW?^ZB?AalD zsT$}M#FtVmZlrIHi7H1i`zQGO6SID%S>i*k{{EnyT&UHb`W6;#fZGr~MMpU>Av9|J zlS_P)fqoEow!Z`UCO0IC&JOk%@%`P{w;|YV6b!x}hJq?GV#C9R(69`b!je5WKouh- z;+)dIcZshaOay+lBn*P$*w99m7><m!P-V32Aykn)%pofX_a`@vx?sz}8l%d@n$8QW zn31uv6DaaHF_7>JV?rHHF^rqccvQ%QDX3;NyZ&UK6G3D*s-1=bdo~HD05X~!Z=yCZ zIVE78Yp#RD)X-pt#u%b{wPPh<jWl@qIn<TVfI=832Ty2GOwH+1XCP5*NNLCBz*GaX zhL|PU9GvKjxB6xETaun^Cc*41VDony#!R0X9}iuF9zh2h5>ePf(jfsQJ}85q$c0Yh z^Z^niDE5I4;;{}0Vi>bPPoc?$I+~qh=raU<OD7V{2Y*l!Ig>6hGlg}{iNtY+8OB^v zG|zX`b18M40bxJ$LKQ($)cuT%pVH)<&$OXIT0j#5oZdpxJ#kSh97lE~TN9dI6d{4Y z7PBp}`zs4`gK;EfEtv@B3r@9a41U`YR1TL3|L_h!um_*uzQtu5`Bv=V?e<INE2h=F zZoB=8d7}e1d$+{A6GH_*kAErNJjK2`;Z_gj|1tdMBQRlL$f>Z2v6{{8c1(qN3Y3T@ zf#BE?B0PuW<@OpQdtg7eKP4rrZ?@Y%$n768c~Gc$z;^t7An_x2D4GpF9Y!2`14q*l z;%H=qszh=`i9%GzsO>g?OS=m9UgqMcjj3#)G4V5kC~BN}s$nZxN5S@pJQO>_#ZJeJ z?Jy7_Q4Mn;GJ#9cX0o}^PX5TmA3L(|$o^+G{pyj!vgkLI6uNB3nC*7<NJrjwd-f7* z4UE8&pP;_ra*CfpL&mm|<e0qO9(fGjk12+`VVRa06G<_FDBunh6S}3)c_43)Ns%X! zWJt^ei}`KVt}K*pSJq#%Kt7PkX*wcWwA}vfc2aNp*p+o43lkt%jA=)ZfiOUYcO(*` z=``K5(zTU{dde6~b~Si33^n|{%1AxMp@uRB;C;X-)RV32DGmhz3b+FW=&2hDjRyuc zijHDoY-3ZbOYUuf&W6k&g*p~VX~(WG+>-~nClA?f+bJ-v3Vn>wX{f$ijH;5SF;wz2 z>Y;ohX<M<&L=-^H^KgV~U<)dNUIEL^aF0BWsW_aW`X1_`nul_9MtCXusj%UfzP8&H zmF5z=vcnX){qDzNDFrn`9GAwemi{DSN=-Lu4<|UQs?QM2GI|5+-hIt-yYECuO`L9) zt88c4afS&D!wt<MhM{(62}v9_bT?9V11-L9fAcuI|6uDZn2v*Ina6=+65Uif*<VP~ ze?0iweWM>3EwT@cegw@jd?_{Jk#&4Cu)fNDw;Mj*_kH7ok1I#-7!5@@=b>JghS)<u zGb1M<hmT@5y7BW*zI%KC-Y|6MP^=C6Cv^-wLLN_lnk1o)XQO)rO7zs4|HlrUz1{A= z5JY+)=7kuM{VMjWSO7NpuJj4u@Q@8dDaDd@%WGI%$j5KDhmC=88Z*Nzvu7-X6!KP! zsfBWCL4~m$C65{nuOS1?<3e3BV0`#e7at3nvV72}Zy=-&^g7TBY((+egU}+vwmb-& zxE1OW@>51GLf)6nPc20-`{IE&4_5Qf48DGdn!jrJqr=twc_S_xq2{k1al4u~OdLrN z4TgyfB0>@}&$HIx_^)X<!4I{Y*O=A{SoW_mcVPYx=Kc6_zxjlKpD<s>{1?OiJq*dH zhf2><pzLA$MO!XmU0W39Hy-H57g0k+rI5bKd8?Che|GM5qWLLvEeR(;ShIs86+IZ6 z3YQLuEFD0CgvK_<TqJd&j)w>P@9}^fo-}I(OwzO=I9Hie>7GTU7A?j(m=1A6^H&Ia z0k2-b3ly0)0@5RvnTzbLL$?kkXzS2F47J>#J-BdXrjdzKdo0u*I~N7qI`leG{W_>F zbR<Spso5K-d(+6+!%)Z9#{4P<n}q2cQbMieUJrg)0bu@}(*;=#zTM@5--V5CI534^ z{WP*2V<F}k=NPx$9yg9UIBq7iJ#zu27u3=Sp_fnuHLMkDpsL4OaW1Gn8*{WcM=Xr! zGgd<kNh8zSJWX9ZdV^IcYe{ch{gkz+H?B2wo}jw>E)3Ngz);O1L&dN#DpNu{pEBjt z*v{t|j}bsf*%5S#yoqXkrP)NRujW-cr9Q2t3LUMb5&6iqHbM@Cj^tJIQQG@Y<^8|< z;T0@me0w<F|EItI(;qGua7Fru9@>vvo!82IcWd<{=oEkRfA;tPZ~Kd|i~k4h=SPtr zV;*f+Q~_J8%j~yo_&DHv)am*q&S=Aaq|YmTcq^p@NktGv-JkLh1l7EgP|BuYNH}FF zY)F<~;;=5+*#d0BQ3r<1ctP-{)JerUsae1^i(|ye6d!jXj6=dW2%hZ$V<?ClGer=J zcwXEiBi>XXPVGm;{V2L$4BMo$&LZHfi*V0yk$IU3*d3X7WD<Hu=EIpsih@;+`A|Q9 zF-mnu<~~t<A5;f`qDG~UXJB+|znl7DDuub4`p*y%B^FakA08}k5!ESW*iHz7dl~{y z#t`_JW2kq>%m<O@pG;|N4)rJWrj7`Q!9EIueSQjxZ%*Bnih1mr9=w8VF+(x(jV#KB z<F)LekpVL7Fe1+tQ!pe}BH9#TBx)0}z$Z2Z_^4z$A3C2Tl_+Y5T{9lg;t5AgiWP*N zkqLVag&+q9Z*E0GvvCQWzV5ci4IT(Y$_kT25qmgtPSQ@3s9d2>z?DnQ(=lgg3M8ou zo<f$SRg0igy6tkUF;*CG2o0Bhw2>gJXw=xaOOPgRvX#Bv9y^h9lQ1`Nrc$PE2vV?p zWh3EH<y1Bf9;8$ADxD%{Hyd7Ut2GdO&1>Fwy<Po_8%*?m??Yai+ab;2&PqA8i`Y4+ zIGSO2xO|SHh~bE+rqZF+g{x`Xs_&%@RVY<UYOC6)N0aVH33HSKOgz#&8|O}FG-6R- zd_|nBKZH+VKJ)&<2Ol^1Zo!X7e1FA{4}71)hx+tm3`}X|VaOPqD!@~jo^)UVU-wg+ z2J=Aws5%I=7<U4YDVCYwm`%rpDxHM~)$~MXyKQOoaUhH<YyokOiQ6Ock?sc#1Y}j2 zhlEfDIKeTci^J?9gh~&sL}X7<cV!7^%u1A#0MrrLQ*;}4DI*4_#ST1th!{gP3xf>j zEfJSk8hC*K=8>c0M&~(wmUR}KC(SAcS6hBMr4N{InC8j$cE|4>cHCj`y}KQI9S{=i zb=>bjCv4yEcm?wxc)#&dg>Sr<;Sup=zO6pWZ$-m7&VJhW0)G4~Wk(9IyDjCx6guAy zOQ={1FkEc!_r3%E#NO(A8qbVh@I3;HiTzm0)A(^s>J6zOqg5&<VJ8lFKlI|~9VrJ> z;FDTVXm*--qV%ZuS3Wv^iPS<GFu&Tn6CD{`Azdle`y%VUlc{Ty%b-VPCsO(u@5|Kc zCSM2iQ*RW*2>Vyw8<0dV8;oU}%nlRFlqqzqcqE{WlRRHK7SyNA;bSAb5{s^gos5lS z_XBzRji4oT#IYbHZa5U8i%e?L-s^qDD;mex1}}vu69zjIqOH?_Y@Zi0`+ypZR||uH z7ah(MFY-9Rh83!C^P^n;Nu<I_0T3^60;R9<{+e_pPL{h0FhXtrerz9@c4bd`@6(4^ z_8A212aQ16_1;g+weGLy?*BgdkICWgE5feFUSnz3?yfhL0U#PBj~XP|6kciA@wCAd zybYcNK5x=2OzRIta>6Y}?_fU;iiZH3Avw@Xlu@&$@9&=#Km5PauXZyyv^nWVo0HLW z9zVJO)(AA02uqan<x$Tw9x-z+O1dH`Y&sfwCLGX<nS&J|gVbzFI$xSQ#FtXUH~K8X zvwC~zBr+zLMGJ8j;e&zKJ@4X!2QsRN7D$wlU|T|xBTSyYeTh?FcnD$-9tlq_u?F(g zCeH?*JO>gVO$=*5G58HQd9bwW<k=80d64FZnLN4S7NbudKWvFWRsNyS!J)Y@d9eNe zn>=Le-yW27@oVv*#&~$<0+E3SAB`ywfr`U+5n+t6Fco44!dML~HkYU?V6kcj+S6iL zDYP^xrWT9SAvOudGARSZ$ry<KUzKEf6iG6{zB98xlC0^Gl1x8>B(f4qqR8PuIUM*f zIyNm*6*Hm;kOcz3S0hie`^+E#G!K#{*3`5<z_QN_5y)$LksOXF4QNGGM}AluMS9|t z4`GH9ljKM0AryWB?GYQq?rQ-;94y3f|G}yROKPZj;1x<67z-#x6#E~ESmE>k$W8#P zLJudzaasacdqM_HzKl^c#`s+aWlW`)zCZ4fI2v^OA90-`MdPE9(=tJh8!NyxMQZln zI$v6+h%cpxZ^VifQ9-O&BgyrSq@%aFl-?b8H+Ch;iiJ_1kVJG!*8+X{E2}Te4p_Eu zC)0NXq_GC_)K;vsgaWRK{dH`&_J0;MhJ{_%tFx3@KqN{YXRI!ki1m6?2YbV~*rVtG zPmlGmcibQina)P`ZXxy#*DUDWLaKqi)3(vQgsbR<M{P<3M`uIeGStnkN~&yFBNkz0 zYkI`z$I1zD7H#lC^D+y+loXzq-|HC0vO?@)u+NHAlvg?$aT>4q19}>z=GC!Nj(HMP zT+vFGGr=fy5&cu-q(e6~uhv)e6Y)(VrC&p}L%Rq%Mb7UvdOu+O2>mPlJz7r#zgPQ; zo}KErDE8t+{i}JE?#H$tbUqQG)l7&dW<Kq3Tr$Ic+VPRY-eE53a{e$A7UG#7!2_P% z>qLEZ!I%mDbLM*v^HlpiQUACu^`AB2(BxV3GKUQuT>80E8Zbzk4NeHoG2nZ<5z^T( zhi$t*oF~FJ7x9b4gYzO!*xhgrqu8Wd`!=ULwpo5xRXq!N8U%v2x_ohY6gD?%5+47| zoNujz_U11(E4qFm7r)kO`}*R&?-2ZgX_v3tq98~CccAF*3%Ol*VCS{&(~+ASkD=_W zp(M}HQQgWz-!%5oca`m|f%F~OC?aK{NLd5B7pWUI|A|zjr7XNdgVD8gM3HnJU>~^Z zsjCz2#q9KSTJX~Q!h+X#2&^Rd+N3y~3atoayz+%&%D_$jkz$#bpX=a79(i6$-{Han zSQl+K{6X<Z0KT&&YuQG!otz2VL_2p<7j)1ld(`-EM-AICM5S`s$;W8<Y<tAm?+zKZ ztC#J|vIh)R>wXtB*7i+P>q0)`yW|t>1o-ZBhk31OUu#}x+Si%)<*D^!?DYO>-etSu z)qF3zm)G_es*q*Jer4MCWdE#>hBm7CBzVsNULjDSS@zReTeDRp3BJ)!U*}grkL`i+ z%(L?%#-O*|+i&MBQ3+#hPnMcDY#X2y73yVsd#icS#Xat)VpS-{PFktvZQD~~&x>g2 zQ-^)O^{mUj-~CUweMS78gYC8<kBn9;#n=fRJGsfeC+5Kz`<a+mV(d%fE{(IV@LlIq z$tKfRh*hMYeTNtR=%8ZG*>?Tcmc4V}uEF+8gKr*UA0E~|+}=L?nc;T(h^t4~zZ!AZ z2$kGnXN*(xXWCZ`{cVJ~4YSXW*%G7D9A}?atL78z)Lb?1vJ(^SjA1JDkkfwAd6mn4 zD(#<X_9NNPW!pRY+|b8<wa<qUR^S7w7oBRw7`vhlzVy)Mf)`lsjTn5(PG4wm=(8z; z0i54mpSdSf<#4in`Wf_SUj<`q&qOuvw0rs0e1e@4VF(#^UV&O}*l`hRgnR^jj(x~` z*lWL^x+6`k=Cx=4#bf`$`xmeM8{eN(?Zc@TrP+T=JDg^3Nxw4PzBPScy8T@G%juDI z-b(zrM@0;HI(DS|M$5j?y414YPX4cC`xWm8DfaHv2U67<haC2U-q(Eg7rvKL>>a7M zMii#e^AeT(7L%T?s8A6+`?xv6@D|Y%50wT61D_SB&<HxIR}na($Fpq}%ISjWJqFHn zl8T3@YR!=Zs|ak5@$^rHa=Rcp`vLZVk!lUYjxDx}XKRq=JRH;Q=`$ip96HGid&W$S zB*J`QCCS&yH5QR0551%PId09>dLsx{k+W!5sUjn~AX)Z>-k(JbSG=7%)1JLhtp-q^ z(BJnqK621|*SMO#J=Smz6H9OnWZ@g?UnM5s2R`n?2*5P^g^00&emTs34o@tiSVP<> zAfOvYS`==Hg9P$;E@!}q6)^)A{uSQ*cKVzFSF$tKJq^Btlj}^dS^!INrW+31VM0-+ zNLs7UvmMS@YtBx$*EXF4q1bX+6HNe<tq}m2&J=6gI@1~J^KEj$t7J~6AQ@xQrzzOD zYDHCK_HFf~4AfRn8WI)epyaM{XQGb;F3DE~o+S7TKZ3w{-3nYz0w1|vHv;#hf+lbv zLg2|l;9*A)c<d1bK61To1nx-%7TC6&KG3!4vUabd0e4wX!h0}`S~suD!O}g>G#ZdC zf*55rT|sB8Yoo9dm-Pfx0@HF?cdsi)yRr5gwXT~;Hj_*Ct}}OHL-&HgCc8{$zd6q2 zTBtIYMkV_Q%E=do2XhMBo#RY8We(VRzS9d_oURsU9DJHfx4=6{@JeEDb#mNb0R`Gn zvi0P-rgJ13_;z97AZ2ft)nSoz*2imV5rBLx_5<=k&WkAndDm&Ov+YzV*?K}_`8P>$ zArm|vjbJkqJf;!wtdnvjTaRc2p(ZY34i9StAr4#MHxk5<bgqGswXU?bfU>ryfOohQ z>abSEMk*!LMKGac)b<wJVdX{AJSKZNT$uHk$l`ag7#3nIoMOFuZaHZ4^R+=#uhV7i zfB}gW1M&t)F$4$Xv$f=LPQr@VruA#fbe$@QUIij(KgIf55M75vE^E7GUgk`KVUG>E ztUh277q&Y`vULo?&!98Gwb7Xh6q)&uY#|f45SXbx&N<R$y$048YyEQF95mZh>sgXJ z*1B;`EsnQy0s2=cNpM+v9YNx92XM(kk$x!*>1@&m5L^c@2FGo2ra-lXAbectOm20i zZglnmAk{SuYP`P&6;GOV0O)kx>7z31Vo*z_59L9U!PX^Kt#c%#pL6EsJ7aU4=^q2Q z#d@y179~kXe$YrQ%%hFi9*(nh%bI);G{t({+5`Af7`QE3e}!!%yR3(?m)6Bvv9K*D zeuRoI>RPO-<1Gi+2F$CgH8L81lyX1xDILXhy=grzI_|+v2VJd%k7;o_n_>Q6;&YCH z#VcWsv)`NGc%c3A=fFmsK9fe+7j%1Z2&Zj?Y?3pv6sG+gXPPU;=?l05Jm#^k`625W zNJexXif|K*$j@Pvz}PKkhIJi?ij1+6@Fj0JvmoPu6)lN4na*s?&ta!H#~C}9Mi(si zC3pe*JZJ1G=Mbbg5d{ZHlATF&A(=})Xozbn2{$C)nS$)jgAtzZ?Bz1^A<>F5P}9~` zAct&^kbI<`!?J7%m31qN%j$HXgHCc;=bxJcBOYsg=?FptXQ1+|4ctdk9+W0qpF47} zWvl(%9JhDR9#rLARh3|Zt^g?Xd?DQ|k_B(>Ip2}i7coT47dgRziGG5rXrP?E5VpR7 z=mZuKC)tI|`qSF-kWWuV0vx$i95R~ft`^sG&J5yb-3(<3R;OHbcA<-dzCL8_1ev${ ztk=lk$Urq07jlsQp^I~-S@(m5o7S6a%FE|~hJ__rOW20M)Tz(7UXje4r?Ez7gG(y7 zvfr>N?u4vk3*P29hr);D+T$EgpQf{bK5Io4nB$N&fj@D;rEo5*?GmR@8<poc;g^qq zjl0%4gA(91s31sp3IMS3C7@ws7DS`6?q9nFH0W;W&O}5#eJDu^>(8*vTTs(Fu-3h& z=an(QG_Ajwpa{=-K4&622zSml5!AFoA!tLysoR{nkhOpS!&(!Tf6*JxV>B|C++s46 zfYWqs^l|usT%a0Ne?xHI#!SmYOo>@JEh1J>Ho-M<s)IFugudxj_^}sovR{yWK@5be zq@xzp_#nD+AUGe4BGpH}{Bt1cZ?%Ij@B1vc^DoxqlRM8xci!LHMD83s3%dM%SQ-0e zEy)-5lH=@Wjm$xfF5U^#Ai`~#u;-wmJs6UI3IX|IaF~~zcITmtG}O)kE(?O7Ue=O1 z=$tS;6k7JWb0F73uFc%$9EXCq$V0l(by*KdkF)t)oM*kPPaQ$w(=uStBc0B9(&_AR zX1J_JVR=nm=5zX?l|<{yHMLGZXbAl|r~}j%+N97R@1Y5+?L=JVu3Lo@rY>3#Z_vgD zIMVh+j28HC?4>J*N48s5Uv$R@Vgh6=f*GxC3OB;LAknZ0op(ADmvUQf(U`VRh-eIA z7~YL3jcFAk8j}^cF<RkE%r`)}VmeseZz>{qfamL0Q{{q34ryE4EOg5tLPb5PfKJW< z%Vny|YQxY5#;Q-Qv+r5X%;|tFb-e**1Dl0A*MONpmxLGil2(K5;MZS(MT`SfZ)9}o z9xvD9gXH^@;SKYMus#$ZKgi`tQOY0Ua!-`<hq*j4O8FyPo)D!RET8n-D@yreTpk~# z{BbUii&8FjT*+2!lycn0L44M`d+j_WN;A7JeOi=ebYJ?6C{6Fa^jT4w)_v)7qBOPp z(&t5KN<?XB!G1xMf@{Svm$z}D@qSU1M$raF@t}?5?(4oJN|U-T{hKKDbYJ?iC{66X z^c7K>(0%EvqSX3n6scizLN>HIvOJ`bzjOJj$nua*{=wxdqm;kS<!48hhxot2<#3$T zRp$`-82C#cIFT<}CnmB8>%QiR3}GD<izo<o8{xoK1cTrsLP2jhAnrEk#YO0!2CTed z&Bsaav>JoXOypt3LtJjH6tO%660x}6nXYZ<gWTka<~WB##&T_Qj-gM}Ih8&|$PJ++ z@c}1=F`S7m*Mw~=9GhX>>2&?d2R;cmptuaD!a@cp3DV-sX?7+Cor56|fPGy8R&<r) z9fGbA@M*cG(`p(uY$5k9)@LAh9E8?VV95KpEVL_JYIm#)(o%gGx(_8u)+w}!!A)hX zb<?__vyb((Q4YI6>qf}H$(?J9>o(~m-#5%nKIloZ)0qoHAx?3um)5%9;6Q;S#-k4E zIRvA%VnF}4Hb^`Kd>uyO&=rcj#Lg)nWQnyp*J9ma*43sPcieB0wH8KN3#}+F>nb`2 zO15UgVuJIR&l$t3q{C%h0_`Ym;O4+Rjd;$E<Vm$$7Q7|t%mPK==$f_8EDXaT1bclg zY}{beV7d;1Q10iKI#a;Dl3a84fUppGY-Lf3Bbh=WoCsYl&a14q)^2lw=+1HrJPXF_ z6yIB!ZZ8g$jM2juMVf-BG{TfnDRW_OCC(#!Ld&Q?3`mKR3=}qqBII`;3|Xk)Hz$%G zSqjGQj%~pCMBMwky*N2Or|?^g#4sj?sUnR*n?R&!m)H!r$qw<X4|+BjK5(v#qEFK~ zkv<`6g-=j;WY~=u?pna&LHVHE57(MK5C4U~SPvlrM(;4&wgD4Tw9DFj?i*q^4yx*Y zCxw+{=Uz9>cA6gV(m@dz*dN64jC+D4fzaJ`p3CwIpNhqU&=4OLCri#zF6$QPUaa-_ z+WhkHVc$1^k(e&)Qv=-{^zq+oKI%~)!D_hbdDO)n;74ww^N3V*DJP&up#gTdwm3bY zMMpkN=j1JLhzS~XS!WAR_8jSV56AittIG`~IyY;MbF%mlm1rb|^TVX+x(@DOZg{8d zWsv#o5v`cKrN)y}6aa5?oD<-~LLYd!b2{iB`dkaghdv1DVaI?pV$iptg~4H10-VMm z*_@A@ld$G8VYc}qw-cdlPBbsrj&2dN0LY1yeJ~vMN6sAC2B-u#JErR-_`P3;ZG&M_ zK3`;!slAPMxHcT)2olp-jPM+hh1~{KoFgitCM?%MxSOQja+p7v&=1o&8Zj$2AH42L z;dCLm8Vv<b*TXn+6qU-2nAom?<EOzOr(e$7vYkiXm9aUaR(MwiM?~b~VV?!<-~l6@ zSS4AoFoQ=|eYN{M_Tqe`BD^upVmM-TSr9I!yWDWbc#Jc>1qTq!1yA8{e)*EXJ3{NV z)NkCty+do6ubf)nPp$9nQR}s;OuPf54H%wC`B)5)VuLgN5|m<R7a@YW5MoDq4+(K6 zP7+)QlfVyyf5&-xjhN58L4p0FX^KY&oj@@dDe$Nd)iv5>y+g;kSFKZL@>k^9ldKmt z5AnEk5Fem}U|(Z>2zsC$IcTiw5X0G+JdT(`_N48+^)cRv$AF~eC#Zve>XDYqBeaax zDaV+`5%jK(^qwv{?lRCq#}AMQxAsVcV1x)_Kly_U^g$Bh_8)JcUDg9&B)GCb<Z;8f zaMB?TRnF5#md2L{6pmD+QP7%%2d{I**n%f~p8B*?S1e2k)0Msj)()|bi8ztw?0Ha@ zY{jwlKpYFFFk-q+!<h;Pvoz9ZIrGuQB8BxBHFIOP%~&3jj(gEqT=0e@eNt28@yK<< z97Py?MJzs~6YfE64}HTaq4pl9_HOt-?a|}I@71W7C%^wbjY726wSN)%#Quf#`J@=O zAI}uoF1qnKY?I-0%J1lHUZbw<(6y*eYBxFJ99~vJehi~MhlnG>K3#V^U_a&3exffg z!t031@#`asvaLr_q`P=!>9+YO3(E_niQoKqgADG0x6|jt0;KMzU3*-iE%!5U)QXSQ z+H{&)qyfuzS@7$VM6yuhQjYr-B)AZd)BnA;JckeZT=3-%s-Yb?hWB3ZH4u5=2yUR8 zV^uf#eAvXfG15^s36ZPdobERXFit0;H`xZ$E)65!TcCGhGmR4!h7<PDBZAJva@a~! zoGDzS$(v~RvL5WBDe$Em?V_Pg@Px3H#+|g-Dq}cqon1@I@PlxU52Z=gr4%$k^l&33 ze7N_9^Do#t!R{KuhtOX74%i5YXC1NUMLvQd_ev4qN2nZm=70~PaUX>brttuP!gPpH zi3!9j)b)s`I1nQ|m*eb9^j0oJHC%Hvo-bH1dKjT{EKe%|erW@(<)6B>l+zAIZeHcW zV_gD$#O57c_WudiL35{w%uj@He;Nnr@PL+@42nD`@?>YiB{=2t_c*7ccz6m#UJ7h3 z4$oX*zbWEwh&-1--bVG<xCYqgah(2KC{D+5wqeLAq!)`7Zc;2Hhb_Z+{IKeAoyry4 zl`8<j&9k~Qfe60K&ZJgsYb-dfNjOGq2jB@4RJP0Eaietxm;!L|(9$ILTX)g9IQ&@t z8_sdEPbO`HVS`=>BZ(u3-3#DnzOz((h@E;X>ZLy-2gP#~@c?BGnJ^Gj4_%iK2kfFL zRz+dh7+}(N%bK~32J};HK*hPY%X*XN{wG>F9r?Mex48J@?u*|B$538g&I30A^=-WY z=JU6;Xz%chTRJE(lL!a(oY)V$tY^4^HjRSYhj%DQd@NQ^dFV?4F6%jLA2*X*(GEe8 z@XZW)C<2c#lXl|v8ov(`%)t|vScp*Ysbm7|gMvYUd}x*n=whHk8khA~Jd_}l0A_qh zk?cy^1|5yH{)lAELXeBE{3Khi!%C!fl4bmy9B^OjSty1>q>x|uDLf{(;LsjjtOd(R z&^ZLoBw<m3Zy^O8@TURHiVFDqI2D!kbxRv6>g$b)ljcwSX-z|2aM}2pRdvDQI%7ps zT|*G=jmuXAjb(Ms!N#W56-(jI&n!N1aYf;R`SXhl%ZwJFnK-^8Xf&T$x1yqXMP*e@ zvr$#w*jz(o3m28lFEijzAkC{>WmK2KA7fk5RC6{JEm&AQUv0G+{+3hm!nsvcSXR7f z-r|yzibY$c3l<j}@VEIYs;Z5ehG5g`kT?xBtAbRryt2VS4#wibilPN4%$F2KL(R&< z#)cqNGip}VR8>HQnx=-zdMJRZ*p(AYic5=(=GDzrmG$*wWFk){#>&JvqrS0Wsh@7B znP$*jO|`#jS!I*bk4a56mDTX~pRg+n7w1*f8O_1UreJf$N>HuBp{0TA6RTiT%~>SO zqT+%gh1+B)R`GHwUL06bM%|+^K)ozpP&l`n3VFrLmy6brKgyUl5l5-2GN@2bTG0~3 zvf?VEsiwKH{_L9Sf~KX-28{BVHLDFSMIGYMVVlL}C1plUQ)P2aMO_1wE6gU4!Gwlz zaq;}3vIRy}V+#l%%}3<&^1`MUH0tXbgt5#nE?ZbqWSrhoS6^KLDy&#h2`a;JuWvSl zZ7R)8T3J~agufaEmI@XD<5~lzQ&_R6WOe||Qq^t+h#Jg;KbWQ1c;gDTwx*gD^<cCW zBn6FaL|yFj;^MOT#bt%FW|Ia$%98oB78u+-k6PjJvlcCwN125s^Jg0;(Nr>;mo+v8 z{Sh2j*VWWlqohj~8ugX%H@>Keg#}=<n3{FMqLQ*=V<ip?3>erBPPx+?8|!HlCj*9L zAVp!IV3Dz`vbmzVsqXBW3Yb{6b*o?;$@~n`UAV(}dCCM0jnSgw!sBs9Vnu3vCUp(x zSRKq`gbE4^ix-v&Q>t!kIlaEdK;0R$=P&UWjvP65j6ZLD&e)tW{?W@Pj)z-iQ`NF* zt0qqzO}U1~(UZrFn>+~$Ah~?`Dv@Yzt_dZ^id0ig_2{2AHXvTLys^5bep>T#n2-L^ zOZ}r408MkSdfL*47HV;HZEaIc4a}>C>N=Q_qicaT<f_gb4c;nPQw5$1K!H>(tEoD3 zT0^6tT3Avj5>3Hiok-QJs;XHLtZQs&hJ0;HLlve+Hv<>Osw;z)p}e75F6sy8UvU|! zYT*(wCg25EHpmH80Rz}<RLc1S<HoiWY&>%@dInbfyn=;_eNG@AI8NX~z>4Z>L&IKH zQaE=pRRUh~N=i#h78ipzE?R6zI}h2L%8<;i`0Vh^AiqU}UI<PHOb*k)vS88d#Wd-b z)zq(G14bW0q>G9L-3bLHG*`i&G*rQ8k!_9}8#d0l#U~mKmCM11!ZtWjxRv6C^Cybw zF?nvy>f*D(+KRz3HLh4qZ7eE=`9}PVy5<USLlu>0SJu^6qU8mp&qn7W1s3ZB3`50| zqJ>iJR9LbY#3(qvpro{5W+@0>SW#L$tIVja1OHEc4#s9?ORZ5AY^vvJAjfHOX>sww zig}=DWL#FbkYy_<Dk@n->4MVI1%*oQCcxjvt2s*!Sz|q|cIfvi8Y<5QHwa3CAxHkW zzG8DQ3#yIE=Bm0ng-zZ>z1J{kV02h9tV+2qj0HEpyc>KR;>&4umL3D_qzqPE97dSs zMc_FaszIe;p5P+FE0ydAOek2<n=7gsm%|cUZB!7A0R};<KHE%L$-H7i4yF-+mKH2J zv0`39xk1)1y+3#+Fw*c00zVjTegZ`e;LUTFH7>8ot*&eUM>%>~<?`h<O}W)IXXgr= zS+F=4WLnx(xxCqczlxaK3}#xNyS%clA*X7^itkeyI#X5OQeBhFOH58q?wJrG)YRt+ zFVj#xx@z>Y>ZaygaBCG4$LBJAs9wQ}I-|Qvt5$Vet>>h<r`H9WVeq+cp#%p7Im;ln zfFNxtCBPL1M=!0a5}E3nT1YGwK~2sw&`cG0P(Y2Ukt3@b8*1yYmNC1qaH@Y8`10ZG z#_<h~6uiM@{&bOHu1Yeqdd0Z6!22HK0n4Tm_`{3%{zpM#()o_U1lO#Kt&8jq=bWFp zHpW<G=Djl?nfd6<$7ViWZ~$r=#vmY-f2M`r43+g}UTn?7idc{NcK3lz*~W*5yDPKA zt0oaeagcK;xcYXg6@E`9qK@)285-VIvVlNh8lk_YYpmxQBMFB;QN|a%*h&}vQC!nN zsl+95{A*CA(M!UH;TK8x4MM=_EgJ&X3z+Vff-5k*bra?viHGHh#FciH0!!(a0t0`K znhm8bBRP~-6PEZ}mnuYQ%Sh{jAz&H!XUw`@meIQ_2#955b-|knfj_&bU8^bYG;Tse zQZDi0z0<fu!`q0)X$)0pF}WH3d&BQlh2L@xP0WguO7q655#_?Fg>|^6fr4>WE79GR z=8co?Pz1wNM?$nI0b~*bP~oJ~iDK&me2ORXij`AZIBtpo_wjU}kca8KJn5c=;PM@9 zv<$R4_&axW4d+jZOHI<BYKAhzLvO1>dY(d$_!!PtDLC?%`oh0ciWk21l?4C4IxMd9 z5rhl*BQCEiI3eZ1d4yLPj|=j_QT>|v{6xWV7E1gQ#?j(cYyG)GkGv$kpI=MU`43fa zmH%;!>-@{3;05$PoanEd^U%DpR>P&PcWJmBzt0%QW^mR@eg0d)RXwM3V^W`TTyhyl zJ}UiGg<c((5(USk9G6QOM?IiCJS>NQt>I8a*F738>7R^(zr?uguN*J@gTQ#neqsA~ zeW2i~R~y2LmGshMk5q7#{xrs=eq_6sGmh=4`guaZRX*~UJdlrSx4rl$p%7Q?s(^9i zuiEV_g&yljc}|N$zat91SK*_!`?P|qau%@RNxkJj+juQdaO^t#nJl_a)$sL<pQ+)0 zWPG)TzsC3l3XVf6{nZs3ek{}PP;eRwp69n{_%O!rR&eAm{~Xw(3XXghGW|;$zMk<; z1xG#&EYIf(j(q;e^l&Im7wQx77Z~?xIRCVUF<ils|7NNUfBRLzk<TzR3b=|jT>7KM z8or6?D-|61ZzC>-(Wv2j7(Z9TpJ#lthJV8NuQWWF`+Kv7XEJ`jf@8mSvz&(+$1Kh} zY5&Vmk#Hf7QG>*{vO|z|JDK^9=gFzh-}@QY`F|3H-ew0P`Ac7LhK66k?OvwgGOm7w zalPI5a1z2L<&=K%e0B<m<D6jj#sw?@;y8}Cae<3NGQ=@@lJqh3=f?$qmA;B`DUV!V zF3{-ZIs!izK$nzL<P76I#-)C+9IrEc;#1;M&gU3MI*dW2oO@VNh^umrNR8xkFIOng z@La}kXB_#c{&@?BpopUirJjGO;i5Ie*v~l1kM{W*DhjSA8Q1mpw#G;H>q`w6TwqM$ zuO{Oq<q<jf)5jbVOT8^-Mr9hll=0Iwyp8dzHT)RHuUBwYKSk_#WxG3=p4}U*zdY0= zDw{Lm*u`UU(BP6Z$OpSP0ztS~4MfjfCtODQNRK8^A49M)M0^lE4=Ev|6&!gMu$<#H zd<d^|#Tq`1JG4l{UuQliX!si}Po0K;jz$633h@!rLk-7gD>eLOwx2Z`K8y1gX?P0r z`Gtm`!+d_N;hZ)8sNpNQzxy?O9QXI2hUf4&KC0o9xW6B2_-QQX*BU;S<#cm9IKDVu zPR^%jcyHFTU&AkAKBF|elG~I1Uh<#Mau#XyQtxt|m-Lr1-6<OVJ#0VAH2k;RZcxL= zu>9*aJfHEOY4{lCf0c&c!t!6I;d>dE@r9IsJnR21js8{Ue^A3uVEh>k-@|-f)9@vX zzo+5tjDMlwNo+qhkDHXUo#ju`@F^@$wuVc)m+_9|lg#wvHTugLpP}KmuzaN&Ud;1C z#!ZrcA<J2<(NE=ZU!mcj^Z2gO@b?&(@t5R3ko9x9Mt=v(|4R**M_M~Id@uJ)#!Zrc z6U%>}Mn8nd>j@1%h4X*Y@Bq`lqv4k^{)vV=S$;UAp-aj$l=aX{!yjXM`S;!>z5LU? z{WbbxrXQu@7cl=x8jim@hu2IEzmfGbPs8Jxeh!b1lxG{ad%T9<#Pv_s@S9mLwHp4E z5XV@q;cbks*Kp}CF3|8<EGPWARl1~{b!-p6)o?tE#cQvIFA%VCzlOiT{dz&eXE6S< zhVSD3zNg`GK7Xj;%cPy~I7s>BJ~l?fJGj3|8vZ=Xldj?OSP$bh{ABL$6b(P0^%Kx= zc|Nj0!$0Q!p042o8DFa5U$Q)BYj}T_=Nt{6&3rD@@RK-yiH2Xs`QK~!D%Q^*HT(_E z->%_5Wj)`e;qq+aVGSR_{d!8nA7(zEXn237|4PIE#Pk_#7t$Uwn7*HeKf?GV4filU zUBj<od<)~4<t-GAz%MlVlh_{a((qS#ybdaSq;9b2NsWFvkK@Y<J#Y1h(_0$-Uzq<# z3cZZ6vFIy}UY;k$u>Pdpo@YKj4VQf7Pkl-HXIRdW8vR7p!#KuKZ!7|}Fh`?rXFg|Y zcn#;zR&d+`%D7+J9m<2a+>=QEjX3TL=I}UP$$X?dAFw^`RQS_ggX#aQ;K;uc{^ND0 zhMy{6W1oT}pFcA$?OMvYn(@aKdgL$T{udb6<@|?2kNxto-ab-r<nt%y|Cxs0%=lLd zuJW;Y+@zcjGre2GA7tFaxRi4a5ArAtU%>iQ&k0rilxqCtK4GDTzt8QSsPSLK{Hqjt z?AL{iH!C>mXE@_>e<S-ll<_qRy~?Le!I6*LKeTK3MCP-Fam=D>u4Y`GH%fdDl;L%! z!Ux+ugXteuaBTN9#vj*kxes|kYgh9BM-==^jn8uC|BZ&9$#{%%{)Y0L%XqwopTl?- z<CsM~$bIHug&zC+Q>LE~h5pzm^m7#)<&p8v0u7h;P^RE&yQeBR^0}7fQO`dSm*cpc z>1DtA@Vr{7@In4tna>3Zj(l!rTs;>>{P&DsuFxZ&KQXSJmm>Z1jQ>WVNBnWd|G+qA zQUAkP&fN+<@|Wjh_bE8?Im~<xYWTkxe=-XHmlS%H|Jw?V{QI*XJEY-RjDMoxg^Yip z;nNuZw}PwfdT^q{g&&AN$MR<@ILfn>`S>-wg7M*uOMU*5^*K(VNB-|H|6>&#`CrC- z3N^fg@zN;#k5}kb{--NA^54UJYBl^e#v3*K6~>!2`~}8WDY)A1g^Wu*Jji<3uF#`A zPL3ycX!v2~zf<EQ*S}o~J+}LA*5^G6j{Ju*{{tE>_koW`;s2sSukwFW!I6In^M~JK zr3*h0FJ$~94L_6d&oo?~?|r4<YP*SepbMAOr#$b<U>vI<{SemMFa<|>Hgmh9H2ea_ zCq&_YtU{0cCo=!J3Xc4DFrNh){wv1IHT-tQPtovO7_U@twcRGhr5@zD-kK=*RZ;L? zN5S_nj{3xYJ<am$)$k`7e@x>e{p1S@J<4CgdV5E~k^k$==RFPoJL8{5;eS}6SNX?t zpeyD7nE7}#{6oewG~D8Sb+(3^jQ3Y?wcW9d%W-*_=VN{pyj<afdhjv-Q#3r8@tP=n z8l&JBXnY1SpUoORfbq*Ud_3b<Y4}*iuV-BL_eJjStx@pDG(N@5=P3;@Wc;NleBO+L z|6Aj;g!!1f*^~CLnDICbuVEa1!kI2fU&VM|#$|s$;QkJaf){CgT9{8j!<!jDE()KM zqu|XNpEl;RQo}bgzFxzxV7yhsFJt_2#$|sKdH!xw=+XX9Wc&{bj`n;b^SM>ScQAgZ zf+L@L=5tWNk<ar?|A>Y^%lNa5OF5S?pI4*cpKE;HXFgwP_&*u9`EWtngNygYZVmsM z>3xh#c~0kjUmt}Y`zz12hbuVtH;4I;*6>k`Pt@=kj8E0@>5La@xIA~8t>N>SzEr_g zIhQCn$|=v|PSo%U=2OGC)WbDAE{zI3^1qnzbqbFBw=kcL8or6~O$x5^xmv-I&pk}P zO~ZFH{yPo-7vnc-_&*uHjd8tSd!yig)%fJHJ-njfBN=~3<0H@gZ9Wu}b{JrKw}#8_ zIe8hEa*pKnE?c2Tz1_n4AEn@^w@T(eM#GmdK1IWCVtks0Z)JS8f@8Zfem+6Lv0V?x z$tP=gJmb|GE}suB)9_(T-=yH!?z`OI^AsH0UBvYA`yo=#3mLyyqpxKAG7Ya_e5-<E zyI*s=Hz_!_yN2m+(eMVwcPY5a=WYc@J}y3wxL3nJVLoqb`0-4CNW&K~{)vXKV*CpY zuV>uk!(VA{KVg5E&A8O(PNw&3_zjGYP;l(8wA(2Pj{TMALDMw+4(2mU!yjUNj)os( zyo_-v|74!;jT-%nOy8{G&ojP8!{1?iy@tQV_=Swib|0rhR>QbnqnF=@+o|E7GN0R{ z@Of6F@5TH77d6~w{B@1br!3DG8ofM+`dY(tnNJLVZwkj9$MG2UKPd{1<9Hg=XK45$ z#`|mdwTute@GXqzDmb<)pGW2^IJWy7)6dZG#~7c(xEz;*{AHOkg&z4=aKEY)9Ql9E ze3okXmyEB_@B~y8TtN+wXZ&0Z@5lHC4e!JF`3kPed9i|{obvqTG7ZmVKG!lX_3#zz z;TDa49n;^g;j0<nukp!YyLwomM>!i=pMO<wl=C{~^NNOVWBhFmm**gdG<+Y^f1=?} zGX8~zht5a%3s_PQQvP_xu{z4Xj^$5RaFqY=%s)%RUuArdhJVWVFb#j7@jMOp@qT!M zh9@&VUBd@3K2yW}jL%kZwO<Pr9Q!qv>B}^H4C6mxT<YyI{+`?!QSdg6PXY63*Km0* zb7>Sl*G9o_)A*do{C8{k35@U8@H)ot*YKr`Kg+o6?{B%kuSUVY)c9;*KHq5gI>uvA z>2T@%lcV6n8Ar3h<S&@dXbr!T@rfG#d&Z|~`0p5>!?={^Htug(6ue&Jv!D5_(D1t% zUmb<d#whqT8lNYb&vp%eobl^5{O^qK)bLjs-^;k{?^IrY4@SY?h=TuD6g(Cu8(ea{ zKIC>2H2i(W(-_y~@khZYYkXq)+$3MaV;C>i@Jz-_G(4U06B(EC%wzpjMZwo<eDavj zc^aO}_~s~lu84x)r12?XKDTK2Y{upHrKSE)WPGnie*)u=Y3-iO{e2+{{;|gAEavmM zhRbt3gV$TBPsu+n3O;~wDStcjAEM#%d@xtTf5G(QH2g}&3mKR4)Nz03MZuS8d~RVr z^%{ON<1JD6tc!wQsquM``COyn4={e6hQG-8^&0*><GUG`{guzf?}>uHtnvAf`TSkO z-)H>YD11JNg7@OMNsezUpIaqqcnss28lK5`9}Q1ud^F>-zw){Mq$v0zjZYr)IbOqa z8Lx=Kr!ES<LE}@xeA+a8Hscp*_=${Ps^KRv{%gi%e=lQu-WdgdK;v^3^Lbdq8ySBl z3ZGY^;Gb!H+L@1h-$9Q11&mwik?X}T7?08LD;ZB`T=w@@+~59D@O+KWEzD<zhTqJ1 z$^Tc{y@1(NuYUmFL~_Y3atq@!#w`p&G#R%Tmm;Sy%6*KA8OEKal*%QQ6VV7cZmAT8 z)CnOeREmh94k;lb6CEY|*Sq)k)jQw3&;NP;|Mfg`*`NKc@9(nK-m_=zwfA;%x;p*{ z<!nbzD)}eyG2~hBN6GiWr@?i+D=^+!j<2Gev&eae{0#g9Cuf`EhbbpNj`#gQo)7*r zc^UXw@=|)-5Rbofyc;myf{s^%>wXoBoSNiy;SHReILGg!oCM_bAlKv3_H{S%5J`_O z52X5T$QecL>iIwu9Djv!h9T!way?G1uj|qI)ci~*e+T7ELH<tiN$`E-8SsPTv*9P< z+8;e0b>8u!=JiK1pR15lf_w$MJe>1m9B)oJ+mX|X{1bRb@+^2~@_q0=aP7}A?9UH7 z{xs#BMa~rRGw>IkoVkv#p`83U9{L`6KKN$xGVrbBrQmzvI$k}#cgXQSC?^&<m&xnG z^Wg+h&M)S84Y=MvBp~Njay`D^h`a~to098s|Mqb0&viIH_7BHXDQ6h+hm)tmA9Zq` zaeO}IOhL{<@=5SF$ur<9$Y;Yh!gajGFy8Hs|3EqVJi&4D705s9<Xm+8CcI&VZr|<5 zDMkJXJc>LEUX^?wydhl2TM^^E)A1gZa~3%dlAnPObaI9|KACdz<M{P7@_g`@$jiVp z$V<UrhwFG_Fy7UU@1&eq<m@J|3qR=O9CiE><s={{*DX08H@1ZrAnyS$Ox_J%0j}fK z=LM=e-imUDA*U_5KJU`m$w_oPjdG?Se-ydC-urR#4Af5~pADY@*YUQ(_MPYWdz7;Z zIqS(+z_&U%UpRh@a<(JqB>5-sbL9Fw&;{~+sK23nWIxgIcENayJANx%?@!JmCzkvS zys4AZ+VKY{CqItY_aWEkpB^GFgZd%lrQqps9dB=pcaq}^DJK>=OUd<lsTEGnza8I2 zISI($OWqd#AMzgXBjnxS*>D}Np11v{<E1L(yx$mxoO0x;@TzdmujBY#lrsf6?a3#> zyOL+XyOGa^C&RTr<FS2*IX;bY^m(u8<SUS$;p8lGd>!R%N6tp_PvG0gv*4eR?}L8> z*YQrlcz<*}SH+y$_bhVqlAnPWhI4*t$Lmo}emu|7kX+wiBaXZb>RXWO^KD(=+Mn4N zZ%@ZZQI0;ZHjcb5+MVd+Jm>fl%1J=Z>*V@;TPArA)UPG)2LBkY<9!w5{nGK1lrs!D zXUJ3G7o42jQ91uEXuD<MdjGG_+f^Xf_d|&x&p^Ai$Y;Zw!F9ZEVZ3b|??XAOkTZaM z1$>B;GurVNC}%rzW{`gZpG%$vUqHSOz7nqEU5D|$@AzKIIg6Yu@-y%wPR=RE^Hd6j z7u~-3@jTWI<oY~iG4e8~FG*es9u3bGv?8aDZNYf!I^LFYVv*B<ye|A7PEIe!M^R1! za>kLjg-;~!0iQ(P4gRumc?#%7oIkM4xRj1Y{c`eD_$uQzXRmQ7U5xrH@&)iC<eT6> zlD`i>V_e$(H~N3sxRf43eeTM^g<#SB=UaFo<C60!a>^K&(sQUUPkss>V_b5MBB!Bo zDJ?Ho21^t2lJJ(sh5kU!J;o)cGwQpN-wA(!d?CCK`7HRu@LWN*?EgtJQNc38)Jy4& zIKOV9ap{jf?>LEk5Avsz{|28)o(-Qzelwnz`WJa|_)_DxpDT<@KU<=HHF<sbdbrNR z0?flMs(%Lcd&wVze@8ibKF>*0Fa6ZlLHuD{`k9HG%j9pv^Hm9of<^b|&*25hx5G=2 ze-AHBuFn@%g6ljS!93J5_0oTRT}ET$(tmv(u^D+b+HFmq2hTsXBhL-*LS7PnA9*o& zFY;ROe&jXa$;R!th8mY~-GTZM<W1odj7v^S++L<To?%?_??KKy@&x!YxNeumI3Hs( z)elAeR`S8{os^@m@7izbrT_P$|Hq6=KW8B4B>6w#=bZe@rrzcks2YR@i|)^hkW-la zU+_}otKsFySHYu<+je8&I-i3upUoWa>3EXk>2Mv_7WC%{a(#cgspMaw{&{kJ-@5s5 z?f)$Ff0^T3DCY?BKOsL1|I*1h;CMFW=<~<FkzYXm74iaje(}2KocqHK@SET|-ZdC+ zdB>YjPG#iWK^_HfL$1$5Cy+NpeOI{l=Qs4{K~pdLTfaP!@uWEQW2in2^-md>+ub;{ zJDFUcpMKG}w5vIb;o8q;xF3Go@sCZ8v^y2;?jWBG|H{ev*75U{vk*DIlP`eht`?a; zy&Yx3uP0v#FAdl6md5ku4XJ(y>YI@3^XM(evrylLd>{NC<1+tGVmtOWF7x>l>id)b z2p?qJ<_t3~IeGB>>qv5aEB43WIuD&O4|Ayg7Uaw)FAHBrIsK87>G)2{sfC=~<Tc<2 z$y>n>k+*;!hwHesKiQ5Kh{?JC+>4yT<elNA$o2eya^!tbUzL0uygK<9cr5u8_-*8q z;PG%B?>gLnws(9W<-ClXhskHbhdVjxj=w}XE0L2y{x*Ce`6l>M@(<u^;X2;t@J)_? zLpl3Vf0+Dh_z5THSH}xh&$<8nf}A4cr{Sf^^^LG^A-|0J+Hf7O?w^euzn5}K<9YY{ z$!~`Dc5)ta{0Yjbhn%O$>%gBUkB7fVekXh(T*s@oqvei&L^<7&vyJ?I_%0{spyR(% z&QRq1mpla?s*!Vlm;ld1{uumbxQ=%#?mweUz1+`d;O|8}<8nX$GIAP{&w|I1zX5MS zz6^esaocWR<I=94N0LPTE^<=fI<6liELg^vdZEuTuF1wF{|s`bk^c;TiCoVw$sqp| z_4AF}c3(3t?H0j#32%}Ygs&lwhQCK%1-==s^Y9q9@28F*qZ~bd<s^B1<ezhLE}ME8 z?;*@{fttaEVA01*9g$O*T+f3kMcxbb<;WA^QO0e%v2dLS-5;7c-p%C5cG2@@dXkSr zy91n@6vv;ToM(|Um3#_(2Kg)S+2k4U1>|qQ7n3i8uYl|P=<%+9JHD54)*&a0{9X7F zC+C!@m+htRKXAdg%>ORr{7L==Josqg@KPZ7F7@BT^OGNf7dCF&tq9k7xFS~uOAW_c zm>g+07tSwfLw*JA-c4Q<_4kq&hWCVXf07(er<{t&d4jw=d@6Ze`19nq!e^7~c}uU5 z-+}tY<elKl$UDH_f$Mnn@6kq6FPr2F?oYljF7y8Ya=s!@gnvVx0zXVX7=D609sV=< zczCvP+s})}rJrx1{tEeX@Ed9eMZu!`^X)hvr4ae8@RG)*-AZ}GtB0x>mv;4hpcwMO z$f-v@3*M0YMR*)sx7TAhkF>3+m;UJcZ*(&*{aKBip5!awNya6oGscx>TyplJeiZq3 z_~XVUr$2Hg8<(7dIL~7mc|Q1T<B~HHISY(SP7LZ7lUISSg6q8L`#7v~d>`esK+Zw( z=I|fL?}HyF?*czdo&rBlJ{W$Pd>TCWt-;`fMfcmM;Dz8i-bFZH@n%ym^EnCgS<Sf2 z=PKmXB!3Iufc$HCWAdHwc=Ai|*5tp#6O7w_b~7&h)bo3Kl9$E#B?I6*4=JWz^5<Y4 z#u=A<J&)%x@_Ud!(YVc-W?XV6qJBF0Sol1+_EXQpe9hEL{&Mv5UE`9!5;^P0m%~3I z-v!@B{yBUX`6>8b^5gIW#%({38<&2T$N3zm$V<Y{!+9RAn0m?Ih<PYjC%6zSy8pLE zP7(5WcnRY+r@V3L=K$1KB2R?ZfonhYyviny|ATT~Ku&jZJ&&g^`FzwTk<W#vkgtHJ zk-rHaPreoYIQbU%WH^uaMaSQ!oIS|NB;O5R=j3d4{9DTT9y#BUe+U1G{8#vC^0V;& zlIM<+y)1aYZt_r6m_ygsjr`R4*@*K?i#lE#uKVpx$f-wO1b(}d)5_G#{=5sfi+haA z{#*k&UCCqM50E#5_aSc#Pcm-X9R=5U_zd$f!SR<(j`Xt!^5>FwgD)W;1b>};AUqS! z{aNq$9?BVwoc-h@;op%@f*&P+8h)C57Cf7LCj27#68IJJMeu_4Lg7Wn`yJ-L5nT7T z_fg-JJQLoUaw_9|%ezgzZ1?Z5zx6UM+wnW(^dmnAe}uefrC_CCNhR0wy2g;-j`~N* z8^E71Zu|Lyap~v7sGmXJ2R;{`E2zCb_|kb;YU(9l-?uH(xa7ZroVDaH!PgnLIUgC9 zoK2|TM!pul7oIDqm42?o_Bv$hCBL9t87yavOa9Nu`IY<x{7>@2I3Fbx8;-mB_qPB% zKY0!KjpWhr;>K-1ql`;G6H#B4{9gF2aGr<8re5+ZU>;f-m;5J?)0R9P-qE<txzD)d z==n)K$Y&#GAYA*Y=lu?Kd>Z9^hMei-JK!1Q2jTO`v*1g~Pr=_HKMr3_o*U<Lyh|Q} zZ-Vo9cR2nd<rG8CPvk}5zdAXW94}cv*hs;m_lHr)DMMZXUYWceyc&5OcwO@5@CM{@ z@H^o;Kh29r`q$3!0hH4jIfKYM!iPCI<4wKn&-(dglZ?y$JP<k0k`I8-Bp(BRnOx78 znrGa$`!-zXp=0sLJiO=lmnKL0IScLXA)g8VmV62PJMu;FpWxh|bB-5k5b3Y(S8I?{ zlspq&hWsOVdGZh8)yThs*CgKsZ$N$o-kAI_yp?g;F7ddZ?B#f}@tcDB^T>IG{0w{) zT<25ItDj)%rQObGce?SL0xw=Q_!cZP$&140kynTRi@Y-Y4f0m-x5-<;R~xte{20#T z`jYDVV_e@DzbP2cgUCNj-UEKrxU{P|r;SU_Skz~e4})KUYd^m!9;_5B`5Q)l%6=>P z!_m(&#wC9)a>|p>fmb8Xgx4fr4sSsIIlM9Xr|>(BmoWXj2hQW_LG{mITuH`dT*r|A z5c&7;6yqg=dd(SaTyk<n2j7BaJo!cBOonSe%gRc@@}j9P5nP^yel9dFrFwqbQu1<W zcLjL^_-gW7;p@rog>NG72;XYFgz4vgIFIWH)xVB$oi;Ax8j1XD@?r4*8ZQylYfk94 z;6kwI{p|~=&qF>1UJS1NOvL<`Gxd_MpW9f=xRkz$oVw(%!<&$Agx^8F4&H`*FFb)< z&#SxJxb0_OIFIWQs^5<JA8lO5^)uQXPks_U!ML=mIa7>>r?OgbWw1O){s(gAz_p*V zF#n4k-$XeTkpB^RS@`GVdY<1d^7^PhK(6QW{fE2->W`84gr6ku0Y3-l@m_YkY@^8h z>Ha(zITgqU!DHZ@AM1Dm<xE0OC-SG^_mgM96UkqK_a|QiPbSZVr@^)V`ud<p9e<f} zwjyUP`DXYMCufDJm;E{G`pCSmGcLQPo{zYZJPY~T$bW`^Mt%am%eZa#2wdl36>b-& z9M97@=YCQU=d0a7o*!O}yezyVd1-hBIQOTz<MEVJ139h9W8j_0Z-;jwZwyZ)ZwK#1 zeiuBMyc_%x^84VU;X2-rG5-sxelY5nk`I8dq?~Nzyl?7dyPv@Rw!^rT&Opvi^5@|D z$UlT1B!3_N1Nlk#aq^?^pN-poUNkQK)bkgwkQc{!ayK-I?4LTHIuFI+`ZzOJzDQjK z<C5PAIhD!V!efj}KQ*VGamh(TeM9m=@D_0G=Wq!NmJX&~NI!S8r*X-D6*;}hUx5!I z-v}Q}z79T;JPSUSd@uYl<F=pEj7vZB<NUDc<hkG(aGr-nre5-+vAtFpmwY`>aW#2u z<iBU!=4>`DIh|3zm0ZtL+zr=$mM9sl6fEC3et~k*k^d+8Sa{ysBYB)(#PJxo{=J@s zoLb~F;SI@`!JCjThPQ)jf2w1=_d5PC<>>i{DdZcGKibK8!to5s$wJON@_q27<R{>7 zkn4Gn>y68P(ir>OXU1he$yGD5oxUW$g8VG<qNx9tT+f3%2G@Dk^OMgyeq+-}`?}pL zBEJ}Ud3aek=T~+74$5haoOtrv;0fey;ho6az#oKbe>#<kj3?Rg$0?^bawd{L2%qNU z%yRr~%1K2|CixKfI&!VwNUrs};5y#uJdyDpH1)E-C18I$=G331`Ug-SYL;_<cpUxA zL!J)55zhT7W$L9rnqS4Z?EiWmY7F^H$gfBK8oVL-68P=LZM*H^+RsLqw|_XEYI3BX z8<9Vpd;|PZC+8W*=Tpu;<SZoD^JU*8KZg1h<VWEf;X2+{81Ht+zoVQh$T>=W34Yqi zx!`!wJ96$<rEvaY3G$Ng^5ik_O61Y-25=p3q_t2e&eY5PunkvqGA`S<IdZy?$H5bw z`~jw3^8bVUp~fY@8*)aF-v>`8Pli81uIKMQV_e!jhjwSfbsl2i|8jhT$&r3Oj&?Vb z>-oVuoSZ$5pQ0Q+5BL}Im(cF-<gdXmkuQPY7#A6!ju(d`LZuvU051@%7QS60r!n~k zc)XL--tm5vvky4~$@juj$&bN@lOKgogzI=)Vf#Mk`0JFT=MBF_ehK+&ot#aM@28wn zIKT57ay`%ZD7l_be1be0Ilseoyd5y!>+a0C-PJ3?b^A6)P8D)J|G2i3)5!6=DM!ys zzL)$ywA+(B8Qz;*&sR=`>v(%$yki}IiE{LO<qYz4w7byBS?>5pl%wY{ZzF#R`Mbzp zgYP9@0zV4Z@s7ZF&zO3-e=8sb!E({5&)Yn5y=-@>FN^vT#>2OFv|E~d1H2NP`%}x* zOMXq{H#RQ$dcJit^1aA!O@0jCj{GRRlW}RcDcbD?*M2@3TqnyQ$0wQ`>E{*XPa?kr zpYG($aXgc9O5r@$wd5t?8_8qfTgao~U%_>}FN8-M3VrMNdCF;yoZrdg;JM=?ft+8+ z@v3mWpV9NVtCQb{{8;j2_-*7#@UF&h4h5gbeM9gqSbD{We}tbW5}%Sga(M#zK-51+ zo*gL<Ehg9cmE?!6i>$Doya?LeM*atm2mVOjCvPO@EV;IuzeVJFnNJzlBaw@tn&cCZ z(};XH{(osnz7PFLC;u4Znoa&G#<i4O=OL3^`@ffb2m1dz`AT?^mXTj{ym`?7a`0Ti z)rC+iKdMsw5X?he@}(G8Q*!Np8}f4azo0XDa_&guqsX5^{#Np3s6R%o?Pil}yO+qd z-5Xj(+SmChiurk%ygat=Q1X1}=V-XhC%PC8exB;}cJ#7wxu4Y6Ma(5n$L(}ExxUU} zCHW%MzhhkX^JC%O1pi+emv;4a4qM1SK+ZPflG6+Gv&*>T97FwH^6%jXj7v@}Ow#wp zB_}V=7e7Xx3x3MD{GEC{_>$$aammrwA>?iyzWVC(-DQwd5U$(nPWdHRN}77f*ZcoU z#wEWsa-zvw!s|HsO-#MyFATn9X>DBcyCSC@c^7yW^8WDq$n|v*iN>Yfccjr^84TBX zkZmK&D5}@{h^LK9KgXfnDdc0|FB+G2%S(8$ylPx>rlWolxxS8KIb8dR!%CsGre5-~ zyM;b9F8S{v|6_7}eZ?0}ewL}X`A3aQ{sH8lAm0PeCjS%u8~JbWi^grcH?|2H3l^P+ zhawk4)!=eJCjE)R`R+BzOT!ybPC9bpOue*=n^h>mxa7A(PABq~@cW(oKBnI04>m6O zLy$9+JQ+Tg`~`SA`4sq*#%;SZ;X0qMV;){N_0pfU$a#zWZTMQs*?^o)re50B|Fb?b zF8TjK&X?r+I*KeO|9ew!^UoNU{1DDZ|CRg?wEHJ{Wz>i6l9m5DU+5NiUgNgi(&VX; z)kD#a*D)^rybJmD$?t?WH!k;8&G2{RN%9!9JDD6euTUoWBX}IUo?QQ4Zzms({IAI~ z(4PzB`Z%*(+sKOgc;me6c)=1!z8rsN6Ufsd<)Pl>&tD(8;t6ui*-V~4Po)0tc9Eaj zAAKB^NZt?mkCKNlZ!eN-&U*4S$k|P<_5UH)$GyLk>*uZSOvu^)`PW4*?<LQKe?xu> z^Zz~h-RS2}<RejkmRvul{sQ^#ypjHti~P9yIj|#exgYs2s2@jO0R4H|_>K5oek?X# z#P}NH5~2B@k!$`w<2GOapOfKBPA|;EC8z!tTrWRtfAn~U=G=?A+fBXAZ*AQ6r?+vb ze;@rwar`mIpCez1oO$H>cxfeh`FxQT_B*cs49L~e&l;$&jQa`p){YM%Ux}QV<O|^I z96#jv^|*a#e~uuhI{AKhd&dVmK8-vt=4-LzYaQQ19)+AA$hW}HIi3gie>z^RFG2n( za`gF6tyjOzslSUn3pw{YKG5+|<i8;28OLWizMQ-;_JjT84dK6#-v`f!`zM_T^}6Kx z_o9X4`aT(&qxFNF`hSwYg8pnF{|NpEc?kP~zFtS$)tm&maR!UJ)@#4iYa!=ts#jlU z98(z1J>d9R$MyUyY1iiH@d@qEboA#I+%DC>&L3_z6icr4UCFl~r=R2L<QGvt)wuqT zC@s%%{0+z7cYKHA2OR&&@q9N#=0oR4``?Yc9sU6xOWqm&7Wo6%IP1xOgX`x{YP;$O zs6H0^>j}p%ke^3?Zp3!h{4d~*$hE#V`53f2&+&caQ*l1kCGu_X!ty{eShPRtQI5wu zK7srq@|Td;!FabgzT0tqUv}-M=KSW=mnfKXTv}hn@do6&U$rEkQ96>_$++w~&7@<& zl4xA+DzyG#$445sIZqmwoTX^@IpaBQzs7C-8;-wY+~#~}TyoZ+-QA8KaXg#6DQ*v! zjLUfS|GNU{gl=E0FY9=;ahp@$xb(jh+Kn?VH=*vqmn`j#+xkSulZ@M(G~<$^pCg}c zT<RwTU$RU!ZtLebzQnlA$uurG`g!pij7z;fPTpbM)*o>EsBxQ<ZCrBnbK5T&m-@rO zmn;SF&wy@UtuO0%v~inL-?+4^pPwFQT=oZ??iXrr+}0;Lo@CtSq#2i-8Q8DVjY~bA zMhs0gZtLebzQnlA$uurG`g!6TjLZCl@4$l}JB-`<1CAdxZgaAYOOAf7_a);}Umf>* z1qufjf<?El)|YiW+PKZBZ(Q2d&)1GKF7wkx8Vi>8#%+C~<4MMCPMUGa(Z>Pl#-*Q~ zG2W@hZT%d_ml(G>nZ_kYKW}=2ajBnxc6S)J^#>e3YTV{z8<!mY+~-TiWqwkEFIfuU zpnz^)tuO0%v~inL-?+4^pT8VuT>7d1x3@QL>k}PMGH!Fyj7yGw4syD2sn_EIQ;pmD zIgT$eZgVn?OHMI74%=W{>h-w84&%1|fa6Dv+nj9Ul2Z}wUNSD*MeipI6qQc=b^F!& zvW`a^w>kBVOS}5{ym7{*{#j`(SlS!6^@)xr8MirU#wF)Aj5po5%ujXvzd6;ot)Jug z65}=})41g5=hbd7F7@5f?hfO&{($30joX}T<C4=wx36)jpNw`36bmi{i{5^<zO3WX z#%)f0<I=AFe-dY0w#$5JELhqbxAlpRCmFXnX~rdIh;CowQm@Aqry95Qa~xk{+~#B& zmmK{((+$R@UXR1>FmCG)IDXW)&B-<{Ir_PxmyApOx!_Bd0>vXgb^B_4S;wP|+noBw zrQO+>=Q!h1ulF16jobP}$CHfPoHXN-^QvxN<5FJ?e+Q=;xAk)zUt-+mWEz*8x6tke z<Kcdy-5thl{Q<|18n-#w#wABTck+_)aD8x{ECs?(3jTHb)p~t@1>NrI(Wc(!)Hg2e z>gPYk8JFApd$`|dZ`{`F`wD2gnv-PeZO$0ulJh6#c?Mkmjh9{f&xGJxuq>f^{Xc&* z`DOh7f0+CP^3RiR$Nwi4<VnzA(f(IPP8aebs9)rG7P)?&;C~%2h2tXHuGY75d=mKr z^m8@2e(v5*$A57AJh>ic$&2GO+E4YH9k1<p9Jy{sJwB)TQ8+FzjOz7s-)55Q=eR9) ze2wEDktd<uJ&u1*J`44yjmzz;i3}uIE*h8pT<ZSWJ7e^bBNxXr0zTyhSh-8k|! z@bToo!Jj49&%>H!T-vRR{x32v?P~pM$3HM`b3QdLImPgQ;{nG{lJ`V?UL1eY{bUrp zJb4RvZF2p*q{hajpD$s&t&K}RwZ5z4{T)v+Zu7?*xA{}abzB+b`uRtTjm!P&Vcb8j zGA{XAzuEE6jN6<n<C3GFL-d1j8CO@#+ganbJ{KMs==Rc_LdI=Q8RL?pp9fUcxYQ@3 z-B{zczJ=o*joX|a#wABTmuG-+sec;n4l{1+pKyGdahsE2TynNzzkSp356K7M|F>Vr z_47xrI9{}D&{(kOb~%l|Pu0i^;qO6Xa{Zi_PLB6>Je^$oInD98j=xE+{a;V6pEI)C z@gE$|jT1g}e)MxXia8$Tcs<9PJAOC0&i{ktx}T&v{+Q!$lOMtU*7TN~`-A#$^42&W zG@E=Td=0sNUc=Yq%TQkkCzR?u=feJ6o%~k(J!na;`~Urpr#e2)xZED!!tMGw<8ph{ z{7iEFe1UzAUv@mYLe6>q9OLayuK7<nzKUGmKYzF5KRbTWxXi;E%tOJ7fA!OP1>-V5 zy>Wb@4Y~Fw$?@sr`hN1SI=+&89oqevJPW>;T=Rc${G8+0Mg27oGG1-B1i8Ndc}>Uf za6FM*-#`2z$HzE6+40$qFD2J`TSu<%r+tK6-xs=ArBHa$+pl_4#~&f@gyR=;$u(!Q z<EP2>{hy0e&e<RJnvUz|(dP<Qv-^2FQ*XVeaoHaZq5n^kYr6{_|D0Uk5BVF%e<p8+ z;{w-J$vNI0@Z#i}U&--U$K%Ph-7e(%{=LbLk9B-DxxWAHQpewMe5>Po9RHqN=j}K0 zk(ke$s^*+$eIM5vj<<IF9^<&H3J3QxF8h_{k8^w;xxTOIYR7jvo@G2w&@TQ>3>`Nv z{n7l~(c$i1ecY&Cfn1M6HFUhI<D(p(?)Y+YJr1?W@vj~K&bZ8j{vAART;@UZb5+YZ z59$@k_5B`ibNnvy1vozS0Qm>-A>^7rmRxftlWV<x4zk?uT_1d@FQt0TdB^dO$@TpV zzj6Gu<Aq{!&ZoW~pnmSK_EWv4Q{U9_1joCRU!7-ieSf@}<oZ5uTO2>-c=_r%$9oI@ z|GJx8^M^aWfL!0tZIj~%96x5<?*IBZu>AM2K#iRJpNIa(l52muIQ|&9zQ5UQ$6t5+ zLvnrJu+NRlxb!^X1IDipT<d>w{Je3Sle=cld02q|r;0hQpC79Gv%c?EEmJS~i=-e} zni!XUYJEG$yBfDSeT++vzW>!w$0v~M`P0uDmwfErp_h$IzSb{ue6?|#v&p#RG?FWW z<x}JK@8*8vw*I)|zZ$nWp<0o4bi3&LAQdz&UBSgrY2(ta)>n7DfpMD?Z(MS8>0n&y zaTq7m-MFnE<oIyoHfMry$<gijtZ}Kw;eyc1#%;ZR&Zf?r=BzgLHfNJ@$+<1~lI2t5 zc_S45zTdd5KkoRi#%)fhb|h5$*$QnGG;Zgov~g)y>#IB7z_`tcH!e9H&~69g($9ME z?#6BXAjgLrw>cAxOHL2uKWp6f^JU|<ewpK|joX|}#wBM2+WpkH)a!n--?*(m?)b09 zZH~ThShw$!Xt&_4kzd5^?Y*>dX;<s3JKn&!&C$<!)OKG$yB$ou^b@;fsJn4#SL+8k zKHRv?dCGWhv?)K9Ilk3#{k%fyzvSTQs?hayBrS4$SiFc71WRS|Xm}fPeLcQ@4xr|% z4{++olWTwe>G;3Nn?|}BI_UT%$1By1tf>7=M^1v{DUMHf{9W=5$Uo$GF5Dq#f3&`e z<88@LAYb+|SqcPSI8+h7toyL$hcWmTg<r&VU7;I|+x-NG55xZtTE{eBbv%3uwWgfG zxSUA79G8cZ>$oP6myiwz%k;>PtL>^Ua(u1h+l||KIOO<w#|xrgI-h+}SI+TTj_d0Q zIHv>E>o^~Ad_4IZ=+Cp{`nt~f<R$V&R?z>C<!YH9^^d4tUoW|jd?IpAkn8IoFOzRa zeF@pgf<>;DcJ=kJG35IC#Kw-dCtrp363O*-c0<Uk;&M89SL`g)$@O(=ndB9&lhFj{ z`I77FyiSsDL;WRkeVt@&T(9$UT>fYT%N^wU{z!L|FTnGCeaQ87KtsvP;0}5Mc@%sG zxt@pfzT=;f>v=&xk{6Uav|!QKf$4ao3Prpy#;vaB)l?zhgq#NCU&Hlrz2@k7DP5_) zMZrkB{mJ#bi{Xw>B=3wn+BxL<eCtlf4?E7U1J&n4LwInk<I?97E0gQ%1e%lU^Lky# z^?ASn<odkcC~|#XZ!)<)|MiOFZ;|WsO`9Co*YWFk_4%43RIkrF@as?23*q*yIeMJG zqT{jTdYrrkxgKZkLaxVw2RJ^0T#v_2a(p(q9;bc7@%PE~IOh(>?dxQvM2`plMD==H zD>v@fbw1Vg?}@q|N2*5k>P^V?I81x;qPU$r==c!hxQh+nu*Vq3P{Lk0a<dOVzLKY? z<8Zkec``27Bp-&$`glq1b|hy4ygq)azmCg|$lt+bef+EShvBWMzNk!Wup~r&T<w1u z_}%1{;a$mV!@HB;27i#eCA=TGK913O(*Acty*^G<*Y}SYg&Zlf+l&A1pez)HU!>O7 zYyZXU_6^k;K6c26zWsuqBhn&22kCDklE#b()fv!tMBh-Ie#3`{>Il^7o!Bw9ep=Gd z!F~HD^&b3CN>b<kogeDlp?|1OTB_96={<Zz-?R~u7h5Oxn%X4Lq``fW7cLLC5M(EI zY}9|qfZqKF1c_}L^-W7|IdY(07qmO*q2VJ^)5i8r33n~%RJc10l>4WSObNOSZw$T) z4f>BBaJ57IhmWX_ehf(JH!`{RLn#AOgW-mM@7u3mTGFT-R}W6@KR9STn1*oQQJ2;? zB{?alrKKeQy-+4f!-JX8UxkDD3NH6g9Wo?IIv-9?8q|AWTHhf_*qZ<MA98$4_MIHt zJh&Vmd|hk7?s)a8O2KbpczANv<FEdf^A}z}Cb;^B;Oqaoe(hjg$@Kc4Mh)u!eZeZ> zMUF>FiQdmdG!)9jdiwe&b&b=XeVz67@#}RoFd3^Xy8fg1o%_EDkgNwj!)yJ0yNnK8 z?$YCNz5ZDCZREGka)%Kta(ai{g=_mbT`@ETM%@g>M+H{|%Y^XvzrIEN^=tUICBgS= zZa)-C-|WJd*9TYrf7ajgzpNjMvaN^sV(94qvi^jetN(5N?BM!b!55w;zgit175UZP z$BO7>{h23NS=Q&JWmH6Rx6gSE*Io&(zSj1?a4fQ3{QSsI+5Sa>FW&z0caSq>jn)s# z_fY5_JU)zE`g?5^XZ;zeku{R*>6($B+*XAEuGRl0&qONqbA+V-GRNG1InSIkrKLY! zmG6JQU2tuK0It>kFCRoI+eKo+w;y?mkK6AUlyRo4(sY4*58fA5Zgghh+O`2)tNkV$ zBbBA|M^={c%fFP|e&3*sGi8kpugUk|bD*k6e(HCweIS5qwcmMLq*7mZD(%aC2Dd*X zD3eOs%%P9Jh_slYD?~0{?Q0}G6dL2K-+O;#1wD>~)&I8sWM};yS&=nx+JLV9xAkXX zeZ4(u;bE*lMgc!*IH7+A>tAdBLOX&hf<@;==C6G4rR(ecuT*i{0fo9BknexJ?kFnw qT}~n8^=0?q`|f~3MREWCqFgXbq*s4|9233P`t{KN1+)TP4E+zz3~>+u diff --git a/programs/src/dhcp/main.cpp b/programs/src/dhcp/main.cpp index f1a721d..18977b8 100644 --- a/programs/src/dhcp/main.cpp +++ b/programs/src/dhcp/main.cpp @@ -463,6 +463,7 @@ extern "C" void _start() { newCfg.ipAddress = offer.offeredIp; newCfg.subnetMask = offer.subnetMask; newCfg.gateway = offer.router; + newCfg.dnsServer = offer.dns; zenith::set_netcfg(&newCfg); // 9. Print results diff --git a/programs/src/fetch/Makefile b/programs/src/fetch/Makefile new file mode 100644 index 0000000..901874d --- /dev/null +++ b/programs/src/fetch/Makefile @@ -0,0 +1,89 @@ +# Makefile for fetch (HTTP/HTTPS client) on ZenithOS +# Copyright (c) 2025-2026 Daniel Hammer + +MAKEFLAGS += -rR +.SUFFIXES: + +# ---- Toolchain ---- + +TOOLCHAIN_PREFIX := $(shell cd ../../.. && pwd)/toolchain/local/bin/x86_64-elf- +ifneq ($(wildcard $(TOOLCHAIN_PREFIX)gcc),) + CXX := $(TOOLCHAIN_PREFIX)g++ +else + CXX := g++ +endif + +# ---- Paths ---- + +BEARSSL := ../../lib/bearssl +LIBC_LIB := ../../lib/libc +LIBC_INC := ../../include/libc +PROG_INC := ../../include +LINK_LD := ../../link.ld +BINDIR := ../../bin +OBJDIR := obj + +# ---- Compiler flags ---- + +CXXFLAGS := \ + -std=gnu++20 \ + -g -O2 -pipe \ + -Wall \ + -Wextra \ + -Wno-unused-parameter \ + -nostdinc \ + -ffreestanding \ + -fno-stack-protector \ + -fno-stack-check \ + -fno-PIC \ + -fno-rtti \ + -fno-exceptions \ + -ffunction-sections \ + -fdata-sections \ + -m64 \ + -march=x86-64 \ + -mno-80387 \ + -mno-mmx \ + -mno-sse \ + -mno-sse2 \ + -mno-red-zone \ + -mcmodel=small \ + -I $(PROG_INC) \ + -isystem $(LIBC_INC) \ + -I $(BEARSSL)/inc \ + -isystem ../../../kernel/freestnd-c-hdrs/x86_64/include \ + -isystem ../../../kernel/freestnd-cxx-hdrs/x86_64/include + +# ---- Linker flags ---- + +LDFLAGS := \ + -nostdlib \ + -static \ + -Wl,--build-id=none \ + -Wl,--gc-sections \ + -Wl,-m,elf_x86_64 \ + -z max-page-size=0x1000 \ + -T $(LINK_LD) + +# ---- Libraries ---- + +LIBS := $(BEARSSL)/libbearssl.a $(LIBC_LIB)/liblibc.a + +# ---- Target ---- + +TARGET := $(BINDIR)/os/fetch.elf + +.PHONY: all clean + +all: $(TARGET) + +$(TARGET): $(OBJDIR)/main.o $(LIBS) $(LINK_LD) Makefile + mkdir -p $(BINDIR)/os + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJDIR)/main.o $(LIBS) -o $@ + +$(OBJDIR)/main.o: main.cpp Makefile + mkdir -p $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $< -o $@ + +clean: + rm -rf $(OBJDIR) $(TARGET) diff --git a/programs/src/fetch/main.cpp b/programs/src/fetch/main.cpp index 3d2e9a1..c587f19 100644 --- a/programs/src/fetch/main.cpp +++ b/programs/src/fetch/main.cpp @@ -1,99 +1,22 @@ /* * main.cpp - * HTTP/1.0 client for ZenithOS - * Usage: run fetch.elf <server_ip> <port> <path> + * HTTP/HTTPS client for ZenithOS (TLS 1.2 via BearSSL) + * Usage: fetch [-v] <url> + * fetch [-v] <host> <port> [path] (legacy mode, plain HTTP) * Copyright (c) 2025-2026 Daniel Hammer */ #include <zenith/syscall.h> #include <zenith/string.h> +extern "C" { +#include <bearssl.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +} + using zenith::skip_spaces; -using zenith::memcpy; - -// ---- Minimal snprintf (no libc available) ---- - -using va_list = __builtin_va_list; -#define va_start __builtin_va_start -#define va_end __builtin_va_end -#define va_arg __builtin_va_arg - -struct PfState { - char* buf; - int pos; - int max; -}; - -static void pf_putc(PfState* st, char c) { - if (st->pos < st->max) st->buf[st->pos] = c; - st->pos++; -} - -static void pf_putnum(PfState* st, unsigned long val, int base, int width, char pad, int neg) { - char tmp[24]; - int i = 0; - const char* digits = "0123456789abcdef"; - if (val == 0) { tmp[i++] = '0'; } - else { while (val > 0) { tmp[i++] = digits[val % base]; val /= base; } } - int total = (neg ? 1 : 0) + i; - if (neg && pad == '0') pf_putc(st, '-'); - for (int w = total; w < width; w++) pf_putc(st, pad); - if (neg && pad != '0') pf_putc(st, '-'); - while (i > 0) pf_putc(st, tmp[--i]); -} - -static int vsnprintf(char* buf, int size, const char* fmt, va_list ap) { - PfState st; - st.buf = buf; - st.pos = 0; - st.max = size > 0 ? size - 1 : 0; - while (*fmt) { - if (*fmt != '%') { pf_putc(&st, *fmt++); continue; } - fmt++; - char pad = ' '; - if (*fmt == '0') { pad = '0'; fmt++; } - int width = 0; - while (*fmt >= '0' && *fmt <= '9') { width = width * 10 + (*fmt - '0'); fmt++; } - if (*fmt == 'l') fmt++; - switch (*fmt) { - case 'd': case 'i': { - long val = va_arg(ap, int); - int neg = 0; unsigned long uval; - if (val < 0) { neg = 1; uval = (unsigned long)(-val); } - else uval = (unsigned long)val; - pf_putnum(&st, uval, 10, width, pad, neg); - break; - } - case 'u': { unsigned val = va_arg(ap, unsigned); pf_putnum(&st, val, 10, width, pad, 0); break; } - case 'x': { unsigned val = va_arg(ap, unsigned); pf_putnum(&st, val, 16, width, pad, 0); break; } - case 's': { - const char* s = va_arg(ap, const char*); - if (!s) s = "(null)"; - int slen = 0; while (s[slen]) slen++; - for (int w = slen; w < width; w++) pf_putc(&st, ' '); - for (int j = 0; j < slen; j++) pf_putc(&st, s[j]); - break; - } - case 'c': { char c = (char)va_arg(ap, int); pf_putc(&st, c); break; } - case '%': pf_putc(&st, '%'); break; - default: pf_putc(&st, '%'); pf_putc(&st, *fmt); break; - } - if (*fmt) fmt++; - } - if (size > 0) { - if (st.pos < size) st.buf[st.pos] = '\0'; - else st.buf[size - 1] = '\0'; - } - return st.pos; -} - -static int snprintf(char* buf, int size, const char* fmt, ...) { - va_list ap; - va_start(ap, fmt); - int ret = vsnprintf(buf, size, fmt, ap); - va_end(ap); - return ret; -} // ---- IP/port parsing ---- @@ -133,9 +56,76 @@ static bool parse_uint16(const char* s, uint16_t* out) { return true; } +static void format_ip(char* buf, uint32_t ip) { + snprintf(buf, 32, "%u.%u.%u.%u", + ip & 0xFF, (ip >> 8) & 0xFF, (ip >> 16) & 0xFF, (ip >> 24) & 0xFF); +} + +// ---- URL parser ---- + +struct ParsedUrl { + char host[256]; + char path[512]; + uint16_t port; + bool https; + bool valid; +}; + +static ParsedUrl parse_url(const char* url) { + ParsedUrl u; + memset(&u, 0, sizeof(u)); + u.path[0] = '/'; u.path[1] = '\0'; + + // Check scheme + if (strncmp(url, "https://", 8) == 0) { + u.https = true; + u.port = 443; + url += 8; + } else if (strncmp(url, "http://", 7) == 0) { + u.https = false; + u.port = 80; + url += 7; + } else { + u.valid = false; + return u; + } + + // Parse host (until '/', ':', or end) + int i = 0; + while (url[i] && url[i] != '/' && url[i] != ':' && i < 255) { + u.host[i] = url[i]; + i++; + } + u.host[i] = '\0'; + url += i; + + // Optional port + if (*url == ':') { + url++; + uint32_t p = 0; + while (*url >= '0' && *url <= '9') { + p = p * 10 + (*url - '0'); + url++; + } + if (p > 0 && p <= 65535) u.port = (uint16_t)p; + } + + // Path + if (*url == '/') { + int j = 0; + while (url[j] && j < 511) { + u.path[j] = url[j]; + j++; + } + u.path[j] = '\0'; + } + + u.valid = (u.host[0] != '\0'); + return u; +} + // ---- HTTP response parser ---- -// Find "\r\n\r\n" boundary between headers and body static int find_header_end(const char* buf, int len) { for (int i = 0; i + 3 < len; i++) { if (buf[i] == '\r' && buf[i+1] == '\n' && buf[i+2] == '\r' && buf[i+3] == '\n') @@ -144,209 +134,472 @@ static int find_header_end(const char* buf, int len) { return -1; } -// Extract HTTP status code from first line: "HTTP/1.x NNN ..." static int parse_status_code(const char* buf, int len) { - // Find first space int i = 0; while (i < len && buf[i] != ' ') i++; if (i >= len) return -1; - i++; // skip space - // Parse 3-digit status + i++; if (i + 2 >= len) return -1; if (buf[i] < '0' || buf[i] > '9') return -1; - int code = (buf[i] - '0') * 100 + (buf[i+1] - '0') * 10 + (buf[i+2] - '0'); - return code; + return (buf[i] - '0') * 100 + (buf[i+1] - '0') * 10 + (buf[i+2] - '0'); } -// Extract status text from first line: "HTTP/1.x NNN Status Text\r\n" static void parse_status_text(const char* buf, int len, char* out, int outMax) { - // Skip "HTTP/1.x NNN " int i = 0; while (i < len && buf[i] != ' ') i++; - i++; // skip first space (after HTTP/1.x) + i++; while (i < len && buf[i] != ' ') i++; - i++; // skip second space (after status code) - // Copy until \r or end + i++; int j = 0; - while (i < len && buf[i] != '\r' && buf[i] != '\n' && j < outMax - 1) { + while (i < len && buf[i] != '\r' && buf[i] != '\n' && j < outMax - 1) out[j++] = buf[i++]; - } out[j] = '\0'; } -// ---- Main ---- +// ---- Trust anchor loading ---- -extern "C" void _start() { - // Parse arguments: <server_ip> <port> <path> - char argbuf[512]; - zenith::getargs(argbuf, sizeof(argbuf)); - const char* arg = skip_spaces(argbuf); +struct TrustAnchors { + br_x509_trust_anchor* anchors; + size_t count; + size_t capacity; +}; - if (*arg == '\0') { - zenith::print("Usage: fetch.elf <server_ip> <port> <path>\n"); - zenith::print("Example: run fetch.elf 10.0.68.1 80 /\n"); - zenith::print(" run fetch.elf 93.184.216.34 80 /index.html\n"); - zenith::exit(0); +// Accumulate DER-decoded certificate data +struct DerAccum { + unsigned char* data; + size_t len; + size_t cap; +}; + +static void der_append(void* ctx, const void* buf, size_t len) { + DerAccum* a = (DerAccum*)ctx; + if (a->len + len > a->cap) { + size_t newcap = a->cap * 2; + if (newcap < a->len + len) newcap = a->len + len + 4096; + unsigned char* nb = (unsigned char*)malloc(newcap); + if (!nb) return; + if (a->data) { + memcpy(nb, a->data, a->len); + free(a->data); + } + a->data = nb; + a->cap = newcap; + } + memcpy(a->data + a->len, buf, len); + a->len += len; +} + +// Accumulate DN data from X.509 decoder +struct DnAccum { + unsigned char* data; + size_t len; + size_t cap; +}; + +static void dn_append(void* ctx, const void* buf, size_t len) { + DnAccum* a = (DnAccum*)ctx; + if (a->len + len > a->cap) { + size_t newcap = a->cap * 2; + if (newcap < a->len + len) newcap = a->len + len + 256; + unsigned char* nb = (unsigned char*)malloc(newcap); + if (!nb) return; + if (a->data) { + memcpy(nb, a->data, a->len); + free(a->data); + } + a->data = nb; + a->cap = newcap; + } + memcpy(a->data + a->len, buf, len); + a->len += len; +} + +static void ta_add(TrustAnchors* tas, const br_x509_trust_anchor* ta) { + if (tas->count >= tas->capacity) { + size_t newcap = tas->capacity == 0 ? 64 : tas->capacity * 2; + br_x509_trust_anchor* na = (br_x509_trust_anchor*)malloc( + newcap * sizeof(br_x509_trust_anchor)); + if (!na) return; + if (tas->anchors) { + memcpy(na, tas->anchors, tas->count * sizeof(br_x509_trust_anchor)); + free(tas->anchors); + } + tas->anchors = na; + tas->capacity = newcap; + } + tas->anchors[tas->count++] = *ta; +} + +// Process a single DER certificate into a trust anchor +static bool process_cert_der(TrustAnchors* tas, const unsigned char* der, size_t der_len) { + br_x509_decoder_context dc; + DnAccum dn = {nullptr, 0, 0}; + + br_x509_decoder_init(&dc, dn_append, &dn); + br_x509_decoder_push(&dc, der, der_len); + + br_x509_pkey* pk = br_x509_decoder_get_pkey(&dc); + if (!pk) { + if (dn.data) free(dn.data); + return false; } - // Parse IP - char ipStr[32]; - int i = 0; - while (arg[i] && arg[i] != ' ' && i < 31) { ipStr[i] = arg[i]; i++; } - ipStr[i] = '\0'; - arg = skip_spaces(arg + i); + br_x509_trust_anchor ta; + memset(&ta, 0, sizeof(ta)); - uint32_t serverIp; - if (!parse_ip(ipStr, &serverIp)) { - zenith::print("Invalid IP address: "); - zenith::print(ipStr); - zenith::putchar('\n'); - zenith::exit(1); + // Copy DN + ta.dn.data = dn.data; + ta.dn.len = dn.len; + + ta.flags = 0; + if (br_x509_decoder_isCA(&dc)) + ta.flags |= BR_X509_TA_CA; + + // Deep-copy public key data + switch (pk->key_type) { + case BR_KEYTYPE_RSA: { + ta.pkey.key_type = BR_KEYTYPE_RSA; + ta.pkey.key.rsa.nlen = pk->key.rsa.nlen; + ta.pkey.key.rsa.n = (unsigned char*)malloc(pk->key.rsa.nlen); + if (ta.pkey.key.rsa.n) memcpy(ta.pkey.key.rsa.n, pk->key.rsa.n, pk->key.rsa.nlen); + ta.pkey.key.rsa.elen = pk->key.rsa.elen; + ta.pkey.key.rsa.e = (unsigned char*)malloc(pk->key.rsa.elen); + if (ta.pkey.key.rsa.e) memcpy(ta.pkey.key.rsa.e, pk->key.rsa.e, pk->key.rsa.elen); + break; + } + case BR_KEYTYPE_EC: { + ta.pkey.key_type = BR_KEYTYPE_EC; + ta.pkey.key.ec.curve = pk->key.ec.curve; + ta.pkey.key.ec.qlen = pk->key.ec.qlen; + ta.pkey.key.ec.q = (unsigned char*)malloc(pk->key.ec.qlen); + if (ta.pkey.key.ec.q) memcpy(ta.pkey.key.ec.q, pk->key.ec.q, pk->key.ec.qlen); + break; + } + default: + if (dn.data) free(dn.data); + return false; } - // Parse port - char portStr[16]; - i = 0; - while (arg[i] && arg[i] != ' ' && i < 15) { portStr[i] = arg[i]; i++; } - portStr[i] = '\0'; - arg = skip_spaces(arg + i); + ta_add(tas, &ta); + return true; +} - uint16_t serverPort; - if (!parse_uint16(portStr, &serverPort)) { - zenith::print("Invalid port: "); - zenith::print(portStr); - zenith::putchar('\n'); - zenith::exit(1); +static TrustAnchors load_trust_anchors(bool verbose) { + TrustAnchors tas = {nullptr, 0, 0}; + + int fh = zenith::open("0:/etc/ca-certificates.crt"); + if (fh < 0) { + printf("Warning: could not open CA certificate bundle\n"); + return tas; } - // Parse path (rest of args, default to "/" if empty) - char path[256]; - if (*arg) { - i = 0; - while (arg[i] && i < 255) { path[i] = arg[i]; i++; } - path[i] = '\0'; - } else { - path[0] = '/'; path[1] = '\0'; + uint64_t fsize = zenith::getsize(fh); + if (fsize == 0 || fsize > 512 * 1024) { + zenith::close(fh); + printf("Warning: CA cert file invalid size\n"); + return tas; } - // Print connection info - char msg[256]; - snprintf(msg, sizeof(msg), "Connecting to %s:%d...\n", ipStr, (int)serverPort); - zenith::print(msg); - - // Create socket - int fd = zenith::socket(Zenith::SOCK_TCP); - if (fd < 0) { - zenith::print("Error: failed to create socket\n"); - zenith::exit(1); + unsigned char* pem = (unsigned char*)malloc(fsize + 1); + if (!pem) { + zenith::close(fh); + printf("Warning: out of memory loading CA certs\n"); + return tas; } - // Connect - if (zenith::connect(fd, serverIp, serverPort) < 0) { - zenith::print("Error: connection failed\n"); - zenith::closesocket(fd); - zenith::exit(1); + zenith::read(fh, pem, 0, fsize); + zenith::close(fh); + pem[fsize] = 0; + + // Parse PEM -> DER certificates -> trust anchors + br_pem_decoder_context pc; + br_pem_decoder_init(&pc); + + DerAccum der = {nullptr, 0, 0}; + bool inCert = false; + + size_t offset = 0; + while (offset < fsize) { + size_t pushed = br_pem_decoder_push(&pc, pem + offset, fsize - offset); + offset += pushed; + + int event = br_pem_decoder_event(&pc); + if (event == BR_PEM_BEGIN_OBJ) { + const char* name = br_pem_decoder_name(&pc); + inCert = (strcmp(name, "CERTIFICATE") == 0); + if (inCert) { + der.len = 0; + br_pem_decoder_setdest(&pc, der_append, &der); + } else { + br_pem_decoder_setdest(&pc, nullptr, nullptr); + } + } else if (event == BR_PEM_END_OBJ) { + if (inCert && der.len > 0) { + process_cert_der(&tas, der.data, der.len); + } + inCert = false; + } else if (event == BR_PEM_ERROR) { + break; + } } - // Build and send HTTP request - char request[512]; - int reqLen = snprintf(request, sizeof(request), - "GET %s HTTP/1.0\r\n" - "Host: %s\r\n" - "User-Agent: ZenithOS/1.0\r\n" - "Connection: close\r\n" - "\r\n", - path, ipStr); + if (der.data) free(der.data); + free(pem); - snprintf(msg, sizeof(msg), "GET %s\n", path); - zenith::print(msg); - - if (zenith::send(fd, request, reqLen) < 0) { - zenith::print("Error: failed to send request\n"); - zenith::closesocket(fd); - zenith::exit(1); + if (verbose) { + char msg[64]; + snprintf(msg, sizeof(msg), "Loaded %u trust anchors\n", (unsigned)tas.count); + zenith::print(msg); } - // Receive response - // We accumulate the full response to parse headers, then print the body. - // Use a large static buffer (32 KB) since we can't save to files anyway. - static char respBuf[32768]; + return tas; +} + +// ---- Time conversion for certificate validation ---- + +// Returns days since January 1, 0 AD (Gregorian) and seconds within the day. +// This is the format BearSSL's br_x509_minimal_set_time() expects. +static void get_bearssl_time(uint32_t* days, uint32_t* seconds) { + Zenith::DateTime dt; + zenith::gettime(&dt); + + int y = dt.Year; + int m = dt.Month; + int d = dt.Day; + + // Days from year 0 to start of year y (Gregorian proleptic calendar) + uint32_t total_days = 365 * (uint32_t)y + + (uint32_t)(y / 4) + - (uint32_t)(y / 100) + + (uint32_t)(y / 400); + + // Add days for completed months in this year + const int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + for (int mo = 1; mo < m && mo <= 12; mo++) { + total_days += mdays[mo]; + } + // Leap day for this year if we're past February + bool leap = (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)); + if (leap && m > 2) total_days++; + + total_days += d - 1; + + *days = total_days; + *seconds = (uint32_t)(dt.Hour * 3600 + dt.Minute * 60 + dt.Second); +} + +// ---- TLS I/O loop ---- + +static int tls_send_all(int fd, const unsigned char* data, size_t len) { + size_t sent = 0; + uint64_t deadline = zenith::get_milliseconds() + 15000; + while (sent < len) { + int r = zenith::send(fd, data + sent, (uint32_t)(len - sent)); + if (r > 0) { + sent += r; + deadline = zenith::get_milliseconds() + 15000; + } else if (r < 0) { + return -1; + } else { + if (zenith::get_milliseconds() >= deadline) return -1; + zenith::sleep_ms(1); + } + } + return (int)sent; +} + +static int tls_recv_some(int fd, unsigned char* buf, size_t maxlen) { + uint64_t deadline = zenith::get_milliseconds() + 15000; + while (true) { + int r = zenith::recv(fd, buf, (uint32_t)maxlen); + if (r > 0) return r; + if (r < 0) return -1; + if (zenith::get_milliseconds() >= deadline) return -1; + zenith::sleep_ms(1); + } +} + +// Run BearSSL I/O loop until handshake + app data exchange is done +// Returns: number of response bytes in respBuf, or -1 on error +static int tls_exchange(int fd, br_ssl_engine_context* eng, + const char* request, int reqLen, + char* respBuf, int respMax, bool verbose) { + bool requestSent = false; int respLen = 0; - bool aborted = false; - int idleCount = 0; + uint64_t deadline = zenith::get_milliseconds() + 30000; - while (respLen < (int)sizeof(respBuf) - 1) { - // Check for Ctrl+Q to abort + while (true) { + unsigned state = br_ssl_engine_current_state(eng); + + if (state & BR_SSL_CLOSED) { + int err = br_ssl_engine_last_error(eng); + if (err != BR_ERR_OK && err != BR_ERR_IO) { + char msg[64]; + snprintf(msg, sizeof(msg), "TLS error: %d\n", err); + zenith::print(msg); + if (respLen == 0) return -1; + } + return respLen; + } + + // Check for keyboard abort if (zenith::is_key_available()) { Zenith::KeyEvent ev; zenith::getkey(&ev); if (ev.pressed && ev.ctrl && ev.ascii == 'q') { - aborted = true; - break; + br_ssl_engine_close(eng); + return respLen > 0 ? respLen : -1; } } - int r = zenith::recv(fd, respBuf + respLen, sizeof(respBuf) - 1 - respLen); - if (r > 0) { - respLen += r; - idleCount = 0; - } else if (r == 0) { - // Connection closed by server — done - break; - } else { - // No data available or error - idleCount++; - if (idleCount > 2000) { - // Assume connection closed after extended idle - break; + // Send record data to network + if (state & BR_SSL_SENDREC) { + size_t len; + unsigned char* buf = br_ssl_engine_sendrec_buf(eng, &len); + int sent = tls_send_all(fd, buf, len); + if (sent < 0) { + br_ssl_engine_close(eng); + return respLen > 0 ? respLen : -1; } - zenith::yield(); + br_ssl_engine_sendrec_ack(eng, len); + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + // Read application data from TLS + if (state & BR_SSL_RECVAPP) { + size_t len; + unsigned char* buf = br_ssl_engine_recvapp_buf(eng, &len); + size_t toCopy = len; + if (respLen + (int)toCopy > respMax - 1) + toCopy = respMax - 1 - respLen; + if (toCopy > 0) { + memcpy(respBuf + respLen, buf, toCopy); + respLen += toCopy; + } + br_ssl_engine_recvapp_ack(eng, len); + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + // Send application data (HTTP request) into TLS + if ((state & BR_SSL_SENDAPP) && !requestSent) { + size_t len; + unsigned char* buf = br_ssl_engine_sendapp_buf(eng, &len); + size_t toWrite = (size_t)reqLen; + if (toWrite > len) toWrite = len; + memcpy(buf, request, toWrite); + br_ssl_engine_sendapp_ack(eng, toWrite); + br_ssl_engine_flush(eng, 0); + requestSent = true; + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + // Receive record data from network + if (state & BR_SSL_RECVREC) { + size_t len; + unsigned char* buf = br_ssl_engine_recvrec_buf(eng, &len); + int got = tls_recv_some(fd, buf, len); + if (got < 0) { + br_ssl_engine_close(eng); + return respLen > 0 ? respLen : -1; + } + br_ssl_engine_recvrec_ack(eng, got); + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + // Nothing actionable — wait + if (zenith::get_milliseconds() >= deadline) { + return respLen > 0 ? respLen : -1; + } + zenith::sleep_ms(1); + } +} + +// ---- Plain HTTP exchange (no TLS) ---- + +static int plain_http_exchange(int fd, const char* request, int reqLen, + char* respBuf, int respMax) { + // Send request + int sent = 0; + uint64_t deadline = zenith::get_milliseconds() + 15000; + while (sent < reqLen) { + int r = zenith::send(fd, request + sent, reqLen - sent); + if (r > 0) { sent += r; deadline = zenith::get_milliseconds() + 15000; } + else if (r < 0) return -1; + else { + if (zenith::get_milliseconds() >= deadline) return -1; + zenith::sleep_ms(1); } } - respBuf[respLen] = '\0'; - zenith::closesocket(fd); + // Receive response + int respLen = 0; + deadline = zenith::get_milliseconds() + 15000; + while (respLen < respMax - 1) { + if (zenith::is_key_available()) { + Zenith::KeyEvent ev; + zenith::getkey(&ev); + if (ev.pressed && ev.ctrl && ev.ascii == 'q') return -2; // aborted + } - if (aborted) { - zenith::print("\nAborted.\n"); - zenith::exit(0); + int r = zenith::recv(fd, respBuf + respLen, respMax - 1 - respLen); + if (r > 0) { respLen += r; deadline = zenith::get_milliseconds() + 15000; } + else if (r < 0) break; + else { + if (zenith::get_milliseconds() >= deadline) break; + zenith::sleep_ms(1); + } } + return respLen; +} - if (respLen == 0) { +// ---- Print response body ---- + +static void print_response(const char* respBuf, int respLen, bool verbose) { + if (respLen <= 0) { zenith::print("Error: empty response\n"); - zenith::exit(1); + return; } - // Parse response headers int headerEnd = find_header_end(respBuf, respLen); if (headerEnd < 0) { - // No proper header/body separator — just print everything zenith::print("Warning: malformed response (no header boundary)\n\n"); - zenith::print(respBuf); + // Print raw + char chunk[512]; + int printed = 0; + while (printed < respLen) { + int n = respLen - printed; + if (n > 511) n = 511; + memcpy(chunk, respBuf + printed, n); + chunk[n] = '\0'; + zenith::print(chunk); + printed += n; + } zenith::putchar('\n'); - zenith::exit(0); + return; } int statusCode = parse_status_code(respBuf, headerEnd); char statusText[64]; parse_status_text(respBuf, headerEnd, statusText, sizeof(statusText)); - int bodyLen = respLen - headerEnd; - // Print summary - snprintf(msg, sizeof(msg), "HTTP/1.0 %d %s (%d bytes)\n\n", statusCode, statusText, bodyLen); - zenith::print(msg); + if (verbose) { + char msg[256]; + snprintf(msg, sizeof(msg), "HTTP %d %s (%d bytes)\n\n", statusCode, statusText, bodyLen); + zenith::print(msg); + } - // Print body — it may contain null bytes in binary content, but for text we - // can just print as a string. For binary, we print what we can. if (bodyLen > 0) { - // Print body in chunks (print expects null-terminated) const char* body = respBuf + headerEnd; - int printed = 0; char chunk[512]; + int printed = 0; while (printed < bodyLen) { int n = bodyLen - printed; - if (n > (int)sizeof(chunk) - 1) n = (int)sizeof(chunk) - 1; + if (n > 511) n = 511; memcpy(chunk, body + printed, n); chunk[n] = '\0'; zenith::print(chunk); @@ -354,6 +607,239 @@ extern "C" void _start() { } zenith::putchar('\n'); } +} + +// ---- Main ---- + +extern "C" void _start() { + char argbuf[1024]; + zenith::getargs(argbuf, sizeof(argbuf)); + const char* arg = skip_spaces(argbuf); + + if (*arg == '\0') { + zenith::print("Usage: fetch [-v] <url>\n"); + zenith::print(" fetch [-v] <host> <port> [path]\n"); + zenith::print("\n"); + zenith::print(" -v Verbose output (show connection info and headers)\n"); + zenith::print("\n"); + zenith::print("Examples:\n"); + zenith::print(" fetch https://icanhazip.com\n"); + zenith::print(" fetch http://example.com/index.html\n"); + zenith::print(" fetch -v https://example.com\n"); + zenith::print(" fetch 10.0.68.1 80 /\n"); + zenith::exit(0); + } + + // Check for -v flag + bool verbose = false; + if (arg[0] == '-' && arg[1] == 'v' && (arg[2] == ' ' || arg[2] == '\0')) { + verbose = true; + arg = skip_spaces(arg + 2); + } + + // Determine mode: URL mode (starts with http:// or https://) vs legacy mode + bool urlMode = (strncmp(arg, "http://", 7) == 0 || strncmp(arg, "https://", 8) == 0); + + char hostStr[256]; + char path[512]; + uint16_t port; + bool useHttps = false; + + if (urlMode) { + ParsedUrl url = parse_url(arg); + if (!url.valid) { + zenith::print("Error: invalid URL\n"); + zenith::exit(1); + } + strcpy(hostStr, url.host); + strcpy(path, url.path); + port = url.port; + useHttps = url.https; + } else { + // Legacy mode: <host> <port> [path] + int i = 0; + while (arg[i] && arg[i] != ' ' && i < 255) { hostStr[i] = arg[i]; i++; } + hostStr[i] = '\0'; + arg = skip_spaces(arg + i); + + char portStr[16]; + i = 0; + while (arg[i] && arg[i] != ' ' && i < 15) { portStr[i] = arg[i]; i++; } + portStr[i] = '\0'; + arg = skip_spaces(arg + i); + + if (!parse_uint16(portStr, &port)) { + zenith::print("Invalid port: "); + zenith::print(portStr); + zenith::putchar('\n'); + zenith::exit(1); + } + + if (*arg) { + i = 0; + while (arg[i] && i < 511) { path[i] = arg[i]; i++; } + path[i] = '\0'; + } else { + path[0] = '/'; path[1] = '\0'; + } + } + + // Resolve host to IP + uint32_t serverIp; + if (!parse_ip(hostStr, &serverIp)) { + serverIp = zenith::resolve(hostStr); + if (serverIp == 0) { + zenith::print("Error: could not resolve "); + zenith::print(hostStr); + zenith::putchar('\n'); + zenith::exit(1); + } + } + + char ipStr[32]; + format_ip(ipStr, serverIp); + + if (verbose) { + char msg[256]; + snprintf(msg, sizeof(msg), "Connecting to %s:%d (%s)...\n", + hostStr, (int)port, useHttps ? "HTTPS" : "HTTP"); + zenith::print(msg); + } + + // Create and connect socket + int fd = zenith::socket(Zenith::SOCK_TCP); + if (fd < 0) { + zenith::print("Error: failed to create socket\n"); + zenith::exit(1); + } + + if (zenith::connect(fd, serverIp, port) < 0) { + zenith::print("Error: connection failed\n"); + zenith::closesocket(fd); + zenith::exit(1); + } + + // Build HTTP request + char request[1024]; + int reqLen = snprintf(request, sizeof(request), + "GET %s HTTP/1.0\r\n" + "Host: %s\r\n" + "User-Agent: ZenithOS/1.0\r\n" + "Connection: close\r\n" + "\r\n", + path, hostStr); + + if (verbose) { + char msg[128]; + snprintf(msg, sizeof(msg), "GET %s\n", path); + zenith::print(msg); + } + + // Allocate response buffer on heap (stack is only 16 KB) + static constexpr int RESP_MAX = 65536; + char* respBuf = (char*)malloc(RESP_MAX); + if (!respBuf) { + zenith::print("Error: out of memory\n"); + zenith::closesocket(fd); + zenith::exit(1); + } + + int respLen; + + if (useHttps) { + // ---- TLS handshake and exchange ---- + + // Load trust anchors + TrustAnchors tas = load_trust_anchors(verbose); + if (tas.count == 0) { + zenith::print("Error: no trust anchors loaded\n"); + free(respBuf); + zenith::closesocket(fd); + zenith::exit(1); + } + + // Initialize BearSSL client + // Allocate contexts on heap to avoid stack overflow + br_ssl_client_context* cc = (br_ssl_client_context*)malloc(sizeof(br_ssl_client_context)); + br_x509_minimal_context* xc = (br_x509_minimal_context*)malloc(sizeof(br_x509_minimal_context)); + if (!cc || !xc) { + zenith::print("Error: out of memory for TLS context\n"); + free(respBuf); + zenith::closesocket(fd); + zenith::exit(1); + } + + br_ssl_client_init_full(cc, xc, tas.anchors, tas.count); + + // Set time for certificate validation + uint32_t days, secs; + get_bearssl_time(&days, &secs); + br_x509_minimal_set_time(xc, days, secs); + + if (verbose) { + Zenith::DateTime dt; + zenith::gettime(&dt); + char tmsg[128]; + snprintf(tmsg, sizeof(tmsg), "System time: %u-%02u-%02u %02u:%02u:%02u (days=%u secs=%u)\n", + (unsigned)dt.Year, (unsigned)dt.Month, (unsigned)dt.Day, + (unsigned)dt.Hour, (unsigned)dt.Minute, (unsigned)dt.Second, + (unsigned)days, (unsigned)secs); + zenith::print(tmsg); + } + + // Seed the PRNG with RDRAND entropy + unsigned char seed[32]; + zenith::getrandom(seed, sizeof(seed)); + br_ssl_engine_set_buffer(&cc->eng, malloc(BR_SSL_BUFSIZE_BIDI), + BR_SSL_BUFSIZE_BIDI, 1); + + // Inject entropy + br_ssl_engine_inject_entropy(&cc->eng, seed, sizeof(seed)); + + // Reset client with server name for SNI + if (!br_ssl_client_reset(cc, hostStr, 0)) { + int err = br_ssl_engine_last_error(&cc->eng); + char msg[64]; + snprintf(msg, sizeof(msg), "Error: TLS reset failed (err=%d)\n", err); + zenith::print(msg); + free(respBuf); + zenith::closesocket(fd); + zenith::exit(1); + } + + if (verbose) { + zenith::print("TLS handshake...\n"); + } + + // Run TLS I/O loop + respLen = tls_exchange(fd, &cc->eng, request, reqLen, + respBuf, RESP_MAX, verbose); + + if (verbose && respLen > 0) { + zenith::print("TLS connection established\n"); + } + + // Cleanup (we don't bother freeing everything since we're exiting) + } else { + // ---- Plain HTTP ---- + respLen = plain_http_exchange(fd, request, reqLen, respBuf, RESP_MAX); + + if (respLen == -2) { + zenith::print("\nAborted.\n"); + zenith::closesocket(fd); + zenith::exit(0); + } + } + + zenith::closesocket(fd); + + if (respLen <= 0) { + zenith::print("Error: no response received\n"); + zenith::exit(1); + } + + respBuf[respLen] = '\0'; + print_response(respBuf, respLen, verbose); zenith::exit(0); } diff --git a/programs/src/fetch/obj/main.o b/programs/src/fetch/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..579eaab7d770867f15d15f044dfef32e37a653d3 GIT binary patch literal 162512 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 literal 0 HcmV?d00001 diff --git a/programs/src/fontscale/main.cpp b/programs/src/fontscale/main.cpp new file mode 100644 index 0000000..0c5a682 --- /dev/null +++ b/programs/src/fontscale/main.cpp @@ -0,0 +1,88 @@ +/* + * main.cpp + * fontscale - Change terminal font scale + * Copyright (c) 2025-2026 Daniel Hammer +*/ + +#include <zenith/syscall.h> +#include <zenith/string.h> + +static int atoi(const char* s) { + int n = 0; + while (*s >= '0' && *s <= '9') { + n = n * 10 + (*s - '0'); + s++; + } + return n; +} + +static void print_int(int n) { + char buf[16]; + int i = 0; + if (n == 0) { + zenith::putchar('0'); + return; + } + while (n > 0 && i < 15) { + buf[i++] = '0' + (n % 10); + n /= 10; + } + while (i > 0) zenith::putchar(buf[--i]); +} + +extern "C" void _start() { + char args[128]; + int len = zenith::getargs(args, sizeof(args)); + + if (len <= 0 || args[0] == '\0') { + // No args: show current scale + int sx, sy; + zenith::get_termscale(&sx, &sy); + int cols, rows; + zenith::termsize(&cols, &rows); + + zenith::print("Font scale: "); + print_int(sx); + zenith::print("x"); + print_int(sy); + zenith::print(" Terminal: "); + print_int(cols); + zenith::print("x"); + print_int(rows); + zenith::putchar('\n'); + zenith::exit(0); + } + + // Parse arguments + const char* p = zenith::skip_spaces(args); + int scale_x = atoi(p); + + // Skip past first number to find optional second + while (*p >= '0' && *p <= '9') p++; + p = zenith::skip_spaces(p); + int scale_y = (*p >= '1' && *p <= '8') ? atoi(p) : scale_x; + + if (scale_x < 1 || scale_x > 8 || scale_y < 1 || scale_y > 8) { + zenith::print("fontscale: scale must be 1-8\n"); + zenith::exit(1); + } + + zenith::termscale(scale_x, scale_y); + + // Clear and show result + zenith::print("\033[2J\033[H"); + + int cols, rows; + zenith::termsize(&cols, &rows); + zenith::print("Font scale set to "); + print_int(scale_x); + zenith::print("x"); + print_int(scale_y); + zenith::print(" ("); + print_int(cols); + zenith::print("x"); + print_int(rows); + zenith::print(")\n"); + + zenith::exit(0); +} diff --git a/programs/src/httpd/main.cpp b/programs/src/httpd/main.cpp index e06562b..e030493 100644 --- a/programs/src/httpd/main.cpp +++ b/programs/src/httpd/main.cpp @@ -1,7 +1,7 @@ /* * main.cpp * HTTP/1.0 server for ZenithOS - * Usage: run httpd.elf [port] (default: 80) + * Usage: httpd [port] (default: 80) * Serves a built-in index page and files from the VFS * Copyright (c) 2025-2026 Daniel Hammer */ diff --git a/programs/src/ifconfig/main.cpp b/programs/src/ifconfig/main.cpp index e08571d..c194d66 100644 --- a/programs/src/ifconfig/main.cpp +++ b/programs/src/ifconfig/main.cpp @@ -81,6 +81,9 @@ extern "C" void _start() { zenith::print(" Gateway: "); print_ip(cfg.gateway); zenith::putchar('\n'); + zenith::print(" DNS Server: "); + print_ip(cfg.dnsServer); + zenith::putchar('\n'); zenith::exit(0); } diff --git a/programs/src/irc/main.cpp b/programs/src/irc/main.cpp index a3ab2a9..b895343 100644 --- a/programs/src/irc/main.cpp +++ b/programs/src/irc/main.cpp @@ -836,23 +836,26 @@ extern "C" void _start() { const char* arg = skip_spaces(argbuf); if (*arg == '\0') { - zenith::print("Usage: irc.elf <server_ip> <port> <nickname> [#channel]\n"); - zenith::print("Example: run irc.elf 10.0.68.1 6667 ZenithUser #general\n"); + zenith::print("Usage: irc <server> <port> <nickname> [#channel]\n"); + zenith::print("Example: irc irc.libera.chat 6667 ZenithUser #general\n"); return; } - // Parse IP - char ipStr[32]; + // Parse host (IP or hostname) + char hostStr[128]; int i = 0; - while (arg[i] && arg[i] != ' ' && i < 31) { ipStr[i] = arg[i]; i++; } - ipStr[i] = '\0'; + while (arg[i] && arg[i] != ' ' && i < 127) { hostStr[i] = arg[i]; i++; } + hostStr[i] = '\0'; arg = skip_spaces(arg + i); - if (!parse_ip(ipStr, &irc.serverIp)) { - zenith::print("Invalid IP address: "); - zenith::print(ipStr); - zenith::putchar('\n'); - return; + if (!parse_ip(hostStr, &irc.serverIp)) { + irc.serverIp = zenith::resolve(hostStr); + if (irc.serverIp == 0) { + zenith::print("Could not resolve: "); + zenith::print(hostStr); + zenith::putchar('\n'); + return; + } } // Parse port @@ -910,7 +913,7 @@ extern "C" void _start() { // Initial draw msg_add("\033[1m*** ZenithOS IRC Client\033[0m"); - msg_add_fmt("*** Connecting to %s:%d as %s...", ipStr, (int)irc.serverPort, irc.nick); + msg_add_fmt("*** Connecting to %s:%d as %s...", hostStr, (int)irc.serverPort, irc.nick); ui_render(); // Create socket and connect diff --git a/programs/src/nslookup/main.cpp b/programs/src/nslookup/main.cpp new file mode 100644 index 0000000..a977e54 --- /dev/null +++ b/programs/src/nslookup/main.cpp @@ -0,0 +1,83 @@ +/* + * main.cpp + * DNS lookup utility for ZenithOS + * Usage: nslookup <hostname> + * Copyright (c) 2025-2026 Daniel Hammer +*/ + +#include <zenith/syscall.h> +#include <zenith/string.h> + +using zenith::skip_spaces; + +static void print_ip(uint32_t ip) { + auto print_int = [](uint32_t n) { + if (n == 0) { zenith::putchar('0'); return; } + char buf[4]; + int i = 0; + while (n > 0) { buf[i++] = '0' + (n % 10); n /= 10; } + for (int j = i - 1; j >= 0; j--) zenith::putchar(buf[j]); + }; + + print_int(ip & 0xFF); + zenith::putchar('.'); + print_int((ip >> 8) & 0xFF); + zenith::putchar('.'); + print_int((ip >> 16) & 0xFF); + zenith::putchar('.'); + print_int((ip >> 24) & 0xFF); +} + +extern "C" void _start() { + char args[256]; + int len = zenith::getargs(args, sizeof(args)); + + const char* hostname = skip_spaces(args); + if (len <= 0 || hostname[0] == '\0') { + zenith::print("Usage: nslookup <hostname>\n"); + zenith::print("Example: nslookup example.com\n"); + zenith::exit(0); + } + + // Show DNS server + Zenith::NetCfg cfg; + zenith::get_netcfg(&cfg); + + zenith::print("Server: "); + print_ip(cfg.dnsServer); + zenith::putchar('\n'); + + zenith::print("Querying "); + zenith::print(hostname); + zenith::print("...\n"); + + uint64_t start = zenith::get_milliseconds(); + uint32_t ip = zenith::resolve(hostname); + uint64_t elapsed = zenith::get_milliseconds() - start; + + if (ip == 0) { + zenith::print("Error: could not resolve "); + zenith::print(hostname); + zenith::putchar('\n'); + zenith::exit(1); + } + + zenith::print("Name: "); + zenith::print(hostname); + zenith::putchar('\n'); + zenith::print("Address: "); + print_ip(ip); + zenith::putchar('\n'); + + // Print timing + zenith::print("Time: "); + char buf[20]; + int i = 0; + uint64_t ms = elapsed; + if (ms == 0) { buf[i++] = '0'; } + else { while (ms > 0) { buf[i++] = '0' + (ms % 10); ms /= 10; } } + for (int j = i - 1; j >= 0; j--) zenith::putchar(buf[j]); + zenith::print(" ms\n"); + + zenith::exit(0); +} diff --git a/programs/src/ping/main.cpp b/programs/src/ping/main.cpp index 2f0990e..01afee6 100644 --- a/programs/src/ping/main.cpp +++ b/programs/src/ping/main.cpp @@ -65,21 +65,26 @@ extern "C" void _start() { int len = zenith::getargs(args, sizeof(args)); if (len <= 0 || args[0] == '\0') { - zenith::print("Usage: ping <ip address>\n"); + zenith::print("Usage: ping <host>\n"); zenith::exit(1); } uint32_t ip; if (!parse_ip(args, &ip)) { - zenith::print("Invalid IP address: "); - zenith::print(args); - zenith::putchar('\n'); - zenith::exit(1); + ip = zenith::resolve(args); + if (ip == 0) { + zenith::print("Could not resolve: "); + zenith::print(args); + zenith::putchar('\n'); + zenith::exit(1); + } } zenith::print("PING "); + zenith::print(args); + zenith::print(" ("); print_ip(ip); - zenith::putchar('\n'); + zenith::print(")\n"); for (int i = 0; i < 4; i++) { int32_t rtt = zenith::ping(ip, 3000); diff --git a/programs/src/shell/main.cpp b/programs/src/shell/main.cpp index f67f525..b8cb003 100644 --- a/programs/src/shell/main.cpp +++ b/programs/src/shell/main.cpp @@ -118,11 +118,13 @@ static void cmd_help() { zenith::print(" date Show current date and time\n"); zenith::print(" uptime Show uptime\n"); zenith::print(" clear Clear the screen\n"); + zenith::print(" fontscale [n] Set terminal font scale (1-8)\n"); zenith::print(" reset Reboot the system\n"); zenith::print(" shutdown Shut down the system\n"); zenith::print("\n"); zenith::print("Network commands:\n"); zenith::print(" ping <ip> Send ICMP echo requests\n"); + zenith::print(" nslookup DNS lookup\n"); zenith::print(" ifconfig Show/set network configuration\n"); zenith::print(" tcpconnect Connect to a TCP server\n"); zenith::print(" irc IRC client\n"); diff --git a/programs/src/tcpconnect/main.cpp b/programs/src/tcpconnect/main.cpp index f8b9cbf..f056159 100644 --- a/programs/src/tcpconnect/main.cpp +++ b/programs/src/tcpconnect/main.cpp @@ -81,25 +81,28 @@ extern "C" void _start() { int len = zenith::getargs(args, sizeof(args)); if (len <= 0 || args[0] == '\0') { - zenith::print("Usage: tcpconnect <ip> <port>\n"); + zenith::print("Usage: tcpconnect <host> <port>\n"); zenith::exit(1); } - // Parse IP address (up to first space) - char ipStr[32]; + // Parse host (IP or hostname) + char hostStr[128]; int i = 0; - while (args[i] && args[i] != ' ' && i < 31) { - ipStr[i] = args[i]; + while (args[i] && args[i] != ' ' && i < 127) { + hostStr[i] = args[i]; i++; } - ipStr[i] = '\0'; + hostStr[i] = '\0'; uint32_t ip; - if (!parse_ip(ipStr, &ip)) { - zenith::print("Invalid IP address: "); - zenith::print(ipStr); - zenith::putchar('\n'); - zenith::exit(1); + if (!parse_ip(hostStr, &ip)) { + ip = zenith::resolve(hostStr); + if (ip == 0) { + zenith::print("Could not resolve: "); + zenith::print(hostStr); + zenith::putchar('\n'); + zenith::exit(1); + } } // Parse port diff --git a/programs/src/wiki/Makefile b/programs/src/wiki/Makefile new file mode 100644 index 0000000..a3bf2bb --- /dev/null +++ b/programs/src/wiki/Makefile @@ -0,0 +1,89 @@ +# Makefile for wiki (Wikipedia client) on ZenithOS +# Copyright (c) 2025-2026 Daniel Hammer + +MAKEFLAGS += -rR +.SUFFIXES: + +# ---- Toolchain ---- + +TOOLCHAIN_PREFIX := $(shell cd ../../.. && pwd)/toolchain/local/bin/x86_64-elf- +ifneq ($(wildcard $(TOOLCHAIN_PREFIX)gcc),) + CXX := $(TOOLCHAIN_PREFIX)g++ +else + CXX := g++ +endif + +# ---- Paths ---- + +BEARSSL := ../../lib/bearssl +LIBC_LIB := ../../lib/libc +LIBC_INC := ../../include/libc +PROG_INC := ../../include +LINK_LD := ../../link.ld +BINDIR := ../../bin +OBJDIR := obj + +# ---- Compiler flags ---- + +CXXFLAGS := \ + -std=gnu++20 \ + -g -O2 -pipe \ + -Wall \ + -Wextra \ + -Wno-unused-parameter \ + -nostdinc \ + -ffreestanding \ + -fno-stack-protector \ + -fno-stack-check \ + -fno-PIC \ + -fno-rtti \ + -fno-exceptions \ + -ffunction-sections \ + -fdata-sections \ + -m64 \ + -march=x86-64 \ + -mno-80387 \ + -mno-mmx \ + -mno-sse \ + -mno-sse2 \ + -mno-red-zone \ + -mcmodel=small \ + -I $(PROG_INC) \ + -isystem $(LIBC_INC) \ + -I $(BEARSSL)/inc \ + -isystem ../../../kernel/freestnd-c-hdrs/x86_64/include \ + -isystem ../../../kernel/freestnd-cxx-hdrs/x86_64/include + +# ---- Linker flags ---- + +LDFLAGS := \ + -nostdlib \ + -static \ + -Wl,--build-id=none \ + -Wl,--gc-sections \ + -Wl,-m,elf_x86_64 \ + -z max-page-size=0x1000 \ + -T $(LINK_LD) + +# ---- Libraries ---- + +LIBS := $(BEARSSL)/libbearssl.a $(LIBC_LIB)/liblibc.a + +# ---- Target ---- + +TARGET := $(BINDIR)/os/wiki.elf + +.PHONY: all clean + +all: $(TARGET) + +$(TARGET): $(OBJDIR)/main.o $(LIBS) $(LINK_LD) Makefile + mkdir -p $(BINDIR)/os + $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJDIR)/main.o $(LIBS) -o $@ + +$(OBJDIR)/main.o: main.cpp Makefile + mkdir -p $(OBJDIR) + $(CXX) $(CXXFLAGS) -c $< -o $@ + +clean: + rm -rf $(OBJDIR) $(TARGET) diff --git a/programs/src/wiki/main.cpp b/programs/src/wiki/main.cpp new file mode 100644 index 0000000..34738dd --- /dev/null +++ b/programs/src/wiki/main.cpp @@ -0,0 +1,1223 @@ +/* + * main.cpp + * Wikipedia client for ZenithOS (TLS 1.2 via BearSSL) + * Interactive fullscreen pager with colored output + * Usage: wiki <title> Show article summary + * wiki -f <title> Show full article + * wiki -s <query> Search for articles + * Copyright (c) 2025-2026 Daniel Hammer +*/ + +#include <zenith/syscall.h> +#include <zenith/string.h> + +extern "C" { +#include <bearssl.h> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +} + +using zenith::skip_spaces; + +static constexpr int RESP_MAX = 131072; // 128 KB +static const char WIKI_HOST[] = "en.wikipedia.org"; +static constexpr int MAX_LINES = 4096; +static constexpr int MAX_SEARCH_RESULTS = 10; + +enum Mode { MODE_SUMMARY, MODE_FULL, MODE_SEARCH }; +enum LineType { LINE_BLANK, LINE_TITLE, LINE_DESC, LINE_SECTION, LINE_BODY }; + +struct WikiLine { + const char* text; + int len; + LineType type; + int level; +}; + +// ---- Global state (loaded once, reused across fetches) ---- + +struct TrustAnchors { + br_x509_trust_anchor* anchors; + size_t count; + size_t capacity; +}; + +static uint32_t g_serverIp = 0; +static TrustAnchors g_tas = {nullptr, 0, 0}; + +// ---- Screen buffer for flicker-free rendering ---- + +static constexpr int SB_SIZE = 32768; +static char g_sb[SB_SIZE]; +static int g_sbPos = 0; + +static void sb_reset() { g_sbPos = 0; } +static void sb_putc(char c) { if (g_sbPos < SB_SIZE - 1) g_sb[g_sbPos++] = c; } +static void sb_puts(const char* s) { while (*s && g_sbPos < SB_SIZE - 1) g_sb[g_sbPos++] = *s++; } +static void sb_flush() { g_sb[g_sbPos] = '\0'; zenith::print(g_sb); } + +static int int_to_buf(char* buf, int n) { + if (n <= 0) { buf[0] = '0'; return 1; } + char tmp[12]; int i = 0; + while (n > 0) { tmp[i++] = '0' + (n % 10); n /= 10; } + for (int j = 0; j < i; j++) buf[j] = tmp[i - 1 - j]; + return i; +} + +static void sb_cursor_to(int row, int col) { + sb_puts("\033["); + char tmp[12]; int n = int_to_buf(tmp, row); + for (int i = 0; i < n; i++) sb_putc(tmp[i]); + sb_putc(';'); + n = int_to_buf(tmp, col); + for (int i = 0; i < n; i++) sb_putc(tmp[i]); + sb_putc('H'); +} + +// ---- Trust anchor loading ---- + +struct DerAccum { + unsigned char* data; + size_t len; + size_t cap; +}; + +static void der_append(void* ctx, const void* buf, size_t len) { + DerAccum* a = (DerAccum*)ctx; + if (a->len + len > a->cap) { + size_t newcap = a->cap * 2; + if (newcap < a->len + len) newcap = a->len + len + 4096; + unsigned char* nb = (unsigned char*)malloc(newcap); + if (!nb) return; + if (a->data) { + memcpy(nb, a->data, a->len); + free(a->data); + } + a->data = nb; + a->cap = newcap; + } + memcpy(a->data + a->len, buf, len); + a->len += len; +} + +struct DnAccum { + unsigned char* data; + size_t len; + size_t cap; +}; + +static void dn_append(void* ctx, const void* buf, size_t len) { + DnAccum* a = (DnAccum*)ctx; + if (a->len + len > a->cap) { + size_t newcap = a->cap * 2; + if (newcap < a->len + len) newcap = a->len + len + 256; + unsigned char* nb = (unsigned char*)malloc(newcap); + if (!nb) return; + if (a->data) { + memcpy(nb, a->data, a->len); + free(a->data); + } + a->data = nb; + a->cap = newcap; + } + memcpy(a->data + a->len, buf, len); + a->len += len; +} + +static void ta_add(TrustAnchors* tas, const br_x509_trust_anchor* ta) { + if (tas->count >= tas->capacity) { + size_t newcap = tas->capacity == 0 ? 64 : tas->capacity * 2; + br_x509_trust_anchor* na = (br_x509_trust_anchor*)malloc( + newcap * sizeof(br_x509_trust_anchor)); + if (!na) return; + if (tas->anchors) { + memcpy(na, tas->anchors, tas->count * sizeof(br_x509_trust_anchor)); + free(tas->anchors); + } + tas->anchors = na; + tas->capacity = newcap; + } + tas->anchors[tas->count++] = *ta; +} + +static bool process_cert_der(TrustAnchors* tas, const unsigned char* der, size_t der_len) { + static br_x509_decoder_context dc; // ~2KB+, keep off stack + DnAccum dn = {nullptr, 0, 0}; + + br_x509_decoder_init(&dc, dn_append, &dn); + br_x509_decoder_push(&dc, der, der_len); + + br_x509_pkey* pk = br_x509_decoder_get_pkey(&dc); + if (!pk) { + if (dn.data) free(dn.data); + return false; + } + + br_x509_trust_anchor ta; + memset(&ta, 0, sizeof(ta)); + ta.dn.data = dn.data; + ta.dn.len = dn.len; + ta.flags = 0; + if (br_x509_decoder_isCA(&dc)) + ta.flags |= BR_X509_TA_CA; + + switch (pk->key_type) { + case BR_KEYTYPE_RSA: { + ta.pkey.key_type = BR_KEYTYPE_RSA; + ta.pkey.key.rsa.nlen = pk->key.rsa.nlen; + ta.pkey.key.rsa.n = (unsigned char*)malloc(pk->key.rsa.nlen); + if (ta.pkey.key.rsa.n) memcpy(ta.pkey.key.rsa.n, pk->key.rsa.n, pk->key.rsa.nlen); + ta.pkey.key.rsa.elen = pk->key.rsa.elen; + ta.pkey.key.rsa.e = (unsigned char*)malloc(pk->key.rsa.elen); + if (ta.pkey.key.rsa.e) memcpy(ta.pkey.key.rsa.e, pk->key.rsa.e, pk->key.rsa.elen); + break; + } + case BR_KEYTYPE_EC: { + ta.pkey.key_type = BR_KEYTYPE_EC; + ta.pkey.key.ec.curve = pk->key.ec.curve; + ta.pkey.key.ec.qlen = pk->key.ec.qlen; + ta.pkey.key.ec.q = (unsigned char*)malloc(pk->key.ec.qlen); + if (ta.pkey.key.ec.q) memcpy(ta.pkey.key.ec.q, pk->key.ec.q, pk->key.ec.qlen); + break; + } + default: + if (dn.data) free(dn.data); + return false; + } + + ta_add(tas, &ta); + return true; +} + +static TrustAnchors load_trust_anchors() { + TrustAnchors tas = {nullptr, 0, 0}; + + int fh = zenith::open("0:/etc/ca-certificates.crt"); + if (fh < 0) return tas; + + uint64_t fsize = zenith::getsize(fh); + if (fsize == 0 || fsize > 512 * 1024) { + zenith::close(fh); + return tas; + } + + unsigned char* pem = (unsigned char*)malloc(fsize + 1); + if (!pem) { zenith::close(fh); return tas; } + + zenith::read(fh, pem, 0, fsize); + zenith::close(fh); + pem[fsize] = 0; + + static br_pem_decoder_context pc; // keep off stack + br_pem_decoder_init(&pc); + + DerAccum der = {nullptr, 0, 0}; + bool inCert = false; + + size_t offset = 0; + while (offset < fsize) { + size_t pushed = br_pem_decoder_push(&pc, pem + offset, fsize - offset); + offset += pushed; + + int event = br_pem_decoder_event(&pc); + if (event == BR_PEM_BEGIN_OBJ) { + const char* name = br_pem_decoder_name(&pc); + inCert = (strcmp(name, "CERTIFICATE") == 0); + if (inCert) { + der.len = 0; + br_pem_decoder_setdest(&pc, der_append, &der); + } else { + br_pem_decoder_setdest(&pc, nullptr, nullptr); + } + } else if (event == BR_PEM_END_OBJ) { + if (inCert && der.len > 0) + process_cert_der(&tas, der.data, der.len); + inCert = false; + } else if (event == BR_PEM_ERROR) { + break; + } + } + + if (der.data) free(der.data); + free(pem); + return tas; +} + +// ---- Time conversion for certificate validation ---- + +static void get_bearssl_time(uint32_t* days, uint32_t* seconds) { + Zenith::DateTime dt; + zenith::gettime(&dt); + + int y = dt.Year; + int m = dt.Month; + int d = dt.Day; + + uint32_t total_days = 365 * (uint32_t)y + + (uint32_t)(y / 4) + - (uint32_t)(y / 100) + + (uint32_t)(y / 400); + + const int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + for (int mo = 1; mo < m && mo <= 12; mo++) + total_days += mdays[mo]; + bool leap = (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)); + if (leap && m > 2) total_days++; + total_days += d - 1; + + *days = total_days; + *seconds = (uint32_t)(dt.Hour * 3600 + dt.Minute * 60 + dt.Second); +} + +// ---- TLS I/O ---- + +static int tls_send_all(int fd, const unsigned char* data, size_t len) { + size_t sent = 0; + uint64_t deadline = zenith::get_milliseconds() + 15000; + while (sent < len) { + int r = zenith::send(fd, data + sent, (uint32_t)(len - sent)); + if (r > 0) { sent += r; deadline = zenith::get_milliseconds() + 15000; } + else if (r < 0) return -1; + else { if (zenith::get_milliseconds() >= deadline) return -1; zenith::sleep_ms(1); } + } + return (int)sent; +} + +static int tls_recv_some(int fd, unsigned char* buf, size_t maxlen) { + uint64_t deadline = zenith::get_milliseconds() + 15000; + while (true) { + int r = zenith::recv(fd, buf, (uint32_t)maxlen); + if (r > 0) return r; + if (r < 0) return -1; + if (zenith::get_milliseconds() >= deadline) return -1; + zenith::sleep_ms(1); + } +} + +static int tls_exchange(int fd, br_ssl_engine_context* eng, + const char* request, int reqLen, + char* respBuf, int respMax) { + bool requestSent = false; + int respLen = 0; + uint64_t deadline = zenith::get_milliseconds() + 30000; + + while (true) { + unsigned state = br_ssl_engine_current_state(eng); + + if (state & BR_SSL_CLOSED) { + int err = br_ssl_engine_last_error(eng); + if (err != BR_ERR_OK && err != BR_ERR_IO) { + if (respLen == 0) return -1; + } + return respLen; + } + + if (zenith::is_key_available()) { + Zenith::KeyEvent ev; + zenith::getkey(&ev); + if (ev.pressed && ev.ctrl && ev.ascii == 'q') { + br_ssl_engine_close(eng); + return respLen > 0 ? respLen : -1; + } + } + + if (state & BR_SSL_SENDREC) { + size_t len; + unsigned char* buf = br_ssl_engine_sendrec_buf(eng, &len); + int sent = tls_send_all(fd, buf, len); + if (sent < 0) { br_ssl_engine_close(eng); return respLen > 0 ? respLen : -1; } + br_ssl_engine_sendrec_ack(eng, len); + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + if (state & BR_SSL_RECVAPP) { + size_t len; + unsigned char* buf = br_ssl_engine_recvapp_buf(eng, &len); + size_t toCopy = len; + if (respLen + (int)toCopy > respMax - 1) + toCopy = respMax - 1 - respLen; + if (toCopy > 0) { memcpy(respBuf + respLen, buf, toCopy); respLen += toCopy; } + br_ssl_engine_recvapp_ack(eng, len); + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + if ((state & BR_SSL_SENDAPP) && !requestSent) { + size_t len; + unsigned char* buf = br_ssl_engine_sendapp_buf(eng, &len); + size_t toWrite = (size_t)reqLen; + if (toWrite > len) toWrite = len; + memcpy(buf, request, toWrite); + br_ssl_engine_sendapp_ack(eng, toWrite); + br_ssl_engine_flush(eng, 0); + requestSent = true; + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + if (state & BR_SSL_RECVREC) { + size_t len; + unsigned char* buf = br_ssl_engine_recvrec_buf(eng, &len); + int got = tls_recv_some(fd, buf, len); + if (got < 0) { br_ssl_engine_close(eng); return respLen > 0 ? respLen : -1; } + br_ssl_engine_recvrec_ack(eng, got); + deadline = zenith::get_milliseconds() + 30000; + continue; + } + + if (zenith::get_milliseconds() >= deadline) + return respLen > 0 ? respLen : -1; + zenith::sleep_ms(1); + } +} + +// ---- HTTPS fetch wrapper (reusable for multiple requests) ---- + +static int wiki_fetch(const char* path, char* respBuf, int respMax) { + int fd = zenith::socket(Zenith::SOCK_TCP); + if (fd < 0) return -1; + + if (zenith::connect(fd, g_serverIp, 443) < 0) { + zenith::closesocket(fd); + return -1; + } + + br_ssl_client_context* cc = (br_ssl_client_context*)malloc(sizeof(br_ssl_client_context)); + br_x509_minimal_context* xc = (br_x509_minimal_context*)malloc(sizeof(br_x509_minimal_context)); + void* iobuf = malloc(BR_SSL_BUFSIZE_BIDI); + if (!cc || !xc || !iobuf) { + zenith::closesocket(fd); + return -1; + } + + br_ssl_client_init_full(cc, xc, g_tas.anchors, g_tas.count); + + uint32_t days, secs; + get_bearssl_time(&days, &secs); + br_x509_minimal_set_time(xc, days, secs); + + unsigned char seed[32]; + zenith::getrandom(seed, sizeof(seed)); + br_ssl_engine_set_buffer(&cc->eng, iobuf, BR_SSL_BUFSIZE_BIDI, 1); + br_ssl_engine_inject_entropy(&cc->eng, seed, sizeof(seed)); + + if (!br_ssl_client_reset(cc, WIKI_HOST, 0)) { + zenith::closesocket(fd); + free(cc); free(xc); free(iobuf); + return -1; + } + + static char request[2560]; // keep off stack + int reqLen = snprintf(request, sizeof(request), + "GET %s HTTP/1.0\r\n" + "Host: %s\r\n" + "User-Agent: ZenithOS/1.0 wiki\r\n" + "Accept: application/json\r\n" + "Connection: close\r\n" + "\r\n", + path, WIKI_HOST); + + int respLen = tls_exchange(fd, &cc->eng, request, reqLen, respBuf, respMax); + + zenith::closesocket(fd); + free(cc); free(xc); free(iobuf); + return respLen; +} + +// ---- HTTP response parsing ---- + +static int find_header_end(const char* buf, int len) { + for (int i = 0; i + 3 < len; i++) { + if (buf[i] == '\r' && buf[i+1] == '\n' && buf[i+2] == '\r' && buf[i+3] == '\n') + return i + 4; + } + return -1; +} + +static int parse_status_code(const char* buf, int len) { + int i = 0; + while (i < len && buf[i] != ' ') i++; + if (i >= len) return -1; + i++; + if (i + 2 >= len) return -1; + if (buf[i] < '0' || buf[i] > '9') return -1; + return (buf[i] - '0') * 100 + (buf[i+1] - '0') * 10 + (buf[i+2] - '0'); +} + +// ---- URL encoding ---- + +static int url_encode_title(const char* in, char* out, int maxLen) { + const char hex[] = "0123456789ABCDEF"; + int j = 0; + for (int i = 0; in[i] && j < maxLen - 4; i++) { + char c = in[i]; + if (c == ' ') { + out[j++] = '_'; + } else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || c == '-' || c == '_' || + c == '.' || c == '~' || c == '(' || c == ')' || c == ',') { + out[j++] = c; + } else { + out[j++] = '%'; + out[j++] = hex[(unsigned char)c >> 4]; + out[j++] = hex[(unsigned char)c & 0x0F]; + } + } + out[j] = '\0'; + return j; +} + +static int url_encode_query(const char* in, char* out, int maxLen) { + const char hex[] = "0123456789ABCDEF"; + int j = 0; + for (int i = 0; in[i] && j < maxLen - 4; i++) { + char c = in[i]; + if (c == ' ') { + out[j++] = '+'; + } else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || c == '-' || c == '_' || + c == '.' || c == '~') { + out[j++] = c; + } else { + out[j++] = '%'; + out[j++] = hex[(unsigned char)c >> 4]; + out[j++] = hex[(unsigned char)c & 0x0F]; + } + } + out[j] = '\0'; + return j; +} + +// ---- JSON string extraction ---- + +static int extract_json_string(const char* buf, int len, const char* key, + char* out, int maxOut) { + int klen = (int)strlen(key); + + for (int i = 0; i < len - klen - 3; i++) { + if (buf[i] != '"') continue; + if (memcmp(buf + i + 1, key, klen) != 0) continue; + if (buf[i + 1 + klen] != '"') continue; + if (buf[i + 2 + klen] != ':') continue; + + int p = i + 3 + klen; + while (p < len && (buf[p] == ' ' || buf[p] == '\t')) p++; + if (p >= len || buf[p] != '"') continue; + p++; + + int j = 0; + while (p < len && j < maxOut - 4) { + if (buf[p] == '"') break; + if (buf[p] == '\\' && p + 1 < len) { + p++; + switch (buf[p]) { + case '"': out[j++] = '"'; break; + case '\\': out[j++] = '\\'; break; + case 'n': out[j++] = '\n'; break; + case 'r': break; + case 't': out[j++] = '\t'; break; + case '/': out[j++] = '/'; break; + case 'u': { + if (p + 4 < len) { + unsigned val = 0; + for (int k = 1; k <= 4; k++) { + char h = buf[p + k]; + val <<= 4; + if (h >= '0' && h <= '9') val |= h - '0'; + else if (h >= 'a' && h <= 'f') val |= h - 'a' + 10; + else if (h >= 'A' && h <= 'F') val |= h - 'A' + 10; + } + p += 4; + if (val < 128) out[j++] = (char)val; + else if (val == 0x2013 || val == 0x2014) out[j++] = '-'; + else if (val == 0x2018 || val == 0x2019) out[j++] = '\''; + else if (val == 0x201C || val == 0x201D) out[j++] = '"'; + else if (val == 0x2026) { out[j++] = '.'; out[j++] = '.'; out[j++] = '.'; } + else out[j++] = '?'; + } + break; + } + default: out[j++] = buf[p]; break; + } + } else { + out[j++] = buf[p]; + } + p++; + } + out[j] = '\0'; + return j; + } + + out[0] = '\0'; + return 0; +} + +// ---- Display line building (word wrap + section detection) ---- + +// Word-wrap a single paragraph into the lines array. Returns lines added. +static int wrap_paragraph(const char* text, int textLen, int cols, + WikiLine* lines, int maxLines, LineType type) { + if (maxLines <= 0 || textLen <= 0 || cols <= 0) return 0; + int count = 0; + const char* p = text; + const char* end = text + textLen; + + while (p < end && count < maxLines) { + while (p < end && *p == ' ') p++; + if (p >= end) break; + + const char* lineStart = p; + const char* lastSpace = nullptr; + int col = 0; + + while (p < end && col < cols) { + if (*p == ' ') lastSpace = p; + p++; + col++; + } + + if (p >= end) { + // Rest fits on one line + lines[count].text = lineStart; + lines[count].len = (int)(p - lineStart); + lines[count].type = type; + lines[count].level = 0; + count++; + } else if (lastSpace && lastSpace > lineStart) { + // Wrap at last space + lines[count].text = lineStart; + lines[count].len = (int)(lastSpace - lineStart); + lines[count].type = type; + lines[count].level = 0; + count++; + p = lastSpace + 1; + } else { + // Force break (word longer than cols) + lines[count].text = lineStart; + lines[count].len = (int)(p - lineStart); + lines[count].type = type; + lines[count].level = 0; + count++; + } + } + return count; +} + +// Build all display lines from article parts. Returns total line count. +static int build_lines(WikiLine* lines, int maxLines, + const char* title, const char* description, + const char* extract, int extractLen, + int cols, bool fullMode) { + int n = 0; + + // Title + if (title && title[0] && n < maxLines) { + n += wrap_paragraph(title, (int)strlen(title), cols, + lines + n, maxLines - n, LINE_TITLE); + } + + // Description + if (description && description[0] && n < maxLines) { + n += wrap_paragraph(description, (int)strlen(description), cols, + lines + n, maxLines - n, LINE_DESC); + } + + // Blank separator + if (n > 0 && n < maxLines) { + lines[n].text = ""; + lines[n].len = 0; + lines[n].type = LINE_BLANK; + lines[n].level = 0; + n++; + } + + // Process extract line by line + const char* p = extract; + const char* end = extract + extractLen; + + while (p < end && n < maxLines) { + const char* lineStart = p; + while (p < end && *p != '\n') p++; + int lineLen = (int)(p - lineStart); + if (p < end) p++; // skip \n + + // Blank line + if (lineLen == 0) { + lines[n].text = ""; + lines[n].len = 0; + lines[n].type = LINE_BLANK; + lines[n].level = 0; + n++; + continue; + } + + // Section header detection (== Title ==) + if (fullMode && lineLen >= 4 && lineStart[0] == '=' && lineStart[1] == '=') { + int level = 0; + int si = 0; + while (si < lineLen && lineStart[si] == '=') { level++; si++; } + while (si < lineLen && lineStart[si] == ' ') si++; + int ei = lineLen; + while (ei > si && lineStart[ei - 1] == '=') ei--; + while (ei > si && lineStart[ei - 1] == ' ') ei--; + + // Blank line before section for spacing + if (n > 0 && n < maxLines) { + lines[n].text = ""; + lines[n].len = 0; + lines[n].type = LINE_BLANK; + lines[n].level = 0; + n++; + } + + if (n < maxLines) { + lines[n].text = lineStart + si; + lines[n].len = ei - si; + lines[n].type = LINE_SECTION; + lines[n].level = level; + n++; + } + continue; + } + + // Regular text — word wrap + n += wrap_paragraph(lineStart, lineLen, cols, + lines + n, maxLines - n, LINE_BODY); + } + + return n; +} + +// ---- Pager rendering ---- + +static void render_pager(WikiLine* lines, int totalLines, int scroll, + int rows, int cols, const char* statusTitle, + const char* modeLabel) { + int contentRows = rows - 1; + sb_reset(); + sb_puts("\033[?25l"); + + for (int r = 0; r < contentRows; r++) { + sb_cursor_to(r + 1, 1); + sb_puts("\033[2K"); + + int idx = scroll + r; + if (idx < 0 || idx >= totalLines) continue; + + WikiLine& ln = lines[idx]; + if (ln.type == LINE_BLANK) continue; + + switch (ln.type) { + case LINE_TITLE: + sb_puts("\033[1;36m"); // bold cyan + break; + case LINE_DESC: + sb_puts("\033[33m"); // yellow + break; + case LINE_SECTION: { + int indent = (ln.level <= 2) ? 0 : (ln.level - 2) * 2; + for (int i = 0; i < indent; i++) sb_putc(' '); + sb_puts("\033[1;32m"); // bold green + break; + } + default: + break; + } + + int maxW = cols; + if (ln.type == LINE_SECTION && ln.level > 2) + maxW -= (ln.level - 2) * 2; + int printLen = ln.len; + if (printLen > maxW) printLen = maxW; + for (int c = 0; c < printLen; c++) + sb_putc(ln.text[c]); + + if (ln.type != LINE_BODY) + sb_puts("\033[0m"); + } + + // Status bar + sb_cursor_to(rows, 1); + sb_puts("\033[7m"); + + int visCol = 0; + // Helper: write string and track visible columns + #define SB_STATUS(s) do { const char* _s = (s); while (*_s) { sb_putc(*_s++); visCol++; } } while(0) + + SB_STATUS(" Wikipedia "); + sb_puts("\033[7;33m"); // yellow reverse + SB_STATUS(modeLabel); + sb_puts("\033[7;37m"); // white reverse + SB_STATUS(" | "); + + // Truncated title + int maxTitleLen = cols / 3; + int titleLen = (int)strlen(statusTitle); + if (titleLen > maxTitleLen && maxTitleLen > 3) { + for (int i = 0; i < maxTitleLen - 3; i++) { sb_putc(statusTitle[i]); visCol++; } + SB_STATUS("..."); + } else { + SB_STATUS(statusTitle); + } + + SB_STATUS(" | "); + char numStr[32]; + int nLen = snprintf(numStr, sizeof(numStr), "%d/%d", scroll + 1, totalLines); + for (int i = 0; i < nLen; i++) { sb_putc(numStr[i]); visCol++; } + SB_STATUS(" | q:Quit j/k:Scroll Space/b:Page "); + + #undef SB_STATUS + + // Pad to fill row + while (visCol < cols) { sb_putc(' '); visCol++; } + sb_puts("\033[0m"); + + sb_flush(); +} + +static void run_pager(WikiLine* lines, int totalLines, const char* title, + const char* modeLabel, bool useAltScreen) { + int cols = 80, rows = 25; + zenith::termsize(&cols, &rows); + + if (useAltScreen) { + zenith::print("\033[?1049h"); + zenith::print("\033[?25l"); + } + + int scroll = 0; + int maxScroll = totalLines - (rows - 1); + if (maxScroll < 0) maxScroll = 0; + + render_pager(lines, totalLines, scroll, rows, cols, title, modeLabel); + + bool running = true; + while (running) { + while (!zenith::is_key_available()) zenith::yield(); + + Zenith::KeyEvent ev; + zenith::getkey(&ev); + if (!ev.pressed) continue; + + int contentRows = rows - 1; + + if (ev.ascii == 'q' || (ev.ctrl && ev.ascii == 'q')) { + running = false; + break; + } + + switch (ev.ascii) { + case 'j': if (scroll < maxScroll) scroll++; break; + case 'k': if (scroll > 0) scroll--; break; + case ' ': scroll += contentRows; if (scroll > maxScroll) scroll = maxScroll; break; + case 'b': scroll -= contentRows; if (scroll < 0) scroll = 0; break; + case 'g': scroll = 0; break; + case 'G': scroll = maxScroll; break; + default: + switch (ev.scancode) { + case 0x48: if (scroll > 0) scroll--; break; // Up + case 0x50: if (scroll < maxScroll) scroll++; break; // Down + case 0x49: scroll -= contentRows; if (scroll < 0) scroll = 0; break; // PgUp + case 0x51: scroll += contentRows; if (scroll > maxScroll) scroll = maxScroll; break; // PgDn + case 0x47: scroll = 0; break; // Home + case 0x4F: scroll = maxScroll; break; // End + } + break; + } + + if (running) + render_pager(lines, totalLines, scroll, rows, cols, title, modeLabel); + } + + if (useAltScreen) { + zenith::print("\033[?25h"); + zenith::print("\033[?1049l"); + } +} + +// ---- Search results ---- + +static int parse_search_titles(const char* body, int bodyLen, + char titles[][256], int maxResults) { + int brackets = 0; + int start = -1; + for (int i = 0; i < bodyLen; i++) { + if (body[i] == '[') { + brackets++; + if (brackets == 2) { start = i + 1; break; } + } + } + if (start < 0) return 0; + + int count = 0; + int i = start; + while (i < bodyLen && body[i] != ']' && count < maxResults) { + while (i < bodyLen && (body[i] == ' ' || body[i] == ',' || + body[i] == '\n' || body[i] == '\r')) i++; + if (i >= bodyLen || body[i] == ']') break; + + if (body[i] == '"') { + i++; + int j = 0; + while (i < bodyLen && body[i] != '"' && j < 255) { + if (body[i] == '\\' && i + 1 < bodyLen) { + i++; + titles[count][j++] = body[i]; + } else { + titles[count][j++] = body[i]; + } + i++; + } + titles[count][j] = '\0'; + if (i < bodyLen) i++; + count++; + } else { + i++; + } + } + return count; +} + +static void render_search(char titles[][256], int count, const char* query, + int rows, int cols) { + sb_reset(); + sb_puts("\033[?25l"); + sb_puts("\033[2J"); // clear screen + + // Header + sb_cursor_to(2, 3); + sb_puts("\033[1;36mWikipedia\033[0m"); + sb_puts("\033[90m - The Free Encyclopedia\033[0m"); + + // Search query + sb_cursor_to(4, 3); + sb_puts("\033[1mSearch results for \"\033[33m"); + sb_puts(query); + sb_puts("\033[0;1m\":\033[0m"); + + // Results + int resultRow = 6; + for (int i = 0; i < count; i++) { + sb_cursor_to(resultRow + i, 3); + sb_puts("\033[1;36m"); + char num[8]; + snprintf(num, sizeof(num), "%2d", i + 1); + sb_puts(num); + sb_puts("\033[0m \033[1;37m"); + // Truncate long titles + int tLen = (int)strlen(titles[i]); + int maxT = cols - 10; + if (tLen > maxT && maxT > 3) { + for (int c = 0; c < maxT - 3; c++) sb_putc(titles[i][c]); + sb_puts("..."); + } else { + sb_puts(titles[i]); + } + sb_puts("\033[0m"); + } + + if (count == 0) { + sb_cursor_to(resultRow, 3); + sb_puts("\033[33m(no results found)\033[0m"); + } + + // Instructions + sb_cursor_to(resultRow + count + 2, 3); + sb_puts("\033[90mPress "); + if (count > 0) { + sb_puts("\033[0;1m1"); + if (count > 1) { + sb_putc('-'); + if (count >= 10) sb_putc('0'); + else sb_putc('0' + count); + } + sb_puts("\033[0;90m to view article, "); + } + sb_puts("\033[0;1mq\033[0;90m to quit\033[0m"); + + // Status bar + sb_cursor_to(rows, 1); + sb_puts("\033[7m"); + char statusStr[256]; + snprintf(statusStr, sizeof(statusStr), + " Wikipedia Search | \"%s\" | %d result%s ", + query, count, count == 1 ? "" : "s"); + sb_puts(statusStr); + int sLen = (int)strlen(statusStr); + for (int i = sLen; i < cols; i++) sb_putc(' '); + sb_puts("\033[0m"); + + sb_flush(); +} + +// Returns selected index (0-based), or -1 for quit +static int run_search(char titles[][256], int count, const char* query, + int rows, int cols) { + render_search(titles, count, query, rows, cols); + + while (true) { + while (!zenith::is_key_available()) zenith::yield(); + + Zenith::KeyEvent ev; + zenith::getkey(&ev); + if (!ev.pressed) continue; + + if (ev.ascii == 'q' || (ev.ctrl && ev.ascii == 'q')) + return -1; + + int sel = -1; + if (ev.ascii >= '1' && ev.ascii <= '9') sel = ev.ascii - '1'; + else if (ev.ascii == '0') sel = 9; + + if (sel >= 0 && sel < count) return sel; + } +} + +// ---- Entry point ---- + +extern "C" void _start() { + static char argbuf[1024]; // keep off stack (16KB limit) + zenith::getargs(argbuf, sizeof(argbuf)); + const char* arg = skip_spaces(argbuf); + + if (*arg == '\0') { + zenith::print("\033[1;36mwiki\033[0m - Wikipedia article viewer\n\n"); + zenith::print("Usage: wiki <title> Show article summary\n"); + zenith::print(" wiki -f <title> Show full article\n"); + zenith::print(" wiki -s <query> Search for articles\n"); + zenith::print("\nExamples:\n"); + zenith::print(" wiki Linux\n"); + zenith::print(" wiki -f C programming language\n"); + zenith::print(" wiki -s operating system\n"); + zenith::exit(0); + } + + // Parse mode flag + Mode mode = MODE_SUMMARY; + if (arg[0] == '-' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\0')) { + mode = MODE_FULL; + arg = skip_spaces(arg + 2); + } else if (arg[0] == '-' && arg[1] == 's' && (arg[2] == ' ' || arg[2] == '\0')) { + mode = MODE_SEARCH; + arg = skip_spaces(arg + 2); + } + + if (*arg == '\0') { + zenith::print("\033[1;31mError:\033[0m no article title or search query\n"); + zenith::exit(1); + } + + // Trim trailing spaces from query + static char query[512]; + int qlen = 0; + while (arg[qlen] && qlen < 511) { query[qlen] = arg[qlen]; qlen++; } + while (qlen > 0 && query[qlen - 1] == ' ') qlen--; + query[qlen] = '\0'; + + // Initialize: resolve DNS and load certs + zenith::print("\033[1;33mConnecting to Wikipedia...\033[0m\n"); + + g_serverIp = zenith::resolve(WIKI_HOST); + if (g_serverIp == 0) { + zenith::print("\033[1;31mError:\033[0m could not resolve en.wikipedia.org\n"); + zenith::exit(1); + } + + g_tas = load_trust_anchors(); + if (g_tas.count == 0) { + zenith::print("\033[1;31mError:\033[0m no CA certificates loaded\n"); + zenith::exit(1); + } + + // Allocate shared buffers + char* respBuf = (char*)malloc(RESP_MAX); + WikiLine* lines = (WikiLine*)malloc(MAX_LINES * sizeof(WikiLine)); + char* extractBuf = (char*)malloc(RESP_MAX); + if (!respBuf || !lines || !extractBuf) { + zenith::print("\033[1;31mError:\033[0m out of memory\n"); + zenith::exit(1); + } + + if (mode == MODE_SEARCH) { + // ---- Search mode ---- + static char path[2048], encoded[1024]; + url_encode_query(query, encoded, sizeof(encoded)); + snprintf(path, sizeof(path), + "/w/api.php?action=opensearch&search=%s&limit=10&format=json", + encoded); + + int respLen = wiki_fetch(path, respBuf, RESP_MAX); + if (respLen <= 0) { + zenith::print("\033[1;31mError:\033[0m no response from Wikipedia\n"); + zenith::exit(1); + } + respBuf[respLen] = '\0'; + + int headerEnd = find_header_end(respBuf, respLen); + if (headerEnd < 0) { + zenith::print("\033[1;31mError:\033[0m malformed response\n"); + zenith::exit(1); + } + + const char* body = respBuf + headerEnd; + int bodyLen = respLen - headerEnd; + + static char titles[MAX_SEARCH_RESULTS][256]; + int titleCount = parse_search_titles(body, bodyLen, titles, MAX_SEARCH_RESULTS); + + if (titleCount == 0) { + zenith::print("\033[33mNo results found for \""); + zenith::print(query); + zenith::print("\"\033[0m\n"); + zenith::exit(0); + } + + int cols = 80, rows = 25; + zenith::termsize(&cols, &rows); + + // Enter alternate screen for interactive search + zenith::print("\033[?1049h"); + zenith::print("\033[?25l"); + + bool searchRunning = true; + while (searchRunning) { + int sel = run_search(titles, titleCount, query, rows, cols); + + if (sel < 0) { + searchRunning = false; + break; + } + + // Show loading message on search screen + sb_reset(); + int infoRow = 6 + titleCount + 2; + sb_cursor_to(infoRow, 3); + sb_puts("\033[2K\033[1;33mFetching \""); + sb_puts(titles[sel]); + sb_puts("\"...\033[0m"); + sb_flush(); + + // Fetch selected article summary + static char articlePath[2048], articleEncoded[1024]; + url_encode_title(titles[sel], articleEncoded, sizeof(articleEncoded)); + snprintf(articlePath, sizeof(articlePath), + "/api/rest_v1/page/summary/%s", articleEncoded); + + respLen = wiki_fetch(articlePath, respBuf, RESP_MAX); + if (respLen <= 0) { + sb_reset(); + sb_cursor_to(infoRow, 3); + sb_puts("\033[2K\033[1;31mFetch failed. Press any key.\033[0m"); + sb_flush(); + while (!zenith::is_key_available()) zenith::yield(); + Zenith::KeyEvent ev; zenith::getkey(&ev); + continue; + } + respBuf[respLen] = '\0'; + + headerEnd = find_header_end(respBuf, respLen); + if (headerEnd < 0) continue; + + int statusCode = parse_status_code(respBuf, headerEnd); + body = respBuf + headerEnd; + bodyLen = respLen - headerEnd; + + if (statusCode == 404) { + sb_reset(); + sb_cursor_to(infoRow, 3); + sb_puts("\033[2K\033[1;31mArticle not found. Press any key.\033[0m"); + sb_flush(); + while (!zenith::is_key_available()) zenith::yield(); + Zenith::KeyEvent ev; zenith::getkey(&ev); + continue; + } + + static char title[512], description[512]; + extract_json_string(body, bodyLen, "title", title, sizeof(title)); + extract_json_string(body, bodyLen, "description", description, sizeof(description)); + int extractLen = extract_json_string(body, bodyLen, "extract", + extractBuf, RESP_MAX - 1); + + if (extractLen > 0) { + int totalLines = build_lines(lines, MAX_LINES, + title, description, extractBuf, extractLen, cols, false); + // Run pager without alt screen (we're already in one) + run_pager(lines, totalLines, title, "Summary", false); + } + // Loop back to re-render search results + } + + // Exit alternate screen + zenith::print("\033[?25h"); + zenith::print("\033[?1049l"); + + } else { + // ---- Summary or Full Article mode ---- + static char path[2048], encoded[1024]; + if (mode == MODE_SUMMARY) { + url_encode_title(query, encoded, sizeof(encoded)); + snprintf(path, sizeof(path), + "/api/rest_v1/page/summary/%s", encoded); + } else { + url_encode_title(query, encoded, sizeof(encoded)); + snprintf(path, sizeof(path), + "/w/api.php?action=query&format=json&formatversion=2" + "&prop=extracts&explaintext=1&titles=%s", encoded); + } + + int respLen = wiki_fetch(path, respBuf, RESP_MAX); + if (respLen <= 0) { + zenith::print("\033[1;31mError:\033[0m no response from Wikipedia\n"); + zenith::exit(1); + } + respBuf[respLen] = '\0'; + + int headerEnd = find_header_end(respBuf, respLen); + if (headerEnd < 0) { + zenith::print("\033[1;31mError:\033[0m malformed response\n"); + zenith::exit(1); + } + + int statusCode = parse_status_code(respBuf, headerEnd); + const char* body = respBuf + headerEnd; + int bodyLen = respLen - headerEnd; + + if (statusCode == 404) { + zenith::print("\033[1;31mArticle not found:\033[0m "); + zenith::print(query); + zenith::putchar('\n'); + zenith::exit(1); + } + + static char title[512], description[512]; + extract_json_string(body, bodyLen, "title", title, sizeof(title)); + if (mode == MODE_SUMMARY) + extract_json_string(body, bodyLen, "description", description, sizeof(description)); + else + description[0] = '\0'; + + int extractLen = extract_json_string(body, bodyLen, "extract", + extractBuf, RESP_MAX - 1); + + if (extractLen == 0) { + zenith::print("\033[1;31mArticle not found:\033[0m "); + zenith::print(query); + zenith::putchar('\n'); + zenith::exit(1); + } + + int cols = 80; + zenith::termsize(&cols, nullptr); + + int totalLines = build_lines(lines, MAX_LINES, + title, description, extractBuf, extractLen, + cols, mode == MODE_FULL); + + const char* modeLabel = (mode == MODE_FULL) ? "Full Article" : "Summary"; + run_pager(lines, totalLines, title, modeLabel, true); + } + + zenith::exit(0); +} diff --git a/programs/src/wiki/obj/main.o b/programs/src/wiki/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..42a39035cdfeff1eb5c19a71f6e717df877b1d1e GIT binary patch literal 248496 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%0A6-~5a@kWt$ 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 S_o}IWVy)L3-THB{_5UBeSrMfG literal 0 HcmV?d00001