From caa7718af9d063698ca5c6837158bb4a09455463 Mon Sep 17 00:00:00 2001 From: Tiberiu Chibici Date: Tue, 14 Sep 2021 18:51:43 +0300 Subject: [PATCH] [GOOD] BUILD 0.1.0.551 DATE 9/03/2011 AT 9:25 AM ==================================================== Mainly changed: HAL.FSs + Updated 'mount' call in floppy driver, now done after controller is initialized + Added 'detect' function for FAT file systems + Implemented 'initdr' driver, however still bugged + Improved logger --- .cproject | 2 +- Build/main.o | Bin 1264 -> 1484 bytes Kernel/debug/commands.c | 69 ++++++++- Kernel/debug/console.c | 2 + Kernel/debug/logger.c | 122 ++++++++++++++++ Kernel/drivers/drivers.c | 4 +- Kernel/drivers/floppy/floppy.c | 102 ++++++++++--- Kernel/drivers/floppy/floppy.h | 6 + Kernel/hal/filesys/fat/fat.c | 80 ++++++++++ Kernel/hal/filesys/fat/fat.h | 135 +++++++++++++++++ Kernel/hal/filesys/fat/fat12.c | 25 ++++ Kernel/hal/filesys/fat/fat16.c | 26 ++++ Kernel/hal/filesys/fat/fat32.c | 26 ++++ Kernel/hal/filesys/fat12.c | 8 - Kernel/hal/filesys/initrd/initrd.c | 202 ++++++++++++++++++++++++++ Kernel/hal/filesys/initrd/initrd.h | 56 +++++++ Kernel/hal/hal.c | 19 ++- Kernel/hal/{reboot.c => system.c} | 13 +- Kernel/hal/vfs.c | 28 ++-- Kernel/include/debugio.h | 30 +--- Kernel/include/fileio.h | 24 ++- Kernel/include/memory-add.h | 5 - Kernel/include/settings.h | 6 +- Kernel/include/stdlib.h | 1 + Kernel/include/version.h | 2 +- Kernel/library/memory/memory_alloc.c | 6 +- Kernel/library/memory/memory_free.c | 2 +- Kernel/library/memory/memory_init.c | 8 +- Kernel/library/stdlib/str_ops.c | 14 ++ Kernel/main.c | 18 ++- Kernel/memory/mem-paging.c | 8 +- Kernel/memory/mem-phys.c | 4 +- Modules/Rom image maker/langspecs.txt | 14 ++ build.sh | 2 +- build/console.o | Bin 9680 -> 11224 bytes build/drivers.o | Bin 1596 -> 1640 bytes build/fat.o | Bin 0 -> 1756 bytes build/fat12.o | Bin 549 -> 1000 bytes build/fat16.o | Bin 0 -> 1000 bytes build/fat32.o | Bin 0 -> 1000 bytes build/floppy.o | Bin 7228 -> 8576 bytes build/hal.o | Bin 2120 -> 2180 bytes build/initrd.o | Bin 0 -> 3556 bytes build/logger.o | Bin 0 -> 2364 bytes build/mem-paging.o | Bin 2228 -> 2172 bytes build/mem-phys.o | Bin 2748 -> 2720 bytes build/memory_alloc.o | Bin 2980 -> 2888 bytes build/memory_free.o | Bin 1340 -> 1304 bytes build/memory_init.o | Bin 2500 -> 2432 bytes build/reboot.o | Bin 1004 -> 0 bytes build/str_ops.o | Bin 1284 -> 1552 bytes build/system.o | Bin 0 -> 1100 bytes build/vfs.o | Bin 4360 -> 4584 bytes change.log | 8 + filelistC.txt | 21 ++- kernel.bin | Bin 57368 -> 62513 bytes luxos.img | Bin 1474560 -> 0 bytes scripts/run.bat | 3 +- scripts/version.txt | 2 +- 59 files changed, 991 insertions(+), 112 deletions(-) create mode 100644 Kernel/debug/logger.c create mode 100644 Kernel/hal/filesys/fat/fat.c create mode 100644 Kernel/hal/filesys/fat/fat.h create mode 100644 Kernel/hal/filesys/fat/fat12.c create mode 100644 Kernel/hal/filesys/fat/fat16.c create mode 100644 Kernel/hal/filesys/fat/fat32.c delete mode 100644 Kernel/hal/filesys/fat12.c create mode 100644 Kernel/hal/filesys/initrd/initrd.c create mode 100644 Kernel/hal/filesys/initrd/initrd.h rename Kernel/hal/{reboot.c => system.c} (78%) create mode 100644 Modules/Rom image maker/langspecs.txt create mode 100644 build/fat.o create mode 100644 build/fat16.o create mode 100644 build/fat32.o create mode 100644 build/initrd.o create mode 100644 build/logger.o delete mode 100644 build/reboot.o create mode 100644 build/system.o delete mode 100644 luxos.img diff --git a/.cproject b/.cproject index 8d7bfa2..4a4e660 100644 --- a/.cproject +++ b/.cproject @@ -27,7 +27,7 @@ - diff --git a/Build/main.o b/Build/main.o index c9b39ef13ba72d4f7e264a4996d2eecdc2c17ae2..7afe33785cc53381899f0c3cac49b84e33ab8e21 100644 GIT binary patch literal 1484 zcma)6&ubG=5S~re8e_Z0QbcIMEkvjYk5*!#f@n;CO4~zgZJ}V;Hm~jCZX&x|X^PZC z@JG!*;?bk%MQE{y{srFj=0OlaJctnI+uc{U@t^~5zxn3P%*)K1m&aq%bkjFtNJxZ3L&ytDn*27qExzO4ou80Trvw{SPT*MASH{oJxAK3jMm$!>(9B)LALdU zJ46j&(a1bY6^+iP>7tQq=q1BU)r}k*_IT%g(a;ZwgkN_9YlSiJBHU1#Cmj*Ut$;+u z3M>*UzE8rdfxvr66pqs&600@Wl~s;FtlTKCd6p~VpY&gFfxU2L9kDm=EvzNxVOLr2 z<#j5y0h|*=ON^&^As&9XiHk8$GeTZRaP(FAF0%#x|MEkRk^c%W2=euZTJ%9a?B9q{ z`F&s>P6i_cK3KCcA}{0lanVe3THu*XM(@tpg}fvvW|0*FBj{{d>?t^1>2RVe2Obf+I9NYQg-0+mkgdf z0bErbMWu<0O-TA^iqwAc1`vPp=uR5!(#_SLNyMWr_10hp?}ri#_^=|3;1g|pp^dM# z@y#~A)5giQ?5bF$`(-Fpmeq>-YbZI=@@Pi7HLre0x(}wRc3@kMy)9#7!Z2w$3Fd5W zfq9jwsvlU6L!+MkPa!WgiN=r+(Gngenp dF^ef~N|{mPt62x~!}ek40o(%eu$w?0?B8dm%j5t6 delta 522 zcmX@Z{eg3WLXZI?0~nZqNeu=b22O_NH!?5&{Qv*|IExBM6wK~+QBmk*Q310N1hNXS zX!8-7iQAMXKGYT$0qT?i8_K|752Bs<6sq}HCfhSQPVQ%Pn0$dzgwcNTQ$}UZ1uP5< z9zX?LlLeXN8A~P`GO2?}@yP{D0zg(HlRT#Z)TF7CFEWX{`T%(#cQZjnR{&|43Xl-c zKrjHA$_ZtIs24y94j|11#O#xGnWb5809j#^eVLVc1(+Ea1b~Ke14TF{*8=4ffU0XJ z&t+~jW(SHP05by{*c6Zm$Y(-8x9}sR83cfAnaPPP{(>oJqJ@($vd9TK=jRpY=cGF4 zq$Uyb}7m%OD!t)%quQQ%*kPZstGU3EJ=lNd=oSCKn8+*#{~2i$fb-x xuYl}h0&+m1&BVjNpa`OQ85q<+G#>+lE|6wqWneG@@qrFC2hl)H3LqL7gaDaaW|05@ diff --git a/Kernel/debug/commands.c b/Kernel/debug/commands.c index 7393ead..2782440 100644 --- a/Kernel/debug/commands.c +++ b/Kernel/debug/commands.c @@ -4,6 +4,7 @@ #include #include "../hal/mouse/mouse.h" #include "../drivers/floppy/floppy.h" +#include string ConsoleCommands[] = { @@ -18,9 +19,11 @@ string ConsoleCommands[] = "read", "reboot", "restart", + "dir", + "cat" }; -int32 ConsoleCommandsCount = 11; +int32 ConsoleCommandsCount = 13; /***************************************** * osver - get os info * @@ -253,3 +256,67 @@ void CommandRead(string argv[], int32 argc) uint32 sector = ConvertStringToUInt(argv[1]); ConsoleWrite("Returned value: 0x%x\n", FloppyRead(0, sector)); } + + +extern MountPoint* mpArray; +extern uint32 mpCount; +void CommandDir (string argv[], int32 argc) +{ + if (argc < 2) + { + ConsoleWrite ("Content of root: \n\n"); + uint32 i = 0; + + for (i = 0; i < mpCount; i++) + ConsoleWrite ("\t\t[DEV] %s\n", mpArray[i].Name); + + return; + } + + DirectoryEntry* temp = VfsTest(argv[1]); + + if (temp == NULL) + { + ConsoleWrite("%#! Invalid path!\n", ColorLightRed); + return; + } + + ConsoleWrite ("Content of directory %#%s:\n\n", ColorWhite, argv[1]); + + FILE dir; VfsOpen(&dir, argv[1]); + uint32 i; + + temp = VfsReadDirectory(&dir,0); + for (i = 1; temp != NULL; i++, temp = VfsReadDirectory(&dir, 0)) + { + ConsoleWrite ("\t\t[%s] ", (temp->Flags & 0x1) ? "FIL" : "DIR" ); + ConsoleWrite ("%s", temp->Name); + Point p = {60, -1}; ConsoleCursorGoto(p); + ConsoleWrite ("%u bytes\n", temp->Size); + } + + VfsClose(&dir); +} + +void CommandCat (string argv[], int32 argc) +{ + if (argc < 2) { + ConsoleWrite("%#! Missing parameter - complete file path.\n", ColorLightRed); + return; + } + + ConsoleWrite("Contents of file %s:\n--------------------------\n"); + FILE f; + VfsOpen(&f, argv[1]); + uint8* buffer = kmalloc(0x1000); + uint32 sz, i; + + while ((sz = VfsRead(&f, 1, 0x1000, buffer))) + { + for (i = 0; i < sz; i++) ConsoleWrite("%c", buffer[i]); + } + + ConsoleWrite("\n--------------------------\n"); + kfree(buffer); + VfsClose(&f); +} diff --git a/Kernel/debug/console.c b/Kernel/debug/console.c index b98ba17..4d819df 100644 --- a/Kernel/debug/console.c +++ b/Kernel/debug/console.c @@ -71,6 +71,8 @@ void _process_command (string params[CONSOLE_MAX_PARAMS], int32 count) case 8: CommandRead(params, count); break; case 9: case 10: SystemReboot(); break; + case 11: CommandDir(params, count); break; + case 12: CommandCat(params, count); break; default: ConsoleWrite ("%#! Command %#%s%# was not implemented (yet)!\n", Color(0,ColorLightRed), Color(0,ColorWhite), params[0], Color(0,ColorLightRed)); break; diff --git a/Kernel/debug/logger.c b/Kernel/debug/logger.c new file mode 100644 index 0000000..9548277 --- /dev/null +++ b/Kernel/debug/logger.c @@ -0,0 +1,122 @@ +/* + * logger.c + * + * Created on: Sep 2, 2011 + * Author: Tiberiu + */ +#include +#include + +string LogAllowedDevices[] = { + "drivers", + //"floppy", + "hal", + "fat", + "initrd", + "system", + "vfs", + //"mem", + "console", + 0x0, + 0x0 +}; + + +extern uint8 ConsoleDefaultColor; +extern void _write_char(char c); +extern void _write_string (string s); + +int32 LogWrite (uint8 error, string device, string format, ...) +{ + if (!format || !*format || !device || !*device) return 0; + + // Print logged information + va_list args; + va_start (args, format); + uint32 i, len = strlen(format); + uint8 temp_color = ConsoleDefaultColor; + + // Check if device is allowed. Errors are allowed + uint8 allowed = error; + for (i = 0; LogAllowedDevices[i] != 0 && !allowed; i++) + if (strcasecmp(device, LogAllowedDevices[i]) == 0) allowed = 1; + + if (allowed) + { + ConsoleDefaultColor = (error) ? Color(ColorRed, ColorWhite) : (1 + (i % 15)) ; + _write_char('['); + _write_string(device); + _write_char(']'); + + ConsoleDefaultColor = temp_color; + _write_char(' '); + } + + for (i = 0; i < len; i++) + if (format[i] != '%' && allowed) _write_char(format[i]); + else + { + ++i; + switch (format[i]) { + // Character + case 'c': { + char c = va_arg (args, char); + if (allowed) _write_char(c); + break; + } + + // String + case 's': { + int32* c = (int32*) va_arg (args, string); + if (allowed) _write_string((string)c); + break; + } + + // Integers + case 'd': + case 'i': { + int32 c = va_arg(args, int32); char temp[32]; + if (allowed) { + ConvertIntToString(temp, c, 10); + _write_string(temp); + } + break; + } + + // Integers - hex + case 'X': + case 'x': { + int32 c = va_arg(args, int32); char temp[32]; + if (allowed) { + ConvertUIntToString(temp, c, 16); + _write_string(temp); + } + break; + } + + // Integers - unsigned + case 'u': { + int32 c = va_arg(args, uint32); char temp[32]; + if (allowed) { + ConvertUIntToString (temp, c, 10); + _write_string(temp); + } + break; + } + + // Colors + case '#': { + uint8 c = va_arg(args, uint8); + ConsoleDefaultColor = c; + break; } + + default: va_end(args); return 1; + }; + } + + va_end(args); + + ConsoleDefaultColor = 0x7; + ConsoleCursorUpdateHardware(); + return i; +} diff --git a/Kernel/drivers/drivers.c b/Kernel/drivers/drivers.c index fd4e1ff..ea27307 100644 --- a/Kernel/drivers/drivers.c +++ b/Kernel/drivers/drivers.c @@ -5,6 +5,7 @@ #include "time.h" #include "../hal/cpu/irq.h" #include +#include void DriversInstall_Clock() { @@ -17,8 +18,7 @@ void DriversInstall_Clock() TimeSetInternalTime(ConvertTimeToTimeSystem(time)); - Log("%#[Drivers] %#Read RTC time: ", ColorWhite, ColorLightGray); - Log("%#%u/%u/%u %u:%u:%u.%u\n", ColorLightCyan, time.Month, time.Day, + Log("Drivers", "Read RTC time: %#%u/%u/%u %u:%u:%u.%u\n", ColorLightCyan, time.Month, time.Day, time.Year, time.Hour, time.Minute, time.Second, time.Milisecond); } diff --git a/Kernel/drivers/floppy/floppy.c b/Kernel/drivers/floppy/floppy.c index caa5999..2bbce86 100644 --- a/Kernel/drivers/floppy/floppy.c +++ b/Kernel/drivers/floppy/floppy.c @@ -7,9 +7,10 @@ #include #include -#include +#include #include #include +#include #include "floppy.h" #include "../dma/dma.h" #include "../cmos/cmos.h" @@ -54,7 +55,7 @@ void FloppyWaitIrq() while (!FloppyIrqFired && !TimerIsDone()); if (!FloppyIrqFired) { - Error("%#[Floppy] %#Irq timeout [%ums] !\n", ColorBrown, ColorLightRed, fdTypes[4].InterruptTimeout); + Error("Floppy", "Irq timeout [%ums] !\n", fdTypes[4].InterruptTimeout); } } @@ -73,17 +74,12 @@ void FloppyInitialize() if (fd1 > 6) fd1 = 0; if (!fd0 && !fd1) { - Error("%#[Floppy] %#No supported floppy drives found.", ColorBrown, ColorLightRed); + Error("Floppy", "No supported floppy drives found."); outportb(FloppyRegisterDigitalOutput, 0); return; } - Log("%#[Floppy] %#Detected floppy drives:", ColorBrown, ColorLightGray); - if (fd0) Log(" %#fd0=%#%s", ColorLightCyan, Color(ColorCyan, ColorWhite), fdTypes[fd0].Name); - if (fd1) Log(" %#fd1=%#%s", ColorLightCyan, Color(ColorCyan, ColorWhite), fdTypes[fd1].Name); - Log("\n"); - - + Log("Floppy", "Detected floppy drives: %#fd0=%#%s %#fd1=%#%s\n", ColorLightCyan, Color(ColorCyan, ColorWhite), fdTypes[fd0].Name, ColorLightCyan, Color(ColorCyan, ColorWhite), fdTypes[fd1].Name); // Reset floppy controller FloppyReset(); @@ -106,6 +102,11 @@ void FloppyInitialize() // Initialize DMA FloppyInitDma(); + + // Mount + if (fd0) VfsMount("fd0", Floppy0ReadRoutine, Floppy0WriteRoutine, Min (fdTypes[fd0].SectorsPerTrack * 512, 0x2400)); + if (fd1) VfsMount("fd1", Floppy1ReadRoutine, Floppy1WriteRoutine, Min (fdTypes[fd1].SectorsPerTrack * 512, 0x2400)); + } void FloppyInitDma() @@ -127,7 +128,7 @@ void FloppyReset() { FloppyIrqFired = 0; int32 i = 0; - Log("%#[Floppy] %#Resetting...\n", ColorBrown, ColorLightGray); + Log("Floppy", "Resetting...\n"); // Clear reset bit from DOR outportb(FloppyRegisterDigitalOutput, 0); @@ -226,7 +227,7 @@ void FloppyMotor (uint8 fd_number, uint8 status) if (status) TimerStart(fdTypes[fd].Spinup); else TimerStart(fdTypes[fd].Spindown); - Log("%#[Floppy] %#Waiting for motor...\n", ColorBrown, ColorLightGray); + Log("Floppy", "Waiting for motor...\n"); while (!TimerIsDone()); } @@ -259,7 +260,7 @@ void FloppyRecalibrate(uint8 fd_number) uint8 st0, cyl, timeout = 10; do { - Log("%#[Floppy] %#Recalibrating: attempt %u/10\n", ColorBrown, ColorLightGray, 11-timeout); + Log("Floppy", "Recalibrating: attempt %u/10\n", 11-timeout); FloppyIrqFired = 0; FloppySendCommand(FloppyCommandRecalibrate); FloppySendCommand(fd_number); @@ -281,7 +282,7 @@ void FloppySeek(uint8 fd_number, uint8 cylinder, uint8 head) uint8 st0, cyl, timeout = 10; do { - Log("%#[Floppy] %#Seeking: attempt %u/10\n", ColorBrown, ColorLightGray, 11-timeout); + Log("Floppy", "Seeking: attempt %u/10\n", 11-timeout); FloppyIrqFired = 0; FloppySendCommand(FloppyCommandSeek); FloppySendCommand(head<<2 | fd_number); @@ -309,7 +310,7 @@ void FloppyRW(uint8 isWrite, uint8 fd_number, uint8 head, uint8 cylinder, uint8 do { error = 0; - Log("%#[Floppy] %#Read/write operation: attempt %u/10\n", ColorBrown, ColorLightGray, 11-timeout); + Log("Floppy", "Read/write operation: attempt %u/10\n", 11-timeout); FloppyIrqFired = 0; if (isWrite) FloppySendCommand(FloppyCommandWriteData | FloppyModeMultitrack | FloppyModeMagneticEncoding); @@ -332,7 +333,7 @@ void FloppyRW(uint8 isWrite, uint8 fd_number, uint8 head, uint8 cylinder, uint8 // Disk is write protected, don't try again if (result[1] & 2) { - Error("%#[Floppy] %#Error: disk is write protected!\n", ColorBrown, ColorLightRed); + Error("Floppy", "Error: disk is write protected!\n"); return; } @@ -354,7 +355,7 @@ uint32 FloppyRead(uint8 drive, uint32 lba) // Convert LBA to CHS uint32 cyl=0, head=0, sect=1; ConvertLbaToChs(fdTypes[fd].SectorsPerTrack, lba, &cyl, &head, §); - Log("%#[Floppy] %#Converted LBA=%u to Cyl=%u Head=%u Sect=%u\n", ColorBrown, ColorLightGray, lba, cyl, head, sect); + Log("Floppy", "Converted LBA=%u to Cyl=%u Head=%u Sect=%u\n", lba, cyl, head, sect); FloppyInitDma(); @@ -381,4 +382,71 @@ uint32 FloppyRead(uint8 drive, uint32 lba) return 0x1000; } -// Log("%#[Drivers] %#Initializing blah blah %d...", ColorWhite, ColorLightGray,PIT_FREQUENCY); +uint32 FloppyWrite(uint8 drive, uint32 lba) +{ + if (drive >= 2) return 0; + uint8 fd = (drive == 0) ? fd0 : fd1; + + // Convert LBA to CHS + uint32 cyl=0, head=0, sect=1; + ConvertLbaToChs(fdTypes[fd].SectorsPerTrack, lba, &cyl, &head, §); + Log("Floppy", "Converted LBA=%u to Cyl=%u Head=%u Sect=%u\n", lba, cyl, head, sect); + + FloppyInitDma(); + + // Reset drive if necessary + if ((inportb(FloppyRegisterMainStatus) & 0xC0) != 0x80) + FloppyReset(); + + // Start motor, select drive + FloppyMotor(drive, 1); + FloppySelectDrive(drive); + + // Seek to correct location + FloppySeek(drive, cyl, head); + + // Start DMA write + DmaMaskChannel(2); + DmaSetMode(2, 0x4A); + DmaUnmaskChannel(2); + + FloppyRW(0, drive, head, cyl, sect); + + FloppyMotor(drive, 0); + + return 0x1000; +} + + +/*** Theses are for the VFS ***/ +uint32 Floppy0ReadRoutine (uint32 offset, void* buffer) +{ + uint32 ret = FloppyRead(0, offset); + + if (!ret) return NULL; + memcpy(buffer, (const void*) ret, 0x2400); + + return (uint32)buffer; +} + +uint32 Floppy1ReadRoutine (uint32 offset, void* buffer) +{ + uint32 ret = FloppyRead(1, offset); + + if (!ret) return NULL; + memcpy(buffer, (const void*) ret, 0x2400); + + return (uint32)buffer; +} + +uint32 Floppy0WriteRoutine (uint32 offset, void* buffer) +{ + memcpy((void*)0x1000, buffer, 0x2400); + return FloppyWrite(0, offset); +} + +uint32 Floppy1WriteRoutine (uint32 offset, void* buffer) +{ + memcpy((void*)0x1000, buffer, 0x2400); + return FloppyWrite(1, offset); +} diff --git a/Kernel/drivers/floppy/floppy.h b/Kernel/drivers/floppy/floppy.h index 1f1e8c7..de4154d 100644 --- a/Kernel/drivers/floppy/floppy.h +++ b/Kernel/drivers/floppy/floppy.h @@ -82,5 +82,11 @@ extern void FloppySelectDrive(uint8 number); extern void FloppyRecalibrate(uint8 fd_number); extern void FloppyRW(uint8 isWrite, uint8 fd_number, uint8 head, uint8 cylinder, uint8 sector); extern uint32 FloppyRead(uint8 drive, uint32 lba); +extern uint32 FloppyWrite(uint8 drive, uint32 lba); + +extern uint32 Floppy0ReadRoutine (uint32 offset, void* buffer); +extern uint32 Floppy1ReadRoutine (uint32 offset, void* buffer); +extern uint32 Floppy0WriteRoutine (uint32 offset, void* buffer); +extern uint32 Floppy1WriteRoutine (uint32 offset, void* buffer); #endif /* FLOPPY_H_ */ diff --git a/Kernel/hal/filesys/fat/fat.c b/Kernel/hal/filesys/fat/fat.c new file mode 100644 index 0000000..8961ae6 --- /dev/null +++ b/Kernel/hal/filesys/fat/fat.c @@ -0,0 +1,80 @@ +/* + * fat.c + * + * Created on: Aug 31, 2011 + * Author: Tiberiu + */ + +#include +#include +#include "fat.h" + +// Buffer should contain boot sector +uint32 FatDetect (void* buffer) +{ + FatBootSector* boot = (FatBootSector*)buffer; + uint32 correct_features = 0; + uint32 total_features = 0; + + // Try the asm 'jmp' instruction + if ((boot->bpb.AsmJmp[0] == 0x6B || boot->bpb.AsmJmp[0]==0xEB) && boot->bpb.AsmJmp[2] == 0x90) + correct_features++; + total_features ++; + + // Try the OemId. First char is often 'm' or 'M' (mkdosfs or MSDOS??/MSWIN??) + if (boot->bpb.OemId[0] == 'm' || boot->bpb.OemId[0] == 'M') correct_features++; + total_features ++; + + // Try the bytes per sector. Most often, it is 512. + if (boot->bpb.BytesPerSector == 512) correct_features++; + total_features ++; + + // Try the sectors per cluster. This is always a power of 2. + uint8 sectclust = boot->bpb.SectorsPerCluster; + uint8 count = 0; + while (sectclust) { count += sectclust&1; sectclust>>=1; } + if (count != 1) return 0; + + // Number of fats, can be 2 or (rarely) 1. Important feature. + if (boot->bpb.FatsCount == 1 || boot->bpb.FatsCount == 2) correct_features+=2; + total_features+=2; + + // This tells us what type of disk this is. Usually values are above 0xf0. + if (boot->bpb.MediaDescriptorType >= 0xF0) correct_features++; + total_features++; + + // Calculate number of clusters + uint32 clusters = (boot->bpb.TotalSectors * boot->bpb.SectorsPerCluster); + if (clusters == 0) clusters = (boot->bpb.TotalSectorsLarge * boot->bpb.SectorsPerCluster); + // Calculate fat type + uint32 fat = (clusters < 4085) ? 12 : 16 ; + if (clusters > 65524) fat = 32; + + + // Try the extended info + if (fat == 32) { + if (boot->ext.fat32.Signature == 0x28 || boot->ext.fat32.Signature == 0x29) correct_features++; + total_features++; + } + + else { + if (boot->ext.fat16.Signature == 0x28 || boot->ext.fat16.Signature == 0x29) correct_features++; + total_features++; + } + + Log("Fat", "Correct features: %u out of %u. Type should be fat%u.\n", correct_features, total_features, fat); + // See what we have. + if (correct_features > (total_features/2)) return 0; // insuficcient correct features? + + return fat; // return FAT type +} + + +void FatInstall() +{ + FileSystem fat12 = {0, "fat12", Fat12Detect, 0,0,0,0,0,0,0,0}; + FileSystem fat16 = {0, "fat16", Fat16Detect, 0,0,0,0,0,0,0,0}; + FileSystem fat32 = {0, "fat32", Fat32Detect, 0,0,0,0,0,0,0,0}; + + VfsInstallFs(&fat12); VfsInstallFs(&fat16); VfsInstallFs(&fat32); +} diff --git a/Kernel/hal/filesys/fat/fat.h b/Kernel/hal/filesys/fat/fat.h new file mode 100644 index 0000000..0a9d3af --- /dev/null +++ b/Kernel/hal/filesys/fat/fat.h @@ -0,0 +1,135 @@ +/* + * fat.h + * + * Created on: Aug 31, 2011 + * Author: Tiberiu + */ + +#ifndef FAT_H_ +#define FAT_H_ + +#include + +/******************************************************* + * FAT: Bios Parameter Block * + *******************************************************/ +typedef struct { + uint8 AsmJmp[3]; + char OemId[8]; + uint16 BytesPerSector; + uint8 SectorsPerCluster; + uint16 ReservedSectors; + uint8 FatsCount; + uint16 DirectoryEntriesCount; + uint16 TotalSectors; + uint8 MediaDescriptorType; + uint32 SectorsPerFat; + uint16 SectorsPerTrack; + uint16 Heads; + uint32 HiddenSectors; + uint32 TotalSectorsLarge; +} __attribute__((packed)) FatBiosParameterBlock ; + +/******************************************************* + * FAT12/FAT16: Extended boot record * + *******************************************************/ +typedef struct { + uint8 DriveNumber; // Useless + uint8 NtFlags; + uint8 Signature; // Must be 0x28/0x29 + uint32 VolumeIdSerial; + char VolumeLabel[11]; + char SystemId[8]; +} __attribute__((packed)) Fat16ExtendedBootRecord; // fat12 or 16 + +/******************************************************* + * FAT32: Extended boot record * + *******************************************************/ +typedef struct { + uint32 SectorsPerFat; + uint16 Flags; + uint16 FatVersion; // High byte=major version, low=minor + uint32 RootDirectoryCluster; + uint16 FsInfoCluster; + uint16 BackupBootSectorCluster; + uint8 Reserved[12]; // Should be set to 0 when formatting + uint8 DriveNumber; + uint8 NtFlags; + uint8 Signature; // Must be 0x28/0x29 + uint32 VolumeIdSerial; + char VolumeLabel[11]; + char SystemId[8]; // Always "FAT32 " +} __attribute__((packed)) Fat32ExtendedBootRecord; + +/******************************************************* + * FAT: Extended boot record (union of above 2 fields) * + *******************************************************/ +union FatExtendedBootRecord +{ + Fat16ExtendedBootRecord fat16; + Fat32ExtendedBootRecord fat32; +}; + +/******************************************************* + * FAT: Complete boot sector info * + *******************************************************/ +typedef struct { + FatBiosParameterBlock bpb; + union FatExtendedBootRecord ext; +} __attribute__((packed)) FatBootSector; + + +/******************************************************* + * FAT: Directory entry * + *******************************************************/ +typedef struct { + char FileName[8]; + char FileExt[3]; + uint8 Attributes; + uint8 _reserved; + uint8 CreateTimeFine; // hundreds (0.01) of a second, up to 199 + uint16 CreateTime; // 15-11 hour; 10-5 mins; 4-0 secs/2; + uint16 CreateDate; // 15-9 year (since 1980); 8-5 mon; 4-0 day + uint16 AccessDate; + + uint16 FirstClusterHigh; // Fat32; EA-index in fat12,fat16 + + uint16 LastModifiedTime; + uint16 LastModifiedDate; + + uint16 FirstClusterLow; + uint32 Size; +} __attribute__((packed)) FatDirectoryEntry; + + +/******************************************************* + * FAT: Long file name entry * + *******************************************************/ +typedef struct { + uint8 SequenceNo; + uint16 Name1[5]; // Encoded in UTF-16 + uint8 Attributes; // Should be 0xF; + uint8 _reserved; + uint16 Name2[6]; + uint16 FirstCluster;// Should be 0x0000 + uint16 Name3[2]; +} FatLongFileName; + + +/******************************************************* + * FAT: Directory entry (union of above 2 fields) * + *******************************************************/ +union FatDirEntryUnion { + FatDirectoryEntry d; + FatLongFileName lfn; +}; + + +extern uint32 FatDetect (void* buffer); +extern void FatInstall(); + +extern uint32 Fat12Detect (DevReadRoutine r, uint32 blocksz); +extern uint32 Fat16Detect (DevReadRoutine r, uint32 blocksz); +extern uint32 Fat32Detect (DevReadRoutine r, uint32 blocksz); + +#endif /* FAT_H_ */ diff --git a/Kernel/hal/filesys/fat/fat12.c b/Kernel/hal/filesys/fat/fat12.c new file mode 100644 index 0000000..83ebbd5 --- /dev/null +++ b/Kernel/hal/filesys/fat/fat12.c @@ -0,0 +1,25 @@ +/* + * fat12.c + * + * Created on: Aug 29, 2011 + * Author: Tiberiu + */ +#include +#include +#include "fat.h" + +uint32 Fat12Detect (DevReadRoutine r, uint32 blocksz) +{ + if (!r) return 0; + + // Allocate buffer and call read routine + void* buffer = kmalloc(blocksz); + if (!(*r)(0,buffer)) return 0; + + // Result of detection + uint32 res = FatDetect(buffer); + + // Cleanup + kfree(buffer); + return (res == 12); +} diff --git a/Kernel/hal/filesys/fat/fat16.c b/Kernel/hal/filesys/fat/fat16.c new file mode 100644 index 0000000..8db1269 --- /dev/null +++ b/Kernel/hal/filesys/fat/fat16.c @@ -0,0 +1,26 @@ +/* + * fat16.c + * + * Created on: Aug 31, 2011 + * Author: Tiberiu + */ +#include +#include +#include "fat.h" + +uint32 Fat16Detect (DevReadRoutine r, uint32 blocksz) +{ + if (!r) return 0; + + // Allocate buffer and call read routine + void* buffer = kmalloc(blocksz); + if (!(*r)(0,buffer)) return 0; + + // Result of detection + uint32 res = FatDetect(buffer); + + // Cleanup + kfree(buffer); + return (res == 16); +} + diff --git a/Kernel/hal/filesys/fat/fat32.c b/Kernel/hal/filesys/fat/fat32.c new file mode 100644 index 0000000..3350cba --- /dev/null +++ b/Kernel/hal/filesys/fat/fat32.c @@ -0,0 +1,26 @@ +/* + * fat32.c + * + * Created on: Aug 31, 2011 + * Author: Tiberiu + */ +#include +#include +#include "fat.h" + +uint32 Fat32Detect (DevReadRoutine r, uint32 blocksz) +{ + if (!r) return 0; + + // Allocate buffer and call read routine + void* buffer = kmalloc(blocksz); + if (!(*r)(0,buffer)) return 0; + + // Result of detection + uint32 res = FatDetect(buffer); + + // Cleanup + kfree(buffer); + return (res == 32); +} + diff --git a/Kernel/hal/filesys/fat12.c b/Kernel/hal/filesys/fat12.c deleted file mode 100644 index df8ad6d..0000000 --- a/Kernel/hal/filesys/fat12.c +++ /dev/null @@ -1,8 +0,0 @@ -/* - * fat12.c - * - * Created on: Aug 29, 2011 - * Author: Tiberiu - */ - - diff --git a/Kernel/hal/filesys/initrd/initrd.c b/Kernel/hal/filesys/initrd/initrd.c new file mode 100644 index 0000000..ac1da20 --- /dev/null +++ b/Kernel/hal/filesys/initrd/initrd.c @@ -0,0 +1,202 @@ +/* + * initrd.c + * + * Created on: Sep 1, 2011 + * Author: Tiberiu + */ + +#define LUXMAGIC 0xCC23AA90 +#define OEMSTR "luxram" + +#include +#include +#include +#include +#include +#include "initrd.h" + + +luxDEVICE *luxDevices; +uint32 luxDeviceCount; + +luxFILE *luxFiles; +uint32 luxFileCount; +uint32 luxFilesAllocated; + + +/************************************** + * DEVICE 'FAKE' READ ROUTINE * + **************************************/ +uint32 luxDevRead (uint32 UNUSED(offset), void* UNUSED(buffer)) +{ + return LUXMAGIC; +} + +/************************************** + * INITIALIZATION ROUTINE * + **************************************/ +void luxInitrdInstall (MultibootInfo* info) +{ + // Install filesystem + FileSystem fs = {0, "luxinitrd", luxDetect, 0, 0, + luxOpen, luxClose, luxRead, 0, luxTest, luxReadDir}; + + VfsInstallFs(&fs); + + + // See what modules are loaded in the multiboot info + if ((info->Flags & 8) == 0 || info->ModulesCount == 0) return; // nothing was loaded + + uint32 i; + MultibootModule* modules = (MultibootModule*) info->ModulesAddress; + luxDevices = kmalloc(sizeof(luxDEVICE) * info->ModulesCount); + luxDeviceCount = 0; + + for (i = 0; i < info->ModulesCount; i++) { + + // Check magic number, to make sure module is a initrd image + luxHeader* head = (luxHeader*) modules[i].ModuleStart; + if (head->Magic != LUXMAGIC) { + Log("Initrd", "Magic = 0x%x [bad] ModuleStart = 0x%x\n", head->Magic, modules[i].ModuleStart); + continue; + } + + // Set up entry + luxDevices[luxDeviceCount].Data = (void*) modules[i].ModuleStart; + luxDevices[luxDeviceCount].Size = modules[i].ModuleEnd - modules[i].ModuleStart; + + // Register virtual device. Instead of blocksize, we give the dev no, so we can identify it later + VfsMount("initrd", luxDevRead, 0, luxDeviceCount); + ++luxDeviceCount; + } + +} + + +/************************************** + * OTHER USEFUL ROUTINES * + **************************************/ +uint32 luxGetFileSlot() +{ + // Find an empty slot + uint32 i = 0; + for (i = 0; i < luxFileCount; i++) + if (luxFiles[i].Id == 0xffffffff) return i; + + // Nothing found? Allocate more slots if necessary + if (luxFileCount >= luxFilesAllocated) + { + luxFilesAllocated += 4; + luxFiles = kmrealloc(luxFiles, luxFilesAllocated); + } + + // Give last slot + ++luxFileCount; + return (luxFileCount-1); +} + +// Navigates and returns the directory entry that contains the file/folder +luxDirectoryEntry* luxGetFile (string path, uint32 dev) +{ + luxHeader* root = (luxHeader*) luxDevices[dev].Data; + luxDirectory* current = root->Root; + luxDirectoryEntry rt = {"root", 0xB68, 0, 0, 0, {0,0}, {0,0}, {0,0}, (uint32)&root->Root}; + + if (path[0] != '\\') + return &rt; + + path = path + 1; + + + while (path) + { + // Trim the next path separator + string tmp = strchr(path, '\\'); + if (tmp) { + *tmp = 0; tmp = tmp + 1; + if (!*tmp) tmp = 0; + } + + // Find the folder/file in current directory + uint32 i, found = 0xffffffff; + for (i = 0; i < current->Count && found == 0xffffffff; i++) + if (strcmp(path, current->Entries[i].Name) == 0) found = i; + + // Check if the file/folder was found + if (found == 0xffffffff) return NULL; + + // Return entry pointer if done + if (!tmp) return ¤t->Entries[found]; + + // Go inside + current = (luxDirectory*) (current->Entries[found].Offset + (uint32)root); + path = tmp; + } + + // We shouldn't get here + return NULL; +} + + +/************************************** + * FILE SYSTEM INTERFACE ROUTINES * + **************************************/ +uint32 luxDetect (DevReadRoutine rd, uint32 blocksz) +{ + // Check magic result, which is returned by our device read function + void* buffer = kmalloc(blocksz); + uint32 result = (*rd)(0, buffer); + kfree(buffer); + + return (result == LUXMAGIC); +} + +// Returns element count read +uint32 luxRead (const MountPoint* UNUSED(mp), FILE* f, uint32 elemsz, uint32 n, uint8* buffer) +{ + uint32 temp = Min(n*elemsz, luxFiles[f->Id].Size); + + memcpy(buffer, luxFiles[f->Id].Pos, temp); + luxFiles[f->Id].Size -= temp; + + return temp; +} + +FILE* luxOpen (const MountPoint* mp, FILE* f, string path) +{ + f->Id = luxGetFileSlot(); + luxDirectoryEntry* entry = luxGetFile(path, mp->BlockSize); + + f->Name = entry->Name; + f->Flags = entry->Flags; + f->GroupId = entry->GroupId; + f->OwnerId = entry->OwnerId; + f->Size = entry->Size; + + luxFiles[f->Id].Id = f->Id; + luxFiles[f->Id].Pos = luxFiles[f->Id].Start = entry->Offset + luxDevices[mp->BlockSize].Data; + luxFiles[f->Id].Size = entry->Size; + + return f; +} + +DirectoryEntry* luxTest (const MountPoint* mp, string path) +{ + return (DirectoryEntry*) luxGetFile(path, mp->BlockSize); +} + +FILE* luxClose (const MountPoint* UNUSED(mp), FILE* f) +{ + luxFiles[f->Id].Id = NULL; + + return f; +} + +DirectoryEntry* luxReadDir (const MountPoint* UNUSED(mp), FILE* f, uint32 index) +{ + luxDirectory* dir = luxFiles[f->Id].Start; + + if (index > dir->Count) return NULL; + return (DirectoryEntry*) &dir->Entries[index]; +} + diff --git a/Kernel/hal/filesys/initrd/initrd.h b/Kernel/hal/filesys/initrd/initrd.h new file mode 100644 index 0000000..03e9357 --- /dev/null +++ b/Kernel/hal/filesys/initrd/initrd.h @@ -0,0 +1,56 @@ +/* + * initdr.h + * + * Created on: Sep 1, 2011 + * Author: Tiberiu + */ + +#ifndef INITDR_H_ +#define INITDR_H_ + +#include +#include + +typedef struct { + char Name[256]; + uint32 Flags, OwnerId, GroupId, Size; + TimeSystem TimeCreated, TimeModified, TimeAccessed; + uint32 Offset; +} luxDirectoryEntry; + +typedef struct { + uint32 Count; + luxDirectoryEntry* Entries; +} luxDirectory; + +typedef struct { + uint32 Magic; + char Oem[6]; + luxDirectory* Root; +} luxHeader; + +typedef struct { + uint32 DeviceId; + uint32 Size; + void* Data; +} luxDEVICE; + +typedef struct { + uint32 Id; + uint32 Size; + void* Start; + void* Pos; +} luxFILE; + + +extern uint32 luxDevRead (uint32 offset, void* buffer); +extern void luxInitrdInstall (MultibootInfo* info); +extern uint32 luxDetect (DevReadRoutine rd, uint32 blocksz); +extern uint32 luxRead (const MountPoint* mp, FILE* f, uint32 elemsz, uint32 n, uint8* buffer); +extern FILE* luxOpen (const MountPoint* mp, FILE* f, string path); +extern DirectoryEntry* luxTest (const MountPoint* mp, string path); +extern FILE* luxClose (const MountPoint* mp, FILE* f); +extern DirectoryEntry* luxReadDir (const MountPoint* mp, FILE* f, uint32 index); + + +#endif /* INITDR_H_ */ diff --git a/Kernel/hal/hal.c b/Kernel/hal/hal.c index a290d7d..782a8d5 100644 --- a/Kernel/hal/hal.c +++ b/Kernel/hal/hal.c @@ -8,32 +8,35 @@ #include "keyboard/keyboard.h" #include "mouse/mouse.h" +#include "filesys/fat/fat.h" + #include #include void HalInitialize() { // Initialize cpu - GdtInstall(); Log("%#[HAL] %#Installed GDT\n", ColorYellow, ColorLightGreen); - IdtInstall(); Log("%#[HAL] %#Installed IDT\n", ColorYellow, ColorLightGreen); - IsrsInstall(); Log("%#[HAL] %#Installed ISRs\n", ColorYellow, ColorLightGreen); - IrqInstall(); Log("%#[HAL] %#Installed IRQs\n", ColorYellow, ColorLightGreen); + GdtInstall(); Log("HAL", "Installed GDT\n"); + IdtInstall(); Log("HAL", "Installed IDT\n"); + IsrsInstall(); Log("HAL", "Installed ISRs\n"); + IrqInstall(); Log("HAL", "Installed IRQs\n"); // Start interrupts asm volatile ("sti"); - Log("%#[HAL] %#Interrupts are started...\n", ColorYellow, ColorLightMagenta); + Log("HAL", "%#Interrupts are started...\n", ColorLightMagenta); // Install keyboard IrqInstallHandler(0, TimeHandler); IrqInstallHandler(1, KeyboardHandler); IrqInstallHandler(12, MouseHandler); - KeyboardInstallA(); Log("%#[HAL] %#Installing keyboard... %#[1/2] ", ColorYellow, ColorLightGray, ColorLightGreen); - KeyboardInstallB(); Log("%#[2/2]\n", ColorLightGreen); + KeyboardInstallA(); Log("HAL", "Installing keyboard... %#[1/2] ", ColorLightGreen); + KeyboardInstallB(); Log("HAL", "%#[2/2]\n", ColorLightGreen); // Install mouse driver - MouseInstall(); Log("%#[HAL] %#Installed mouse driver\n", ColorYellow, ColorLightGreen); + MouseInstall(); Log("HAL", "Installed mouse driver\n"); // Install VFS VfsInstall(); + FatInstall(); } diff --git a/Kernel/hal/reboot.c b/Kernel/hal/system.c similarity index 78% rename from Kernel/hal/reboot.c rename to Kernel/hal/system.c index 71733d8..f6728eb 100644 --- a/Kernel/hal/reboot.c +++ b/Kernel/hal/system.c @@ -11,13 +11,20 @@ #include #include "keyboard/keyboard.h" +void SystemPanic() +{ + asm("cli"); + asm("hlt"); +} + void SystemReboot() { - Log("Rebooting system...\n"); + Log("System", "Rebooting system...\n"); KeyboardWaitOutport(); outportb (0x64, 0xFE); - asm("cli"); - asm("hlt"); + SystemPanic(); } + + diff --git a/Kernel/hal/vfs.c b/Kernel/hal/vfs.c index 9f9f248..110c4f6 100644 --- a/Kernel/hal/vfs.c +++ b/Kernel/hal/vfs.c @@ -13,9 +13,6 @@ MountPoint* mpArray; uint32 mpCount; uint32 mpAllocated; -#define LogVfs(...) { Log("%#[Vfs] ", ColorLightBlue); Log(__VA_ARGS__); } -#define ErrorVfs(...) { Error("%#[Vfs] ", ColorLightBlue); Error(__VA_ARGS__); } - void VfsInstall () { fsArray = (FileSystem*) kmalloc(MAX_FS_COUNT * sizeof(FileSystem)); @@ -25,13 +22,13 @@ void VfsInstall () mpCount = 0; mpAllocated = 32; - LogVfs("%#VFS now in business.\n", ColorLightGreen); + Log("VFS", "%#VFS now in business.\n", ColorLightGreen); } uint8 VfsInstallFs (FileSystem* fs) { if (fsCount >= MAX_FS_COUNT) { - ErrorVfs("%#Failed to install file system '%s': FS count reached.\n", ColorLightRed, fs->Name); + Error("VFS", "%#Failed to install file system '%s': FS count reached.\n", ColorLightRed, fs->Name); return 0; } @@ -39,7 +36,7 @@ uint8 VfsInstallFs (FileSystem* fs) fsArray[fsCount].Id = fsCount; ++fsCount; - LogVfs("Installed file system %#.\n", ColorWhite, fs->Name); + Log("VFS", "Installed file system %#%s.\n", ColorWhite, fs->Name); return 1; } @@ -47,7 +44,7 @@ uint32 VfsFindDevice (string dev) { uint32 i; for (i = 0; i < mpCount; i++) - if (strcmp(dev, mpArray[i].Name) == 0) + if (mpArray[i].Id != BAD && strcmp(dev, mpArray[i].Name) == 0) return i; return BAD; @@ -75,10 +72,11 @@ uint8 VfsMount (string Name, DevReadRoutine R, DevWriteRoutine W, uint32 BlockSi // Try to figure out the file system for (i = 0; i < fsCount && fsId == BAD; i++) - if (fsArray->Detect && fsArray->Detect(R, BlockSize)) fsId = i; + if (fsArray[i].Detect && fsArray[i].Detect(R, BlockSize)) + fsId = i; if (fsId == BAD) { - ErrorVfs("%#Failed to mount device %s: no file system found.\n", ColorLightRed, Name) + Error("VFS", "%#Failed to mount device %s: no file system found.\n", ColorLightRed, Name) return 0; // No file system, no good } @@ -131,14 +129,22 @@ uint8 VfsMount (string Name, DevReadRoutine R, DevWriteRoutine W, uint32 BlockSi if (!success) return 0; } - memcpy(mpArray[mpCount].Name, Name, sizeof(char) * 128); + memcpy(mpArray[mpIndex].Name, Name, sizeof(char) * MAX_MOUNTPOINTNAME_LEN); - LogVfs("Mounted device %#%s", ColorWhite, Name); + // Tell file system to mount the device + if (fsArray[mpArray[mpIndex].FsId].MountDevice) + fsArray[mpArray[mpIndex].FsId].MountDevice(&mpArray[mpIndex]); + + Log("VFS", "Mounted device %#%s%# using the %#%s%# file system.\n", ColorWhite, Name, + ColorLightGray, ColorWhite, fsArray[fsId].Name, ColorLightGray); return 1; } void VfsUnmount (uint32 dev_id) { + if (fsArray[mpArray[dev_id].FsId].UnmountDevice) + fsArray[mpArray[dev_id].FsId].UnmountDevice(&mpArray[dev_id]); + mpArray[dev_id].Id = BAD; mpCount--; } diff --git a/Kernel/include/debugio.h b/Kernel/include/debugio.h index 54c6518..ce41720 100644 --- a/Kernel/include/debugio.h +++ b/Kernel/include/debugio.h @@ -2,7 +2,6 @@ #define __DEBUGIO__H #include -#include #include enum Colors @@ -62,27 +61,14 @@ extern void ConsoleReadString (string s, int32 buffer_size, char end_char); // Console main loop extern void ConsoleMain(); + +// External test routines +extern void SystemPanic(); +extern int32 LogWrite (uint8 error, string device, string format, ...); + // Debug print -#if VERBOSE_MODE==1 -#define Log(...) ConsoleWrite(__VA_ARGS__) -#else -#define Log(...) -#endif - -// Error print -#if VERBOSE_ERROR==1 -#define Error(...) ConsoleWrite(__VA_ARGS__) -#else -#define Error(...) -#endif - -// Panic -#if VERBOSE_PANIC==1 -#define Panic(...) { ConsoleWrite("%#[PANIC] KERNEL PANIC: ", ColorLightRed); \ - ConsoleWrite(__VA_ARGS__); \ - asm volatile ("cli\nhlt"); } -#else -#define Panic(...) -#endif +#define Log(dev, ...) { LogWrite(0, dev, __VA_ARGS__); } +#define Error(dev, ...) { LogWrite(1, dev, __VA_ARGS__); } +#define Panic(dev, ...) { LogWrite(1, dev, __VA_ARGS__); SystemPanic(); } #endif diff --git a/Kernel/include/fileio.h b/Kernel/include/fileio.h index ce9a5f2..5161fa4 100644 --- a/Kernel/include/fileio.h +++ b/Kernel/include/fileio.h @@ -11,6 +11,9 @@ #include #include +#define MAX_FILENAME_LEN 256 +#define MAX_MOUNTPOINTNAME_LEN 64 + // Device routines, will read/write 'BlockSize' bytes per call typedef uint32 (*DevReadRoutine)(uint32 offset, void* buffer); typedef uint32 (*DevWriteRoutine)(uint32 offset, void* buffer); @@ -37,11 +40,12 @@ enum FileFlags }; -typedef struct _FILE +typedef struct { uint32 DeviceId; // The VFS identifies the mounted device that uses this uint32 Id; // The FS idenitifies files using this field - char Name[128]; + //char Name[MAX_FILENAME_LEN]; + char* Name; /*** Looks like this: * bits description @@ -52,7 +56,8 @@ typedef struct _FILE * 12 hidden * 13-31 (unassigned yet) * - * Note: In windows FS, the readonly and system attributes are set using permissions and userid */ + * Note: In windows FS, the readonly and system + * attributes are set using permissions and owner id */ uint32 Flags; uint32 OwnerId, GroupId; uint32 Size; @@ -61,7 +66,7 @@ typedef struct _FILE typedef struct _DirectoryEntry { - char Name[128]; + char Name[MAX_FILENAME_LEN]; uint32 Flags, OwnerId, GroupId, Size; TimeSystem TimeCreated, TimeModified, TimeAccessed; @@ -71,7 +76,7 @@ typedef struct _DirectoryEntry typedef struct { uint32 Id; uint32 FsId; - char Name[128]; + char Name[MAX_MOUNTPOINTNAME_LEN]; uint32 BlockSize; DevReadRoutine Read; @@ -88,18 +93,23 @@ typedef FILE* (*FsCloseRoutine)(const MountPoint*, FILE*); typedef DirectoryEntry* (*FsReadDirRoutine)(const MountPoint*,FILE*,uint32); typedef uint32 (*FsDetectRoutine) (DevReadRoutine, uint32 blocksz); +typedef void (*FsMountRoutine) (const MountPoint*); +typedef void (*FsUnmountRoutine) (const MountPoint*); // File system structure typedef struct { uint32 Id; char Name[16]; - FsDetectRoutine Detect; + FsDetectRoutine Detect; // Returns 0 if detection failed, something positive otherwise + FsMountRoutine MountDevice; // Tells FS a device has to be mounted. This way, the FS can cache data for faster access + FsUnmountRoutine UnmountDevice; // Tells FS a device has been unmounted. This way, the FS can free cached data. + FsOpenRoutine Open; FsCloseRoutine Close; FsReadRoutine Read; FsWriteRoutine Write; - FsTestRoutine Test; // See if file exists without having to open it + FsTestRoutine Test; // See if file exists without having to open it FsReadDirRoutine ReadDirectory; } FileSystem; diff --git a/Kernel/include/memory-add.h b/Kernel/include/memory-add.h index e423cff..abe856d 100644 --- a/Kernel/include/memory-add.h +++ b/Kernel/include/memory-add.h @@ -89,9 +89,4 @@ extern uint32 MemHeapContract(uint32 newsz, MemHeap* heap, PageDirectory* pd); extern uint32 MemHeapAlloc (uint32 size, uint8 isPageAligned, MemHeap* heap, PageDirectory* pd); extern void MemHeapFree (uint32 address, MemHeap* heap, PageDirectory* pd); - -#define LogMem(...) { Log("%#[Mem] ", ColorLightCyan); Log(__VA_ARGS__); } -#define ErrorMem(...) { Error("%#[Mem] ", ColorLightCyan); Error(__VA_ARGS__); } - - #endif /* MEMORY_ADD_H_ */ diff --git a/Kernel/include/settings.h b/Kernel/include/settings.h index 4c0382a..bf7b528 100644 --- a/Kernel/include/settings.h +++ b/Kernel/include/settings.h @@ -17,9 +17,9 @@ #include // Logger -#define VERBOSE_MODE 1 -#define VERBOSE_ERROR 1 -#define VERBOSE_PANIC 1 +#define LOGGER_ALLOW 1 +#define LOGGER_ALLOW_ERROR 1 +#define LOGGER_ALLOW_PANIC 1 // Clock diff --git a/Kernel/include/stdlib.h b/Kernel/include/stdlib.h index eb69f19..4d53203 100644 --- a/Kernel/include/stdlib.h +++ b/Kernel/include/stdlib.h @@ -23,6 +23,7 @@ ***************************************************/ extern uint32 strlen (string s); extern int32 strcmp (string a, string b); +extern int32 strcasecmp (string a, string b); extern string strcpy (string s1, const string s2); extern char* strchr (string s, int c); extern char* strrchr (string s, int c); diff --git a/Kernel/include/version.h b/Kernel/include/version.h index 6fc1c9f..a4e91e8 100644 --- a/Kernel/include/version.h +++ b/Kernel/include/version.h @@ -1 +1 @@ -#define OS_BUILD "0.1.0.470" +#define OS_BUILD "0.1.0.551" diff --git a/Kernel/library/memory/memory_alloc.c b/Kernel/library/memory/memory_alloc.c index d0f33cc..4b7c4ea 100644 --- a/Kernel/library/memory/memory_alloc.c +++ b/Kernel/library/memory/memory_alloc.c @@ -18,7 +18,7 @@ uint32 _malloc_init1 (uint32 size, uint8 page_aligned) if (page_aligned && (ret & 0xfff)) ret = (ret & 0xfffff000) + 0x1000; mem_kernel_end = size + ret; - LogMem("%#Allocated %u bytes (%spage aligned) at end of kernel (0x%x).\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret); + Log("Mem","%#Allocated %u bytes (%spage aligned) at end of kernel (0x%x).\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret); return (ret); } @@ -31,11 +31,11 @@ uint32 _malloc_init2 (uint32 size, uint8 page_aligned, uint32* phys) Page *pg = PagingGetPage(ret, 0, KernelDirectory); *phys = (*pg & PageFrame) + (ret & 0xFFF); - LogMem("%#Allocated %u bytes (%spage aligned) at address 0x%x (phys=%x).\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret, *phys); + Log("Mem","%#Allocated %u bytes (%spage aligned) at address 0x%x (phys=%x).\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret, *phys); } else { - LogMem("%#Allocated %u bytes (%spage aligned) at address 0x%x.\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret); + Log("Mem","%#Allocated %u bytes (%spage aligned) at address 0x%x.\n", ColorLightMagenta, size, ((page_aligned) ? "" : "not "), ret); } return ret; diff --git a/Kernel/library/memory/memory_free.c b/Kernel/library/memory/memory_free.c index a61b9fc..33777e4 100644 --- a/Kernel/library/memory/memory_free.c +++ b/Kernel/library/memory/memory_free.c @@ -12,7 +12,7 @@ extern uint8 mem_initialized; void kfree(void* addr) { if (mem_initialized < 2) { - ErrorMem("%#Tried to free at address 0x%x when memory manager is uninitialized.\n", ColorLightRed, (uint32)addr); + Error("Mem", "%#Tried to free at address 0x%x when memory manager is uninitialized.\n", ColorLightRed, (uint32)addr); return; } diff --git a/Kernel/library/memory/memory_init.c b/Kernel/library/memory/memory_init.c index 1fd66dc..cb87d01 100644 --- a/Kernel/library/memory/memory_init.c +++ b/Kernel/library/memory/memory_init.c @@ -27,7 +27,7 @@ uint32 _memory_get_total_mem(MultibootInfo* info) high = CmosRead(0x31); total = (uint32)(low | high<<8) + 1024; - ErrorMem("%#Missing memory info from bootloader. Reading from CMOS: %ukb\n", ColorLightRed, total); + Error("Mem", "%#Missing memory info from bootloader. Reading from CMOS: %ukb\n", ColorLightRed, total); return total; } @@ -50,7 +50,7 @@ void _memory_reserve_system(MultibootInfo* info) else { - ErrorMem("%#Missing %#memory map%# info from bootloader.\n", ColorLightRed, ColorWhite, ColorLightRed); + Error("Mem", "%#Missing %#memory map%# info from bootloader.\n", ColorLightRed, ColorWhite, ColorLightRed); // Standard memory hole at 15mb MemPhReserveFrames(0x00F00000, 0x00100000); @@ -75,7 +75,7 @@ void MemoryInitialize (MultibootInfo* info) KernelHeap = MemHeapCreate(KERNEL_HEAP_START, KERNEL_HEAP_START + KERNEL_HEAP_INITIAL_SIZE, 0xCFFFF000, 3); // is kernel, writeable - LogMem("Done initializing memory!"); + Log("Mem", "Done initializing memory!"); mem_initialized = 2; } @@ -84,5 +84,5 @@ void MemoryTempInitialize (uint32 kernel_end) { mem_initialized = 1; mem_kernel_end = kernel_end; - LogMem("Initialized temporary memory manager, allocating from %#0x%x.\n", kernel_end); + Log("Mem", "Initialized temporary memory manager, allocating from %#0x%x.\n", kernel_end); } diff --git a/Kernel/library/stdlib/str_ops.c b/Kernel/library/stdlib/str_ops.c index 40c5598..f96ea79 100644 --- a/Kernel/library/stdlib/str_ops.c +++ b/Kernel/library/stdlib/str_ops.c @@ -5,6 +5,7 @@ * Author: Tiberiu */ #include +#include uint32 strlen (string s) { @@ -28,6 +29,19 @@ int32 strcmp (string a, string b) return ((c1 < c2) ? -1 : (c1 > c2)); } +int32 strcasecmp (string a, string b) +{ + unsigned char c1, c2; + + while (*a != '\0' && *b != '\0' && tolower(*a) == tolower(*b)) { + a++; b++; + } + + c1 = tolower(*(unsigned char*) a); + c2 = tolower(*(unsigned char*) b); + return ((c1 < c2) ? -1 : (c1 > c2)); +} + string strcpy (string s1, const string s2) { char *dst = s1; diff --git a/Kernel/main.c b/Kernel/main.c index 2e69775..2c5bb3c 100644 --- a/Kernel/main.c +++ b/Kernel/main.c @@ -9,21 +9,33 @@ extern uint32 _end; +extern void luxInitrdInstall (MultibootInfo* info); + void k_main(MultibootInfo* info) { uint32 KernelEnd = (uint32)&_end; + // Find kernel's end + if (info->Flags & 0x8) { + + uint32 i = 0; + MultibootModule* modules = (MultibootModule*) info->ModulesAddress; + + for (i = 0; i < info->ModulesCount; i++) + KernelEnd = Max(KernelEnd, modules[i].ModuleEnd); + } + ConsoleClear(); MemoryTempInitialize(KernelEnd); MemoryInitialize(info); HalInitialize(); + luxInitrdInstall(info); + DriversInstall(); // Set up memory manager - - - Log("All ready. Starting console...\n\n"); + Log("Console", "All ready. Starting console...\n\n"); ConsoleMain(); } diff --git a/Kernel/memory/mem-paging.c b/Kernel/memory/mem-paging.c index 6c4e3d8..f9c3904 100644 --- a/Kernel/memory/mem-paging.c +++ b/Kernel/memory/mem-paging.c @@ -17,7 +17,7 @@ PageDirectory* KernelDirectory; *******************************/ void PagingInitialize(uint32 kernel_used) { - LogMem("Virtual memory manager initialization started. End of kernel = 0x%x\n", kernel_used); + Log("Mem", "Virtual memory manager initialization started. End of kernel = 0x%x\n", kernel_used); PageDirectory* kernelPd = (PageDirectory*) kmalloc_a(sizeof(PageDirectory)); memset(kernelPd, 0, sizeof(PageDirectory)); @@ -28,12 +28,12 @@ void PagingInitialize(uint32 kernel_used) for (i = 0; i < kernel_used; i+=0x1000) MemPhAllocFrame(PagingGetPage(i, 1, kernelPd), 0, 0); - LogMem("Identity mapped first 0x%x bytes.\n", kernel_used); + Log("Mem", "Identity mapped first 0x%x bytes.\n", kernel_used); for (i = KERNEL_HEAP_START; i < KERNEL_HEAP_END; i+=0x1000) MemPhAllocFrame(PagingGetPage(i, 1, kernelPd), 1, 1); - LogMem("Mapped kernel space.\n"); + Log("Mem", "Mapped kernel space.\n"); PagingSwitchPageDirectory (kernelPd); } @@ -48,7 +48,7 @@ void PagingSwitchPageDirectory (PageDirectory* dir) cr0 |= 0x80000000; asm volatile ("mov %0, %%cr0":: "r"(cr0)); - LogMem("Enabled paging.\n"); + Log("Mem", "Enabled paging.\n"); } Page* PagingGetPage(uint32 addr, uint8 make, PageDirectory* dir) diff --git a/Kernel/memory/mem-phys.c b/Kernel/memory/mem-phys.c index b19038b..6f7b47a 100644 --- a/Kernel/memory/mem-phys.c +++ b/Kernel/memory/mem-phys.c @@ -67,7 +67,7 @@ void MemPhAllocFrame(Page* page, uint8 isKernel, uint8 isWriteable) uint32 free = MemPhFindFreeFrame(); if (free == 0xffffffff) { - Panic("%#Failed allocation free=0x%x page=0x%x\n", ColorRed, free, *page); + Panic("Mem", "%#Failed allocation free=0x%x page=0x%x\n", ColorRed, free, *page); return; } @@ -94,7 +94,7 @@ void MemPhInitialize(uint32 SystemMemoryKb) FrameMap = (uint32*) kmalloc(sizeof(uint32) * (1 + (TotalFrames>>5))); memset(FrameMap, 0, sizeof(uint32) * (1 + (TotalFrames>>5))); - LogMem("%#Started physical memory manager ok!, found %ukb\n", ColorLightGreen, SystemMemoryKb); + Log("Mem", "%#Started physical memory manager ok!, found %ukb\n", ColorLightGreen, SystemMemoryKb); } void MemPhReserveFrames (uint32 address, uint32 length) diff --git a/Modules/Rom image maker/langspecs.txt b/Modules/Rom image maker/langspecs.txt new file mode 100644 index 0000000..83d1f8f --- /dev/null +++ b/Modules/Rom image maker/langspecs.txt @@ -0,0 +1,14 @@ +CREATE "filename" ; creates a new ramdisk with the filename +MKDIR "name" ; creates a new directory (in current dir) +CD "\path" ; sets current directory +ADD "filename" ; adds a file to current directory! +SETFLAGS 1A1B01 ; sets flags for next added files, number is in hex using this mask: + * bits description + * 0-2 file type; ignored, autocompleted at writing + * 3-5 owner permissions (rwx); w ignored (read only device) + * 6-8 group permissions (rwx); w ignored + * 9-11 other permissions (rwx); w ignored + * 12 hidden + ; default mask is: B68 (no write, everyone can execute and read) +#asdf ; comment +CLOSE ; writes and closes the ramdisk. You must close before opening another one \ No newline at end of file diff --git a/build.sh b/build.sh index f86ce26..29f41db 100644 --- a/build.sh +++ b/build.sh @@ -18,7 +18,7 @@ BuildC() File=${line##*/} File=${File%%.*} $COMPILER -Wall -Wextra -O -nostdinc -fno-builtin -I./Kernel/include -c -o $OBJ/$File.o $line -nostdlib -nostartfiles -nodefaultlibs - Percent=$(($Percent + 2)) #Increase PERCENT + Percent=$(($Percent + 1)) #Increase PERCENT done < $1 return 0 diff --git a/build/console.o b/build/console.o index fabd5245b8a75a727a2820117a54cec6255ef3a9..daa1b250b10f759080d766b1a59d42e25575e99a 100644 GIT binary patch delta 2584 zcmZ8jdrVVj6hF68gi=Z^Zw7dUTc=JKAgEN_U@cR8M-j7#0)rY!3T5uwh zvrjV@mu1t0Et{K<{-K#VSx`u(Tjr7(UDRn7jfk&h%U)r!-)V0N_9myl`#bOR-S4}% zKPDqAc4VNmy$9v^(@a` z+`l{K1+BrIktB=CfAQW4sEQGt#&H~Xj6ooY7>?xd=x1$yipuZDEB2My?GpY$CNXTfS%aM0t_dhTxbc0rSZGJ;1bq7z+J$l z#6*e?UyD{;h*o?x9(;8CuFn?jwQtet*#cEY|XcN zWGX7Rl@!}bifE0qLzd?R51P(OzL#s3k)vic+1>4`vt5hA0cm9m9nt)2}sSv_R+%CB~*PEOKH zhJvRq<3uJJ%+&^@qUI(Q>lHj?&e4hamMKf*0=e1U*5PuhPI*(S%NgpR&;XxE6CQ3n zWU_i}Q8k__al+CqDw7-M{+x)Fg8UBo4>H+AlmVFuu|XV=6_5r^T7g?l!S9oQlx#Cl zw;%gxFFL5@ja+4l+oh{A8U2&&rpignB$E-EfhtqXAkByQKJU2%?0XUqQ?hb(r%WkT zCNu2DLHG^9?|c#5X5ir+F^bPp3*+l?y98Yw7q?Qgr9SZ_H7oW5=tfNC^Qp%n!t|^n86wGSMS( z6?ctkMEenvuU|Y1vx}J-`MST;#EOjRdSg1#NznyU<8wsY#K*Whmr3Lm#hJ(!%#DbUIcf2&(h5GbU6u%zDZ%6S5QT$01H)BB} z7w6}tvU+v0Q?jp7Z+%a;##YG)I> zhR+l4Z;#vMw0k=}?#@MS)y*z;m)qlnDU{ZZ!vdZ7C&wG?$XylV`vluk!q@OHP=|4k zGsh#oz=-F0l@azEK(^myK8xsI=Cg?sF#+2xK(-fXyhP*Gj0Hq%84HP8G<#|_Td=+*eU8t-F#9&a;Ee_GRDWJJOnj74Yyu~IBiERge9G@h>ULPj)VW1L2`j_rCM zQN8A{gRz8YcgR5Wj;4Q)5r^jxBMO~iEG4?bh~lFfT5trJ+ko82i_BqbU_J#WL$kl7 z*?XD$;Bbf)7NTRUNW~u&<_NgVIGN}s>*o;NW5lxm!3cT6I2V6!u&Z>~K{8_szN?JS z5G`O-h^iT_M0JeM5;Zc;BYF+!)8X{{SW!&0j}a4mq2YjrBS4<$F>^Gm#~&PSL}rA4 z5s>#l8FSc|GnNy*!ibgH#&&$~-q-MR4KF5P|Fhv1JC=zLm06-lDH1mobFfi~lj8T_ cSV%Z0dqtDAL4J&rrUT=X$=IkNf7qG-4~*n}Q2+n{ delta 1049 zcmZ9LO-NKx7>3_-@lHD9&#lS9`6;KFv2ZjUQ7}y+%|(%cv`Iq2g;9c*6}E^#0;wb@ z|XQVFEekVI|Ejux`wD`=D8(yB(_4$b0D(p9%5-n;q#j>a9uEd>H#wTl> z((*9RzJ^*$C8=tvj@m$NqFSkKRJ$B>>SJ~FDU`)q27CK@8lz?Lvcpl-Y-p^lZ%j3y zd2nyEHswBXCX599TihOh#FE+KW6~MushaQs&!|c21NDXaLlx!&rBpdpOEv$K`!n#$ zcvGC?z5&jAr7>8QH&0v5C8KgM7%{_gCK&SQNhk7UJov=AQ6NV{G0(tiV9b_Fp_q+A zpiRz&{qip4*trRyL%xOLR$HM2!fWj|mOG?59JjAH{7TYGx7n}zpQGz$d#>CL$E_EB znPU4aOYM>uiQD_ifPGR!R~G;VFL71N7Dky`(rRZnNd`Tqt6zH+VhmoQ#@bibtA6@6)BEH>bJ;yZJOE_nef z2|QKu@}@KVm0>A!#sefsi+A6uF@Hc^8dLomvwlcp)=z1?0=S@YF>qO9_TN=510HI= z9C)tuVhC^46aX{IN?=~eliJ+OS_uS{VIZpHohOyN;El?4K#Ouczm$?|2Qoa7;W()W zbTy_PD>>YZ(zg}(L1S!SK@*h2!&ucoM49A^NRt9OGu)ry*$l6cR)tKJ?{>E)bB%OY PbT|wADi&{E|0K%4PKV(Q diff --git a/build/drivers.o b/build/drivers.o index 287856af22664cb476cc3b22fbeb1b664b6693dc..acdaecab7ef129a1525e42bc7074a10d49a73fa4 100644 GIT binary patch delta 635 zcmYk2KS*0q6vofJFR#si(!^jvr4RBR5u_Ub45C8^A1G~%BorcaX)sY7N^4@=M08UZ z!+6zI)HR7xBCJNx@1`v@>0;uOItv z$?Nrq4t;lY^2d?yErX-arjws}DXm&TFUvqn4mjzkN3zBO)*i2t$S;mpTtq zhf1rR5N_9$~>>L>YmFw7ojIat4L$Kt6wOGPj%jQ6bz&p{-aYbrOLzT4{1?0 zyb3rK1dA}k{8wkPr64H;$qJIRN!|qs`ZS}CWJzussiKYqu3!~?r9gR~FmG8y_807J zaL39ehS5R+RUBD_e_-aGRzZU|@sLy7 zi!xq3c=bQfUOW`46hu7a&{OfOQs|{n56bp8YeEO+{XS;)z1g>WV(;3keTGf3wR;mQ z-+d<Sd5)-E&MZf4S7C@+;37GEkiQ!KrDtBTJ&RVjZc4JzWh zT1SG$Ja16l9vgptNA>p(^yc`D=C;>lQm<`VKWZ~mp#8`iZ)ycT*E}B9Q`%pCs%K({ z7SS|n&AhDlXj$IWZ&_Il2C7N^smDV#zz>XMVidNN`j8T@dBjM!7r?~T#X?jd^78bJ zJX9?7u9j>QQ5>`x8Q~41)7nMv3%+S4`Ot{B{xOIY9J!AupQ4_^bYDoZ{(XsetS7UWHjRRg35NtR tNm0-yDg!l)Gbg&0Xuqxx>iUOZl;~J|{4HmqamsJO1YS%KcXYpw{{T1Db9(>) diff --git a/build/fat.o b/build/fat.o new file mode 100644 index 0000000000000000000000000000000000000000..d56285f17422a5ac257fa21a10a129c551ebe355 GIT binary patch literal 1756 zcma)6U1%It6u$G*W}BbcHAZM{!BHj{=`y%&h)_0|CF^brwG?fWLR;e|nQg>uS9WLB zN+1cdG1;wwJ`|sP(MJV?J`}Y@(r!(P_>iX}2!i@xumvmH7cH*eH#@hP`l1K!eBU|W zx#!HibLY-JcQ~UcijbxVO>B8WSXxWz_n}X8iFR>(bmT?vcKrN|HB@g)zUuDyl49~! z#h9B_FGMe{_BP?y*6LX;S#b5_^A#nNpP%gzs??OV=%r%UWlpPYR#&6d6|hgm(pB#V zMfrMTvvSwh=KfTo3l|~Pv$2Conrn4}M?eKo_ffY9oA;W{ruVnLYxVI)?OX49{NzhxryHa5w{JjPzG5u_K4aqN z1|GkEv|hE|0mfq|I5NyPT}iV!g#sFV>|P*XxkLqa|Jgy4s=T`oRX~MOxv#WrYr2poSPH&c)2X>Qjrd` z6L$ZDZbH}-#X`Y3iy55jOpWDBxq`#i|JNQvBA2>7n81JL3kCx7PZIcUj2$uvtYX4J zU(cfjue(M4r_4JEj~udZLm)E&C&+yn1rP7bH`tdLV%!(5PwvY@;Bu{?;tJ}8 zKNNe>!aeE7x3z+u0QO-$)+Z0wi=*!dV$x(i=}Qd9b@3Z-q5JmWEz0`g4)o=!TT?W_ zm)kP!{wZq3G=B%edYj;7MdLrxjn#5rq;Xx3V#xo8I?t0d>i!QL1n3V+5lH{gzkJ?f z_5|;OwBzCu5r>OsMoX`_4nv2|mfhU+G-+aAppy@5@%=JBk}n78nKF9(jG;$tmZi}^9vc}7{ z{Tg#sp-p5Nk%z>ZQ+idXIptol?zn}!P8mYK=GZ&P`Q7zch08$I$#KO*ov7`r=$R7# zNvJ~cm%Cl@n`?0#J%z?>wDP#s3FAm#_8)K&HC)|MUCaGtGiq*Y90wlPG2v@bVoB{(_KnZ40y!1TKcf%X5Yn??=$5ozorW>_2(~xq0gRNOAa<4L>s61>gA?p62YZdp`GtL;Ug~F0D|_%=%4PBnFX+ jno3sVu-#tEG^4aSQTA1y$N2&lJWs?@0wR{>60y7Aw)bp` literal 549 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 delta 2196 zcmZ{le{54#6vxkdYrEh5wNA>$kLTKM!ylExCSyu)Zh$yIGeQ__Brdkd7PewrjNr7B z4dPUYa3lhOWXAmg1`soxKSG2c3NaW%NEXK*m>?uWhQ?`(7~}k&?vA97*zCT~`JQ|3 zx#!+@-(6Sjsj7Djy~??}q`{d-MCa@L7MsxGr;mG9=+4Y^r=PFsyUfm~xGQ5#_T5On zmT}RtvU}9aCoRhwOj#4iH}cQ;`1lF>Vl0E`mz#!`nl|h1_=)NJCjfHH|~osdIXp{ds|L^z_#Gv!v==*r>V~NagQ?anG>8{|zgf9EKEg`GmF2(tXa` z#2?z~&5OOr*32Kw&Oi8e=4F>@spT49${KQ+*43!-=ecoyFek!VzK@;x9<7oC`DI!) zFUNBcZ^rXkK7{95zKv%@o@=(Cz<{r5@y6(;O!UHFJ(`Hdg2A9UhU@J!?CGg_#O|w1o2)L9h&-Q&gpKv7`HgU_ z^`%I>TDCYXj+1t;^B(8pjTl2I*F2@xu6&|pe8l6kp2Cst;!ChDI*3}irLchW3Z1qMZlV)9mlT%R zyoE%UwSlJ#-C8n?Jk4m`Xl`VVsk{PtHLsiW9+U1f>7yon!K8XN%Ww1X$Td8y<>_5@ISGoo^{!-0FW8;g`baHHbDI8zp z{Vi1knxO5tYI>D!hkg(GC#APQPaYE4u{WV7f3jn2()*!3xFiSAC-MEz=b=9V-E-hL z2BR~J=v8q*e+EweB;kd0&98VHGi#$A@#x0Lz>v2_UsXOg|?HZTeIG|JIM=!#hYQqZ673hxAnI58Bc%tGKCSey&`NX_)N!J8*rGGh zMCXY{zUe|7(~$TBM9W2EnGK>Hl%&<-z=Ruw2<()O0KNv%2s|Vj3Hy~kqV#cL3HDDo zmFTo^3eh=X5z)7x6fms(HxzG)AM^d4(n%s4CXs=;LTqe1C@YDH#>6j+#(lS4G~#wD z?o~V>#OHZjh_CD~P$tlDWlI68gvhrRlzh*LM!tmTBob~D1Kg!}Q1P(hpyFA@??Bn9 zD@xx`dQ9nm6*F*nq%fxtJ5mKoAqzyKkbPiMDt%u%Q0a9c5|2s%KBSr169fF9445Uv z4pj=hM2m%Z1GDZ3K fF8ZM2ImJ;$xd?E6hm1DwQJ6YD(-FmT*rNXfJyvj; diff --git a/build/hal.o b/build/hal.o index 4826c3f85d6d492bf11aba98bf2a977b208aeb13..6ddcb19d100314e910557d1e6643300a18425be0 100644 GIT binary patch literal 2180 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 literal 0 HcmV?d00001 diff --git a/build/logger.o b/build/logger.o new file mode 100644 index 0000000000000000000000000000000000000000..ec5a3e0502261e05667f026784ee47338d2b0821 GIT binary patch literal 2364 zcma)7UuauZ7(YpF*RIQQyP2(}lQ!rbv?8&SDq5y2CUaAZs7=@5oL!pSw!xd+aqn%r z%CLdnxZKqEAo}KD`r?N8=V?@gnRRy6CuKv>2Vp2eOQs-*&QguP@7{B>HtwMZ&i#GA z@BGep{(a}%nS=dLdORNH77z2W+l;Ze;I#DG(8ad1W;QrI^FVR(Nqv7Iwzc^HfRI3cH)OhgRK@XB9I--$U3ll z2?0cimjsE{V~<~Howo{w!e2jI-(Ft!Sqqnc61uLJVm{CN6c);3uF@SEzT>VB3-5G= zA=jDzRWv`q?%C5Q8InTVQuMc5x6HEmPC57YUL$ChjTZ6J*OuQ|&WZwkv>0s9t)@kj zRs>__{@iNPh~YESnp?eBG#`T~w|Z2}%P>|xvsEcEKLl1$a;p=fdBgUd63usQLl^UX z)Yx4*B3N;$t+*Sf)rMJ^YiJiQU2{)?+$+oQap7D|cpc6Ss)akLK7tdw+tf_zxFnQf zQpggVwUy$q`DxqZ8Rh}(Z z8!$F&bW-yBir>!SO2a&MkIjDBf9&Pq<5!|z5L@}=pK6uF^`!|8KPs)F6}1EP9#pra zwDhE`>1;fqu+fCU(%H13rI_Jz6*Jv-PP>J2{}-p7JG zi09Q8nCEnpXOCYH3Yg7)`0wUzYhD(dz{F#18`0%Kf$Y2edE}c-)#%|#~=#8=0!a09>*dFk$+()n<8(s!(L#6(tqciB{+y|s` z0EXn4_BX`sy}lq%o8r3hQmz3X6?c9#Z<@!0`mx)a+|=_J;!Z2Rx0P9JL;JB*B!SXZ2dZVL1@0T4nlVwJ76P3t=s~6vBsQn ziPHG)n8aVg!SujMx$VZI9H%kY$9toZv5(<%3&pupS??Fv?;GyY#=j25Uq1qI`<~Xq z`f6F@xP0~uYt7I%;!oui%Bh`L-Cehv?Yr7u$HSaUz#WKipsxLyI{ther=NpcXrEqj z36S_}b^NV5&J=ZQOxD6l)~}8YX=y`dxN3@=Wl`sSh{>ag3B`!2imH(&qA2Q=oQlbl z>7=ZaIGNDpWacC~kYsp@f($3e6Ez!}baspa;z=@|${KNXV1sM0&PVT3bVAcrZSW*+ zzkE2MrKS=Z-Sa0hV~GGj}Risvz(vh`~v3}ffV-}j^B}=Upx=eitY&^d( z`pFUFs8fD{JIxd2dkyy)e>INLnDd$cnK)mYZI$A+I>&t_ZzDDl&7^1qtezN>$!Y;g zJ%cE3sqX!YHTnu_T?vc+m$o<(8VnA-&+vFCx0-;W40f)t7YsBIZ3vr)z6hg4=c3mU zT?pa7l0JMlLabrob@9bPRZr9=#4qoYek0MSu$gF1`k3Pj4Rz772pF^@gz=jY#>0C9 Pom6-(efTbTC)|Dqx=(IG delta 661 zcmZ{hF-V(16vy8scS(&Jl7K{u#ZQv*K?fVrb`e2L6{)z0E=ttT_A``ziJ=*EsE7!n zo8i&TMT&#yri+z5n~&|J~h#dkSrbmkm)YG=8d) zl>l%k8bgH z(D2CUKEV6faG#w?8PJur#vS{+k+af2vgxJ(^jWza@lX3#)^?11&iZCI1+dq%R+Hq3 zlR;xPC?P>*DQe~=y2Oxp# zvk%~2v&%}O)zL)U-#{t?^ee1kfKJ}80vKYAKtJT!paG_Ng9eyq frVAG}ud>pC9o7iIDf`raru_@eSDJ4z^`_w;jqry@ diff --git a/build/mem-phys.o b/build/mem-phys.o index a120a3e59e5aacefd01a7a7314f8182b9f8983f3..3d7efca1ebdae50d1ee8e9cccd2968b60df5d02a 100644 GIT binary patch delta 759 zcmXw$O=uHA6vy98cGpb|>o&HH1&PtDBv9QZDijp4u@OZKRtnZaAqHKgLM)`|L5Q@v zpj~rm844m&dhk$>LC{MDCB+DS6}=Qh)E-3Xr3%t2!uno52HyPk|K7~|&&)2g&9zO1 z`I=PT6=vh{Qo-oClQL41DZ@mbKz5Zv>lIjY-LdQ6|GBQ~RP7CStlJqfTB|8T$Bc{g zO8|gW5k!(ul?;ZcZL3YI2dP9kM>1-eQfQ)Rn5^Tyy&_G7i$)jgc(%S|f8q8k=KOj7 z)$e@vzVrU|E;)+57#H8zemPbeGU6h{)17z*oxFYIh2DGWY^B=b zZQiTJc~MhwT?KP73?1tkF)f|f4}h5;xtJ|v&Cx&BvR8*Mh<@+%xQTXr3&0s9lK}>a zcw&q40e~yStpG*hW`MU1t|A$F{3Nym$Qtm delta 793 zcmZ8fO=uHQ5T3VxZerM^#h3<5vo;&zL1Sur(DqPbQj65qA1DQFi3Ni#SOaOi6&hI- z*B~Ukd#UJEM65k2DlN@H(O?n8lPx_6BD6)UNOhe_HWwev`{w&*c4pptJMVw)FX=+7 z{G?rHvwCsVh~G^aU3XGO8{%=q(2fY3w(Y%D0D!N%wryK0<}dq3cO_*=9@Hw5fqOkv z6s?ru!H9}^Hf2cvW&Hl}t@b5D-I9!2!D3Hg#%N=~$Om&>LN~;MuXd{D7r}hbtgY8; z9_z2`oom}wwM27S=WDD}Zox@)9ux+TQj@*)Cc(xS)~KP9?yl>H8@jpN!plN`6nP|k z>0DyybaG4|=({k~cSf(VZk+;ynW-@ybNDAA&3nXW>=EA*{RiU01I?GvJWB~pT}fzC z1zIubE!rYKD1{>Hc&6LP0OO{R)O4YsshGEf(jhb-#wU12y6o$KST1{IJU3H<tnRuD!!YHp)Q>CaTAh$zzB^M%rxOizkjM0526Zf~N5vqlw6 ziDRZW(PFw2Vbe7kHl3^B1MQpuYF4IZvi!P~$z&2AdtX(xrUu*=S%f2V!KVigA3_h+ z$*37jc9?sM9!JdZZH}R^Gq3-Lt;5s!ie(}GVHx-oe@ym3k-Y6&{Cnoop1+Xao7@xPOYpVZMZ{*D-|-Fud!hg zc@u6#qikq#A4qkEPpvmJ_7B1)^87yd?!yf6TPqW3P1D~)wL-1c7qJ=^75Y2%vnsyn z>-AX&Q9zVfD;2LeVfBdpR#$fA*S!{^0x^JyDMqY*b=D$2SvTs7aGOH6RVpsA$>v9L z6Xwg}f(=_xY)XvTJmR@+P>G8syFa!ASB%4!V8x_R7|ad4Thx*hAnW6Kx+70_L+9=U z*SnY(zXqMVBZ%*z8*msZQ6tD3?t!iU=n?2)=o%S+2IdAg^itF~YAp?2r$p2-6f1y7 z!4#0(&eVyTn0WDzNZkgig+%9BBcI#myz5MSFgKY7(IZgB7xzN?XISI13#^gfMq@nP}vs)SV#b^|LM}y2BdJX^iP4dMo|&(r?ABV1GHt`MX#n z|3KE?PIOuZF3G^HYyiIo=4zrhOb^iv(@W&z6JgB{o*9=Ml6)YUJvrihV$S;mJ21?y delta 1288 zcmZuwZAep57=G{Fxp$k*>(b#Q`CtdSN&NVczGXcb)qTk=fa7vZ-wn~ypXqE7K(wXz1ANV9d(+?qSPG@s*83E+ z5YX8MLZ+(-pZ{dD*(nKEiIciB5zrlpsBWX6!dwtOb3uv4zB#?^R650WiA1gIWTNn; ziDNBPT1_&nH(+_eqRE&ZxJMRkU@mNlUsc(h#u7EUQAr|wD5KbOZZAvZfg`3Ca*Tgc6hpnuS4QLPNnj0U|hju`ugPaw}A-y{4P zL~~F<^W1LVXKjph_e8>-JZK+@)6q%TH=n=*gbF|aQAU#viFgMgUaPZ0zd#({qr)UW zCG;DDKP1G9Hc6-fydWPh@1oF`i8~<<8lEC0C_$tRHwj)PFhGbKhlGDZ=%)qm5IiDq zkPzdq34e@uF~A&gJkxiC4uCI)9tSAIev#oNL}Nc9z0fA~9-$8k{ejSDh5m+cBftuw g8{j)(8Gwhr5Z8wV4hb9;I89iB0q=#ts50b#0bOF~HUIzs diff --git a/build/memory_free.o b/build/memory_free.o index 52df19780dc2cf698e84b2aa6c463a3eca4994b0..cfacf353a9383c9d2d5eaaf2b73152fe11a10099 100644 GIT binary patch delta 403 zcmdnPHG^w{0%ONSMd7ICH#*%eDh3U<3_!qGuGQ(HB5>SAg@*^o1=1WKVIa){rdd=N zf%J<%|NsAgEz>Ou66*|6;efMPI$2b}vdu?y4o{rt$?Th&JMo#Gga}Zf3`jK)M1crr zJ_DvOK9FRA#*awANxWE0Z$ggvo(S z;*%Yi1i&nHAi0o9T+tqA6v#zJATxpBIuL_h3g!XjCU0aCXS_Z6B$GPp2cVe2qMsje)@gNHcLWFxY_jz%X?K(Yy={K_GEHh-io#jJ&2J>SV^kCxY#D%nv0U%CiwX-jka?U%1tjv~&;S4bJ7ZKh zK;k@T;;*F^g4A@nsBpj-ES)kcU_H%8B%%*9FsLd=`=;i`Dljli?DL#>TUQ0hVvqr1 z5Qqa2j(i-=OwN1?Oc8t>j(jXYJq(i-7;Oa%8T5+sQxZ!O^@>Z14E0PV=Q4&f#!WuT zsLc9>g@M6g@>@n_#wn8pnbg6g_~Za40l_Ii-JBp(p@4C6A(J@cg2{e98W_8vXKzkx5*D|jL+N;T;u4n|+ z38Dmm*a?mAJGqd>gxxtmuQ)#^b@B=p0}n2s3PvCS@-ZVT1A`)vW&#GU35d_ez+egG bJAnAW;PnL2ybKJXAaOnh1_cn!#J~Um&dpXg diff --git a/build/memory_init.o b/build/memory_init.o index 98d5884c76ae4e4581350f56548d75147580a078..cd123a834e49f6926aa38c4a30b23024bb42bef8 100644 GIT binary patch delta 986 zcmZvbUr1AN6vxl+{+U~@+x{r)LFAejmymPH=pP$6W-63YL{0J!4q7tM&9+e*gxUpV z>?Qfpqha;dAHwJ{?BNc3D}Bm{=+9H75B1PMDAqabPGaB3bySg|e$Va2YC5ydY|DRvAPVMSU8@T1&^M(f_8(b`2?yC8-Yhc3~EH+)(21kT}Y z-ZWR}LPSx8>xvbV7#OQVTS0q`YmOlS<%}W${~?AP0q~_$mt)zOFOyAoU|%6A%4B{= zYPQVb8~X%&O*+Ja{Ilf6r%m=cg95-)N@EU*hhl*fig@cxS2Q$_2PECuOV*2To#WmE)71 zu82s|Z&mrc%D-3TKQ?{p-U*TmUf`s1cT`}LuhxXbGpTX@tLEkGAgT;MqA{WcU;-)B z0#F)ZKfo7?qyF90i>AI0^ON3aveRUb$q}LrAWp@w>K`zp9wEYybcN delta 1069 zcmZuwUr19?82`@Qz1ua{^=?zNNV>M0E6C+Qf=t7)kv&WwveMd;1}zxrHuM%{!Wsi* zjG%EIdW#usAj+6Ih#rg()QDbsDD0spp$OOa&AWo-g>!!A_kF+b&pG#;JFZ37 zJ&lbN+M1gh^FdwP1ZLFdN90TqM1YNOVc_W5QcxG`0iY!6IK$W9<#IU}(PgsRYwfGq z#m4YxarpdD_Pd%lbnWWw$4zUW(UTwT%ze(ST237~UYwjNyzB6Vc1nykdnIX5mm4Vg zzao9Son2%q&#*}PzlN~6x@vPv60ShVF1Cb=*hWh}qHEhWmTM)~PK9wtA|^?pyRySd z^g(xcAU1wUgJ3cd)8dJ^5s!|=r{a7|u=5__i3|Dzfo|?z^Lj;I5F25N@IR1 zVhl%h*W|xZbs~~~riS0I;qx{8smZBp2Z&Bsz(w`MsK5#@*m`Y&WMVQo7US=2uhK)P zV0f=a5Cwb<*N9sIQYNRA!ft>SvZHR@wErZIx-FACu_o!-P3$&t(8L%a-sEvYd;qry zRY*gI7Wgve2^|2B5SbI;IUyE&Np@`Pjmh7de3`fl&)dWe!X|)Ugcw&wq_|!9hpEv9 QMB*AXjO$PZd7{qw2QWm>r2qf` diff --git a/build/reboot.o b/build/reboot.o deleted file mode 100644 index 6094f3786c1901c533e992eb4068efd96cdc958b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 zcma)5O-md>5Utsr#7`tjLIf9`gMuN@s7MH2a#*4PC4wdqatX6;$6auCWTu6z2swDk z56I8R!T*qe7k`EX4_*XMB3a+->Bcdaq@eoMtFG?)p!@6VwdEiP#7iJmxnm-sBa1d* zR)%FjjxK5^;WQoRH@#lZF2{d0M>? z7bB_}n^;sM&qZY^38UwcPi?13qB{s-ux@?&oW+TDdHx5c5X5mjbitg7tw5#c-0v9*WxedT&&83CLVXV~)*-bYa8EZ_GXPjH-95FeSlGw(UtBW#fz-Ba+W%AhC#k2MJl)k>S=(q?)!jxKXU(m+ZPxeAUYZ&E UE(4UqIaM$m-d#cRh=>{90xGIujQ{`u diff --git a/build/str_ops.o b/build/str_ops.o index f10f8160bc1c702a18d989944935a993acfd3d54..fe50c3b102589e2c9129479035f477fd49913ab3 100644 GIT binary patch delta 522 zcmZqSn!qzbf$_>j#mxHfu;Au50^KDl3f(a(DqU$#ug6U2HIZ=P@7;F57Wv2T;TR&W{!si#YhFA5i_z zz`)RaL?AjY{%~-&iweiY{ys*A$uf*Fwgx~MA0Q3`;wm6!aOC4?XL97@X=8Te6KG~} z=2KuQ;1d7}90tl9bL3+=&L9C))&Rs8CO0yQv(5psUQeFOD9*M6$dY56yo+%eQxfCk zBqk-+4Xg|d29rCPlo@ACUdyD;I)f3YWO5>t@Z>j40zk39K(RGIu?Ju=8)gC42Vfn6 z%*w1iObiU}lOHk*PwoMV_ppFeEd+|^097~v#lgXE2Y^lKmn(ICDRkOsPS5{r6hVsUD6ZUI9{eolUQY7s+mNl|h^C78+p^NNyz wGy_8`5HoQxFie8di=gxdDD43B2NMqiLlBsre2Ya&q6H)c^u_`xy$4DI0EzL82><{9 delta 248 zcmbQh)50}Dfl+0mV&-HP#>tasGDdSsFfcIq0CCu4Lnd+73?Qp;vM-Z3TMLl2gkf?P z(=x^vlM|VRC#x_Eu%2OIU=WyW$*jyMGdY%79ZZT(p2I8vWUXaZXEk7CU|0iI{RXJ| z4p6nmWJVTc);mCP_sJ7kgeTju0L7UZ7!FJh1d7iAs?Z0Di%*`wGDS`rXr&MXBZC6S z5kPDV<*Nf}pi`1q)fEdW8H!7ak~4}x6qsf>29#yuVqmxdrYGNHl@iDSF_{<`I-oQF Di?%Z6 diff --git a/build/system.o b/build/system.o new file mode 100644 index 0000000000000000000000000000000000000000..0055484b597c886a3438337d7a5ff164bddf07db GIT binary patch literal 1100 zcma)5O=}cE5UtrAHHjf;SiNM414dX;8WR=|A}DM$f{RK-bClU^n_X~r!b}UU2p;0W zpOBxCpAbmEKj6``={sP{b5pYjPhUs&Zw{kovEYkqGRxaw_!*7pc@wcoqg;D2Sm=e!^5 zzX;VHV9Gb>OB!C7i&D)=-oT-K;CU$HFfZdXXEokeko#Cu(Rj)gtLvehOmv<2_iG`q zW+2zD%TskZQ$3D-c6=&z+!oG(!btPz?y|Rex5=*pRoK@}B|viVPi)gauxIgTsCM}d zrJHVTWJ71=u^so)IO}i3L-+Kp+fFlA-aC}Ze;fc8fi)DxyfqA!`Dz$!M8wbLohJSP DgXnL` literal 0 HcmV?d00001 diff --git a/build/vfs.o b/build/vfs.o index a56eb0515dc1539097d066d1a2c344ea1ccfc38d..bd1d0a2feb8a5f92b07d38fcac7718d32aae982e 100644 GIT binary patch literal 4584 zcmbVPe{38_6`tE${~*0w&+WBx+oLSx+&CmU?8+)<*P(IGbz9X)6C+ zo4d6eSC&XwInDNZQiN2A|7fADkoYGE5G@82$Hp!Js$%#fBL9Sfpj9l&4*>xx9p5)Q zb6KZB4UDz>&3o^g_ujmjojHH;q28WQC?s?XiLkgT39)07Z)uazEH;Zx!d*|Snn@8A z;+^*^mCDy?TCMSU=$XkA7<65eBw3_)CnNL>tmi zb+0@y^C@@9^oEi#I*34b9S2NbIyfUPJG7^vz!bU!?%&^85KzkM7^5&aX_oqv!(KdDc?$}zNE+#;{d8yQ+&K(&e(FP{BquR{ zak};LfH${s?K+Vz(^iWgSi5&$g;0{K@H*3Yjg@daD$|CyxXV4)-+rN3!Kvc{ubtgO3X2CvDo0cj1yR`J6sWvb7_8UI4w5t(I zQ{!=s;LECmFAPa9z8!|Ubl@vM$xx&ONR4W9$4S;pr8oQ(bb+OUq&~BdyWERy`2@e# zM)MRlr>*98@bRGxis!_YDDu)_z--N~e$zjw|H z`QkQ9oCf5X#H{OiFnEzo@I?#0Be5D*;z8m5!C1uY7~}VM=5i?C4405yZea~^ZJoz zB3b#xkZ4*x%acKq*wbdesq z(aE&w7~FjRqUz*>#S%?h4)pA^CMKV<#wM&I)5Wm~yI4$Z63~iACyGvXeB2(kM#jc% zt2kS9?7Y>qrHKTzrY${L7=|rp5~C$|19NLrachSK_qoaG3CAkf+1#i-{K2t#X&$y` z#&WjRRO~=H8~lvG&S8&}hj5ySM4Gl(%=xJ0jAE#-2qeo`4`(tRR`bKV_iwY>Qun1= zg@`kGw9wOgMQE-*bXUYQPlbFvZ!orFd}X4RaWraL=<=?o?)!K|SG3+WGSL>}JJI^C zsJR3cPqqO(P4F`WB zjt;1xn=3-_PT-QB2X~Kw4ovf;JWKy4&8}$Nt;s|WhciYr4h@Dy5T$+?e;%AKY~UQLa#*`v;9LYp&XbuA_%#}U{?qtruy4cI$E#y4 z=;y$B4xF(7r^U!^;JgUVUq6Ji49-xk5Q70fma)I;N2H3gc_(`W=oEY$)xCl}o^tHt zjz|q>ovcV5DHcVlFiC;zR_u`tVw*_iCi8iF0wXxq9z8Tt$mVT^zR~tE5RtM#%Cd1k zeNPMMqnxtch4)8PpU{GvW&rDb6Z#xa9)BG+DLD*eTMzi6to?0ApZpKwasSf)y?EH@ zuifv;H*I_#P^fv$xD{WK4FAQrtIas+VI0Uh9vm=nQ`bZruw>e5JfkB;jgo! zn)atQ0bC|OyrB_| z_TzZ;xk&pw4XV-3b5oy%w7;N@K-#~0jr=NPefE+6Ey((uqx?E#eWp=fgsjgp%I6{L zbBppCWPL_az6e>LN0i0PNHLWY2S$qO78S?xxJxHTh_GJr2yD#gEO5JFII(c;> z1>C_h39!fQ30n3~$m^HgJyX7_-!3|oGvkv*8G5gs9j2n13l-gC1v}?V7G~u)XyB%0 z-9z{wZztkIx(7)8cFOn#+DgRtb3YO18uv&DTbtiDk$b{`6NfU!pC)3fe?{3}R`wOj zi1Q|8Z0uiB2LBIA|DKX-u?+MZRd^?m{_mrVJRTz=uS3-1V#_Q2E0i&bv&37mFQ|wA zzY!5PfpdcLy+ruwB_hv$BH|qeGESZ{{J%iNd|y)dZKYoT8jXmfWc({C{k^I1lG4AY z@Matn%qKy-1M^UFpTgrn#&ap7E@dTujflK|rtlv`aszT8{~jXv(@K6$$rjepz}(Xc fd4^Etz99ZU;rj|Lt{3#(3WpS)Q24UKHx&K{iioCQ literal 4360 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 S4q4MWE{SL4MsZyAef|FkSdkO} delta 24323 zcma)k30zcF`~RKcf}kv;0wRkHFd!l-ASxg#2<{sy?usiexnMH5@REZLB*TcA$CkIO zK&;ow3Zuo$3y3a;QJ+**QqNQO|~U@ePVW#_RQh;Eh;x#o$g?IL3~J_^=(F{r$hv%M#@6x(ay% z3Ok|ovz{IA96H-6M9x-7^>j6BwTnE(T3)=R zs8$GPeY^TP9}O3T0W3Dcm(B0meZa>+-6<_taT;nu^eY>!LO84exZnq21*E~KK}g=`9BPjIh$t(&h)bO+?xpVfDZFwI0TIYAIQ zQ{uRExL1Kobl?iXC4ig5wPd~B;7ktOesJ~R((Uw)fV&N@iye0w+^q!E30C44W&8uk zAE9W^-39kGINn2{LwfG6g77UkKOR$VD?PZz1a{aj!ZaR1AyE*{k~qzCf%ZS1BDv!d z@Q1;N%e;OenwF9)0DlTRMWc&!cLE#%mq`TNK${__u^;?h@Me`ad5Yw?HQ*N~p+g7) zOs%w1Ope@0lwboCHbP;L5-}H$MYF9Uu~PCUmYQv9J9jLJASI3>JhjN;29JvWq?o{xEn8chUF&?-8GY@j{3EUe&zp zDe4ja0sIB<&tdpz&CqGLM$HkX7hEyUWDFIAYVNu32XuE!2Xhk4yKwkG_Ip5pOA(ml z6y_Tk+A$tcssO7}*>{0)CJDjsQU$>mG+kt&2jCjO{Xs;UXN>lar${aA-ANGYh6}=Y zDh-;#X|x80kv$;>GFSN85Ma8fIn%+#f>Q@aN_!@_-r!JuN@J>igVOeEAqX5HMfE**ylaLauQjTU#rI@F~WqIwMUC#m!`h?6m+eT~k6n+6We!!L4H3EYGk>_(WczleCxLrgSXdfa~C zUYfyr7<#xRBls=EZ_t>KRoOmE?q_SEF@5I4{fH9V3Hc((A4j;=54DA@ElR%h4s_~f zvcrZ5mj(nIX0ofuTkMPx8!^Ws@2*TA?maCY%pYI^TGN`vXR&DD49Ffp_N*d%oLbuK zMB~Kjj-Ku?6HF!6r=r&h3AhWPzhoBX5^9u5DcXCU-moon++j}Flh8duz3&Lr`pj-W zSQ38@e3k>R2Y(&>6SG;z2>)FXqKgiGbcj$7mv{slXS2Q$Q6|z`4k#gh7Q$_2nb~R< zm_gVM9mAZq)fsW+;C#WM1^GqXJK#El!>HWKodW0L5cd+eyR(Hy1Wfp?iY*|op&<60 z*i{fNfm3~k+Q<*wIdBCO6BcTc}?AknZet{kD>D%Kj zU=tukBUM^y>JikTEt}@C+dX?siAOLE&C!!oaFJz4gPRV{z!|xB%mud`oLVZy5c!IO z@nj33vo(t?jqKsS55etFS68a!dxyY1mBn6+9O!ln!8akE#K(_&k==U4U_v+shR+Kq z>SPp^B8>)dG>i4^HPEF9!RuMV-Co`NuY>6|zkQFUd9=@bcC}Xz ze*=Ok5Qi&OB4Z_h%bd@8MEMRxafF$G%c0VPR8WH1$^g3-{95p;tB_k1fm<}6O^J$d zsY0-FKHD4>VY-CiU1(xfR=iuAqV7%ZLZ)9JPw6D4CUNg3bB_8Xi-c_Cg1>iqlBGj7 z0iU^*?t@`{hkUeQ5r zw4PYB2sa;cMn`+Q#Dm$rh<0qI3W=&NtARW|xj08!dIiGu0a8TBQ?;FB(&<9wI`ABquCwCzAS|-!#W8 zoU9UYk^vmf!!rTbwN>Z3pi%90{fu-pN{nfQs3r~uMN5M#LbE?Dp z{phSIXPpLw_bb;4nlq(=-M!vASrVujULk@ga~BfNZ1{GB)x#C2x4XeyuT5-P?+YQD zKfu=nazjebyz1twR?*PQ`PLzwV6GGAWX+#fJJp(QaJ720fU*XWz~X9|Db6`= z5(P*^Yo@`ql7to?64uU`KGl3(gv1-BLvDvD={q+yJWVGbS(E?%C-IYl;0lV=>yu`! zv#uZmCGs2!++ko1 zvXqwoWwXh3s6~NJI#Zr>@f=fl9)q1JVq28{a+KQXQ>_E23|?;ypei^GXgS0h21aEf z?Ddv2QN=aJgu|2#x17~OwtlK0hf0IE$pbs5n2&4a=JR@sTO;w_*Q--jJJJEV6lOHhLuTs%&;fz1U}iLf}?6 z2Kf&}{4I?(ZY_HdFr zjt_}T#IbUB`+Lk%522j74>4%tC$hL9|8RSM0?Kg`F2UX#^11c{PgXp%m)6sZRSoUc z?R)GGEYSvO2)xy5H25`lEOprn&6c47sHFR_fCap8=$B4#8D22!c!PV1dq%CA{oiEc zGca6mr}BEsURWwVEE3x`Y($syXvT1I3JXR7*gCR^eK#z)%O%j#)<12wae0j=(+%#8 zTbNghkJnA2=YS^8Wh-$#bz8v=k~zO%0LZ-YHin)$SNZ84$#vc0N%xNjHXG}l(skJA zBB0Aa=DNr^wbL->Y`J~_5y}b-tB%$@t`k1M)=c>AW#I8gg>5?FpesPSA%Wa*&_s4Q zB}f}Qp8b{Lubs5D+CMc?qs`jN(udF1=51x=!$SfC%*f#AePl314{HjWH-3l&1#A2Z zDdp_j;SruOq)-5bw8S8NIqRGjt6f#Z($mIk%Zu2qv?y&u5j&a|)ISk=)--p@ch@M4 zu{B;#)u>iWu%?M5cm@-_<)k&ul|X4n=9#`gn`~xl(?@7Wn%Vp5bK=HRZmaJiH}fAl zuj1u4o6YhIY@SB^H1O4e*L(57mX_q;4W8gL%`AOHe{bFvu1d7Lw;-5dX4VmlQ*_0M z_v9U$tt`_pl>ELwUR_|6EG#e#TW{~kP=3eLsaT2iZVb+|6L{h>IAOv6s7qDDR@&f+EXD~ zLost56B)3Fgp(jN*9F#M=8c4xdsE>mhOlvC0=v9KazDt6F6MPbw71P{)0n`R4~V|@ zo6UB+R%@gwvxbOoI3aT46cMLDKxo{}PK*he7>JG~{S#DkKX`@Sn!>$z4eFr`0VtUu z(Y`~$|DiONBLWqUFAVh7xrP`^ph1dDWs}DD?CbtBJh`5#r5KPWar-*hlXjKmY{PZ7 zZ+t|D6e`8(U)h=Q!5Hptj_+p5hq~IQXe3%f8e4xw^Cn|B=N zw$1CMq@i%Z97m&=nr(exE9*c<8!kg>N@^X|CpWWc6C+GTWTDiX)G*O}kw*jQZcN5f zJX))4kAdn=aWU19v*A~eZe43{<{zkaAGGixonF@R2m%tJ_I-((aIQf|;X^1nUl5Qj zgyu2z?EXYAv|YzZ`mSgXZC;n*iKjPvcpY{3zrCfgoDG?z@4@+}n_sgS4I*4xN6od3 zEE9o-6j=VGp4!(FS>>d7ZN@hC&7{%(E2yuZupAq+(cf~OXLRR|rM7fe#zxq@;4>DA*M92H}GBdIw~^c7?0v zYGgm^)Tc zTkac-7^pTCu1BlSHT*y}iC6S|DA%{IG2OJ_xC4-2%pgmJ5xqr@-p*1b(1ARbA$)3n!1S(h1SJY%sj!Vs8FL*SE_*v%QCro4fCxrVq2*l;C7V!={h zO2HTiJG&}tXmw6?x1xOc=$uOtVPZJOPnrYuu{C%nF#(}K9vY939}kT~$Q!EU89L64 zMaZ3p$PHXg)R^=h9F~Zp#CsrdbKP8Qv;(CGj4UKK4#$FCG`NtZreGeC@WKEu6#{F8 zdS_3(7}1b+MfqM#$f($BSnHG%jh&mD)C^QqW4xg<;j$hILDh4o{UT*SX(NktD#9N0 zNJ<@vg2F5$NWqvm)$kq69TXRK=TY&Xs9diRv#=We;!hSk*FV%-RwvhMRpYxCCCVp% zvek19+UMgKo4csXpg1b-rk|0>?|4xp^^9X3=1taAuvzma`B9xN=5_FTZ-6_3Q2CWq z*2J=!d1KNmgf6q38?J^nq+bmj3|R zaxSGFl!?6OFB2`L;)$C`=&!$#l*Rw|G zk>JCM@YQxG4uT?^JU`G2O4N)7n6hw)dlf5~KU!18PRt);!lKj-*8|VO`!1V1)H@R;B=aD#0wsh;UR>c2j`Mo))~6cwkqK; zRqIBR9*e#c<{hvu;;uEA9|3_L6D6OeT3r6B2$tZ-SAK`$~ygxX*o014bSTf^B zwu-o!jEYY$f~1wT=xvmA8#_|jTB-tG&r6M9q0OEBD}<#9_%YY{&0!rEjhpP?06Hqq z<_6gTV17j8%aQ4bV@Wnh6X}W948>Md%mNfV&n``J*W;Db| zgAl94DJ}80yj#2^QTw$2NothnM$e zSC@t+I2dRTMgHttc0EHFk6c16TB!zFF@CSq@SN&@ilj#%C5x5&^HH4)Cq0nMBMS34$GfDYaPez7$5#&Lz)5DLh6LP|vb7HJN+vCo z$qXu^sZ`b!xu$6Nh$KTvazFH;r4QTzg& z2X*Y4j)Jcs2%$TL_aZ#MUOcf6Pa<__)t3>jm1CBPJR;4yXgW&P*5Rb{Ry-*^GAtc> zA~R9u@HwKTe1BAbJ=O_)IUum|weM>OO=Ytl?GYt>KqZ6zNwJv1bn!VI6kp_u20bXL z!oVsX_4RC-#Er_S$$zofb-teWWh#WU`uxQjH+J*L;7YI+KD)?Do-!3i)Q^9%$+@bM zftX`h1R$kQSt*>T7ye|AZc>#Zh}k474V0C75;aYxQe=vXE5*vxSefcYl!r`Z%2X6l zO%Hg6Su)j|s1q`^T&B>BsIyG1lc_#LJtk8HGS!!;Su*vwO!XsbzysEp>#Z$3RDCDc zsL^hj#a8Do5Mdh|XoK)y_Izs1l(MktagbQ3}9B~v?O3ImcLIdjV6S(&0% zmKs^ix^5nOWd^UZ1nDEr9FQ6GNW4Yj%zH9JL!Xq#nHrga&j`|FFn;bbK_?TWK3wIj z%urvD+=%hKATu;KOF!P_rM@Clyt5sXscSMtU0HfTrhb(v>TuE~nYu4ie8!u0mwQhp zHxs#{6w8%7JY@>cbd5 z^w!~cbrQTG5U)*0gcq&u7QBC6(a0v}_Ze1>$%P-r`0}dTuO&MPHg_xK&kxBdzx@8r zmmwEq0cIuaU&I>8iO=Vyh2@9XNBIWr#Q^qwew=1+weLUlnw4)O2~E>VL@xB8u(oM_ zYglZWif}p6`!#uk%`L9xQz?51HuqK8aC3{UmGx6uFLR5&mDN^jV{0H`6$QcClpXAN zL6sKB_*h8tL8Qgw?5#q`+;EqtPAe}yriq3HsFb8Zo3*YEP8T7N&bZ*yE!%{^=^?rE#u=$+>> zRa!-5c&!doOyAFKwu-$tBA>B56Tg!0r@Ks$PIgv671SF8mF@5Ghj z`Y!aMf|kJ(b?ncQZkl(PkEN&f$RRe=;uoOqjYFtjH*0wvqbU4iEn96F7Z`~V&mz9a z>w$F1(l944tC5|v^y^EEven>e3_%)}0{&(slhWxUrzz@T$N(4Cr_`_aUl@)p1CF4P zEdvhWx7cPJ%wK(@s(kB0{fE|wfBwbRmin6h1-ykH_D{UL;SnmqoJzpYN)1Zf1)MB@*p^b;vRyfXJ--qx|& znnP@XHDKXqsD_(gbJVd0t&?*N0RQ6tfsrJ>1p62~6Yvbih8Zum zy^0Hwl9Y=mmU{DDTV4`XktP+C`(rBiH#OLrIMLe?G6JPd8q}K5I8PeyL*xFfW*$>D zPC1Nb9gICs4^8**v*s)G-7Q$tz2?qobA#6Wg~oF8Sfjh;FSq}={pxnw;$*JVv(LAO zm?k3HmM|OUCUc$Z9NvSibJ3;FACt6|R5?pf9sL4#C=-jR6y*M&V(zXaJ6L^4>DV>r zGViCj5DP#mF7&vfM8yVfYb9)dK1SW=ay@T#{VDE3y-q-YfrmX-me9qFF)JVcS z6mPWGdj*E{3hFe}kQML90awdib?eVNdY{|Kq_+6Baigl*W;}GOfct1u9EwAoEEl$1 zK^;wk=CsAdu|i*c1U+B5O81KXZFJ^k!s|Ql)*7yon?ikh}+p z@>UH!OJC|EM-9;a@+TX*)35t#MNZQbDZn2MvQo~@fVc|yg~h3vYSv~eq#D9wVG{g% zv?DtMx@S5>0P zC|&q2+2nQb&Hk-zsy4q!V`VKi%6xXku_5YOwH2qb@#yVLBM*k9+6pyrhzY>Ail94(oWOvv|7H0YiYm7?j&XlBm$0_{)*@%W=RNT!7*E^HbXn9ksS;(9QW9mbO zr7?&EXQEFPpHU)-z{)a=UOz9O`hD(-%9i>xptDJ=_oCA%$M6z@LXwYIiSt8Sm%y{@ zorw{!dZMpx3aLO>A{ zc@ji%tyAEwKA+(icIRIl&ZFLUPOIajYsD$k-&D3hr9#e>5>aEm{^PkP71+?-Kuj}mq>mHl*~MTbpf9pX#qM={!GPNqZ#WXbs;U?!1s!({fP4; z1@s7XvQw>rYDum6Q>|1_;sp?Y^b^xOJ!vpm(ZX$q&g@RFLn_H~79TPee{E6fL(OQu zg0E>--U^ls(MmRE)~8<$*+TE>>amh*8xBRRhvBrvKj%4rv>=yFdnUcpBEq-xoR0$U zdnQUVvHFW=4rxrOa3?z->x8LHT2YNfb0EG0RQ+{z$^BbYLH?RXysnHn7zpZ}X&YiI zr{83o@lI(F-FxuXmUcjDEZ zOG%c-(!xiba%(*k$Ln8;dJ7$Keh+#>qK)Sz44G9sTV`vxfr3(!#=> zY{hf$vS**)#TM+bX!X0RoA)GZ@MOJSd{^6JH*0t?!&C(y4Wg5`Z6_ybsKZ)^AJ4V; zkgT?X4*2pGtK=c`bse@Cd^-V?+TN` zhuB*$8B9d1b4%oryq>PX;Du&^N22ERHxbeltP(0ED4le^gkQQKDnvU-gGkiCMb}l4 z^A8B=NeM-yS0PYNqUN9VhCEygiiaVuv7#wc%?vry@=>m+h$VH!Y^b_zWp8{sQ^Bbd@35JcPG^arDQOAJ3tJ z>S0asMv`6WEDwAq-r{YrodzMF6{0BX`B|Ya%{VaRZsi#kU(6fOJm0b2>t9EoHz}Ji zWu81mwa$W|N@&W!aBuaY8ezPnm+rXCNwz$#uVNJ(<-FJULS!KiGsWE5bk~*+O!nCu!ES*~l(9a7`;$tQ)!AapHd(h5-W^ z@CjOl9=ABj4RRmb=`!(bnfumbjanxUvY0isU5~J4_{nLUHFid>bXvxhdJPuXwzKT$ zK3!}aPq8(iJZyO0id9RJ^xP2tFIhkBibiyFq z9=N@62jC9H-3xaN?uEE_;a-kA2lsm1kKr!DZN=S)`w;GnxIb2KJ)WQAK8HIzY)<;R z73;It<<5i6rerT%qMwqPrZ=uwot>l?!Xv`M^ZN0B`tZCY{;zL%9?cAhIC53a+O?Y~ z9-DvAH>*80W8n(piZ#phOLNxgSLYaW*7fb%7xCIfo07eF;i?sj)-5E>B>h68F?;n| zBXa5&8{??UV%`p$*DiK?wlRCLF?)%ADKCe93DqN)j!L!9WomZz%7>=!pvQ{d?&;Ak z2X^4?FbC%J+tG3Dbf#qIW*e#eyne97(j_rN$om8yj^$zY?ZFHaqK!@+Pv#o4CfB%d z)hZNyRC;DdD(&9{WBymc)G4|DOOz>-Wl3DWxOqwwwWe##X6e=4X!qZi8!M>RqXV=N zZRJ{>lb4$I_5578AMQVJzkoXccd!yB9A+0L?0EMC*IVKH*~?7|=x;|3vJ0yT z4OX~e$}`PDXOx1+;W^1cMrlla2uHk0&0vP2Fvm`DzFl~+U099tu;(%dy_F8wAB%j@QP(hdw&4C9_dVQy;da7bX>`Et zfx9biKit7ZPd@59aR-jly@Y!|?vHVQg8NI{7jQS>cEYJ!9qwq{qj1l`y$p9DZW_X^ zcs`B$72NMwo_w@xbz@DKM(bL}T#iR*J<3>LJp9VobUeb!*k(NXl(GNdk-#6$PVa^-gljea zH;Xasxw=rTYc)Gs7vbC;%oKK}wkvy3r}Hqpi$8hAmpkg2qgeM70WP~g!(p+mEa}Ab zP)eIFCwdt~7p0ENiC&Y?RmI*u@n&2&zIn)($p45k!4Bs`K%ZSy`Qr%e&0@RihiYp+ zU}x(;nH)hiQ7%!qX^VEiaSk}a0S|S+BiPR;gH1CW*hLOF#{uU%;35ai9B_pLeycr> zvwhT_u$^$gUpU}z*ypE$O+PxYHyrS72TaG=)r*YR(E)dMz|=R@i}ZurW0Nfj#P;!R z?UmYI!8X?cZvftz(Wbx6L0$>GFSAWvP4W+Lat4piaNv)DFX?qc18^4sM=(DJLEnYx z!rDjp4w$|Zt@B&~uKQl?eYk@;o=mhd?k{1H| zuE(-W!6m>OamJatP-px;3H%&fTyBH z0~Gmtz;wKVE{cB=SPzTQQ4ey$Pk_@>FpSe0o)Y{TM9zGeNWo3ObgG0dO5h$a?R40ZcEN)f)c^+ybu;SLAevl@7-hg4LU<~0WDiWIiq~cV)5#FJD8n4!lF>Q= zvm1|}5Bw9l)glF#0n^(EwF3VH?w;C~-)q3BCbWqXn!)9RmOn?V3U6R+;fxvh3Y3!Eu#{$!_Il9OKvw?3zpU#U> zdfC9Doki9I)9XyRTVnj%3}QuCTY_c4#Tba_!y_f|PvE>9e05UrYry$QI^hWg*8tO> zcA%nM{|xY$<#+?5;6~t|F42L4U=s{m8n4Q0@GI_q|e*@6JR>$sU~<4 z*yjmQ~(-e6JcR~0Q7E)J0fxvX!&{PNoa;iQcx~1b?gA!pd zFnw*3<)Sbi_~3vx`AlFvx~)2WF9#09xKNhTRT)VJhZ- zm3RRJ9V1ooo4{L9BMS(sVGVG!T>|yMmw@TN2PF9!;9GW1cma4mETk^m8-e#@{V+mF zkN$VPb(!#gHA80)jQw^6@CBZQ`5byYgD7A#x?Qw_lY!|tq1r?ff$uD68_KhQZ;aIO z|I(2Pm;+4Tbk%PB7;q;O6uwsyw1Bu|)CnsTya)J{U7H^OrgP17kqN7T>43C~4+GQx zsv-9pXQ38YpC~sW72s>&uyAx>C%Hlru;~`YW_3yQ3y4YRCLu_XB4{xWyH3>c{|1t< z4w$~v%Qbcu!hl!7spzyW$rFI*+N}|X0T-YNo>k-%2&d}!{}M|2i#%!m$84q!40%v^ z0|QZ#65&bULewY&n4D-2aCsGK3>%WumIG&_i5^k(-vmwpR%g%Sz&bdk+Js*NceIwgphTcgE9tup~ztxd*Dlna? zri&V839x>4n}s);KnTcCR&W+J120;j6P^M=8PNY(n79_oteAn+sT zwqGdv9|3=6SHLsC^!;7-2^ZlT;QMw3GF<~vjTOsaC4t|8W6?&V6--tA^-;X0QgCPB zh6=1=m44kF_=sHwQNSzEtMrOKh75rYPt!%kfWHe*WBOKB$tGbAm(iM+6mHs3c_9S7 zKy@kv1v-l&JDrPwS7t&i#%_v67Q)LhfzDma@iAQ^C=J87pveCP{2w^ELBa0=$81zB zM*Dvd<%#&C4n?66xHBTC`+{G9yJN{TMv>nErV}b^fwU<5AegkTBKH6ufhJPp>w(j; z^GQ?WNx<~C0CZve6NRxL=zrAa1Tg)-iyhD_mV=-gE(hj+9|}xfzX6y&(W`B`16V|x ztMPXO(-|LC{t|FG%$TgC_crjnE%MyJ_y4sZMx)=VTdz-mccTXCR_jaPI+zp>UZ9Hz z&|g8Q88!o}Z|*4Do4{8wox_#5z73cT0I0pp1^xX4lWXCGbG_MD?xjA~gN@H>kdgg=I^O_+7qm6@FLn@QQVhQaE>AE*>kh zH!aFpxNZsC)bOnHI(moBJR0>~=zANa>z9(w(uKy@xayQft;P@U($iMu3nRs`M4>@F^^3-6mG?{n~2(A4X}J@#;#}d^M1H{q!5_ zBn9X)_`CiwYw%SL-`w)E*<|Tono;cf)$W>sEUM`x&-p9xK7QSrg{$UMVc7MiBo=oq zR-C^mHhebP`Mlg_#J>7{zfSf>yILV-yAwVA$Vp)$UHh%$)Ce zpXYu5c)#x?%HFlBR;^mKYSpS$t1hk1dExO#S3bGMyG9U<27_Si5(?6KQiKtLQ5g8k z`A_F-jzND#GZs2;#ka|*2|^&70IlcL()8ZrWJICK~|dU$|q&J8zU68o9W5_1(eqC2xp@+h%O2iHH{I3xod-uQJ!(WZBR* zOEY+takDl=&2}L=%V-e1^8ME6tR!KT*BOy#nZ5F?^c^z~ja+ScM_8p+?XVsixh56p zZ8ax_SXj_e2!O5aDFCe5dARod=3~ZMR(rZYo@GURM}!%@ve{cdYlGK$*n4(z?ZQ+Z z@SAHFrUCu5S=Oq&x`i2$V@Y*$Q!h4KKdgH!eQ}*X4JB@FbslXr7*YNWn_4#~&DpSg z+}na-^HJv+r*`4g&&RLOuARA|DOAM@1a(+bT@{-us7XyPRk2Az(~qmz4T5@cc5%r} zhcNr0Cm$E)tXRF$G3${vj|#;Ptyn2IT&q_j2Omt8O967s~pB_3XBt$ z8?Or(bG8{LMvOOg8E+9xPKW8X0@IY`raJ5#m|e@wvjgV4 zx0&yanCEqw7YLU792QT3rDVCKEMQr*&9Wq7spzsS6OvXqk{&EbdT4pl!-1qnwk16p zNqW313DkYhk-VlLSzMmHE|C1xw&bTH$yHs+8wG37VU-H3q2<=+0#d%*_{%0Wd^=+xYjHLdmD|Ne& z_Fs;)-xj3pT%NW&koNYrw09zDd%M#13F*y_^wxs(_m-ze1L+60rE9i0>$F=kjud44 zVR^>Kfs9YKWgLxU{HZJB&%&@T9K*gW7FrQV*_Y|r?@ZZixYe%0`iGlpla7(OaE z{POzYS2hnH`^E6_h7ng?HR75XBPOgEab0jkPW_09%_DC5V#FFvNi&4h(T%hyz0$7~;SX2ZlH>#DO6W3~^wH1OEd! zFyjH?N&M$WRc*qbv_XG@Kp!&~ELa%d_+=MXvS*&U>#4g0f!-$0of(e`4+*Pky*$9W46nw7b2{b;`r%p#)Tt-a7q5vxBlz=bkzv{F3oQdMkoeh#^WgY2|>id zvrX9cpx^~5ddd28o@;&yllQ+A zmo}M#?0Un}eZ4`ia+6eL7Hl=|3xN%q;J?eOjK$?SZ*9zVnKzmgmpR8}_8Kg78;?8- z*XG3U;&ESk8ISFmSLo6iwbZLv{`)(1{EGR8S*e#I{-0x` zlFFOAECyH7@^Q^wX1Up^InQi9dg0Wo@(^)oq?aAV;IMB*no)TB_+F!s z(>Ez{;nW+f9=nuSl0^_s$IgM?Zy>aymBlFEYO`!PNjhAam2D11Y@v1l zv)>`9QSdmA9?G&kvsY_0^I)SP9`j4BaTtPc8w`}bRclQ4;OeEfO~Rq9*z;P6e8N+< zZ!YSuBsV-Hp%7pbv^yHVkFcCvS7K#P5dN-pn=-d+AvdDr^C$y>R>ocD0`*Lgj7 zpQ`?I-eY(_S)G~JjrTXz>3PRDT$A_p#_@03c6AU_o4%HQ6^i(ia$Cf+YD(~8tj2GW z7hYVvw0wNU?}>u{*?(pG7J>m@CE43h6QaOuqqpH%3N=m-dF5m%F|Rz^xU4k}NU^!e z;uwn0ooy6Hdh2;UK-TkY9C*#lz=Z{3e%=@U$$4G=NhBx5<4Wb0z_E?Bt&@)McBu{V zcA1KHsXZolSUaWpNrt847cZ&!ec<-Fp;sWQLw|w*-j$WU4I@+7H}yGmG|>v3&ifp1 zv~5N%SQ6@<5!0pY1vmoBSlb)$sR zrg_4Jn-lGEruNuUx3<=*6d9E#1l~dg{U0D-=RJM7Ap zC(P1*>%Ztwia$FY8pql&i?kZ)9&f`O1nam~WAj1B!(QzsN0yw?6qIg1$OhLi-O-g>8N_r%Rapbyq!zqdeTD*HUqihw+61x zh8h0$O{nE>x zLUj1CY%6XCRI2Q9GVTIw&z`PSWy;BsSW@l5T88*^9^Xk+D08#T@*+Y0o>_j%DnF9G zSYBb5@5^*Xv}4rhl&mZgl<%39r>x2&>BGHrsS*vernESj}9ykAad06rD@?{J0aeMjm@?G~o&(Sy! z00vwDqG1j90I2kN)goP6`uyMH7`^O=f7dk5z(yKF(HI5IUB=cDk8*!@I*TANaNgkc zTMmuzs^%TFhqB~WFMANtUb&O_=V347qtU<)WqF&wv{R~!BG3w2Kzr72jDw-gXJuzf z5p+1|Ya8T6ZbJ#9-_C?=?QzeT=V1$xZF3vMkzsJp@~$51&8K*;nCX@JGQArzyum(! zy7NYpS55N1&83ocUf=_Grfikta)9BPS&4)Q(5$wiLCu?5R9x!lM8m%haIf5fj&I=P zLzzH|t^Gu`vO|E_+}bECIK(Tn9-p?|txKR7Nb>+VeE?XQXJuP;ctae1&L!|3bcf)V z+F2MRA`%*naj2`~P(Z3I%(k*}N))m~hy8|vzC&4Sj5`dq$Gq(Pc}=URIV>7l-RwHl z_pJ}VT6uhBwoyFy)}I0!vaN#Om~Q-PIZLB7?W>iHF5@h3)j{wy_|3(iBmM8RSG|x3)BA#w(WwZ6)NE>w8Jh&bF65x5eZo!6( z#thtY`Bv&7JH;$1-;n|%>X7|n3(S5yA+ZZdtmdwY13`P7DATke9ap?@WM+ zz5hS>D`DIFH0{u3atk|fk$ra2%NF4q{RwjHJk0(LA3F?(F7x`+0P&v}*`ABkQ}>WA z@Uokc${{`M5dl}kL{`d@B_rU*sE(d+`^cbFz=gz621y>bRmd|Pmk zjtd?2Cwmnh#XclZ0|5pRvhA|G0W7s+=}82z|Dtr`p)0&=jJr^y`|(-ZLkT}Z2+`~w zyyf=hE)0v{NqDW$vk?-Q_zNTg|N70RRzLYYW+X`exA^;KG((|pLAXx19|QOcFK`RU zBXwsg6?R3;RI0|DDauA zF8Qjt%i88TA-LHT5G?Iahw!gdJeg-&jN<)Dp;_+GcVOrXnE6aFMqcyRs_w(akKpoH5~t zPA?%FORqw(`z6#&5z_-zRv}tMLxEtER{#x_GZ9&w+Tvi96()%whnAyU+bb=Yscng* zbi8J;)x3=OaK--0Ybpf~JN^Jv*Zy=*n`{3_WcL~Fg+eMl8?TRvUlWNk2r3(oy2Z*xwOl+g0)h+pc*Z$sN+M=@TM|37dm* z5~BWS+um&3-XhO8%ca(6k)52CunJ>Qz({+EX2JhZcZgCUl{+e>5ca4rR-FBq$+2p7MtvlxRz7_FI*`6s2CKgdQV+y*@l`+k0)>_pU-H zTx4~Ji_Gp)VqP|{xE<&ULudm`9hJK{Xth&I z=-qfo-rI-}`yhZTqYo^G5Y&8!w(<#}L)*!dUU^0kmddT==+GAF{P>Nd*yb9vLH_aK zXcAkf8Q`&cJe-l-twd2YbUcpR7RK~kc+Dg}Du0sGEcK;TKM;J^LY2dCb){IMykzOc zhqA+R0k5$6*8GbLijRx=XIp4|L}`8Ft0$dlF;nQ4>TBgKRLy9J3ej0XmGJ!v_fns2 z>DBy~$F2n#3NOAOw^QbU*g6fUcT%C!UY^sR9oU$h;vW~DZS}22W;YWsHAU4I`BSAT zyTukd4XUN{lWotc2q+<b9$N?%C7pNJo_!F)q>Q)i{vaIe0~)EN)xjKd;bRd4C0jojnbgAjM|b~OPx|r;xf>r69l0LpNY2S;FysI&s!mS zk+Ypwajl_@dK)IEVB6i2&nde$pI7BdR09V4N&5s|kB&VKkjo)NBL<-l?_(PRpnREC zSzuN+rpsHY<>W9mm%Nu+Wl1of==(>$>l{a=K^Y0>CgL@t`9-klBBD#)u!Vk)&$?&7 z#aCW|?YU-rMMFCPi%b|2dV@_ywAh@Lt39^R4-n;5HYXth^Az-{XKN5s_XAQs7&W>K zGSAuetQ`^GtIwvnR#)mxWJ@=Yb)Ank5=c_$gTgf1F|HjUy&v#KpUp-lVRJ3Vh6Do= z>Iu*yz$%rWy&lQxWN);{F}(rLtA!VkX9VSWQ60;DiG$My%22Hs9L!!o$me)xXg-#b z(;;sm7KUpD2$@B=XcKg9Hjw!*?dA0sujj?zMEVcneueMfz&-Z#d_h>G>xVHYJN6Td zuu2xunW%5Dg({reveq^TYz@G)oz!5BZ9t>#q~a3=SsJ5=bNhZr1zdpwe5VOUOlO(* zfgBn!Z8a~UG)yhsa;O_weSHMG)eWO96j{76JsRpkEVY`tLfgq99$`c-AV{4iATAQb z^f-j@Yd|al#G+7SNdn^U1Ti+u@wvmiFgH5@qNpHS&2PbRg(rIDXU{=ud}d%FT7B`N zY&Eazr21AtFys&eVPXDsvmo%)lWwIF{llf+Ys5#Q7J|dyRP|wn!#R)InlKdP19-92 z`>22P#$>7YVSkD`Lh60opRA_6lS(DDrsDrbRC;6WCr5gfEJBmpQk^~s;f+W+Ci4{4 z(H}494MSzBkj8lNs1}zAuB$9$5cL?^BMQ6%OZ4u7LIq(vha_nKdAP=oltOf#+kLILcK%{(YdXwzwU34kHNoXXf(0-j4RV1 z&W)FBG_IS$bA&xM3(wTDW>TBUQP^gB9RD7Qzw-<01L(jOa!0r;MGrd!6HabL{o90l z0TZt?XOx?L_H;tNIcguxtS!9blU`z9KgFvPH&n#$v5x_dQ4m@@-U)15TAUHYm|*#0 zpbj0S5kc>W7`l0qF`g9ZPcmE{QMOX2lE>1lK0L=1qeQ)VX-tk6=uc%{6d0>VqPCMX zVf`FT#$lCfJ4s_Vca8R?K#bEY`%z_i$|O9c2@X7?QOjh!=r3xS8V@zxNGX=Q{)B@5 z(5(K@oOp=ceGjj@u7MrBWFB;(OpNP(AXc{0I3N6yTUn_(&`9c0Tv_PEYJ9x*jiv5- z{_X^$^;ouPJ)s{xEkt~P2?$CR9@Yo_&`~}ViL0c&pHZp);THPgh6(gb7d%Bx^W8~^ z{{x5@>3Yd`7e&0tOCq_Bmvl8R$v%zCx_@M%F$azO%3cCD@Uf`hDE%`8NZU!HRHYEd zGzJ?B6mCwq4cs*G-9sggM~Uby>Zty_4Ky5aV{A}s+CrNUt%SKLbDuqQ*j95lBDiv& zXn7ZW&uy_uw-d}*lDNPJG@7IxY<4CsahHwMPiNwrq--821=%z8d zh6>twe1O|KfJ!&|P-1QeWZ#fQ^uA{B-{$)sv8!h`IwY^*|GO;4uEO9WWso@AW8-PO z;+CEBK$KUK%Xa@fAsTuMG*FyZ+IS;`^k(RI-E0h(oHn_~*mf7(fcaqfWupMQTAF6C zg~<1%tueEY!5)QA2~bJJV~6!7Z+R2wmMVqm%F~(aQsuVbR~pc(MufPTIM~>Z8|LCT zC5wzJThC&AGWPYf=s0<-9L%=>)diy@YdZlFZ*>^If^T9&0RIp5^lsw^F)C z+exod-#X&e{vtsr(|FxV**Pv}7*+iX<3OxP#8|UvT8OfUcTLkv$Wp=_Qzd4?!`#g4 zq1I1VwsOJKr#80To*VTRl$+5=n+}uFnwXBA0PCc^oS$Oc7$7l@{ghbB#m)&EfOkvV z?xIOtmJqm^%LxLvHjonWXL3>chi)6UPh4W3@N=4T zJ8hx&QM7LP%Tq|&!{#J6=a{dKIP@Pbnl?_$CxKoxFmGI9lYW4VkG5YgZE&Uw;*)q~ z3Vxq5%jrhD zEEaEhly{Zud0pjMx27A~IdSnRzF9%9Z$6(Mn5YYu7t>3YBDoJC6G ze@#0Nbb%#mvff7=3B{J9O(8M#{gBur0qNpJ(q0lk!S7JQ6p%9rKpjz;%5E)0p0EMioC(!pG2S9z*qCnqDiY`#|0)4Z1v>-UtTLOI#^N#>vt`7A1 z_=g=IS%JRCbui3Vt%1JPqDlI_qt2AKhR_(*)V#G~5=yrULSbE6%>gc?fj&pv%vy$C zrWy(Z(}WnUQc6`;Gt4qj9d*6RJKyiA25m{g{NP2Z!P?}&UAKtesTO)!!$k(!^_rR- zbx{i=&zt(|EqXbRhFvx8uoOVp&5oReTftSUl+?_*r}>zD0*yX!-Wpoq&fH{ZDVG;+ z-BGw$I-gv9puPs}A9Z~MRU*{7KH*a?+4UK>RNGvgD6;E}g%5Q8G4-SyWY=*MR|O^u zAABQbxQf+bQP*)`047GSu@J{KL=k>@RD0lZNRo2h}+vfL>M=88uXwU79+uZ5ob%DOh3_jgMGa@l9 zJi{Ot_QpOZP)|?r9FLu#t?5O^iI!SoOye#TBt3mv5G{>l@49`Bh)~P#28fbDAj+E4 z)y`s5VQ)_R9Jf-~OOFdV?V&Sz-u`?MqBsQg7}aizP^hf>{{XJXkjl1 z!^|RGsGbbvHZh-yGr8Xn(zlQ9{OO~fye)Y*1iJqm5cl_Dv+7^3*BLvE3}0@xIj zhuKT9)OAsc_}o55gp3CvO4fc*3~$Q*bhwn@+N6hnBz!}*T`g|kHw1SUk>!gMklbgK zPmUx1NZYP9DYC-tJ4Ij}09#bB?>zc|Yz3jbDsD77b3QWAqW-z+t+pnY=4NZqZ1AyQcZW;M z8;|9iyp2$y@I|BJBy$keSUH{9r=iutF0InwW*=AbEQ`dw>=0T3K0cjcr5@)QET?;X zXNlQOKnzF8;*E9>D9wS@>TNP$4qm?4!+wD_q;YciTZRGE6Z;P2`lw6tIp*7Cp;!&#SO!3pj7D%! z`r;cM0<&yE>LZuC)MthQ;cnX-rM@H{Gb|Bv1y&(=OnM^58tnTVdBv+MEj|q#@R`t3 z>`pFokW(?Wp1O0x7{uyS0~khY_@UnTwi{R))KK8oc}$L$F2fQb7U}|11uQJNdhkxz z;p31ohV@3i3ik{O(8M10eg3wxdmiQ;qrdC^3UHP1nv*MC?>eJM5ORB#i1SzmdU?2s zIuxO>AuD8oXZ5e=Q_|cv|K&&`x=MYP&(W@T+=*KK0d1o$tklZb`@l*5F!<0Sh~#CKA$PxkU8nLiLdIFd2~8i4Opq-c`!Xqh&7s{_^-n}a&>b(?6Rblz6|HIPZ??fzUf6;AptbBe25 zy}A^;RxSgcWu=K+BNDkjMXuy{E~_6Kth@U)FDYF+TG1`LdeN{~!%&lx)BqTMsY^Ce)3&J4C$zSQ{$>-SbaKZY9Ncl8BtL+tB=BNb^#FJ4m#Z; zC@JJVW4Q{XnB^1xdA8k_#ZZiHyvyV7()fE}{9R0MZOVMS05vxrdk?*R=0Ah1a*!qM z&xT{^D1F{Nh{{qA`!yp`S$f%)cBbkFU)o9Y%@f#0o+byEioBTfF?G-WQa_aI=(b3d=Xt??5?OHX4Dfu->{ zg4&vNZH*mX3vG?n?fVPi+Xh&<(_}&~3YVKzOv8GekpaaL>^4KOQ5!=FU&a*5gZ+Es zALKN|+uK%i7OhjM=}O|emB81^y1mdu9H6}4GtdFBu%hAV-6I&~cKOJU&z>)n+t?pU z64KKTOU8CEpR581I~K7R+MnH25myvsT08>?C5t?oHHU5Td8CI!r~j^LZax%{Wn0X) zWAuQ9(@*GpDmz&99n^f>HDN)%*d2(by?22PH|!Gp8Op31_RPucu|0DVi8G`YyVPf@ z{u0>xICe}+fZd=?p|aWBe<%X;D-d!Ppit)pU(o9AlUy{Q%5612(o?Y=sz3EUq++Kz z=P0!OJarwr@BTsc{0WjCwah|Uqm>u@cwt4>j+F|OQ0mqWb6+>S|1?~s15}-;Z@!?GTCDi4{w5SdUxzM0*u_+);P3A+hn&ON! z(5%84(Wm3w-Vb(XL$NrIax2KG$)S%RB=sAJIiU^&<$P+#D0hOBtg$1DNmKZzf(CB7 zayzV^M6rQ#v8$Hz3i(H|WXL*ix-#Di;?%<1(C-${9vG!1EqU!L`vPETG}MW*2)|xl z>_bE<;m;6>Nl4Ax_zDM?Ae|O}e+buqu9f)rk^!mDqAwTp+2XNei3IyXc=|Ue z9Df5*$wufE@cnlcSiX$AA^fxTOtxL0p$|?&pKkuEJzN$Do`+Q}h{H>ZeU-fZ(a^A% z)sf-C6*#ZpTT79T@JKta{Xl)=JrL4~dbzQVroWi}I<;X8E#QdBpx5+s$#9%v?gGLzVeNfsQWxtMk7KMZ>K7*HuYXSqTeQpfI zdt(-o)$4s->!2?T*dU~XL5*fXBGp9Pfr+6^YBzgDKo9` z)321OdIZt@n!~?XTb<6-n}MLMT)KE|wWaA=}O=YhFYDuga zA7!BY8`xZB@Px1*>lK6B;}V*~fKy7CVmwn|HTc(Plgd~jAgKj6KExB0Rd#Jvx;Dvo zIT*y&-NL&8j75J@Da%Azn3G87XI2k?XC_buHjL98e#^a~qZ?2A+A$)sB4ogxrRrg} zrlcY_OG1u&%f;_N==qzFqVAMjSTJxgX{r!=934QZI?lN~9bt$qjlyKh;)m`}L@n=L zB(C>+H>|9F{vey%21(dDkMuFjH_R^L78V1mm zE$*>+)3)1ant36&2OHuFFIb?@u^J{$kg&nT^Op4e-u`T3C|ib7xIMU6Q33k7RY&ji7qib_x2uV2|ZLZq4Ia(wt7;OiN^U?9E_IkD)*#zJ)MnQ%;zB2f+(3G zS&TbN%RMX!rUl7i&3L4<^&XNzTg?a#jH9Fd_8B`llPJOVL|e^iSXKJ+wC)ND@r{qJ zj>^&U7TOc(dl|~!%|hT)k;j`wbn6<455qSZuDo_Ln+K4y17KWI%llaIcmS0l!;sm`Q zFhs)_pQP)1S;MZkIJvs7$}Ml9?VwzTVHlP8R!{6vQ?^hxc?;k9dAY(XoXb&R22epl zVVMYi)^UK^tOC$q$K~fgW*`{gJ41!1Qn2m+UVOjs0%vR3^%5q_+}*`|Xskut53jL?9gamY9F3R8x zoQG_y2%y7BdoECJ9E`$u_!;`} z=jC>6$duM!5Y`X#2B&H%>yo|FdSk!SA_?%ZKcKTj5x}$H0=*<=h2B(KFwNz4;(a~{ zw>to3*Q;y>WHIcj?RWj9qpoFWLhkyr)r1INzYniz1gclZC#!vN9uG%MVEQWBvrDZf zXIT-US6A>~7Ip=&@Ld{p1(2q(Z*Js>Y1DZN(<$_tC8Wt~HlTWCJ|Pulk4LA|L#aA& z9G5r@hl7kX9xRU0C|bta=kSh%_=LBN%HXTL+^cFt^)8h199)oWq3ZxXz+KjbJW;MPsO2C`$RQ*qV7z&0lXjzk=(;VWA#2^k zu>j-G+B1Tpj5Fax=<^h_qtqXkK|oQuUC`$=m2dJBg2coPQErrq zcl!h|5nhF_B`B`9FcXQJr88PdH`?JwrWD~FdipQ7?KZi6CrHb@0;5c7HF~9K7`oLH z1I8ouHd*_V=m%j2))@uqnEU6m=mkv!gn zcn&KjdG}%cC0jRP$n&YXD{a299O_TkC7`mTc|8UiGb6D5uz3_i zS>XZ$e9FrOp*n7}lO>_glk?$>6dYhWL)j3dGHnVifqB^L9mM%D4dmYEppZ1Xi6>4v zjHSW`0=r}aE#-4RnRo>P$OLy7Z(O|&D1ywe2=|w zbk(zXEiaw4Yyy^2h0l3e1pqFUqVFkVNr?=sG+_NDx6_|S3l2$qmEkL?&ngZkipci{pfsozL3N@j zg1jl}|1llOf;w0tcxQ7o61sRXn9NdUw=YD@y$M{rM9pAADt`<|z4Ne=@ha>*%-YU= zYulc&4dL)&17;qs?z2&)H) zzury*swDOv;DH5tqZV@%_^1*t5At}ui29+}e&l3h2KSOnL<6g;<1Pxm7*o}cryzkx z_n8o$yZ-@?yB~OD0$BH~5b&6P0KNvmILCuRVSyOA;3r0eAH$(HAbYl&UQnfMrE=j2 z4iU;}me;`C#9r!%$!)W;euL4Pu-DGY`mGWovXV_4+mI< zhQ)Cwz*B>{^Y0$fO5K@u-2ms2I)sq;eFLeN;$@eDAscA=#S``ihO?v%2k zw&=~YV@h1CdUOX}ce+QsNMk{ z@)0+XER^~LJlPdjahnt)TBm6&rD5-jhn3v`O!@oqiE-$X(F-l@OCp16{#cAvsVH$# z-j%f8q%SwgC+^di>d;qLp;-sk*+yWAPMhTRy$(LG;mF+YX<;|M&3$&Io>I&;PJztNFOmu&_f*Y`qy@t>4RVlRF%&mG zdVE0H}t+Z2TiFLY+iQ>BIWnwA7`Tx6o=!D6;;_X_g2=AP>jnTcqCP>Mzw~ zxfy|tX^J_lLp^opfIi}Ei5;i$CDaH4bbaA;{zlVGpg&Q3(e_1*)Rr9*DWTlGFLFgSsla{LH6 z2C$N3#IdF)u=>~IJPqP=+QR1KQa267BsMT7bi9;DojQPHP&w`TG#+|yvfNpjsuNV^ zW@Z0GQ6IN>Y3Tv(g2cR8;nJk&lEnp&H<7-n>5>7GFCI)K)sA`NPR#0E?E$D3IU05C zhy8``2%dPoORq(k`F#p4QOX{_A|ZTtgo~14&Czy)u&dk69zx^M5~i)@YH%Fh9N5#g z=h6|zQ7DwKM2^OqsR^yVV;t4h{iv?TQD<0+VHX3c<8F2ZP?7iER`W43z_Bj7+G8Qg zi-{}G`xPMcK7eD=Amg*Js|$HQbF?+WJ4z$Ep^Eomot`3@-;P99c zE2A6YZJ};Nz>H*dE#}H5^xjhTG4ko`SQB2Ff{{1_(H<7jqvLG}QJDqX-_Db$w#b1b zn(84br_$`p&y{3{TgWB>&>Oni$c<{hHWr+Z}bY z_jVBSOm3=-{SEv&2?HpxsFw~zT=`roli2CwJi|BoVD%YW3k^hAhP#ZtahcvW{!xl_ zT#vpC(f=Ng7E^4yq?3qO(~6|lbm`*EwUJ9k^s;}6nNYX~qhN$$;w42)8k`=xq=?;@ z7E$WC4~uZ*fSZ0bnB(dxhv#sycwNGqQyYTDJ9ZVRP7+ALXAUFcLqx=AGXpvd>;b>8 zjQtjB49*AkOT1xj%f0MQ@R&lF5%sW}@Uay0=A-2>da>e6`_r6f=&psW;HsWsJ4Uts z40MrF=&0OG;N)fCYdC|g+ZT}!`w?#^3du{*9`_OyNf$R(e-*qKK)U~-+z;RvpkPi9 z_Y2$}exVK-ER+j=ft_6WrmME*FLBLJN;~`l93flx8>r^H@lY$N5UTZmSBN;sBcoe$ zx&NZnBw(-*8k9QyUzAEomo$w>ZY`GQ^}2nRL%!KlSOoL1YYVvi%dL>GbY`7}X1N`y zs>L^rfEEI%T<#p$d?5eP!#BQ4-P!TIui>}JYuH#{QlO5g2@dhx|K_C)`Ao%B?W%OR(D4!)|~Gm3hKHqtnB_Z6`=oOa@+$Z#vbz z9J55_S(;^OtIQtOgvD@azaws6L7r*PNSUt;pxQ37f>^H&^|+t1jzw0z;nIB%Q$#u< zE@=ylJHc+!kJwQn^GQ%Rvb!acTdqVxFGR5Otgj%z0{jgbNa6Si! z@Y5+}@SEQPKB})#WgAbBUX@@|HQArdfE>>hhJPY(KIs zx-?S+nbgby`+C6Uz68}|Ld9z=hbAGcZ&?whlD4+hECZ5|7OvPK-oEca)W!D%9(t>I z*u%qgMbODEULfw!wINdm?B;#Gf6Q=ue+If*i)XOa(2`DgD=ljI0@x{#K%Pplp~)1z zw!cg_JC#BFagf&OYzv)+WC<()WJK(5fGNK535xx#tyRlJBFA{TgDjzRmty`y0FD94Q#ND{}jG_PVLD;p!-58(- zqq7M7A?@Y;BEGXdy!AB7aQni5@vz4*v`YJL^!R>(PZma7=~aR&QQ1N@^l*z%=EfoW zyelCd$-W3OK>eNhGxC)n-%=$+Jxtj`J#0`WzOr$Nj)AjxQq%=hSUaVSrs&DA$gtKx zG4V4hQCBA#4E7LNMR;}43yTdOa;ir`2=q>yBF+2A9D9!vQ+%B~@f_64K%y!3nx1%! zC;sV@L}N^$#8h85PmJ^@I>LpigN@ZjsvxXHap_xz*iX=xV3nTbc{cUuxju}$l?GX* zHOQkIh<6}^RK-ji9Wk`NC6HpOiI{!n*=G@hGq7ZWNL5|JQzp5pi|Z@7??_jQ zt3%C@+HRaJHE|^3-bbT1N{u{htGO0=l!}8?rJ6=`CarE>*O5rb)nTjo6Y7pB1s4Fz zN)$mMwseQ4<1pQf!vwwhfCJI^F2yzw1E?9|UM$lo660xE1+_RxMyc{mVAtv41) zAOHm(Wy66?Zk^_8_y1PM`KDCWDToUO@J)mDO&IslL$6aD>2RMDe3bJ^TA42m8c1^O zzfp1R=jgG`{zIkYGdYV3Gj8dsXa@zG?*;{PVAsV85O~zpb)$vwD)T;SAUJsr?Er#) z$!_rBQ@u{t3s<3rbV)6QdRaBHLPVeU@t>1pZ9S{SE$MunZ4kuFY2c3a397 z|MTEUSHpz2W`hRI-okrnm6dOMzn$W_PVv!fLk?My5_Y{@iJ%=pPuR6T%9Y-Hs{7Vn zv{*EBfs`P9@1-V+hRk^S@Er}MBeb4}G7);7U_zr2V&in1ix;{HCDD9fF5*gYwFj`V zQ;<&F=Yb#+sprDUi4W!F_ekSX?%buYe0y_o!0TWRIWW$kB zHy)Ge(}>SXyD!;*FuB$-n)`l?I`~FW%yGmZ^{rHdI}rv7+CNO62k6s5g^bk;*^ELc zHwPhN*e~?lAXH#Kp>VR#PT|dZ{3r@PgK&SD*HO$W#OMS@Qt-I~pW2jk(5g+b@~4?U zsWQG>sr;?UoaF>Gi38Eo%)>;6uabb)1Bm#QS;rYQm2*u@>F1X=w7tnBK!%JQM68y&G>>7|7_!GeNmL= zVNa%#Ag27156e>T0)M*iAd#^@32J1czE0o`p2O`cnRK2Ga|5^UYXWE>fTgf7s4#6O zmC3$&12aV+StgFO?dB;HXsVY_4}XRZiYw^)F}`v_CQlp?iRYYj8*!BtB55Wm1G7TyMq z;a+jO!Yiin90p$Y0x`%ALOu#?HKn8&yC4dcCidFvbR-6=$_ua;WO6-}@ZjT2J~|l7 zrC~Bys-I&4FBZXcno&HOv9eV57E})&;`(r<31)_y$2$2-_n9bw$QJU1c9Qo2|0t}~5Kr_W#7gHhe;RV(rj-y++Z7sxYVBE$lHulCmygq(t1ube3z%bv&Sb^V_2 z)9b1|o9K1Lo`0v;$UWQWmA+>;y)1k7<7L|w$^tf!6|%?Q!{}Yi_v*9*f}MhD;J#|k zd(n!0JFy99f&ua}IeGq!V&CVKp#>QhEujS^?v!{TanIv@u(P2wV2Gu|{Un`VugtT< z(<7ZPmoFxqJvhbQ0}ERS9e653I=>Rff0J%1I{S%y7U0HW2Q+Vd2 zT2msr88fNR!b>%|FZYAB8Mda8b%t6~?eKeNsNcvviw7;nW7$7kg^NzJ@P#WAA#gO}ispaoi2Z446QB!ZDm- zH2x$|bzJbjUT2tr6KH{4K|Q4;BNZR&OFV=d%?&e9)Uy(QyhxwsSS zt{L<-RFEM1$EalV`z;^+(&xI$3-V$j!U?TZrU0jv>~Soy9sziEbg zMsB|(haE8JN0{wk)+eS`X0X42_HuQGbUsDAO`i!B@I?l=Lj|ovZf!nqmA*8cJtDOt z3nchgh{q=RUC4HCx!O&W$51We>d9ipg3iXU+fYx2B5m-_qR8Bq4V4^owBM?h);k1$ zQl(LII~MusA+wCcoC7V6rx}p8gv~%Pypu`2so2yl^=2ft*N9*G-l2?3kx@sC0Cs}N z6;=qFUXwZ21KJn5Ka5AnCop$0`>`Iw&Y+K$A81wPi~&fTCA8}g5`%6@#}jb`;I9c^ z8b7rV#&opA%0&eXM*FSHo8V8fHAUQNX@3G2n3evkHl|Cx<^C&3YHn5ANo0o6jcRM~ zwTEP9r*?a|f^Oo49;} zkxh8XDZLS}419ki#<-Az3i7kzs9<;|4)rCN$93+AOh2`P##5eQ7_`pdHYOsA=4@?T&HAx(0YbwGy?L8m~1JQb1tKVky z?!!ecO-XL{DqHNxQeVp2(cw9-NLniC44g~)p?=!=`tZH4Hv(*<^Kedk{GiC$ zv$?LGbq@HTi)`DYhIUMa)b0FW#}&GLJ&J@TKG(ru1;?K{0u`Vo)LXH2Shn+e4RRfT zOHwRF>KnCgBv0bQ%#p6wM+yOf-yBJoR#O)%v7?tM^U|?*?eaRqRFlq1dxDk8g){D< z{f=}2wDi8lfA#>nXkI#QU!Ix!X;oGr?=nIB8$xNMNzAv>KGbiWk+xamGy$@e`T!%M4b!R~cjOwROYbo&B!nfZsk9tG_b~>rxRmPfb(5%l&RG zmmo`l`iK70oM0+!KuqteZvb-acn;4T2}>)HS|yJJ!V81?z}t zmx_c3^QD0ehfv??d`Id}Noe33@jG%w>zY*g6O1dkOI{rgg2VoCn*2$4!)WdAr(V54 z1CGA3?>9QRnS+Du`l)SH4+D~j1I0T)UIFHAnD4y^%(T-D%9%GT&UM$5X3pvGJaU-S zvaX!NKOyZLY;kN!7Tnk^ycpTAC*&7+ad4RKxT9=iQb7Y{?(e}ZkQ5w1>BW^GGkUQI zKciQA>a;<$nr2`ra$a>B-ON<`qw2`61)!FiqN-G-= z!tY%q{!PtdAK@6LZl7ptF7Pkxwcz&zk*r~H;WU0K;XagXXi;WdF!adx^-__;66GwU za_*I93@Yb(xg)1XZp-bcx=krOt`wLt)+Q^33@523xmg1WEGnP2rdRD^WtS9AUrWpT zD^03E>c(9vJ&>T1Zuxi0Qx_m^4=XczOkhCoyp1W*8K+S^)Vajw?8xm;V@<@+`6Q)O<{Un%Ozadp$NF*UO?4?BGTn+#awn}=|@ zQgj-0kHSjdQ87s=y)dz~2U$!-y>ih7b&T@>qRqIgFXViO zl0h;`1+|8re<;PwZ@i;IO8==4se5vG9+sjy<&uNo)kg_eq3g5d*jB=Vxa?dL57Lpp zwFuHZ7+ttyo-{=D_^68q@~6`mbkae%o+;cGpmeO99>n=d#nnYku!g+u@V-w&D=k_Q z%fgg`UuRbH3!0hF#wb1-+e8qCxu1>Iem1~Q=qrKN=Hv&@EPk7=EI2bKc;z zGD^EaM@9=nw512-_hEi3#@RW@X;fe>@eaHpnb~TrocJ{$3 z@SaVB&|%uU)St$A($3s~(p>F|tDU_L2&la2+Prr4K|-~@BA)koo>v2#$;Z>5HX`8CE~$6vx=gt*>^fXK?=X_vTu0#9K_6ig zKml&ch8+m!ftFzl{Q-F(G*==%Ze1?rr#G`mXzxUaKtmOviv{wG4)t5TT@vjZNU`ne#5@a=&hr`K zJ21)yveNP7iIkT%Upx#lVBFnA;Ux%jwyNXsBO98CQ?_>b93=A=unquNFP;hzx${y@ z3hM~=C)W1wfjG$*xlq{T&UyR3wpIpWAa|5=PWNU2W$d73fRx zkH9ub3#pWpLiIDe#mjLC9^HQTQVWvfGk;OVjY!Av^G;-M@ypC`P8dJrfu+M*s5`f> zo+d8DFg|M`^$)7$^J)@dCXD@hF0RE;WQusK&eTLFuxnkX+Hi13KRfQfMoFTh*B60} z>MEwxxlYxZlqB`a4OUFLq`L(5D57-DLwg(HXy~sq-&9z_ml+2(6xOeY5ld&L6UX5O zwAR4m+aWwKA^_q zhbCx?9?jnAuM`Ko$00Ya(b7C{bJz!J5?c+jF0t&;80;8;S@2s>5I41N8X!~3r%N(~ zr|do-(fKp1xU$9HKzZpZ;!Tt%U#v@>O~>x!-kcu#;gNKf3Sq^(0o@am4{?0_mNSti zGga8>eN8LfJCM%4L{9?@1!=(>N2c1yVI`2%n&o;`jf|xu34Pasih-@V|!tjT)^X z8$__69wy0SpF^VfY^#B;Rb-2h6t!?^B<{C15Y@nl3CvHBgzG^S6KzAd+{A%!C4K_| z)5SfZGq|@${9{~}Z8fx(?Tk3ju)jhCoLVzW<)t^$q>lfro_=GHlED#FyhQ-qBWzB~ zZCx{!ZVM8#agQ->FP6>;>)>Y-)@GUt%_BY5+;gi_!IPe~_>DIl*g@eaT5-K)Xjk_K z+wfZun)I<|d-Gzd%rA?K{Q{)0-(vno+lk@1`T^CgEr^ThuyxFN2D)gt+=KEhLLN2) z6C>0lIfLG?C0@cWU{HL&JF@w&sfKUW1$?#|wGe~4;6}kbRcG8BAaCeK4E;zAO{AF3`9WOwCY^D$8>znu zR1)f~rg9D2K;P^IEUXL+HspFLv0~pl4#8zf=ZyHFf?@TOz*IH8{ziIP>L=sXa6KM! z7K5$HC-3kEG!PUtNdtk^Qwom8RK&1)rS^6yV!qA{OW)Qw!~}s9_Sv}{48gY^&Bs$9n+YQ z2G?)?Ybbejd}AS)5t)3rPYk>`R?b2YVsdOsP;i^1S0dVHFJDVqPEpT+s*6BAC&k{RiFcl#eA=Au+ZP?do*k+c=hI zFD)CCeN%t-xSt2xK&XmXzX3(An?hXU%;sg_t}c|sw!;OE-lOJl5^+4*Fo?*nq5t$c zUP2@>@<`W2mp#{&S#84ow)H)bB;tfJmI|3zVV_pPs!i|}c*5&2_pz609hmH+oSaS? zl&WvybmX?K9fgxUrCJu{=TSvD^n(xT3G9rCN8>Yb56@_30JRuJa!N80Z79K}9a<$3 zOjX@nKA(RABNQF5Q=mFP3N2bNrtaAQ~5Lr2$-2+z7pYwk@6n@!U!n?UsHVRYLv zWu#3WYLVQ7o8!@%fHAa6@%xJ|Pu#j<$2jB5z)d~uC?g)(VPxvpejy=#yx>>p`GW{Z zIN0D}DeAwOh%=k^V{Cw$;j9+R(6}2DjmrbnxI93OO99csFMr}ECBR+%HoFtJMdtq@ z>|Nlas;Y&(n2IH^ZTxS&SVm_{pa(^ znRE7I?bq6Cuf5jVYddf&9k6cmVg*)?WeqlOqBL)czMrFxjU)7fy^OyDbGp6)P>Y&0ECdu@6 z51)=6^Ei;@W{YM@OSa_M_kgiCH`n$CcSnl>QwocLnbD zT_6a2!H2Lz(qi-uBmC!ouOmOM3_g9AN$lVMBy1zD6|a=9Pvk4<8!(XVyIO+(K=4uv z0|&3TWv%eNErB~#PPI)jAAujTXXR)?vjo%bOw@qaya)8DiQPz563P;m1LKyzBO0E~ znc_0HvKR||$C#ZPn(1EYaH?)OUf5NnmEOz;0W)Hp1`>6?Q=jRzX_*vtT zsjbc5T1PMnhFgsrvM>nHHjb9__1*Aqy4z^}*0Yi+g$p2gf5v&wFj5d%#$6*>R8r8m zJv^FAFFYRUlMZ?g6})r8{331B<5K$UP-jjP$|A-PO=64Pb>|Urj{85w_U1T!w(x}N zv{flh%D#f@EoSG3-i>#WjrPwjNW4twQlcw54{<=E|7O!Y`SHt*+0uI-E1`hXdvax> z0qh6)7CsM}Z3C4(P^$~dE4Ln$cM9x?|l~uO&i3@g;;R{I5 z7Bw8W0v}w)O$ElheB+r(og_;gt>=W$$EE0_jd>F&*siTP3RKZ|#vY@b`Jr7op?GS; zx&+2c&shH!{Q%C`)HXh!A;lRtW$ELLoAQk@9DO#La};d1ag&TvxoO;#3k2htoHt3T zk8ZdyG~oF98?b%-`Lmk_Wc>YJ+#R~-8}l;Mgo=KY)AX)%uRaqRKg9X%V$3@#7qbVF zbx5|s1zK}Js!@~EB%3OH>Kf%tm7K_IZUmgFi2 z-(7*UF4v2aVB;KTB3x&bPhcXfm>v&c1(}~1JkVau(XK##p|-!a!KP7u*_Yt^^8gfl z4_pSmYnvXkk-feFME?VJC((~GA`>oe4Xq;?NWKW(ZYYxfNTD}9m@kL@Cm26cD4rvV zKO4m}`@wM9At>H39L3c-VBO`EIh#Rj>T)prsU(KOrY7k=vWlv#rlYJ9F8Dm2{!uVX z2G9Cm6k=Cb?04CU`sKj0rhR|RkM?#Qt+6kO)FCT%9$eOl z$l!T!WfYF_nJgTUf8oB-C$)A!8jA2MuZ>FyR+yPM53bHDh%6>YU0R26WS2LWSFnm{ zoB`LG??hCpQ^QF&oJA;0FV(_gG#$Cc9eh}>guGq)PC_S3=mTy&kkPu--F#4Mmb>?Y z1D7cWnZbcVB|F!ednhG1P%Eq3fG@GSjSddn6`0dhn%Lv`ztuX=ji_T%+n*`mpsBl>Qs!q_&cfo+7Gt{QKBg=y=P=~`hf>_vlN_Z8_~)ieNg{MRHhh#6vH z!*jh%&zcObwvpDVAOrFT>6uaN0 zB$diRP)$E9(NszpqzZHM5qk@zHM7~b@v-zQZ`$JKBB~OpOi^{vcFb{;kR;iXRIkct zms$WkII}QtQK(d!;|}B|55m~U1SYs_m17PRNU_~rY2Q0E!4WwWo z`j2$Bgr99*jaBSxij{)qb>v+4@aZ-I+vy6b-*$1;Z%kB2@%Ll5h8tEoGqNBhkp7xf z)Y25LfZC8iE*^@iD(;Zxa_~RRm?4X|{^qpu3|xJOKG32^^FzIjnV)f63}X`gAeZsU zd^2-r=7FX+$+K=KH&*G>dcbt?mY|Uq+NvMoy-zy^5 z;!)&UP6S`u&yo6mpKOJEE%FdnP9b0Xfxp}2Mt{q^0Cvjut*32#2WJMlAqUFzADKLD z*ftFkEqBw2%c-Lxog$+~OqW;>-zVJsGtx?%E$fnGGQDgrh#uliinrgSHuC2P6~3u9 zHx*`fSoIdSIwn?skx0aTkOY?4&9o~qgNPNv@pfro;CxlfBqOUe&mo&!9)mPAPU(W~ z@)r9bZEoBrCXx0E=X|*hve_{;T4{aeQsPnR< zIQvJbMS|otpM;H1F0!$s^tZ7_M9o;V@a|ulXv`>WQ~77Mi{;`yfeRwDzs-{NHVJ*l z0b60N{DVx~ENfgc<`&-vD(ZF>m18HbFb}YbFSknmse@*JL43m@07usD7Vsu8D$RUg z;46)+N?f1VZXh?l2(zXVMIik*a{;cIWA7_QVwYW_mUq9XJfg9#UU~sZK6iN-_1=-fi88&+hbOLl@d*(I&4Wji0gPzLP9DP^t%%y>G7@do~ zf?T;BxGAYfv1*O%W^kb-TP8|is?Cvjg=7WJ51yGWKJ3-D6?I^#Qc4FVEAp(X42pgS zOQ!pAv_VBIuPJPVIvFOi0f|A{JQ_dFd#&@6Z88@y9~2!=;qv3bo3{2)s{AQAq~2`` zU#oLg*}??D z)H=O)zRFaC8{8o(@-DB?KM6uq%A5SP%YIh4GA+D@PjGmo?}VW5HQ>Q*j<##7=)a(! zsmkZ@1WsltRsCCFxG29GM;NJWc)rIry*jkZ!-*wpuX3i_d_U_(n-t3G1s}whO?_Ga zD$JJOW3sNQ)afedEOX1X0g~1R{vs1>`5iGiaS$w(;->pAv}2aDKHjExQq}BGsbbKy z=J6y;cDFQ*F?-uTmQ3SNDw)o%|EUZgV}(k4j6aXPV{SZuyV<=veM3XXn#nEM30ooSa@ zshw$s@LjRx(%Jnffji8JOl%N-v5}`J^x$6Z$5H&p+q*d^bksjXjkk@fWOkX0DPnnW z^CU6%(3&qHtWz0@6m|wD6XuG^HrpA{iPFR$?4!@ozWprO)V}~I+0D8ukgGGT zK+>y<<)YYM1eEH8ajNRMuTxJptX*CuzLG}Rtau=;O)9Wph^$qKLy!U{2o>xVe!LS@ zYrombG}m_(b%fc!2&Qy-`$Z(iUzhh;l0nZJp@~}ajYR4-CpZ(E6-*=YX$MB6zAq9u zAxV{M42x$c@X} zrGS`FF=L@goGrK2 zy0)p_l#s@mm`?exNc8_ayZZz#V@yBEAB37WyVo+DFl%-q3$j&P$m;COWMQxu1Ie36 zb%7(Rt&Be{OM`S+x_N&U)yEg-@Znz6Cc`Th907#Ta)Lm5vSEa}5vg6`!lzbgL$B=Z zY{;^2SemAekE#6bz7jS54WkpvfKgN@_FbBW<{lu}#^`}8y#j2LBvtWy4fBx4ymhf0$tm2$zJwAQrbQmL z#m~~i?UJrddbq4zo+YzAt9M3bXS7SC^($SKX030NPa{t%!2S;?Mzv?!M9C06mRZCX5EgQF^Et16LG=x>%}%TS`oihevP z^j18x8(;9MCo%BcFVcMxX{!+kF{t$cd`mLNo_IwH`=^? z)8`>7=D)h>^MA@QMRT#O^TG)z*E z=pz45F&{w~POpK$+{a!zleo%HF~L4K)MH8IEsKooe4^AATJH=+N9g@My=chnV7_}k z()(YNvBw@*d%171IR&_bT^8yescbMX(iSj{=S3EbP_nk3UZZ*arOj!s*da#VW>gn& zHEHORte#_Bmu044lEEHxf~R% zjiqSY-stH!o_|ydDw$XSXuN?xGe$l!?Rt$FBK3TS#OHugX#oenpR! z-;uZwdrSdFRXAmq>d#9w|4ymlcNAFvBQ{7iGE%z%`t6SxP{a`5NF!n0X!jfLHzLoB z7syn!IV3OUWE;R$#zYwtOci#G&_8SWV^1%qi%i^l5~U5lVvN&Knmr@m93=2D_sAerkDo#-)r5yJQyGuy86p zA4Wg%8f)ZL+t%3|_ojMtNjhbNM3tHI6c4C1KSLcb1>J80av-nSO&Xvp zgzh;S{m`qw7mcMi?G!kI%DaCJY)R%-s4r3LZ9<8Ni-i6kZa~jnATNT?ayk z#VvkZbsi^jsh785Ol@Li#7TxL_8f>`bdXznxiSzf0nAMY_v^l;_!Ixfb|I=~se=Al z&r#!t9*WTOgrY}07nGhQf5O+TT53xfMieb$BF%Y!rNByD>19z}Drl6dOyz%d_v@b( zo$74P7tJb^Tpn8YBeva9b#KK{I=J-wmLl2I;d9X7aS1UWiXX>_cMhkjNLLY>#L<`__$_xd@JwzI-arDEV4RYw6en26yL+{PE*bGstaYMlhd2GSVA?6W)3cn@K zvB;eG6a_w#TOIk&AobEV&GEQZP-u&MyR_!V$c%a|t!ZbAB-n9dY6j=ksZ;0N)C|`m zea+jvYt2^@-&r9uuB6!&!9io zbQB#7b6~py6u{oC=wL-%nV3VE_a2g21UsZPi)mM|KFSb$mA6`>{PkMB{8!qh4sBaU z`=w_Yi;Y!LZ5xN++b`pb1YO#uZtU&?sYcbl%`O#I^JXm$^D6QYJMPpr^|VW<#P4_F z>wjy^5LkMJr%mF3x!cJ0NJ#k$+RN|h3t!^)?@jMUKk({#SrWWQ&(7g@fxd7Zj&1rQ zx2Cw;@+BfKmuDeP-m0SNSQZ6GDmd&rfne?rkG4Pwf4(-u@>NazkVHklt#WTuY?KJ zZ#r|Dxzuo;otO23I6EVZLarSuoQV@kS~XMkzi6APekGF?&FNLOP4&NWr3AiVWJ~`R z{zV$mbBvn-3)-Yjh&vk2(_U7!+amm|YIRBZOAQ_f|HE9kBg5(ugA{3o`R~ZQY)-eP zO-6WTUg=q%>y$jekUAvjU$rYPGw4rJ_I@Kzdi%Y8SXd({NdsE&nA@Mq z%|EJRtr4L!_@z>PUZSu>i@Z!urfdVdWf|(#&XOR6H1-sacByWgG@^`?#O?AD`x*n; zCYWM32J_;NQ>JChRxc7J^@40fTRJ=_lhwy>rd-xK6uE60) zOb5?+yI@Fiskg_D@WvtQavqnqAYDO#a?C#etTn$3WlC&cd3D8pB1Fqsa!HoB`7rD--gPsWzwRtQ0N%f`(Pyt>y0yS$C0~#EuZr zT6H9NMhiU9vh$@fj_M!12KO|`fxp+0-5GR!CTrrx@((y0M{r5`Zk8Q6bCyu#dfwxx!L=;3S~sY$Ap!XV>uuP zy0q|<^o~!;Sz?}vs(!_*@h$?)yy}w;}2$je@{Q-<%Y!dNKrf-o+Uo0Sv5P^FA#49Xk$X%Y6kW5KOsm}4GDZrZL*UUm*PN8SkXii>?tG^#=1;bb<|5Gl|DmKP=RFG)ACf1XN{CI zWFTn$Ew~&WT%Y2x{{@^gd7X;|WQ?(or3I&Z^qqR=V*3e~KJ) z5YFy&dz*fAk@*>-})GB&3UEi~aVcINJtmjULBTF{arU=C_Ek5wNiV9o)Fwz1 z>d1oAk=|?+*pgnz>}dq)M~ z|5OqFJ_vtT`El}qM#oFMQpAIkhm-Oz-5wbd#=9@-)wFt8U0!5_Mnp%d&?u9!`e zKM#{kuSlgi@pCyHg~)$dBCmni->92xSG#rTyr@_qq!=)1ISJN2&c!G{M; z>($AD8hhkWM>j0eKSz$)@7{&~naQ2M9;x?V3TvG>OfWuim|zT3GI5;XiOs5iIeJH+ zeWGCSK*81kH4+;L33UhZIdixW&7sfDrsT`<;mAGV z@+zUjpMXZ>d6FiJqi3-c2#kzlpH`I-ylT325*3?NMCOdCT)3F6p3zJiR9J|Vg0DF$ zEQu;NgR|Vz1Mg$Y0XJ?e8ev?Qf_bsNus6I{d-7vQkeplY^|_u-v|%=*E$71%jGE$b z2S^xauZ0eegfxyPh$P+xKxlx6IwtGo`&+Ls=qx{yqHX-ksoCRF0(l9S_)^>0Pnnm* zxKRDB^Jys3`>*CPalobVRL2H{T%ra{queg9KAnOgH9uq_s&B>d!89 zl~IjnI@}#CIhoOwG#~ zYp360UGlCpffUqO5-_z#Ut-wQfualwGH>4GAg>md4Udgot+{S2YW$fF*$FHx4w!+5 z#K>R`8H!A7JG?}p7k3hL83C8BgQ`ur;YGM zv@oOi!0Pdh90YzaFLhzg*qYqp1C1kB^Zk(5me$*Di6T$;(yd-GBNB7x8)3(o8LrCq zyLme`J0}G{Wv|a3V|J*4ak%63XgHb#|~tPXWkC1cB~TFE)-J+}F!k#{RaW0;j)%`eB^C|4pZ8J09KtYk06;?`&@eFS<$|`=yHV=0O38@(Lv^ezQIYmp&XWJ4*I)Dolbu{RV>>#)K1s@8}NzFm9!oR+NB3o}py=j)%n za!q7~yY{pz7!Rbh=7%~`u4}o#`q1%f)pTM#HEL4I+jt`?iP;gw>sI)LTp+S6Ghgdc zD8VxKl_qs@?Dg|1ivkxoTO&G|R6g@ZiB#%D0`8CRgz&VNQD^P-@ZIu0m-mpF*)E-> z=Amke5@3|E29hN1Ogpg{yoLoR6?bgq`!@HkhcIYNc{Wh8@&)>e4r&``r|LT$=28Cx z!C>@F91%BWL*9;O9zonADiSF)^Bujs*ET`WYu?rucEZ};>+$3@5?=mKaZ z0;MQzX8km(j=TGaAALr9ai=|`9v%9vm%qyKYQ1VR;)3V&sy)S3n^$X%-s19C*^5+V z=~agi(=2>-+QM#q;UPsB00Ko&+YH=r^l2}CroiDz#qU7errJEMe4A0zS3w(Y$SOLR z$&p~Bw9-*}Rfo!fV{dzcPU{rXcZdqRVbTU^Ng)oo73sBpP*Q(lb)eA;&0q0-%GdjJ znqillD0H`K25#|Qr5T%xtM=H<*ge>cG1CI3bkK)3VK}AZr>F*3McwZGC@XENl7k#g z5&xX7dGUpZI2B=ini}XGTYp>+n0oyQ^C)t722AN-f2tNg+^DO?FZ?YQC#TuxI3j5} zF$-%0v@BR42r26d?;m{I#~VSSG2zX~mZ4=m=5>t(cx5t%j!x<^ah@v)R5B$2>IQB`y*^p^8;Cjd*_Vg4e}6g(B$+c_N#MPqlkN zVG*bM*KQ+h2zfeY-_T5^NFOnYrNAeXO&vC{5p{!fkBxc1wsXWTXJ%nZ=iww$IKDcs zv8L&)jEj}YS9;^k+{CkT9NwMDx7gQ9vn$NG>*?LkU}dbbaJ=zrt23I;p4DJ^rZ~xT zrH`yg@(!k`%x=?nE>EzWN<+F<27iMfguX#W9K|Eg>6q9K;!D#R0o<4e@#7$bzA&Su z`Kyv>Hp0SVII!lm6a6YbEfeEsHT%;&fvSxNwW2-?< zQk20lIOp{RTiFHP#V>^iiyaFU6yDWcmH! zFBRXQl#YZ?$GiU;Nhlj-wSG{Ft8E{>+U1q?K>pfgfoL-sxAt|so$_`Qo#HQJnR!no zR4X9~WB{*25cRe4G}fwWs7mM&)wMMlEvd0*p^4;oR!qD=P?juRkrr7yhc14C zb)E$F48gAuqCDmT?8DR4CNSa47QIM|tbW#d;s%#V^9qD=>@YVz;tf9HiKDWHSVZQe zag^S?=yMsqQgvgCb$8uJb2I^wHE~jeJ{_sAF=-Jecs%AG1x9Ce@anjKDulG9KiTM}46L$t~hiOqox!a#8I9elIiS=opi z_h#29RM@dM$r1V_9kN8;#%nm9F2)aH@fwks(t8D&{W)6-2t``d9v4dO_mlsd64d2Y z2}l|X@*w+#gf@L5yfp?IH`)MFk^sJA1Gqv*i6dEMTH-uG+w{Ck;E^Z4c;fv;_$O^C zKpG(KxKx&NEu3;~#|yejtg1t5hf#x1s;IE7JQG^JQw{K?vfa|V*_@#6jP{Q}W@>%} zUMbP%?5$8~oKp1J+NdS?Ozl%_iTj9RNg|#xoHN;;Fm6;@DdudFtFZp-U&=fkOQd`X zd0mFdHvX{R#7cx9!jvfhZ`!83GzK3Wkd0F0j<~y9KM?)c8=0GvqHK)Jaa3H`uy4|q z(6LE%1<_+(yG!XVW`OjeyhTDT`V}VwJk5`OE-0QQGEP374f;BY3m>G=xGLVZC-{O5 z&pV8ivf+_6z;nUiB9QfxqQd@wJ7L}3 zkqu%llQ7&_wAj2BMFRKiB-a%Vy_~c(Jz7T4P{WxY(z&c^2^Yd+l?&mX|F)Me zZ*X9G;6qr$A@*kxF{3KUR@N~bq_nML9K&qZY*)*LgLX0Bl=>;-D=^y3XDv#OJrey< zY8IIm@GyoLo0P`3T*wOixm0Y86bAX^*(UVFo*$7L-6;`!3aY5ukorKD)J!H!U(!>W zc3vbiG}24X&bjG$%w|Y+W!YmsN9zVjzHNO3;jc!jHQ-SFA|-3EEnw6H_$L-HV)A2t z4ky1%)vk4o6xVWVdP=RK)rt|!JB)8=yA2{N0^VW5T&FlK{6EBKn?46;S}u$|Pd_Er z1>5eIsxPWTg_P6FwA+|nzzVh{aJ(Pn$n6DJ<2g)!pNldGd&Mo1 z%HuLd5&1UUp{Pe!uO+GyTJz6{)c4OR?p}RJd5&b|#82E7VeetJr3%V_ISNRv`Huo< zLqGAwC+ok0Ex;P7)|}#J!m=^&f3NtY_B>2{)4=DD6b6HZ>Oj+3`DnNc^dKz^2G2zb zd}MBsdrDZEXYQb9McerZaEph+&Fu#6Sc`i&r22&iB3b`#SKrt!;M_;1Y!?8jrPAqk zbvY?WNM!EiDU-XoNQ8H8hUck-bhf;k>(dEHjL}D2vbZ@pn6@;z>4eEhb%k?C7^Kj#J?!AwmObEq3oqF{ig)HN`MHA8^>`aL8l7VWLYlt+8~MM>R0K@E#EthW6k-nr97wQ}1Vk!w%4WKSmO zXEISXyY3Xb;03kqQ~9c!K+j&vi}@C;pRq==pk|ecxjU=2)OF#?JZJDW%knQKrF)CJ z{ps98BWKnORkzwMHK$lHz+Aa#Ftq(jsizixk&kwTFdL+)Y}seXROG;QUvZxnUaopK zmzXVV^;{LGH!oze-)5}MC+u~Ze;|5D+-B$#Wx^U^NnECfvyM>DaPHvzf%OoY7zt+( zkEe5AyNr29n>`rXQ@wyURIXx`OAEiFLMD*BI6MJ3T6h~FscZ9jkIakDQ4?qKE()P2 zE|4~xfzN?k`AooQ6&PzIN6DIe!UL=0s*EO}rny$$6`A{EPpQ1F$nHufEdIK9=)w#6 z`7o7To|1@UeduDNIa0vOwYuD^VFzkIl-d1xa&{kd5^E&B^4&yYD>jF^PTmz$w|l9w zYp1C`Vtj?pC1&1snO!y_7wv`G$fufE=I_|g-(d?ejqqjE5q3uKXHn5!B|YH26FH?b zM+r4SxU|~#3yEI&joJl)La3>vg<}b-vINT%+l_gx1aX}*LjWo%TUdzrP`4_TR8BJJ zUD#vwqTYX2LD}RL#4O%fpRFG#nYBTX(?8qF=;^iND~t9fO66K!joNb~j~H!SD3`VL zVZWjrL&z+)Ms9Wq`~&*x^_LDQTvbN#c&(}e#zaYmwec>@4IfPjrnxxFf-5;OLoV*o z!aIPaOra=P+FrcNKYvbW*4nweyZj&TkZKb)k7!l(U5!~{iWgZg5!Q6WvsN0RA27Xi zuinWaH8x4YXIS=~3(_>vkXkIcR=ts{0KYDE(l*_cf{3*EO?~c9=LRymc#_S9JDeLL zp7-!>H}~>S#QYAI z_OIImGD8}T$P4H8sJj}LX`60Ni7d&-g72+*T;KE+r>wjnfQR7|#j`ytbKvu4XN{bl z5l9Q|%$Z{yEZSTAmOmB06x7-tk6YKzjd=celQDNDQe0CxF6e^cX}1FQcsNyWS!f}y z+SDQg5_wt;##{9ZRCxhhU`uI%D?&fOmG0LE;OyzD}Xla`keOU{wF`=FL zbF5dBXu?)tn72{3BQpdLJdaVDrJ8=CxWN-BQlh;wocu?l1C#K9!-W>~yq#rY(c~=KseC#g+16^JjJ`ZBjzVO zs%@G#Ch{;IM*8fs(n1YcaVx9!CJlpV6pV6g^?{Q5zK8Bb#HvnmtdNr&Y9j=L4_I)b z#2I?EFLFAzaA(_P#KJ{Ip1BI=O`PuS;`H)z&T}SIII-tIvxw)aN+lM!eXW|rG2teY zbvZk%F7Ci1(fj&Psw(X3xu;KR=5s#j2&qrc$HtXUJF}O|Pb%V*&)}=BCQH?u>QpWw zeSswWP_<&Qs)mZ+~J-LtAdMBi|{w(W9<|V8fv9+>pIY&rEJvI#w=_%)) zD{MM(sYlj&VNGQ+!Rrma?H_#GH~1#oJVu6evcjVPeX< z=M>xKNA~Ipvc+3rBXY8~s6lM&9+{!Fp;hO(135DL#Ychk4iiwg(7`6#tyK*-Q)y^y zBNbJC?gHr3VbM}KWD@o5z0+=G@lwa6!o~>hA)_ltE;L(a-Jgaz2k#b77NI6yV zPMP^?W9SIfRIE}OQ17r{ophi19mIZuOJk(WY(;}qM-|@!c@R4}ZPP7d93;Cghg;ZK zI@OT|1acU=ugq#qO`RbVttI>}Fi*`NQYF_DTt7t6o7>#l%InWV%%2S&wuRj=!wn3vxxvU3u-&@xD(KL0h@(t zA?hzHUVTd=C8-_5O79kFS#ebsyDx2Hx8q7f_NQIm7Dt{V%Ihbbcf4~w&8z$sok|#R zCeN&X!FE%*kV7#q2D-SA^FP3Wfzl4-;BkK~EP}j6X6F>!o=&ez+Hux-xQ*3I{z0A24aQ9v;V6^QHto_c|#sotP`b!tz^u~Nqz z^x(fV2kl{>Qs9__KBvqXGq)iQc0yxl)A!s47CVVK`5yx%En^=85$1UZY%)w?<*@Y%-NOy5`qH3RGA4=QvY-2^eYJb}{at%Rh zulDjTE8obTK=A4J_?Y|_2gUf%UVh8HC$;=g>%#qRd>aoMg6u+`sOE;&+yeFw*OFO3 zw3pg1u`Io#O?vqM$Ffuw$e~&?Wub$XEKkNx0Z>*JoZb6Z#-?8t^3RgPX?taFTGhu& zQ}rp!3bIYK;43J8q-Z}Hj!|1$+_$VO9*AqD^%>N-nLV$V;&O0D_pn{0Q+vMHk z6mT4W`&r~kNxGjFtg+_%Tpfduy1Xxt{8Ex}nIlhJu<$K^=3Ki@UEb#j5l4Yt-gQpg z=CbJ5u_6GmCo8u+#+(W5s@Pj87Oxdww`X5$JaxixO(1oi)vuqn-1A%0xdjDD{TKi-+{!YOaVlHsF&(h+M6z*=ka@ zlae9kFiH)z3YAJTw1)2)+0sH|qO{w{lNQ-6lr|f4-}1~}psUd0oh!z0w^*{#?JA$j zU9`6(dn&Db=nB=BZ34v^%v8@?6<8Rl;cSy4^_^wWquzFT<@|XE{nms0SzR*E{Vw|1 zmUNtr6*#SaI1}$X`&waNFG=!baAX$->raY4WJmeQ3bW7d0;Nye3C1D)j-W`@>$ zOi-eQU2U^SO%NO1USo!IK;gTEZ{g>k+=v@A@sL;iF3v)basSC0gHM~+1&{!VJS)H< zl`L*}*jJ7Wv>gGfM1gten{vjXrte|4f_-irBJ9F|s&YyE%D)Ltnp==e858~{b;V%{ zht_J2Gg;JR#g!xFl9OS!i~4(2r!PJsBlM@rqJ!=|qYoI_ zeS8i#xUzkmV0zx!_IFA9hZfrdK+nJ%blEQ9P~HZBzL%@-CGiu@~Eqxs||G z#o3_t4+SMs-1Zz&N6HUXh~AvDwtU5BNSIl?PT_NHsJ<5(EnK#^B&*Aa&$uj^DA!J8 zt+9DJ*lUC(Lc&2ljBIHL=OlRQZxwZ9_Gry>Nhw#7 zQBb`lMd}VHY zWe!Hb6DLqE2gXiRz~t)t5&u2M;%6^XTv)*xRd+X$$XC{Wcv%QxVb7XRz)2Ho!~D3i*e>s%3=^v5_?$sB{F zLRX-{tiGu3yh2A5PjjbE2UKOb9fOS6&p;|;VTWVbnz~RnIg}sAGSplGQy9BT62RXq z$TcePUw_=lH}3bq;X{0lJn1G|##yxwLs$$}TNmzIjJ;~5`Lq&4DXm(&bbWcRn5*t5 ze)MOgET%9LBTKjQY*f>i4T%4%y+%Y(v%0 z^!-b;7Z2E*0mn>ry{gT$^7T+baPn2-+6?2CEOR-PsW5;1U+jdqV0U*;A!qysC6Mk? zF;1}_;3Aj@?_KHTW|S58P>x{gx!^HKrJ@+5ZlNu_G7&0x?Ry3CsZ8O0DMvL)rZQY0bpxApQA**ji8O|?iiM?9$0;ngh5BN5(VA2_R z;_t1tZ4}SP-WS|O`_fUklXLqdkw2vu;+QI*4tBN+v_S&xX4CS-G0J4Q(w;iNOYF2{ zll-Cnvwm-x|9opD2-Bs&b(JBUCC#q|i}Eff5u4)h-aui|8*R1VWMWqB!aP2&j)0>0 zWA8_I<~;U(CRR6@XXLJop$Qq*t-q(Ov|H+{yElKIOw-Cu{T7e)-M0NQud-D!<;OX< z!-*rTcdAZ=-v~@Cdc&wlH_B2e!J+gNI=nD0=pca;O;H@w3++mkYY2{WT`omTEAI_; zjBJ-;)XCU3nYYE>S+r~Q1vpewrp+8$=UX&Zp*=Zj-0L_FLyxOVXSsb!x@xEA4qd%f z!+}d=JTSGkO>`rQqJ%oqL%scx`~U8qA&3+4e4|~mSx<7ZOU#nYY(`U!RiZJn@@Grb zZ4M0+ny+|)YGQSji$6#Z zV6&7>!o#eIHQQPjt~aW-skGPYfsQFv$L%a1+q2P0hF$z_qvlmTu=xgaGCGneHOG~x zEj~jixc2fy`Khch??Yg?ZqYh9*ObFfgbPkOqP?kH+a>WK(^vEcl(;Bv23>-OVz$1E;U-XL8tPq5A1MVx+*UBinTB}z{!sn?jA5#U zuZU7YmVyP(6~Et@wt8&wt_K~}gR(qMBVL~v~^9Yh?qo(%`n1_Xjs-ZYW z4YvQsvH3;Om#vnvi85e>5os5J$~G6boJOD`GzRhY9>2 zMprKS<%vykCGek^tcYE)*mcZXBFoN^%ilooP*F?5Ah{mXEwv+jmvOKiGvrYQdp5^0 z!%_BxIJc+r@;8J|jn24PqXA?e}5f?YPo^~M}v5}-s z*1Impp1kVf?9H>kF}He|Grq-2DIU01QGt+|VbAppJNdo+V)>w)L@sZWdFhP4lebWO z0Z3s%YHei8LR!?ZB}1C<%kG|!?d?K$`vj7h4}+;Nxxm;Q=M?p0yKAx8$lCmu#CxFV zpV9SyLe062PTZt9Rk08r%fuIoWjEV?ODqWyu6+)HKnQ`j)DA0S1S})DM7}7f^WU-U-TXr4vt@?vF~Grz#|4OJURBe z7qTSfr>gQ%ri529R*8+U?L5)AXP=de2ZrQkxaE9^;XV5jtLD?{2E!_DKGgr@m8%|W z+Ml4k$h3sEw)uEhL#OA-Yumj%Y~5Uyk`L;664G|R3YKH%oFY>{c@m^JFYfr>)mc8^ zRty=Jm!;hh8i-q-VEq7GU8H<~t4YnjA;n*YeezQO;cy4rA2b1w734E*cLPRr3x0m( zPgSPN`->mhpIzRU2H%>UBwgO1^HvkPkRGx3lQ|qGlip#f|_&I<5($TQXAr zuLJTnHmu767!EKpXPG=q#)YTKKh5xGA(l5!*dZl^|pFt-BT_9V=_b(vpLpNS@^ z5wSO$PCpl`=3;1G+VKj_E}*-{E7uuaUKIcgU&oJtJD2(_tv2!`6o)Ai#z8yzN(j}O zPOJl;^sw-{k@6R?=i-I@uDZFn0O|_g?|kZOp5V>=*5l0M?ULBoAOUD;4Y3i5&ketD zQ{b;gSOSa7UqCEcm1``_XK2*8bV<8hv7gfoMoqpkUSGS4gleq|tzP>Aw-0fyJ7>j7 zeeG%ipkg0Nvs3L*e8}nzq)NRha7y3MEJ-#9fE8)F`Zc(wFMKxvQcTMqjj%-ayeJ_h zYbCj!^3eIl+_f(hs#L4apYxuIEIw&{WX#>*1V21tvs5;gN-a}WLe^zsyTZ=`LK+aM ze<>1qo{yXSS*ep~w>}P|O0K$AUBYfsBaE|v=V24|j1>E7_&7ghy8St?M0MJO7*9$C zjfhn3^ns#N#Sv+CS6K3>a<)shu5gg2{ON0a>RWbw65kc}J1M)ucRFv{Q&+Hd8ma@O zsSEUQ3sLH3))a|RFj7^?#cQNIea-DWwI{_u&WOmnp*jm$m+HW{DqoLC+4@>3M-Nx? zEZ((}p^-Pcw65^2yi3*T{nkHvbk84C*9rjZ4>mYO6|Uo#>UrF=YXL#}FI{2!FtWfoZ^}BdPq5pPy#$)|#HsW@V zg=N+itM^zJ!J+MU6W~&Y5TWf7$@RV+le-gZFAEbp)}|9LWy-`0!pR5^h-bejndm8vCD z3;!4z&5hio$AtAK#Bd2J8PIAt*^C*oz#?JKH2(mf@k&N!r`~tNd!K}Q-R+VMJG_-S z<~E|lEpTRMXjg`1>3tz9CDfa$D`5C8YF|xK-3HYWcnFt`$NEDbr1yLh8qmmI|HbS% z(NA&^0J7jqP3>fh&rNo^TO}!03x4A24k(g~%pohsF3_$-s8p)JT?v0Bn#H3z?1z1l z>0DO&6wih~Z+@B|C!CHTT!y3J&!y*sfQ_S^m~@G;tkOwC0~Hv{+EPGZL;?1_{fhLW zJSB&3H!r?B(|D|thns}vK8Db~=Y75doWXFFh59Epe7Z$WPdT8v6)1U1yl;Sdqr zD*zO_uP1Cc3mP1IQ0V|GC$2gL1C6nX@s|!r(ZVkX$u5;qwZ}R%fF+}O=Cm_{UG@m} zhb(XOQ*Wqul2Vw%LAKH(V!%;2VOTCLum28lN56!}%88B}h4%5ipP?ip2^@n=X=S4qF4Oyvr^O|Nd z*x4R@BXoAm$~?oPlFg%+C64ZKSs!lU;2J$F0be#)B2BFuYhF%)YK-*oYEo+9>#3EY zI)jCr5IuZ9&o&uoIlShQ>V*9Sb%j^)l(L{mys1y7nUN<4( z1hfgVOgTu(gd3y7j*lp42uy=;`@1bXHqAf%S}puqg6;RW*XXmoV$!LuYdW zci7YNVgi!jE&U91kf6{}dMYLQX-Z`7h}06*0PXPys8{4coV;)o)b+AzC~)u-WVlIx zW>^^qLT5(@YV0A2;!XZb%SdN57?Yu8WDhCh5G##c#!W-UCDDpQp@B5U`|f`RyfI{@ zM?Xym_{c;9*2{Q4I6^g`@m~Ws({VJ^cAV*B6NkuJ8Hjcn6qp%a@gXE1x|$|mI(g5h zX7=PQF(Q(stru|ZGE0p$f*28x;ghc~&eubKb+RT5xW9bDw#j^DGtuBM`jTpph>vA4 z33s#!aS!~!q2_w0T4^{l*~o;FgEIbanio-+esW$*XdTengqAJ{cPN_rg~YgEQI}2m z-_&Oa;8+7iCO1>D%habNk*dV*dH>6MZh(rZ-p+g|{XXtvOXDQl#|&TaN$N*`8pr`dU5fHhc|f8K1> zjDvsql4i{J*uBy6$HJX)wa^Uj#KOZ)zwfk1KQ@JWHN7Z^ASh}mv-$F?}-B9nhcx6C1@ga%qcQf*DFkNdUfDNU4 ztrTT_O#~4BOYBT`3*rhuYfu0<<7$tn)zh?Ha!cj>T4=ir4V==qXn~dKdP*`F_1R2|9qF^cUBc9nZD|9sjoVm=c(syxUys1>;)qH-e zgiKAg9E8fmMhk2ulrbg>*Qa+E_FOC}Rm&45aJEtV)b{mEx?0U0(T?KkHg!hJ+b;67s!wD%zfB`nuoa;?LQc`*jsst2e{SjpXuPw<+KvLUe$u%)K45}K4*eyf<(@0gC>J?OAs=Ztorz%(zTSHp*2_juQ5*ngE+O9NJa|O&IGds&EF{S9Cxa)bhT;3Jt=!(}uJ8 z%i%;79KcYk)7`2<0JLGHCmJ^hYn=`2)h~y&9i5tcPrGy@s$pELt8Ohngr2Qk`V!5l zdw;uhZD{v|A;*|*!Nw*>`npH&a(9P5x~5&eBA)XjKQ549`l$b!MsMZfMb_NSWmL7W zzhdzs^Z(R=;*!9;9Awk`3i~-^6SB&{_{jZbp@C}}G}+LVnPM&#>MXNPR4(?Z^wY_i zpa)e7BBnd|D+gBS*fpIYNfew@xW6KzUd8qI%?~M392%I}Fy1b7E2L69>pLLrc-0R4 zqX0nuP%yPu^KR$R$x+n7Mk%%7%w`wC!whCFMG1~j!TetYDa%2_$edKrE>xf6@=vQY zpCNRqIu$3%k0-@Bwr@H*TiiLB`+PLNvwB+K&@!uVFmwl@a;nuoVj9@n8R}1O@a~Wu zpHX$F)ANm~=s;dz9DPy|bK?I|%`>p_71vJE6Y^)?CO!KZ8gla%-t1^|9@C8_!z}g>KoN9UnR!whcH)J!XVayhhX9CFlGaUr0W5x6X@_ASm zqnh6E!3NQ>i-*S4)bif<22?kg9mHD4%vr!fD%n++vm{b~e2H0kZe3;*KuO6)sp9m0 z*U!x<((GjtBU|BQ%t$BGH4^1i9bkbpC;Sq^=a?_>Y#I=1 zt9NNnE{AgA#VX>z!cAoZ`y+EFWw9#_q(li0Ngh(0IAKm_m1nO^wj$R`^Zr?_CCk`{q-@eLooKb%}+iIij|(MVIKxR3?>$j8pWr3TrRn! zY;h&1f1*H6X52}U=_{w14K!W(C>h%(K}82!p04G$tX;m)V`a{18qh9bm3%u=Zq|+R z{Tl1i3UlBdHA8AqkQX&{mLG8QcIXP;4tsd(ox$7Dbl#4CleZ63xo}K?j=wFyeNF;6 z^m$6d^rF4%e7w(`TV)0&w9c)H{Y(-?u05;Dj$HeX3g7=Bz?y-jP}+)~(C4WQ*VMu- z5mwYuTYPJHf1t2+Zuo$c?H^9IzgPI`NaFi04|9=SQ7cUd&5Acw8xzaDk{arNGLJE7 z=ya62>DrDwse|6Fy05aR!|WuIn7^r<3o29@+K!2mN|oS~H`9V3B`#8v5m+o<|Da!7 zUeCC!4{~)pzu1LN_^m4wGnovkleXe7R(36_bq^u6Xqd)g%k?Pe*Yw}bDRR=|Y}|T4 zjcaYx%&;LD zTjjUtlrMi9r1A>0<=eIqvH!`?uFFE5mth_rIHo!!(L-XxS=!4oCk%zw{Gn8C;1!HU>Sr2WU#;bMj*00IWJzH1H&+@IavH+IZtDv9nJrA_ z)W#9Qa#q29TJWIRernQ42^Zs{gdveXYi8W*=bbwMB?wORk_GMZW=#r}%I{4LId$1) z9^Hh&@hE=el5&Z_8bFq#n7AZVc@s>YfCD$WysB3yLydJHi~d=RHu8J|CMp0kB&D59 zNJ^qdhh{V%AbBzg>QS=DU$O<~6vYk0TnKMgkdHCGb69rAKXg>t@#@{z(^@F0`&#!d ziwjkDB`kQwC>PeEb5VuwbukqG$#ON5#p}&?p%P73-?6ab4&1Es9&E@!)H;v1)_Iw; z+*~I#%Y#lgv->5t);yhHd+q2mAEW0)b3L9gT+IpC`G8%jZJd{Ro6+E@@QwV8uqz0w zZk;!BnX%k6D}4nwUUyXZt|i904%a=av`v*B+!hoAtf{18&cX^kigW|GYwXL5#@-TN z;qiT6AjN7_rLD@=IcZnT%k+;?pk9=ycZj;9+A6L!=3L68!u#5$Zt(!lEhpyTvz&*W z^Hpu*9+YsG+~Vt&vVVt1I@F^l$@@d{F85s`uaEP3TWk)?&X(DH2OF|ntGruo<~7uS z!@Uv4{Hg7ij{uX9>&UOm)q6HRL*5qoZWjRa0MI7i#?yVo!iELkaqH?GGcgIDefh-_ z)85ReQ_+#eqJrqh`P|NfJ)nAR$y-NM=cDU30ACe5KQccf5;%^J!Nuk(v_it%&CiL{ z?CUH);i}8xK7sGpp`GQuF8I4=q$b;LXK~v!{~}4e_2(=-p*Y1G@Ze_cuy4*lU)1V%|P2Y z<8^SxpIeva`wcbnwUXA{e21#PBm=8<&PpGe?6tvU|86G>HjMPF$m{fehpaiB-WB%G z)BL!JN(qeW^seV4-s#PtZ{vie2huye>m+Q;ojf-)S>#HFRf4Hc-btIZjcMYhy!iwX zjhT$V*x1zsBdpV!Q+bJrt7}l0BjU^56_vgY>CAt-O*n;lsdVN`?m)Wl7=hNfU_*+w z0!)y;B$MkUoRazeEa|Ty{Ze%fy-m8UuE4j$fLRrz|_h#3nfh||srFNF@b>ZA%p1Z=A^;dGVl7j|X-(bQ?2jJ9O;wDMl_f=fZsd=e` z&G*{n+)7L}QvA-0n`6&1(-1m3-J#YLD?8LF`kdI0P}vMQ}#eDeAO5^?5)wsC*-SjPH1mO}N_k-4jAZ}b@5E%4>fMoH;-9FlQo6$f5ZTq~>j zfP5Est~{Ti#x^G6Nh{vJazrh+8|i(pHY4o>>arvA$Qhwwfw5b}y$+Uln#+7!1^GwW z8;w#`S|CMy%RAdOXe}I7566x08F8RK4^Nj6lh3&+Q_hXxkd^5Gob z0-m}HtW3FUd7hP0S1`w1L+YiWf$JOIT~c?wS;beiDq)$ipaALzPc6G2)+Kd`@Q_0%?yCu5k6Jz_tfP}VP+u#U7o1|Pse82Jj&=7 zVNJCh54iQ0;U;(zw#3cj#bz{yg!P%lV8x_Qz64 z`(kQLs%4ZiPL;BY5an;*tfunUOXcT|U<;7tv>|ps32Z^eEl4fkiQlIUTW6E7?rUb4 z$Q!C3{#)G${iL}{fEN$ce=RhS*_c5KzAFJ7_c%ZWOc8M6lBd$QKoGv3#?6u0@NNRs zRSqa>AySt_@lyy+$WdmpGtsNwHn^Otd=JwPcksJOicx2W{HT#QRp#*oMsjerAuV3M z`)2EJ9G4ba`!JZjjTgb^P^r8js|@mCE`lXg`b_^{&BvF*+xauipH^|7(Re@CTC2>f zJ~S^QRZ00C{~9+3c_bd|Y}R|f1epKy>$>2F3QHu6yFVzP#K2fwqb8>jk& zBQ;+jK)-To-3_Ksk}aEK2S?Rre!bj%{fi7o5+9Lax;Ux+Qz;_Ete$gF#?Xe ze-VRcjZ_ub!h7{H-*+VQXfoSmD%ms0wCQEaimM5e?Nlx#AZ|lVDz{voU7lbbDv|}^ z6j^(+5WKxPHic(6-Y{9AX}9|fNPIQKJ#q(bq;F=bL$hw<+xoV;|LaMyF5o7ySP#FU zv!hfAD-tC<2oU!foE(*uXVl-5EG}(+OdN8B;v*WbVW&?K2eEWeMa;L0=;wP#4aD4n zXtlc73B)!7v{;1=H}?P)muEEG2W7DEvub(MDIV{9qpeqxyza! zI-44p6Dt3I?7a(kRMpk^y(bwUgpdg}Dk{nmgMcQGASl70NIWv@&k*yER9v-pq-R|)8?$m@X-|0B#JAeKiY8*_Z!hy_e4)j_qo)mL^nc1&7S9W%L^n&3ry8(smk{T2LCFrB%jeax~wC) z80Y6*yfU$leELq|YHkq@)i*}C^J}5v0tk-0x&lGyds|Pg&$E9NI50f##bc$SMnw3Y zRNa~L*l7jRu3-kBL=|cm2YyX;_PIpGf=rV}-OR<(@ zem&`-wt^%T{4FCZ6Od} z8+JfZopijm&MotP9d13Qk=faw%Ls^KK408ckgJ04$yb`C{X{s>JKE|kb3tkkucIZG zJ~ZR-YLQ#l^W~9;U|t1Za?=y}Z*muIe8?pa^(OYc@}7u#wP*k7D5U(jd0M0aBCD?M zdz_NUeXxv49)SGydW2Sjo;Cg*cJM`l8A9Kq!rZH(_U6-u}#ncDJGP@H$7y^ zl_x9*ALAywPgE@KSo9?`4BKClcx3q$(hZyhUq{dNM-k#CKUzxW?|eO}#@REu26mkP4w>mWc~)xG?k$k%AGca-`J_s2%1 zF{$#oW^C~zNVlY)gGjEf z`k+KYA7L^~6JxH^O`s$>-Pr$BUiK@Gy!>esW80J2UHW955Yb!uYpQKyO0M1%IdZ+Q zM<3Xr3qo^3+hAWYa`&!8945xo{{1A}PDc0u&Q;!vd3cvvXSz$DkaPHrcAxx&GmUnZ zK2b0}@Jhkhpu4y932XmA;MBJ3pGXak=l!`Cc}rb@Gmhj9bS{6Q?fnhdcHjdTcMhJ6 zdPEdAbp1oPHEr*w25*agi8F+A+TK4eIF>G@Fxu7jzNHVLfIy^1eo`q2-?hWmF@7_Q z>LUa@Kxts&z7Kzc3VFmO8|dhgvf{qQGD#uHb3W12F5iq)CwGzC*CU=s;>^)s%37`c|)4gtvGa$u6Y_r=L}iuecM%J1WmB*Sw{hMCPAgH!#4o zAt2#Ho4QJ0>YTuKqp%}mp!D_jr-N_w$yXDyGtB-DF@OW)oqD%Z?;50~!i|u`Y3h?B zN)HIRWzZsxy`>v_OE|FCLu4aQLPq(NBbT)}^J9-RIihE3|fLsMpuUX*@*sEovb*Sb!Pp&B_$JPSM-KhL9g5_RJ={6E<49R|F$LTEIwq_r z)ZZYe+w}!j@68MKmj;&ZJvG#y8~8Lq?*8n+HPP!r{qqBLQ9r!~t`y*gz|yEM)W0P# zH+prbzm=GDTByG^kR9r8;;V_5hWh=1siFQrU_$irUe{UC{9adTbWX2pd~{Z?Yi#s_ zURO$VYOgCTYW2FT=vlq44bjt}J367)l^sp%b2 zEtb<46_FbjVN>17*#3%${`NWo*GJYoc>9kBGcCRQDi`sAvQYn}dvinmv#xL82YdsS zdovK4YeW5K?Aa3PKPxa_#&aQ|_5KU4hyJPjh+Kb8)C%=)3>3)V3U`-=`m6Tj3f#Lp zKh*!}J^YyV^?}LJoZh4j;TL+7ebFoIoIkpdToEaHNk?k|)e#De>_Zq3c#cdw*7pTi#j;a(lN1nyQ!p*E2cUl6rS5(Kud=~gW8jwrJl_VF z$H0#Qp`*HmQv4dHElnc=)-cKes0-1eW3 zSNwYL{iUq#90O%IyyNvnxn6o|+Bl9seEtU@beA5zChJ&fn^eO)Dea(qp!`^Ay8t5h zvF+lm3qUgD5Arv*dAjGYh_%h1>e)YrOi}NCR)+!AyC1!j3yX_fcFKkKM&!bWH+y2a z1}9f~lN7PS@*d38@GlSE!If9#JnffbQ9H*WT%rD&y%&Z0tFOO2)IT$D`QEcb{pWew zzeBCP^Y)0ma7PURBhZxL`=5`l~{?FLE=4idtqJmXZwkNQ zIS7Ml_U?emo^FYZg!(Vri%u7Ky2mgJqPrKMyPod%b=mozc6r9IHzm}6Zr_a>G|l|F zmi~HvCc@J$))IRVZ3*?4d)jXo^mG*6(|(^WSQ)*NISQ=B=tY+^LxE*`Cx`m$J?(c2 zCWc~bpthyu3YH#Fj3) zAapp%mi}m7QD?CWqs|tMQ_8E-AAKiOy(BO zGnTe>t!d9cetlB-c>bZ?PZEvR{y$v3zFh@pbS-aNvhzH2xw89~Q2!}=GkV=Wz4JjH z6ofN>dOO#JOLo0-K&tTTvz~T&v7>WLK~^xQZLh0+d z?>bNl(C;;Z+Pi-nvZBK8_wMIhkEk|>S>#eD7hZ#t3m;yOa&m+8I&Z+}bw0G5A$olV zYv#y$E#|=1>-}V-)uPuG(G8;4MI-8UVaGXT(JdY46r$IfEYWKr%oQDP2z7-Y77FtQ zqD6&f1g_}3wukjlf>WaB>jitqFECF1`V}d+{$q@27Zfco`5U&l;^C(8&Psntx(zS~o!I8TJS1j+v?!}Lo$~}9|wnTTd~q zO9@Qs`@n5aq37T#m#FxuLseW)YWJ?BzMs>Gy?Vna=}Nn%r)(>2L!zHv#BcC$fT^wX z^ysUaY|XK+2$MFpIgR#RfnMrT`7x&vL?%s(g2DJCq2fei-(?Q%|I4;!Jl^*={EL4F zS)RL}>ihP;sja*hdDt~3eEci#y&paj=jb9v?XWXENwceO)xXqbmli?!?wLIkuNWqe zZY_^!GCv*j3L;9keZS#q*LsXvm+|;zu#RVk3N!^OFoo$nr@QFm!R2YO@}wWS;$x7g zY-|i>%KN(MD?aaM4mJ{e1DoAZaF#|Ql<>LBs4*DL(|!Rk2i4O)i8~#n?&B*Q{w))H z?&E#O{!Jo0_VK>m|E8w$9`DQhH#L?2c;ADph-N1KcRHH?IML^5>%Xa~+j^qY;_`8# z#fE2v^3@H;qgnqP_r0ezjOWy~>&w4EC*%6-pKLQtJJ?k%C?L@sU#UH>T2*dD+G zrMLF+yxlNMcDdSi@e?@uN95WrpBkLX*QXR*9^`TISp}B{ z`69_Z+m=Q%3VbG(^`eet1=oS&3jKZnCo4*n*={7TOd2>P*1%XA7)1jYEKNYi>E^&t zFzJVF&f4A4AxmQTR9VVtFu=2)%ZWzoVzaKR`vt=Zb*kmThCuz6=H`GZYxVhxDoT{E zp;oQ%1thzzAy~83r@S+pg8^kV)HelpTGOsu(&*jln`UkEwKn-0tUz#KlbM`K>oTIR<`A9VxYPKD3)=>IGEGeToY{Y zSqm*QH2G_7*%k2lZA`;~`lk9oYt6`5+qd{yTAR1{l#`+Pl_jMcRk=W|wMC^?eN(M) zC{W+rG}BsAYX$0j79IPnreNb1U#lhfR=wZyxA>~-YwLYALVxoPtGTIRmqt!#!18Wk zX5&TD&P)|-Y4Nqf`&h z)K+t?rQ5P-tQqO>w)!C7AMiFb_-bZaR$qXpM9~)3s+Yzsa&#hg<7NGaR3~*svCUX*7~Ncdc0GpSL17%f|Lg6 z-l`Aytrl-1=4&2?e-OlvVs zdl}6(A3SchS`qNprkT2~NNOx&l`UCTs#g2FHM$jKsUDtGH#Y^y`h{VFAXNH&+kLIx z2CJsNw$|55skOtq3#K&HfZhoGKEE{4h~70@LaT1Dw!Xn%O$)OuGSS@V z+adE+-MXtKP+y&GZIOantEt)YwYE058m_ncTAEt}z8c+|$X9KB6QpdeU$8Eld;`V) z1?#6VOmB^Fxz6ji)@kJRmhal2w*jK+e8Oqzw8lsE`hXAdW1#+e=DR77tjNVcZB!+~CQ&Ek!Q0~9Qs01p zGRerquI6AXBNPI?4KuAZenDd}2tuO>1cTB{_E|pE1$p)}3%;gmADm!v%``MM2dwRZ zyxiOzEk79j2H#9;eRB|P+hql5a|09I+-j9p6zj>kdY!)Y3iAW4%?(y{owwCn4IP^8 zh)gpwgbG1Pg0ay92r`R^EE5%g%|@zP&`5;JVKp}18Itg<2J5An*VLTjtFCK~To1|K=UueILWK&H;uT8(M;Z&Ve&29YXn z0za=5S#6Ycum$Vw5M_u?7}yRkj0~c&4Kg8COVD2jpJF;MTw;ZTrx@ie&4D^Cw9uiM zX(-V)Eul%_mD8Wh;*Prd>N?$eeUqrHi03Xet`+s(QQy#Du?G0{0K|UM50l_+-HI88 z*@LG+bK62_6DMM(u?J?_49{azC*}mpFi6(4`Z6)u7US`??x^?svWEzfi0LlDGs}S? zOZa1kxeLv)XB1h~gNlifADwTS7LY;7jN3yRUKa__8f_I7RxHjDb7A>_iT>95yjWUa zj5(|qUgX+Pk&|P~jF8uY!GufF5O;)B-g^NmOZ<3WlgCV)vm(#GtyU|**g2H9XHkFjFT~b_XRV`T#s(mN2j{vu5 z6JsyK+KmtsqZf5=FwiWXMKufbE+IdGQxL5e9JmC(Ya4t!#el>ZImK>pimY8C)?2*Q z+kDt2u}^lH-}HhNzzBm<ucRF@jO&EEC z_-aEZojaN_r4`@TCS^*tt%23vCZlQyr*WDbfzjwwG?5~x+nVsK;(AlGWF>-A*Bor9 zVf|{6Rn%HmRH#>3O=?ZE&o3e`i=7ZGg|a;0qiJ`|bY|Pt%{e)-sht+<(q^XNWw5CR zmrusCwKcefu6-B@VYv{;D8%Ron;M%jTN*3w_v}EQZC}pjAEJnZbs|cP>`l`PsB~hy zKspwGz>K+nR0R2v=*XffuSmUoT=87M`2G-inQA>jqh=%xEyw$+jUU1Liy3L0RDhWzPh=gnE}|BYlF=J+Q$t+S?wF?*Uqw*=^3x9*BuE# z4PJkp(5BnPyx!T+@Z>(Jl*h(y^TyGoL<`&HB%5r^YEXe|F=|;7LUg($2 zDg&_>b5o8#M&}75H1@zTSuApTQ6E%Cu=Of1-8XaVOe@z~u)r!_xjb)1Ov{@fTy!nb zENF9Lq*Ugb68M9L)Okh%*wg#AJGkB*+Z-&qk z!x_gK(xk0Do12=aWm}t@Yig$HS=`Jfr3up{EOXj0EsL)C1I;b6>6-3mT$K=I+cg{y zWBF|}t2v>!r}o+rw`C3qac;`s;wFb)@Z@knoVk#0@P)m2bJlim1H!3&E@5uAm49(= zZniaVMIK`0-R`sT67yEoiZ#ov-PYz>mOxRIX{?%{YMwev25KjpS;J_jGYO%X*nqvC z8qqJ)^Xqjy1sLlL49(JxiM@%J5}{Dz$B7Xh3%4*?h}bTIA*wdmpq(cc z7Hn`6OMp$b$ptm)#V zw%~C)B*)9)M|Ep`O8^8Jb7{r=(uyU_sa7(a83_T%POiQwM>fH*KqOaZTm2Ykp`Os6 zRU`b#(FQ^HCRoy&l$pq%h@#zpeJdV7fC{=X5d+*v+tSB4$5ffUj?dD)loyMgvBNON z9r5bs+4<+hOPFa^64o5%xDw)w5g{C5Bv{(O`JiQyiI{4Mi>ZB~1cEIIgRx=WWobW6 zkI-55wUuBmYp1|}UsQ1^f3^eJz$y!42O$)Xxa$c*V zxMGREH>;lZjqEt95$8eUlyDRyOsK?dlS~~=ZO)sf^~($!G4$!E?P`57UYCjdND(0? z`C}E9l&n^(CFiv+nw=vNFl`l$+&f`8Hkx+$P4Lb7T<>pbATB@!#Hh}<)1K6ss>KUE z<}bm?(uxXp7}m_0GbKieYj4>gTdor}&1N$ToAjoK>7)_AUsj`7M%MGjnz{7)=md0^t z0*Jgp)mE=Uwsh9)*t*}`D2h*yvE@Trw3(@ETqB-tut~ftVP*Yx8sDld9MSBc<_Vit z9oP|*>TU2hYY8$lDNP##fd`?HWm_KG_8@8CY12mlUdvnJ@UhKCCxnR->_Gn$wUW&~ z)2B7h-t6hUkv*H5X*%)SlR_QoJCD_xxI@kj3C^MX+VDWqm`ajAjGg%-W5}5Q4^W(}d~3z66Y%nwtru#&BxmPZ4G+ zP>GZ^v1PojzGd*82~JlPu3lsmzEXrqc76!_W>b$g*;Dz%Wsqo6ETVw%m$0LRJM55Q zEL3CnVPA&!u?*E>p0s;qx-b~B0(!03vlrVu89cqAwWh;0Z2;&s5DRq3G--Vl5k`lJ z8_4cbZ-ca=VE8d9gQ7%wbE&ubI(RNk*bl#$Q)dIjxY@!79A8&d-SKq9mPj{ZMG$@4 zbDUxiC(+^%fza_S>0-0#W13@OGM)FNLKcFhQ|Z9_$imzT_qnQ1o6iX_|QlGRJr zmYUtP&Z_0Wr3bSD>TR~ckySGWcWTDHye1zZWxuG4cJg$LA?8UK&!UCz@@-s0 z?NB!B(8M&qSzqJ(0{HK6nrs7JuRP&k#G7mzu*pjFNMz3gQG~qNtkUpIRfNsh2FPi} zx6@Z0)JqW77`|xMu}&FBBnY|KNaMIDGnMv5Ryks#tiCzMnbEsVu^kJsF>g-Yn0eCyQ&rz=9^Tql%V?Wc~(`;M$6vYX~=A=N}M@FtA$j&az)vaMNY_gb!p+UO^G1F8+3%jWH*NB zJG&FTxY(tbVR1Vec!Z~21DPpNb-P2P36D3yp^*XFT;5E?04b0K0JSjN41=0yyBiJq z`DR0NbKLFFjjq$OIv2_~0~=LpvEZ z9f|RDp&%jn;_Mpq_Lu;#Jk)~o;$w@dI&u0Dn)K_3GFrM5+H3XgAh>8YkIt~R*L$7l zIA%oV#C}vS5-oc)d+u7jJ8+jIMj$3Z9~RNuin!yoOglw9c{Nc<^q^7eibgY@k+xPN zcts*85<3(=5>#!)WYvo&fhd`6v?!P^H7$V4BO@KR0d97Tkk#1YH@41LH)(AN{#1kU z$S4v|0mfCBQz$HhB8Pc1^F$%?X3iNhhXlawEs~Kan%hovwmImxip$qHF;u8vLxdmKFRZLA zUA@A%za{n_S@0zKHT+=BmS8G2ce0t>p!;p;B9H#s1^epwD%VaR9L=Tq}#jQTd&y)H)?c5E1TRJ3kC+HgE71`5RIp(9G&-@9scAOf_ZAmcxl`&5CS? z7t%x`J6Oql!fXjt2(e6}3{eLI2IJAOK3C%`Q9P>UV1q=*cxEG;3np8LE1tD@R)w=# z3|hQqs#>g#Kj7>&6YP*aM1#YJ-H|7(`j2)-

NuxVIHg-tk%Dywbhuvwu7>1uI-lEAe4X#mERuLcMOe-$S zcKn_pI=!05KgO|w?&j+1V2hmVfd+kE$?wN@%v9KK3AkZkm19@5i)=qrOMua3}4S@ zQmKKJV#UhU%L|uTRg0G_TD*)@Iq0#mj^JrT`6K(GJvI_-YAXe zaMe_d^&;le*|5~H#x&@4Mi8Y9+5Mv8x}H81hGUO_Lqnq8#v0Rx#B^HU#MVo6)%1sy z*aLL>bCfIADY(+5*|AVcTwP{bcA>%_>P;zIG^=P4dz!LE+B6k$5d*ZVaZ7VUeYK4! znhJr1Bf(>vtijL7w=|%9MErP&rXTzIns}_d%gbM$xA1tI=oKmpLMuy`#4T8hbGEj6 zcM*g2wr;bt25cH}P&g~+;F|_bfo|4hV~y`3h)>jB3?_;sPmGILA7f`(jpyvs)1!wd zhaO}T8Jqc{Mdpy3z}bCpoQ91dEZvqfMfP?u4Mh}VyTgl(k{u3ZqB1bsx3yJ!8=BXM zWMhjYEyQ{H?`&0U&SGj|5Mj3qV-Z0S^Vynwqd!JZVrM#ScODXWEI|(vO)+*SF)u4V zRf{3gA(mI$x3#`ztl3R$MaY(};3WxD5F_EsM0 z$k{4n%-*(%@5Y`OI=ul&hMKtX6C18WYPN-sF@)d=233!JWyP$7r%$ait1K#Vf^-XF z;cWg@e50vH9PcAu042t&9NwEb2C2;H4i!Jxq0G4sWgqKc41@+1Pjbwm4&|KbP%L2P zNQcSk^A<`U=uq+V97-SOP;#0>#SU{QTv>IkTBWX3m1@0Oqw3WXwNjOagTcg3b?E-}p$^V3bEZT2A|!{O#bnE4&-waXy;U{UzcD+WO?9x4N6`uUeDKto6QOIn2IH|>%CSh^ zT`Fd?Y@nE|SUI9;=fz;zS?raav(1$<)=Fthg$Rq4QC5kpm3mbaRg$Q@xM{Vuyge{- zQB$fplAuOfd*`QGYmrt~^7*`cV1MLIgH-1MUvWjO#K2eT6VovubqqZ3V*NmH7`_cJ z8QPBh0Fkqi=HZ87aHUtt9@C9Yt-`?p$LdPZ4p%Il5lU=`j|q>9%#3<@n+`!s{8l2(m_> zP!-QhttJ@O$|(fJluY$AK}ERm&XBm(FOaOW<}50*F4Q;Ksb<2L>C-zhqr*_l3n!_n zuypnE#mbs0yM1}+WVR*Rm6q2j7}NAx6mN!P>d2sgiFtHUZp)Ys+v8*>RW0ixGAxH4 zjR1c_IZ{m2L=`WtP-Z(Oq|UcDCJP{Jmj0iu<8#B^X2HmYE2)?Sv*RR#8;c!bQUJ4+ zww9MyU>uBFq~lzAxgI7>7^sboWs!5T>Pl~G6Jwcg42C%lEfGoyFG|o?ya#g*MJ$TF zvxo%`V-B-^M35SPL&JxCIS`&enU4J{6WCUER9o30ZRLcq zRV;vQSb{Ly&ks~qUY43UD>rZUMRVp}e9650!lL4m(y~R1mt3)Q+42=D%U7+gs9dx5 z%603n@@}c-#M0Kf`fIi|G&VK2T+7k&;PxFmcU`ASo9t(^hQCa((lMP@dH2ISk+kRD z%nDDVAVfKuVWxMjoVn7&62WS!nK9p%FGt?yQ%4`!yURY@F)nkJTc7;AEW5 zwo(8zjE?iTL=Me}8p|slT+n7Y?r-Nfc|p#3xr3~1cl=D@s25iciEVTPThhGeC+ z8Oot7RgEu4uO!|u{EZB4L)ZXGt3zJn5s17j=Dfngy>`8ZyrLuE;VWrpZ7{8F zvUlYMB+YKJ-wYBQ-LA}oek*8`Y?C#jG&}?N?v+2Z#oL!Wv?Pff;Ou0_$4EL z#w+c=ELyR~ygm@0c)w*$pIWn&?Vp6DXR-D#9rWtxjMP+>S}JcS!bGz^@y7KgzClQS zx8PU2-Ysb>`PPK{Wp5hz9}{4H8+W>Wb?VCXt^_=}KaFHr`h7S;0~i)DQ?lI1=^d-e zT8^3KUFC%LlEiq$PMR^X@wv40u|aVQjGHM-9llRtk+4Lcm1s_H%fGDc&u}Lr_0C3e;&FCMUK#S4BL}k{%^yP@|PX-T)RyM;8H=gP}nV3dx(= z5(WS_;gFC-U;sJDgfb=4qTgE7@p;6AZJ_{#e$-N9Ycr`IHJK+$1l%~Z&vq-;omyV+ zCy1t>s>Y!)NhFqFmO`^4&epLOu`F9S_prmtTV6EG0;#3uMR@0^f)1b%jyEUeWR0c1 zV{gn8Q?X2hRshBXB=IPdd8v&PEb)y`{-@i00M806JV23T!BnL*X``@F;&%^P-cZt-|e78JEi4rMr} zu|}Q&^9VKmMF*dZ&9W>nipGf{Cccd){XVlZ(7vYZVD%}c*mDkLY?F~|n z<2zp7PsT^lS`s@NA8&-f|2DJ2YtHk8rkSB*cVfX@2`TsoO9N9TF9F91mZR^^oYm@6 zpIB$J^JRIW2lHgwbm0hzbKKO-s!`isCT2o znljN1{Z?4ww+$H2i0;{AE4JOrDj#C`^=6%&Qw%O+FhEOH*CZ6ggvXRJ&R88Wh;~E8 zCAqnI+GUArkmGc*?#{4QbF61|J>T`gp$E8VZJt`qxKfEwEb*7NUR36{bF*W)SY}xf zyk#p;m{F8oJh~*QY}8`c9Cw8n4Y8a0RGN%fV$Sf~iBFX2t@`qEs|}gJYR_ZT@g7Qd z5+aw^E{1kBLenf&T8=TS93yv#P6&9IW=r&mcVV`~Lu^jKw&lgE^^=G4CBx(Y8=c-CK#xl%oA$D9g61!3*)F@h3T9T^H%Z2?cl&lrR@#2#_y{MvG z!caW)K`nKCt?L4k19ijN<%ymN2-?A4wyv7m*!FNU-kg4kRqw`h{6}wj2_8TkMA;Fx zHMm&fSWT_gEabu)sYGwFXnK{hpIb=uPrv=1@W4(s9QtECE4w3(Had?$VoM*dNFh_x zI3-5A2G48vFJ}(*i+Yrp!~U8a^IaB1C-GD4ci+Vo{a3rowx;pLJ<=JQXlc;y&0a%d zue{h!i+&_Nt$LbP-Pplby+a?|>9j4nRjD?t3!7m`yxoiVZSk%(SDf#wpz?^l0dLkl zNKDK!?^cMbZIf?~qE4T-(okwVuNj(QF4D4zT44x%3ApQ0krUyHxQH;>rIlmzw=Om%8HHaoDQwxYUF8 z{b=%n{|)<^Sofdhucoh4NZ(E9v+ld`e*Rhg#PVmT_qqS`$#rjFEQxiT{G*J|$vaoU zmGs_SrYzGQZ-ad=cz02rVbd$PD--(vGxuEyxPmV@PWwUHyWZ~C0x$9N9e$bT7E&9j zfwYcPLdqpgBBhYt`G-rrM0%2RKj}`=O{CqVI#MNRAt{?Qk>n=5^^r^chV&@uUefKP z8%aA!HKcM<0ckoZlcY$mf9O)rla7+^A$^_HK?;yIla`U@k+Mh`q>nz}rzuF!ka|dW zk!~f)=iUEusSE$0)Vbsb$b0T~sZW#MeA&R-$=^bnaF0tJ19l#G6UomY`AI#%_=?Ba zXBV&o!1w~g*k>QGrr(?P!sNe1`YGuFzE9o-*3ZfRhSc)kF7^8tO&`0+|CRLOj~LhU z2KEa1b@#f|yZ5=&H=i->eMG+U$1ZjF0qB0p;5|nE4WT@WXg+Up>HfHdKk z^l!sXBY!^W0O@QSb{F}VNmb9f)SvG){YridX)o!;|2FNllfRji^edNI0xYrLalp>F z$JCubej4d5(&oEOUCDn)3O?sj{r_cPl5Zo)Z<#y@EU~@+1l|rz^ML%Fq#n{GcHJk) zzexIF1l{?8;fs168c1Jw0o?DKx?d*$ZPMRKZQnEfx?aRSk-kAX(}vwa{(GeJki(V4 zUeATklK%y;`=a3UJ@Nt@;6D8~=J)aVs^tMdC;Th`Pd;ZcidBEbHgcbLZjyTZ&&)CH z%wCwRZbXKb0>9`yxB5K!wdChyjZ!z0-$;J$)Y0mTClKlJ6j&J7b*s0@tsQayF%@JGp+3wBW+=>Ta&`Nm1$Q0XsjI z-<^Dz{3E1mS7oS$=+q(dJFc9d{(&8w%KZ6CKc!aD{t|f8y80A#8{;?vPM|VV?fM=1 zM}F7(Q`J7??il&tn$y%{T%RD-FF9T9_-~i`8Tsaw6IBs9_6zbY?uNHFV~_n6lhr|RcCv=mlvpbC zN0%DUeQnvfYT940vGiJxfa0F>f)K|O7gwP@%FW|)K3`i_ZZKXqFnVg__={OXj+k{mH_|5OD@&8 ze70H-{w7j(!9}Wu>o(HN%jT#hT>Ye3m(Nw7LZ8iNp8Ao^LrdkW-ISZpe6>H8zf^U^ z@&&3ZmS3Pg7t3F!{v(#ZT-_4OFH~QSj@~H_|lLp;e?d(l1EQ;Pv%en z_kv~M8G}mWaE%fx6FA>duUhP@QqNw6-Q((f|rIq`A_&$+siM~xYqp7E*7(!ed>^Mx%RnSNv>p<+cnyi;!1O6xF)(RSFUTJYqM@($RDA@p~a!c zp~<03XyZvJ|CHUg&?z(uedAdnC*ZH1&YC_MU+hA4k-AhBW5=qMUxm~GbwvG9B?;sB z@IC$1`=k#(CarsD>vFXhIUaBgBoB-k@C-~IxO`ymCwmu4i3W*3{VBVP6t1El(x>z- zx*?+(N0R+W8Y!71+!bFdog}1s>}#TqNjrJ0U9R&=w}!v}vo}Bf&4agYubiDRI@NQk zdtAopqsFFZj!Bzv8fYi{?7Z`u=hpuCSmebPE9;G)KYZwJ&+flp(0jw8Q_6C`|8s82y-T)CJ?GtpKU&zc>Z+^H z|K73t`Zi|F`c*|{Nz%So?|A;v4}baRSAX{MxxX57$&nkzKl{#KGOsEf)%VBm_8)lj zqhBXAZ|z)mL3dI92Lt=wz4nGF-fuLf&HK|oN?tp7=XZbcyQQ0#{^Z@3haNfDyXR}u zKbUsMYx{HGd}h?y9q#<&&;0sNUwQG>{@vf4>|1-+(UK`M-ud#t1;yV!@0Rc9-~NS< zj;ycp-TY+Q=dXX~&4H&jw(noL=R3_Wy_)@TX0hwQ9TQSkd}dF@dvo8O|L{+qe(r+* z_@!9pPyTFXqH;m$VFL9UHPy@!XMpwmsV|xNQZL)S@nMnP_$M(RhyIh?2$ft)AH}o= zT;;_}EXzVR!0P!pS%d|t)EC!)OJA`V`kFjoiroWleLreol)jE07_F~k2ILo?a4-i_ z^mXjOSba?$NY&SI1LO2HZ6Hlw#}ACx*YtsOef11@biQ)@1r+A@1;&EgXwpH;Q^tg0(cR2qk$Rdq>Y{O-iLv#S0jG^2zg z%*%;e{{KhG-qK}dE?0cuV(sOwr8Gm$;kw}qW}I`BMagvR*%%}LV)(T6%TSZHE1ks7 z2}rkg6Ztl7ND+kjmG!nh0b2E^K#iad{fNCwjM)q=KY4$W11C9fk^?6>aFPQjIdGB# zCpqxH=YaFQy1A+Ly8%{SYW%x7Qi1YK*;WI;DAepv)nEU``%JkrQthvjnq{stx70VK z%JXvB?waFPQjIdGB#CpmDE1OIPvAnBeT zoF&iQ-dnl)mD4%Jpttq9bA9sRtG`&NuQ&f

t-4=X=+!R<7MCuCvnI?hb+h^4xq9 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 z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0;r|7nK~NB{r;00jMi-Ht#fXuyC00|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj NFkrxd0Rskx0|AHJF^vEK diff --git a/scripts/run.bat b/scripts/run.bat index 7108c70..afe0658 100644 --- a/scripts/run.bat +++ b/scripts/run.bat @@ -2,5 +2,6 @@ set virtualbox=C:\PROGRA~1\oracle\Virtua~1\ set machineName="lux Testbed" +set VBOX_GUI_DBG_ENABLED=true -%virtualbox%\vboxmanage startvm %machineName% \ No newline at end of file +%virtualbox%\virtualbox --startvm %machineName% --dbg \ No newline at end of file diff --git a/scripts/version.txt b/scripts/version.txt index 5f476b6..0eedeef 100644 --- a/scripts/version.txt +++ b/scripts/version.txt @@ -1 +1 @@ -470 +551