From 52ccbd0b9a1eec5d682b9073e8a9130ebea33996 Mon Sep 17 00:00:00 2001 From: Till Smejkal Date: Mon, 27 Apr 2026 10:39:48 +0200 Subject: [PATCH 01/22] template for task 2 --- device/keyboard.cc | 13 ++++++++++++ device/keyboard.h | 35 ++++++++++++++++++++++++++++++ device/panic.cc | 12 +++++++++++ device/panic.h | 29 +++++++++++++++++++++++++ guard/gate.h | 16 ++++++++++++++ machine/cpu.asm | 53 ++++++++++++++++++++++++++++++++++++++++++++++ machine/cpu.h | 39 ++++++++++++++++++++++++++++++++++ machine/pic.cc | 16 ++++++++++++++ machine/pic.h | 27 +++++++++++++++++++++++ machine/plugbox.cc | 12 +++++++++++ machine/plugbox.h | 25 ++++++++++++++++++++++ 11 files changed, 277 insertions(+) create mode 100644 device/keyboard.cc create mode 100644 device/keyboard.h create mode 100644 device/panic.cc create mode 100644 device/panic.h create mode 100644 guard/gate.h create mode 100644 machine/cpu.asm create mode 100644 machine/cpu.h create mode 100644 machine/pic.cc create mode 100644 machine/pic.h create mode 100644 machine/plugbox.cc create mode 100644 machine/plugbox.h diff --git a/device/keyboard.cc b/device/keyboard.cc new file mode 100644 index 0000000..ebe28ad --- /dev/null +++ b/device/keyboard.cc @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* K E Y B O A R D */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Keyboard driver. */ +/*****************************************************************************/ + +/* Add your code here */ +/* Add your code here */ + diff --git a/device/keyboard.h b/device/keyboard.h new file mode 100644 index 0000000..ae45cb6 --- /dev/null +++ b/device/keyboard.h @@ -0,0 +1,35 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* K E Y B O A R D */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Keyboard driver. */ +/*****************************************************************************/ + +#ifndef __Keyboard_include__ +#define __Keyboard_include__ + +#include "machine/keyctrl.h" +#include "guard/gate.h" +#include "machine/key.h" + +class Keyboard +/* Add your code here */ +{ +public: + Keyboard(const Keyboard ©) = delete; // prevent copying + Keyboard& operator=(const Keyboard&) = delete; // prevent assignment +/* Add your code here */ + +/* Add your code here */ + + // PLUGIN: "Plugs in" the keyboard (driver). From now on, keypresses are handled. + void plugin(); + +/* Add your code here */ + +}; + +#endif diff --git a/device/panic.cc b/device/panic.cc new file mode 100644 index 0000000..f986d83 --- /dev/null +++ b/device/panic.cc @@ -0,0 +1,12 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P A N I C */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Default interrupt handler. */ +/*****************************************************************************/ +/* Add your code here */ +/* Add your code here */ + diff --git a/device/panic.h b/device/panic.h new file mode 100644 index 0000000..e927aa7 --- /dev/null +++ b/device/panic.h @@ -0,0 +1,29 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P A N I C */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Default interrupt handler. */ +/*****************************************************************************/ + +#ifndef __panic_include__ +#define __panic_include__ + +/* INCLUDES */ + +#include "guard/gate.h" + +class Panic +/* Add your code here */ +{ +public: + Panic (const Panic ©) = delete; // prevent copying + Panic& operator=(const Panic&) = delete; // prevent assignment + Panic () {} +/* Add your code here */ + +}; + +#endif diff --git a/guard/gate.h b/guard/gate.h new file mode 100644 index 0000000..5389ac8 --- /dev/null +++ b/guard/gate.h @@ -0,0 +1,16 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* G A T E */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Class of objects that handle interrupts. */ +/*****************************************************************************/ + +#ifndef __Gate_include__ +#define __Gate_include__ + +/* Add your code here */ + +#endif diff --git a/machine/cpu.asm b/machine/cpu.asm new file mode 100644 index 0000000..01bf503 --- /dev/null +++ b/machine/cpu.asm @@ -0,0 +1,53 @@ +;***************************************************************************** +;* Operating-System Construction * +;*---------------------------------------------------------------------------* +;* * +;* C P U * +;* * +;*---------------------------------------------------------------------------* +;* This assembler module implements functionality from class CPU. * +;***************************************************************************** + +; EXPORTED FUNCTIONS + +[GLOBAL int_enable] +[GLOBAL int_disable] +[GLOBAL cpu_idle] +[GLOBAL cpu_halt] + +; IMPLEMENTATION + +[SECTION .text] + +; INT_ENABLE: Allow (hardware) interrupts +; +; C prototype: void int_enable (); + +int_enable: + sti + ret + +; INT_DISABLE: Disallow/ignore interrupts +; +; C prototype: void int_disable (); + +int_disable: + cli + ret + +; CPU_IDLE : Enable interrupts and halt CPU until the next interrupt occurs +; +; C prototype: void cpu_idle (void) + +cpu_idle: + sti ; The STI / HLT sequence is executed atomically! + hlt + ret + +; CPU_HALT : Halt CPU (forever) +; +; C prototype: void cpu_halt (void) + +cpu_halt: + cli + hlt diff --git a/machine/cpu.h b/machine/cpu.h new file mode 100644 index 0000000..f4423a5 --- /dev/null +++ b/machine/cpu.h @@ -0,0 +1,39 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* C P U */ +/* */ +/*---------------------------------------------------------------------------*/ +/* An abstraction for the CPU. */ +/* Currently allows enabling/disabling interrupts and halting the CPU. */ +/*****************************************************************************/ + +#ifndef __CPU_include__ +#define __CPU_include__ + +// These functions are implemented in cpu.asm. +extern "C" void int_enable (); +extern "C" void int_disable (); +extern "C" void cpu_idle (); +extern "C" void cpu_halt (); + +class CPU { +public: + CPU() {} + CPU(const CPU ©) = delete; // prevent copying + CPU& operator=(const CPU&) = delete; // prevent assignment + // Allow (hardware) interrupts + inline void enable_int() { int_enable(); } + + // Disallow/ignore interrupts + inline void disable_int() { int_disable(); } + + // Enable interrupts and halt CPU until the next interrupt occurs + inline void idle() { cpu_idle(); } + + // Halt CPU (forever) + inline void halt() { cpu_halt(); } +}; + +#endif diff --git a/machine/pic.cc b/machine/pic.cc new file mode 100644 index 0000000..ba18d7c --- /dev/null +++ b/machine/pic.cc @@ -0,0 +1,16 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P I C */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Programmable Interrupt Controller. */ +/* By using the PIC, hardware interrupts can be enabled or suppressed */ +/* individually. This way we can control whether interrupts of a specific */ +/* device are forwarded to the CPU at all. Even then, the interrupt handler */ +/* gets only activated if the CPU is ready to react to interrupts. This can */ +/* be controlled by using class CPU. */ +/*****************************************************************************/ + +/* Add your code here */ diff --git a/machine/pic.h b/machine/pic.h new file mode 100644 index 0000000..ceda3c9 --- /dev/null +++ b/machine/pic.h @@ -0,0 +1,27 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P I C */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Programmable Interrupt Controller. */ +/* By using the PIC, hardware interrupts can be enabled or suppressed */ +/* individually. This way we can control whether interrupts of a specific */ +/* device are forwarded to the CPU at all. Even then, the interrupt handler */ +/* gets only activated if the CPU is ready to react to interrupts. This can */ +/* be controlled by using class CPU. */ +/*****************************************************************************/ + +#ifndef __pic_include__ +#define __pic_include__ + +class PIC { +public: + PIC(const PIC ©) = delete; // prevent copying + PIC& operator=(const PIC&) = delete; // prevent assignment + PIC() {} +/* Add your code here */ +}; + +#endif diff --git a/machine/plugbox.cc b/machine/plugbox.cc new file mode 100644 index 0000000..05b21b0 --- /dev/null +++ b/machine/plugbox.cc @@ -0,0 +1,12 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P L U G B O X */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Abstracts an interrupt vector table. Allows to configure handler routines */ +/* for every hardware and software interrupt and every CPU exception. */ +/*****************************************************************************/ + +/* Add your code here */ diff --git a/machine/plugbox.h b/machine/plugbox.h new file mode 100644 index 0000000..1fe2ddf --- /dev/null +++ b/machine/plugbox.h @@ -0,0 +1,25 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P L U G B O X */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Abstracts an interrupt vector table. Allows to configure handler routines */ +/* for every hardware and software interrupt and every CPU exception. */ +/*****************************************************************************/ + +#ifndef __Plugbox_include__ +#define __Plugbox_include__ + +#include "guard/gate.h" + +class Plugbox { +public: + Plugbox(const Plugbox ©) = delete; // prevent copying + Plugbox& operator=(const Plugbox&) = delete; // prevent assignment +private: +/* Add your code here */ +}; + +#endif From aeef969ba8c4396b47bee88e5401765835d3cc0d Mon Sep 17 00:00:00 2001 From: Till Smejkal Date: Mon, 11 May 2026 14:13:39 +0200 Subject: [PATCH 02/22] template for task 3 --- guard/guard.cc | 13 +++++++++ guard/guard.h | 26 +++++++++++++++++ guard/locker.h | 24 +++++++++++++++ guard/secure.h | 20 +++++++++++++ object/chain.h | 25 ++++++++++++++++ object/queue.cc | 78 +++++++++++++++++++++++++++++++++++++++++++++++++ object/queue.h | 39 +++++++++++++++++++++++++ 7 files changed, 225 insertions(+) create mode 100644 guard/guard.cc create mode 100644 guard/guard.h create mode 100644 guard/locker.h create mode 100644 guard/secure.h create mode 100644 object/chain.h create mode 100644 object/queue.cc create mode 100644 object/queue.h diff --git a/guard/guard.cc b/guard/guard.cc new file mode 100644 index 0000000..e5aa258 --- /dev/null +++ b/guard/guard.cc @@ -0,0 +1,13 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* G U A R D */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Using this class, we can synchronize activities with a critical section */ +/* with interrupt handlers that also access this critical section. This */ +/* synchronization takes place along the prologue/epilogue model. */ +/*****************************************************************************/ + +/* Add your code here */ diff --git a/guard/guard.h b/guard/guard.h new file mode 100644 index 0000000..d2fa103 --- /dev/null +++ b/guard/guard.h @@ -0,0 +1,26 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* G U A R D */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Using this class, we can synchronize activities with a critical section */ +/* with interrupt handlers that also access this critical section. This */ +/* synchronization takes place along the prologue/epilogue model. */ +/*****************************************************************************/ + +#ifndef __Guard_include__ +#define __Guard_include__ + +/* Add your code here */ + +class Guard : public Locker { +public: + Guard (const Guard ©) = delete; // prevent copying + Guard& operator=(const Guard&) = delete; // prevent assignment + Guard () {} +/* Add your code here */ +}; + +#endif diff --git a/guard/locker.h b/guard/locker.h new file mode 100644 index 0000000..08d19ba --- /dev/null +++ b/guard/locker.h @@ -0,0 +1,24 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* L O C K E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* The Locker class implements a lock that can be used to protect critical */ +/* sections. However, the variable only indicates whether the critical */ +/* section is free. Potentially necessary waiting, and protection for */ +/* counting functionality, must be implemented elsewhere. */ +/*****************************************************************************/ + +#ifndef __Locker_include__ +#define __Locker_include__ + +class Locker { +public: + Locker(const Locker ©) = delete; // prevent copying + Locker& operator=(const Locker&) = delete; // prevent assignment +/* Add your code here */ +}; + +#endif diff --git a/guard/secure.h b/guard/secure.h new file mode 100644 index 0000000..15a0a72 --- /dev/null +++ b/guard/secure.h @@ -0,0 +1,20 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* S E C U R E */ +/* */ +/*---------------------------------------------------------------------------*/ +/* The Secure class eases locking and unlocking Locker variables that are */ +/* used to protect critical sections of the OS kernel. In the constructor, */ +/* this class takes the lock; in the destructor it releases it again. Thus, */ +/* it suffices to define a Secure object to protect its complete scope as a */ +/* critical section. */ +/*****************************************************************************/ + +#ifndef __Secure_include__ +#define __Secure_include__ + +/* Add your code here */ + +#endif diff --git a/object/chain.h b/object/chain.h new file mode 100644 index 0000000..f3fd406 --- /dev/null +++ b/object/chain.h @@ -0,0 +1,25 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* C H A I N */ +/* */ +/*---------------------------------------------------------------------------*/ +/* By inheriting from the Chain class, the derived class inherits a chain */ +/* pointer that allows its instances to be enqueued in a linked list */ +/* (implemented in the Queue class). */ +/*****************************************************************************/ + +#ifndef __chain_include__ +#define __chain_include__ + +class Chain { + +public: + Chain(const Chain ©) = delete; // prevent copying + Chain& operator=(const Chain&) = delete; // prevent assignment + Chain() {} + Chain *next; +}; + +#endif diff --git a/object/queue.cc b/object/queue.cc new file mode 100644 index 0000000..03331c1 --- /dev/null +++ b/object/queue.cc @@ -0,0 +1,78 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* Q U E U E */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Implementation of a singly-linked list of Chain objects. enqueue() */ +/* inserts a new element at the end of the list, dequeue() removes the first */ +/* element, and remove() remove the element indicated by its argument. */ +/* Initially, the queue is empty. */ +/* */ +/* The implementation is a little bit tricky (see exercises). tail does not, */ +/* as usual, point to the last element of the list, but to the next pointer */ +/* of this last element (or to the head pointer of the list, if it is still */ +/* empty). This allows us to implement the enqueue() operation without a */ +/* conditional distinguishing the empty from the non-empty case. However, */ +/* when removing elements, we cannot do without this conditional. */ +/*****************************************************************************/ + +#include "object/queue.h" + +// ENQUEUE: Append the Chain object at the end of the list. + +void Queue::enqueue(Chain *item) +{ + item->next = 0; // The new element has no successor yet. + *tail = item; // Append at the end of the list + tail = &(item->next); // and update the tail pointer. +} + +// DEQUEUE: Returns the list's first element and removes it from the list. +// If the list does not contain any elements, it returns a nullptr. + +Chain *Queue::dequeue() +{ + Chain *item; + + item = head; // The head pointer denotes the first element + if (item) { // or contains a nullptr if the list is empty. + head = item->next; // Unlink the first element from the list. + if (!head) // If the list is now empty, we must make sure + tail = &head; // the tail pointer points to head again. + else // Otherwise, invalidate the pointer + item->next = 0;// to this element's successor. + } + return item; +} + +// REMOVE: Searches the supplied Chain element and removes it. + +void Queue::remove(Chain *item) +{ + Chain *cur; + + if (head) { + cur = head; // Search starts at the list's head. + if (item == cur) // If the first element is the sought-after, + dequeue(); // dequeue() suffices for removal. + else { + // Search until we reach the list's end, or the next element is + // the one we are looking for. + while (cur->next && item != cur->next) { + cur = cur->next; + } + + if (cur->next) { + cur->next = item->next; // unlink element + item->next = 0; // invalidate next ptr + + // If cur has no successor, + if (!cur->next) + // we need to update tail. + tail = &(cur->next); + } + } + } +} diff --git a/object/queue.h b/object/queue.h new file mode 100644 index 0000000..485ee66 --- /dev/null +++ b/object/queue.h @@ -0,0 +1,39 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* Q U E U E */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Implementation of a singly-linked list of Chain objects. enqueue() */ +/* inserts a new element at the end of the list, dequeue() removes the first */ +/* element, and remove() remove the element indicated by its argument. */ +/* Initially, the queue is empty. */ +/*****************************************************************************/ + +#ifndef __queue_include__ +#define __queue_include__ + +#include "object/chain.h" + +class Queue { + +protected: + Chain *head; + Chain **tail; + +public: + Queue(const Queue ©) = delete; // prevent copying + Queue& operator=(const Queue&) = delete; // prevent assignment + + Queue() + { + head = 0; + tail = &head; + } + void enqueue(Chain *item); + Chain *dequeue(); + void remove(Chain *); +}; + +#endif From f829b3e5dfaa95bd04319a4438e65d77800f9687 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 12 May 2026 18:45:09 +0200 Subject: [PATCH 03/22] refactor: remove swap file --- isofiles/boot/system | Bin 69000 -> 68872 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/isofiles/boot/system b/isofiles/boot/system index 6526315179e9fec4ae650d97dc6a0313d94a7af7..808b421d90805bb9c63b66af0147e0ac13284ee5 100755 GIT binary patch literal 68872 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 mUioX^#UTpopF9bp!Hzx8mOc7Ab4*mmt-?je$ literal 69000 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

!F4Zj1k-%dLQ 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 Ae*gdg From ea2c468e9d90f5a2265a107d0c9c2303b13cd40d Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 12 May 2026 20:13:15 +0200 Subject: [PATCH 04/22] feat: added plugbox and panic impl --- device/cgastr.cc | 2 +- device/panic.cc | 13 ++++++++++++- device/panic.h | 6 ++++-- guard/gate.h | 5 ++++- guard/guardian.cc | 5 +++-- machine/cpu.cc | 3 +++ machine/plugbox.cc | 22 +++++++++++++++++++++- machine/plugbox.h | 7 +++++++ 8 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 machine/cpu.cc diff --git a/device/cgastr.cc b/device/cgastr.cc index 2af3270..49f2740 100644 --- a/device/cgastr.cc +++ b/device/cgastr.cc @@ -5,7 +5,7 @@ /* C G A _ S T R E A M */ /* */ /*---------------------------------------------------------------------------*/ -/* The CGA_Stream class allows to print different data types as text strings */ +/* The CGA_Stream class allows to print different data types as text strings / /* to a PC's CGA screen. */ /* For attributes/colors and cursor positioning use the methods of class */ /* CGA_Screen. */ diff --git a/device/panic.cc b/device/panic.cc index f986d83..336180c 100644 --- a/device/panic.cc +++ b/device/panic.cc @@ -9,4 +9,15 @@ /*****************************************************************************/ /* Add your code here */ /* Add your code here */ - +#include "device/panic.h" +#include "machine/cpu.h" +#include "device/cgastr.h" + +extern CPU cpu; + +Panic panic; + +void Panic::trigger(){ + // TODO: add print out for unexpected interrupt + cpu.halt(); +} diff --git a/device/panic.h b/device/panic.h index e927aa7..83fa70b 100644 --- a/device/panic.h +++ b/device/panic.h @@ -15,15 +15,17 @@ #include "guard/gate.h" -class Panic +class Panic: public Gate /* Add your code here */ { public: Panic (const Panic ©) = delete; // prevent copying Panic& operator=(const Panic&) = delete; // prevent assignment Panic () {} + void trigger() override; /* Add your code here */ - }; +extern Panic panic; + #endif diff --git a/guard/gate.h b/guard/gate.h index 5389ac8..c5bde9b 100644 --- a/guard/gate.h +++ b/guard/gate.h @@ -12,5 +12,8 @@ #define __Gate_include__ /* Add your code here */ - +class Gate{ + public: + virtual void trigger()=0; +}; #endif diff --git a/guard/guardian.cc b/guard/guardian.cc index d12d131..0af6b13 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -10,15 +10,16 @@ /*****************************************************************************/ /* INCLUDES */ - +#include "machine/plugbox.h" /* FUNCTIONS */ extern "C" void guardian (unsigned int slot); /* GUARDIAN: Low-level interrupt handling. We will extend this function at */ /* a later point in time. */ - +extern Plugbox plugbox; // singleton void guardian (unsigned int slot) { + plugbox.report(slot).trigger(); } diff --git a/machine/cpu.cc b/machine/cpu.cc new file mode 100644 index 0000000..c81019e --- /dev/null +++ b/machine/cpu.cc @@ -0,0 +1,3 @@ +#include "machine/cpu.h" + +CPU cpu; diff --git a/machine/plugbox.cc b/machine/plugbox.cc index 05b21b0..3a018e7 100644 --- a/machine/plugbox.cc +++ b/machine/plugbox.cc @@ -9,4 +9,24 @@ /* for every hardware and software interrupt and every CPU exception. */ /*****************************************************************************/ -/* Add your code here */ +/* Add your code here */ +#include "machine/plugbox.h" +#include "device/panic.h" + +Plugbox plugbox; + +Plugbox::Plugbox(){ + for(int i=0;i<64;i++){ + slots[i] = &panic; + } +} + +void Plugbox::assign(unsigned int slot, Gate& gate){ + if(slot<64){ + slots[slot] = &gate; + } +} + +void Plugbox::report(unsigned int slot){ + return *slots[slot]; +} diff --git a/machine/plugbox.h b/machine/plugbox.h index 1fe2ddf..46d1562 100644 --- a/machine/plugbox.h +++ b/machine/plugbox.h @@ -18,8 +18,15 @@ class Plugbox { public: Plugbox(const Plugbox ©) = delete; // prevent copying Plugbox& operator=(const Plugbox&) = delete; // prevent assignment + static const unsigned int timer = 32; + static const unsigned int keyboard = 33; + void assign(unsigned int slot, Gate& gate); + Gate& report(unsigned int slot); private: /* Add your code here */ + Gate *slots[64]; }; +extern Plugbox plugbox; + #endif From 317d0b562e0c0edcdb98d2e63e44164eb484fda5 Mon Sep 17 00:00:00 2001 From: Tweedle2dum Date: Wed, 13 May 2026 08:56:24 +0530 Subject: [PATCH 05/22] feat: pic implementation and keyboard interrupts --- device/cgastr.cc | 2 + device/cgastr.h | 4 ++ device/keyboard.cc | 26 ++++++++++-- device/keyboard.h | 15 ++++--- device/panic.cc | 4 +- isofiles/boot/system | Bin 68872 -> 91952 bytes machine/keyctrl.cc | 59 +++++++++++++++++++++------ machine/pic.cc | 52 +++++++++++++++++------- machine/pic.h | 32 +++++++-------- machine/plugbox.cc | 2 +- machine/plugbox.h | 1 + main.cc | 92 ++++++++++--------------------------------- user/appl.cc | 50 ++++++++++++++++++----- user/appl.h | 2 +- 14 files changed, 201 insertions(+), 140 deletions(-) diff --git a/device/cgastr.cc b/device/cgastr.cc index 49f2740..f52830b 100644 --- a/device/cgastr.cc +++ b/device/cgastr.cc @@ -14,6 +14,8 @@ #include "device/cgastr.h" +CGA_Stream kout; + void CGA_Stream::flush() { screen.print(buffer, pos, 0x07); diff --git a/device/cgastr.h b/device/cgastr.h index b88e7fb..8cd8f9f 100644 --- a/device/cgastr.h +++ b/device/cgastr.h @@ -29,6 +29,10 @@ class CGA_Stream : public O_Stream CGA_Stream& operator=(const CGA_Stream&) = delete; void flush() override; + void setpos(int x, int y) { screen.setpos(x, y); } + void getpos(int &x, int &y) { screen.getpos(x, y); } }; +extern CGA_Stream kout; + #endif diff --git a/device/keyboard.cc b/device/keyboard.cc index ebe28ad..16764b7 100644 --- a/device/keyboard.cc +++ b/device/keyboard.cc @@ -8,6 +8,26 @@ /* Keyboard driver. */ /*****************************************************************************/ -/* Add your code here */ -/* Add your code here */ - +#include "device/keyboard.h" +#include "machine/plugbox.h" +#include "machine/pic.h" +#include "device/cgastr.h" + +Keyboard keyboard; + +void Keyboard::plugin() { + plugbox.assign(Plugbox::keyboard, *this); + pic.allow(PIC::keyboard); +} + +void Keyboard::trigger() { + Key k = key_hit(); + if (k.valid()) { + if (k.ctrl() && k.alt() && k.scancode() == Key::scan::del) { + reboot(); + } else if (k.ascii() != 0) { + kout << k.ascii(); + kout.flush(); + } + } +} diff --git a/device/keyboard.h b/device/keyboard.h index ae45cb6..f72a198 100644 --- a/device/keyboard.h +++ b/device/keyboard.h @@ -15,21 +15,20 @@ #include "guard/gate.h" #include "machine/key.h" -class Keyboard -/* Add your code here */ +class Keyboard : public Gate, public Keyboard_Controller { public: Keyboard(const Keyboard ©) = delete; // prevent copying Keyboard& operator=(const Keyboard&) = delete; // prevent assignment -/* Add your code here */ - -/* Add your code here */ - + Keyboard() {} + // PLUGIN: "Plugs in" the keyboard (driver). From now on, keypresses are handled. void plugin(); -/* Add your code here */ - + // TRIGGER: The interrupt handling routine. + void trigger() override; }; +extern Keyboard keyboard; + #endif diff --git a/device/panic.cc b/device/panic.cc index 336180c..8902360 100644 --- a/device/panic.cc +++ b/device/panic.cc @@ -18,6 +18,8 @@ extern CPU cpu; Panic panic; void Panic::trigger(){ - // TODO: add print out for unexpected interrupt + kout.setpos(0, 0); + kout << "PANIC: Unexpected interrupt! System halted." << endl; + kout.flush(); cpu.halt(); } diff --git a/isofiles/boot/system b/isofiles/boot/system index 808b421d90805bb9c63b66af0147e0ac13284ee5..6d5e6fd075a1fc218059b764fbdd22f06e90b57e 100755 GIT binary patch literal 91952 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 literal 68872 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 mUioX^#UTpopF9bp!Hzx8mOc7Ab4*mmt-?je$ diff --git a/machine/keyctrl.cc b/machine/keyctrl.cc index 148d24e..e9434aa 100644 --- a/machine/keyctrl.cc +++ b/machine/keyctrl.cc @@ -11,6 +11,7 @@ /* INCLUDES */ #include "machine/keyctrl.h" +#include "machine/pic.h" /* STATIC MEMBERS */ @@ -230,22 +231,22 @@ Keyboard_Controller::Keyboard_Controller() : leds(0), ctrl_port(0x64), data_port Key Keyboard_Controller::key_hit() { - Key invalid; - - int status = ctrl_port.inb(); - - if (!(status & outb)) - return invalid; - - if (status & auxb) - return invalid; + Key invalid; + int status; - code = data_port.inb(); + // Defensive check: process all available bytes in the buffer + while ((status = ctrl_port.inb()) & outb) { + if (status & auxb) { + data_port.inb(); // ignore mouse data + continue; + } - if (key_decoded()) - return gather; + code = data_port.inb(); + if (key_decoded()) + return gather; + } - return invalid; + return invalid; } // REBOOT: Reboots the PC. Yes, in a PC the keyboard controller is @@ -279,21 +280,40 @@ void Keyboard_Controller::reboot() void Keyboard_Controller::set_repeat_rate(int speed, int delay) { + bool masked = pic.is_masked(PIC::keyboard); + pic.forbid(PIC::keyboard); + // Wait until input buffer is empty while (ctrl_port.inb() & inpb) ; data_port.outb(kbd_cmd::set_speed); // 0xF3 + // Wait for ACK + while (!(ctrl_port.inb() & outb)) + ; + data_port.inb(); // consume ACK + // Wait until input buffer is empty again while (ctrl_port.inb() & inpb) ; data_port.outb(((delay & 0x3) << 5) | (speed & 0x1f)); + + // Wait for ACK + while (!(ctrl_port.inb() & outb)) + ; + data_port.inb(); // consume ACK + + if (!masked) + pic.allow(PIC::keyboard); } // SET_LED: sets or clears the specified LED void Keyboard_Controller::set_led(char led, bool on) { + bool masked = pic.is_masked(PIC::keyboard); + pic.forbid(PIC::keyboard); + if (on) leds |= led; // set bit else @@ -304,8 +324,21 @@ void Keyboard_Controller::set_led(char led, bool on) ; data_port.outb(kbd_cmd::set_led); // 0xED + // Wait for ACK + while (!(ctrl_port.inb() & outb)) + ; + data_port.inb(); // consume ACK + // Wait until input buffer is empty again while (ctrl_port.inb() & inpb) ; data_port.outb(leds); + + // Wait for ACK + while (!(ctrl_port.inb() & outb)) + ; + data_port.inb(); // consume ACK + + if (!masked) + pic.allow(PIC::keyboard); } diff --git a/machine/pic.cc b/machine/pic.cc index ba18d7c..e6fa460 100644 --- a/machine/pic.cc +++ b/machine/pic.cc @@ -1,16 +1,38 @@ -/*****************************************************************************/ -/* Operating-System Construction */ -/*---------------------------------------------------------------------------*/ -/* */ -/* P I C */ -/* */ -/*---------------------------------------------------------------------------*/ -/* Programmable Interrupt Controller. */ -/* By using the PIC, hardware interrupts can be enabled or suppressed */ -/* individually. This way we can control whether interrupts of a specific */ -/* device are forwarded to the CPU at all. Even then, the interrupt handler */ -/* gets only activated if the CPU is ready to react to interrupts. This can */ -/* be controlled by using class CPU. */ -/*****************************************************************************/ +#include "machine/pic.h" -/* Add your code here */ +PIC pic; + +PIC::PIC() : master_mask(0x21), slave_mask(0xa1) { +} + +void PIC::allow(int interrupt_device) { + if (interrupt_device < 8) { + unsigned char mask = master_mask.inb(); + mask &= ~(1 << interrupt_device); + master_mask.outb(mask); + } else { + unsigned char mask = slave_mask.inb(); + mask &= ~(1 << (interrupt_device - 8)); + slave_mask.outb(mask); + } +} + +void PIC::forbid(int interrupt_device) { + if (interrupt_device < 8) { + unsigned char mask = master_mask.inb(); + mask |= (1 << interrupt_device); + master_mask.outb(mask); + } else { + unsigned char mask = slave_mask.inb(); + mask |= (1 << (interrupt_device - 8)); + slave_mask.outb(mask); + } +} + +bool PIC::is_masked(int interrupt_device) { + if (interrupt_device < 8) { + return (master_mask.inb() & (1 << interrupt_device)) != 0; + } else { + return (slave_mask.inb() & (1 << (interrupt_device - 8))) != 0; + } +} diff --git a/machine/pic.h b/machine/pic.h index ceda3c9..41395fa 100644 --- a/machine/pic.h +++ b/machine/pic.h @@ -1,27 +1,25 @@ -/*****************************************************************************/ -/* Operating-System Construction */ -/*---------------------------------------------------------------------------*/ -/* */ -/* P I C */ -/* */ -/*---------------------------------------------------------------------------*/ -/* Programmable Interrupt Controller. */ -/* By using the PIC, hardware interrupts can be enabled or suppressed */ -/* individually. This way we can control whether interrupts of a specific */ -/* device are forwarded to the CPU at all. Even then, the interrupt handler */ -/* gets only activated if the CPU is ready to react to interrupts. This can */ -/* be controlled by using class CPU. */ -/*****************************************************************************/ - #ifndef __pic_include__ #define __pic_include__ +#include "machine/io_port.h" + class PIC { public: + enum { timer = 0, keyboard = 1 }; + PIC(const PIC ©) = delete; // prevent copying PIC& operator=(const PIC&) = delete; // prevent assignment - PIC() {} -/* Add your code here */ + PIC(); + + void allow (int interrupt_device); + void forbid (int interrupt_device); + bool is_masked (int interrupt_device); + +private: + IO_Port master_mask; + IO_Port slave_mask; }; +extern PIC pic; + #endif diff --git a/machine/plugbox.cc b/machine/plugbox.cc index 3a018e7..a2278a0 100644 --- a/machine/plugbox.cc +++ b/machine/plugbox.cc @@ -27,6 +27,6 @@ void Plugbox::assign(unsigned int slot, Gate& gate){ } } -void Plugbox::report(unsigned int slot){ +Gate& Plugbox::report(unsigned int slot){ return *slots[slot]; } diff --git a/machine/plugbox.h b/machine/plugbox.h index 46d1562..b5dda2d 100644 --- a/machine/plugbox.h +++ b/machine/plugbox.h @@ -18,6 +18,7 @@ class Plugbox { public: Plugbox(const Plugbox ©) = delete; // prevent copying Plugbox& operator=(const Plugbox&) = delete; // prevent assignment + Plugbox(); static const unsigned int timer = 32; static const unsigned int keyboard = 33; void assign(unsigned int slot, Gate& gate); diff --git a/main.cc b/main.cc index 7c003bb..4b39ee1 100644 --- a/main.cc +++ b/main.cc @@ -1,79 +1,27 @@ #include "device/cgastr.h" -#include "machine/cgascr.h" -#include "machine/keyctrl.h" -#include "object/o_stream.h" +#include "machine/cpu.h" +#include "machine/pic.h" +#include "machine/plugbox.h" +#include "device/keyboard.h" +#include "user/appl.h" + +extern CPU cpu; +extern PIC pic; +extern Plugbox plugbox; +extern Keyboard keyboard; +extern CGA_Stream kout; int main() { - CGA_Screen screen; - Keyboard_Controller keyboard; + kout.setpos(0, 0); + kout << "PurrOS 2.0.0 - Task 2" << endl; + kout.flush(); - screen.print(" ", 20, 0x07); + // Initialize keyboard and interrupts + keyboard.plugin(); + cpu.enable_int(); - CGA_Stream kout; // stream formatter + Application app; + app.action(); - kout << "PurrOS 2.0.0" << endl; - kout << "Hello O_Stream!" << endl; - kout << "Number: " << 42 << endl; - kout << "Char test: " << 'A' << endl; - - kout << "Test -> " << endl; - kout << "zero: " << 0 << " -> 0" << endl; - kout << "decimal: " << dec << 42 << " -> 42" << endl; - kout << "binary: " << bin << 42 << dec << " -> 0b101010" << endl; - kout << "octal: " << oct << 42 << dec << " -> 052" << endl; - kout << "hex: " << hex << 42 << dec << " -> 0x2a" << endl; - kout << "uint64_t max: " << ~((unsigned long)0) << " -> 18446744073709551615" - << endl; - kout << "int64_t max: " << ~(1l << 63) << " -> 9223372036854775807" << endl; - kout << "int64_t min: " << (1l << 63) << " -> -9223372036854775808" << endl; - kout << "some int64_t: " << (-1234567890123456789) - << " -> -1234567890123456789" << endl; - kout << "some int64_t: " << (1234567890123456789) << " -> 1234567890123456789" - << endl; - kout << "pointer: " << reinterpret_cast(1994473406541717165ul) - << " -> 0x1badcafefee1dead" << endl; - kout << "smiley: " << static_cast(1) << endl; - kout.flush(); - - int speed = 0; - int delay = 0; - - kout << "Use Arrow keys to control repeat rate:" << endl; - kout << "UP/DOWN: Speed (0-31), LEFT/RIGHT: Delay (0-3)" << endl; - kout.flush(); - - while (true) { - Key k = keyboard.key_hit(); - if (k.valid()) { - bool changed = false; - if (k.scancode() == Key::scan::up) { - if (speed > 0) - speed--; - changed = true; - } else if (k.scancode() == Key::scan::down) { - if (speed < 31) - speed++; - changed = true; - } else if (k.scancode() == Key::scan::left) { - if (delay > 0) - delay--; - changed = true; - } else if (k.scancode() == Key::scan::right) { - if (delay < 3) - delay++; - changed = true; - } - - if (changed) { - keyboard.set_repeat_rate(speed, delay); - kout << endl - << "Repeat rate: Speed=" << speed << ", Delay=" << delay << endl; - } else if (k.ascii() != 0) { - kout << k.ascii(); - } - kout.flush(); - } - } - - return 0; + return 0; } diff --git a/user/appl.cc b/user/appl.cc index 5afb65e..66fbdf1 100644 --- a/user/appl.cc +++ b/user/appl.cc @@ -8,19 +8,51 @@ /* The Application class defines the (only) application for OOStuBS. */ /*****************************************************************************/ -/* INCLUDES */ - #include "user/appl.h" #include "device/cgastr.h" -/* Add your code here */ - -/* GLOBAL VARIABLES */ +#include "machine/cpu.h" +extern CPU cpu; extern CGA_Stream kout; -/* Add your code here */ - + void Application::action() { -/* Add your code here */ - + kout << "PurrOS 2.0.0 - Task 2" << endl; + kout << "Hello O_Stream!" << endl; + kout << "Number: " << 42 << endl; + kout << "Char test: " << 'A' << endl; + + kout << "Test -> " << endl; + kout << "zero: " << 0 << " -> 0" << endl; + kout << "decimal: " << dec << 42 << " -> 42" << endl; + kout << "binary: " << bin << 42 << dec << " -> 0b101010" << endl; + kout << "octal: " << oct << 42 << dec << " -> 052" << endl; + kout << "hex: " << hex << 42 << dec << " -> 0x2a" << endl; + kout << "uint64_t max: " << ~((unsigned long)0) << " -> 18446744073709551615" + << endl; + kout << "int64_t max: " << ~(1l << 63) << " -> 9223372036854775807" << endl; + kout << "int64_t min: " << (1l << 63) << " -> -9223372036854775808" << endl; + kout << "some int64_t: " << (-1234567890123456789) + << " -> -1234567890123456789" << endl; + kout << "some int64_t: " << (1234567890123456789) << " -> 1234567890123456789" + << endl; + kout << "pointer: " << reinterpret_cast(1994473406541717165ul) + << " -> 0x1badcafefee1dead" << endl; + kout << "smiley: " << static_cast(1) << endl; + kout.flush(); + + int counter = 0; + while (true) { + cpu.disable_int(); + int x, y; + kout.getpos(x, y); + kout.setpos(0, 24); + kout << "Counter: " << counter++ << " "; + kout.flush(); + kout.setpos(x, y); + cpu.enable_int(); + + for (volatile int i = 0; i < 2000000; i++) + ; + } } diff --git a/user/appl.h b/user/appl.h index b6b8330..03d5366 100644 --- a/user/appl.h +++ b/user/appl.h @@ -18,7 +18,7 @@ class Application public: Application (const Application ©) = delete; // prevent copying Application& operator=(const Application&) = delete; // prevent assignment -/* Add your code here */ + Application() {} void action (); }; From b4940b906353d7441446a8e5b6e9501760e29770 Mon Sep 17 00:00:00 2001 From: Till Smejkal Date: Mon, 1 Jun 2026 10:10:55 +0200 Subject: [PATCH 06/22] template for task 4 --- machine/toc.asm | 36 ++++++++++++++++++++++++++++++++++++ machine/toc.c | 22 ++++++++++++++++++++++ machine/toc.h | 39 +++++++++++++++++++++++++++++++++++++++ machine/toc.inc | 29 +++++++++++++++++++++++++++++ thread/coroutine.cc | 25 +++++++++++++++++++++++++ thread/coroutine.h | 29 +++++++++++++++++++++++++++++ thread/dispatch.cc | 15 +++++++++++++++ thread/dispatch.h | 27 +++++++++++++++++++++++++++ thread/entrant.h | 26 ++++++++++++++++++++++++++ thread/kickoff.cc | 17 +++++++++++++++++ thread/kickoff.h | 22 ++++++++++++++++++++++ thread/scheduler.cc | 14 ++++++++++++++ thread/scheduler.h | 27 +++++++++++++++++++++++++++ user/loop.cc | 16 ++++++++++++++++ user/loop.h | 18 ++++++++++++++++++ 15 files changed, 362 insertions(+) create mode 100644 machine/toc.asm create mode 100644 machine/toc.c create mode 100644 machine/toc.h create mode 100644 machine/toc.inc create mode 100644 thread/coroutine.cc create mode 100644 thread/coroutine.h create mode 100644 thread/dispatch.cc create mode 100644 thread/dispatch.h create mode 100644 thread/entrant.h create mode 100644 thread/kickoff.cc create mode 100644 thread/kickoff.h create mode 100644 thread/scheduler.cc create mode 100644 thread/scheduler.h create mode 100644 user/loop.cc create mode 100644 user/loop.h diff --git a/machine/toc.asm b/machine/toc.asm new file mode 100644 index 0000000..7f2dfc4 --- /dev/null +++ b/machine/toc.asm @@ -0,0 +1,36 @@ +;****************************************************************************** +;* Operating-System Construction * +;*----------------------------------------------------------------------------* +;* * +;* T O C . A S M * +;* * +;*----------------------------------------------------------------------------* +;* +;****************************************************************************** + +%include "machine/toc.inc" + +; EXPORTED FUNCTIONS + +[GLOBAL toc_switch] +[GLOBAL toc_go] + +; FUNCTION IMPLEMENTATIONS + +[SECTION .text] + +; TOC_GO: Starts the very first process. +; +; C prototype: void toc_go(struct toc* regs); + +toc_go: +; Add your code here + +; TOC_SWITCH: Context switch. Saves the current register values and replaces +; them with values of the new "thread of control". +; +; C prototype: void toc_switch (struct toc* regs_now, +; struct toc* reg_then); + +toc_switch: +; Add your code here diff --git a/machine/toc.c b/machine/toc.c new file mode 100644 index 0000000..099eba8 --- /dev/null +++ b/machine/toc.c @@ -0,0 +1,22 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* T O C */ +/* */ +/*---------------------------------------------------------------------------*/ +/* The toc struct is used to save the values of the non-volatile registers */ +/* in case of a context switch. toc_settle prepares the initial stack and */ +/* the toc struct for the first activation. */ +/*****************************************************************************/ + +#include "machine/toc.h" + +// TOC_SETTLE: Prepares a coroutine context for its first activation. +void toc_settle(struct toc *regs, void *tos, + void (*kickoff)(void *, void *, void *, void *, void *, void *, + void *), + void *object) +{ +/* Add your code here */ +} diff --git a/machine/toc.h b/machine/toc.h new file mode 100644 index 0000000..321a5b5 --- /dev/null +++ b/machine/toc.h @@ -0,0 +1,39 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* T O C */ +/* */ +/*---------------------------------------------------------------------------*/ +/* The toc struct is used to save the values of the non-volatile registers */ +/* in case of a context switch. */ +/* With the System V AMD64 ABI the GNU C compiler uses, RBP, RBX and R12 to */ +/* R15 are non-volatile registers that must be saved by hand at a context */ +/* switch. Additionally there are 108 bytes of non-volatile extended CPU */ +/* state that are only important if we use components like the FPU or SIMD */ +/* instructions. */ +/* */ +/* Careful: For accessing struct toc elements from an assembler function, we */ +/* define names for the necessary offsets from the struct's start in the */ +/* file toc.inc. To access the correct elements, definitions in toc.h and */ +/* toc.inc must match exactly. If you modify toc.h, you must also modify */ +/* toc.inc (and vice versa.) */ +/*****************************************************************************/ + +#ifndef __toc_include__ +#define __toc_include__ + +// TOC: ("thread of control") +// +struct toc { + void *rbx; + void *r12; + void *r13; + void *r14; + void *r15; + void *rbp; + void *rsp; + char fpu[108]; // optional: 108 bytes extended CPU state (MMX, SSE, ...) +}; + +#endif diff --git a/machine/toc.inc b/machine/toc.inc new file mode 100644 index 0000000..2081fb7 --- /dev/null +++ b/machine/toc.inc @@ -0,0 +1,29 @@ +;***************************************************************************** +;* Operating-System Construction * +;*---------------------------------------------------------------------------* +;* * +;* T O C * +;* * +;*---------------------------------------------------------------------------* +;* Assembler variant of struct toc definition from toc.h * +;* * +;* The register-name order must match that of struct toc (toc.h). * +;***************************************************************************** + +; STRUCTURES + +; TOC: non-volatile registers of an x86-64 CPU (System V AMD64 ABI) + +; The following definitions set rbx_offset to 0, r12_offset to 8, r13_offset +; to 16, and so on. This matches the offsets of elements rbx, r12, r13 etc. +; in struct toc (in bytes). + +[ABSOLUTE 0] +rbx_offset: resq 1 +r12_offset: resq 1 +r13_offset: resq 1 +r14_offset: resq 1 +r15_offset: resq 1 +rbp_offset: resq 1 +rsp_offset: resq 1 +fpu_offset: resb 108 diff --git a/thread/coroutine.cc b/thread/coroutine.cc new file mode 100644 index 0000000..2edf67d --- /dev/null +++ b/thread/coroutine.cc @@ -0,0 +1,25 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* C O R O U T I N E */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Represents the abstraction of a coroutine. */ +/* In the constructor, we set up the initial context of the coroutine. go() */ +/* activates the first coroutine. All further coroutine switches should be */ +/* initiated by resume(). */ +/* To be able to save the context at a couroutine switch, every Coroutine */ +/* object contains a struct toc that stores the values of all non-volatile */ +/* registers. */ +/*****************************************************************************/ + +#include "thread/coroutine.h" +#include "thread/kickoff.h" + +// Functions that are implemented at C or assembler level must be declared as +// extern "C", because they do not conform to C++ name mangling. +extern "C" { +/* Add your code here */ +} +/* Add your code here */ diff --git a/thread/coroutine.h b/thread/coroutine.h new file mode 100644 index 0000000..93d178b --- /dev/null +++ b/thread/coroutine.h @@ -0,0 +1,29 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* C O R O U T I N E */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Represents the abstraction of a coroutine. */ +/* In the constructor, we set up the initial context of the coroutine. go() */ +/* activates the first coroutine. All further coroutine switches should be */ +/* initiated by resume(). */ +/* To be able to save the context at a couroutine switch, every Coroutine */ +/* object contains a struct toc that stores the values of all non-volatile */ +/* registers. */ +/*****************************************************************************/ + +#ifndef __Coroutine_include__ +#define __Coroutine_include__ + +#include "machine/toc.h" + +class Coroutine { +public: + Coroutine(const Coroutine ©) = delete; // prevent copying + Coroutine& operator=(const Coroutine&) = delete; // prevent assignment +/* Add your code here */ +}; + +#endif diff --git a/thread/dispatch.cc b/thread/dispatch.cc new file mode 100644 index 0000000..1cff4b5 --- /dev/null +++ b/thread/dispatch.cc @@ -0,0 +1,15 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* D I S P A T C H E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Dispatcher implementation. */ +/* The Dispatcher maintains the life pointer that points to the currently */ +/* active coroutine. go() initializes the life pointer and starts the first */ +/* coroutine, all further context switches are triggered by dispatch(). */ +/* active() returns the life pointer. */ +/*****************************************************************************/ + +/* Add your code here */ diff --git a/thread/dispatch.h b/thread/dispatch.h new file mode 100644 index 0000000..738d4ca --- /dev/null +++ b/thread/dispatch.h @@ -0,0 +1,27 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* D I S P A T C H E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Dispatcher implementation. */ +/* The Dispatcher maintains the life pointer that points to the currently */ +/* active coroutine. go() initializes the life pointer and starts the first */ +/* coroutine, all further context switches are triggered by dispatch(). */ +/* active() returns the life pointer. */ +/*****************************************************************************/ + +#ifndef __dispatch_include__ +#define __dispatch_include__ + +/* Add your code here */ + +class Dispatcher { +public: + Dispatcher(const Dispatcher ©) = delete; // prevent copying + Dispatcher& operator=(const Dispatcher&) = delete; // prevent assignment +/* Add your code here */ +}; + +#endif diff --git a/thread/entrant.h b/thread/entrant.h new file mode 100644 index 0000000..e9edb0f --- /dev/null +++ b/thread/entrant.h @@ -0,0 +1,26 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* E N T R A N T */ +/* */ +/*---------------------------------------------------------------------------*/ +/* A coroutine that is managed by the Scheduler. */ +/*****************************************************************************/ + +#ifndef __entrant_include__ +#define __entrant_include__ + +/* Add your code here */ + +class Entrant +/* Add your code here */ +{ +public: + Entrant(const Entrant ©) = delete; // prevent copying + Entrant& operator=(const Entrant&) = delete; // prevent assignment + +/* Add your code here */ +}; + +#endif diff --git a/thread/kickoff.cc b/thread/kickoff.cc new file mode 100644 index 0000000..63b8ad6 --- /dev/null +++ b/thread/kickoff.cc @@ -0,0 +1,17 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* K I C K O F F */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Function to start a coroutine. */ +/* Since this function is not really called, but only jumped to by a clever */ +/* initialization of the stack of the coroutine, it must never terminate. */ +/* Otherwise a meaningless value would be interpreted as a return address */ +/* and the computer would crash. */ +/*****************************************************************************/ + +#include "thread/kickoff.h" +/* Add your code here */ + diff --git a/thread/kickoff.h b/thread/kickoff.h new file mode 100644 index 0000000..5d31e43 --- /dev/null +++ b/thread/kickoff.h @@ -0,0 +1,22 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* K I C K O F F */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Function to start a coroutine. */ +/* Since this function is not really called, but only jumped to by a clever */ +/* initialization of the stack of the coroutine, it must never terminate. */ +/* Otherwise a meaningless value would be interpreted as a return address */ +/* and the computer would crash. */ +/*****************************************************************************/ + +#ifndef __kickoff_include__ +#define __kickoff_include__ + +class Coroutine; + +void kickoff(void* dummy1, void* dummy2, void* dummy3, void* dummy4, void* dummy5, void* dummy6, Coroutine* object); + +#endif diff --git a/thread/scheduler.cc b/thread/scheduler.cc new file mode 100644 index 0000000..c68850a --- /dev/null +++ b/thread/scheduler.cc @@ -0,0 +1,14 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* S C H E D U L E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Scheduler implementation. */ +/*****************************************************************************/ + +/* Add your code here */ + +/* Add your code here */ +/* Add your code here */ diff --git a/thread/scheduler.h b/thread/scheduler.h new file mode 100644 index 0000000..0ed8126 --- /dev/null +++ b/thread/scheduler.h @@ -0,0 +1,27 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* S C H E D U L E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Scheduler implementation. */ +/*****************************************************************************/ + +#ifndef __schedule_include__ +#define __schedule_include__ + +#include "thread/dispatch.h" +/* Add your code here */ + +class Scheduler +/* Add your code here */ +{ +public: + Scheduler (const Scheduler ©) = delete; // prevent copying + Scheduler& operator=(const Scheduler&) = delete; // prevent assignment +/* Add your code here */ + +}; + +#endif diff --git a/user/loop.cc b/user/loop.cc new file mode 100644 index 0000000..1798919 --- /dev/null +++ b/user/loop.cc @@ -0,0 +1,16 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* L O O P */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Loop is a thread that does nothing else but count upwards and print this */ +/* on the screen. In between, it yields the CPU. The Scheduler then decides */ +/* which thread shall run next. */ +/*****************************************************************************/ + +/* Add your code here */ + +/* Add your code here */ + diff --git a/user/loop.h b/user/loop.h new file mode 100644 index 0000000..03aa72a --- /dev/null +++ b/user/loop.h @@ -0,0 +1,18 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* L O O P */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Loop is a thread that does nothing else but count upwards and print this */ +/* on the screen. In between, it yields the CPU. The Scheduler then decides */ +/* which thread shall run next. */ +/*****************************************************************************/ + +#ifndef __loop_include__ +#define __loop_include__ + +/* Add your code here */ + +#endif From 99f4eac1c3c59cc7681cdcdc18dc285c3a710f46 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Mon, 1 Jun 2026 18:13:21 +0200 Subject: [PATCH 07/22] feat: started working on task 3 --- isofiles/boot/system | Bin 91952 -> 94544 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/isofiles/boot/system b/isofiles/boot/system index 6d5e6fd075a1fc218059b764fbdd22f06e90b57e..bd5654b9c43bfffc461578a9d22411e0d05d3872 100755 GIT binary patch literal 94544 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

o2^K6IN(?~dM%2R)fFVZ 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 GDkWfuV2vc${{DSLn4KP#qY;qGIFx!Z;Er0!<# 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 From 4c10838a4bcd3f25d6b9efb5a40ba0e074f3fcb5 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Mon, 1 Jun 2026 22:24:26 +0200 Subject: [PATCH 08/22] feat: working on sync --- device/keyboard.cc | 19 ++++++++++++++----- device/keyboard.h | 6 ++++-- device/panic.cc | 5 +++-- device/panic.h | 2 +- guard/gate.h | 15 +++++++++++++-- guard/guard.cc | 37 ++++++++++++++++++++++++++++++++++++- guard/guard.h | 12 ++++++++++-- guard/guardian.cc | 15 ++++++++++++++- guard/locker.h | 27 +++++++++++++++++++++++++++ guard/secure.h | 14 +++++++++++++- isofiles/boot/system | Bin 94544 -> 107000 bytes user/appl.cc | 20 +++++++++++--------- 12 files changed, 146 insertions(+), 26 deletions(-) diff --git a/device/keyboard.cc b/device/keyboard.cc index 16764b7..7fa0270 100644 --- a/device/keyboard.cc +++ b/device/keyboard.cc @@ -20,14 +20,23 @@ void Keyboard::plugin() { pic.allow(PIC::keyboard); } -void Keyboard::trigger() { +bool Keyboard::prologue() { Key k = key_hit(); if (k.valid()) { if (k.ctrl() && k.alt() && k.scancode() == Key::scan::del) { reboot(); - } else if (k.ascii() != 0) { - kout << k.ascii(); - kout.flush(); - } + } //else if (k.ascii() != 0) { + // kout << k.ascii(); + // kout.flush(); + //} + } + return true; +} + +void Keyboard::epilogue(){ + Key k = key_hit(); + if(k.ascii()){ + kout << k.ascii(); + kout.flush(); } } diff --git a/device/keyboard.h b/device/keyboard.h index f72a198..f5bf30e 100644 --- a/device/keyboard.h +++ b/device/keyboard.h @@ -25,8 +25,10 @@ class Keyboard : public Gate, public Keyboard_Controller // PLUGIN: "Plugs in" the keyboard (driver). From now on, keypresses are handled. void plugin(); - // TRIGGER: The interrupt handling routine. - void trigger() override; + // PROLOGUE: To start the interrupt handling routine. + bool prologue() override; + + void epilogue() override; }; extern Keyboard keyboard; diff --git a/device/panic.cc b/device/panic.cc index 8902360..add5aff 100644 --- a/device/panic.cc +++ b/device/panic.cc @@ -17,9 +17,10 @@ extern CPU cpu; Panic panic; -void Panic::trigger(){ +bool Panic::prologue(){ kout.setpos(0, 0); kout << "PANIC: Unexpected interrupt! System halted." << endl; kout.flush(); - cpu.halt(); + cpu.halt(); + return true; } diff --git a/device/panic.h b/device/panic.h index 83fa70b..c33402b 100644 --- a/device/panic.h +++ b/device/panic.h @@ -22,7 +22,7 @@ class Panic: public Gate Panic (const Panic ©) = delete; // prevent copying Panic& operator=(const Panic&) = delete; // prevent assignment Panic () {} - void trigger() override; + bool prologue() override; /* Add your code here */ }; diff --git a/guard/gate.h b/guard/gate.h index c5bde9b..510a564 100644 --- a/guard/gate.h +++ b/guard/gate.h @@ -10,10 +10,21 @@ #ifndef __Gate_include__ #define __Gate_include__ +#include "object/chain.h" /* Add your code here */ -class Gate{ +class Gate: public Chain{ + private: + bool in_queue; public: - virtual void trigger()=0; + Gate() : in_queue(false) {} + virtual bool prologue()=0; + virtual void epilogue() {} + void queued(bool q){ + in_queue = true; + } + bool queued(){ + return in_queue; + } }; #endif diff --git a/guard/guard.cc b/guard/guard.cc index e5aa258..32bdde1 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -10,4 +10,39 @@ /* synchronization takes place along the prologue/epilogue model. */ /*****************************************************************************/ -/* Add your code here */ +/* Add your code here */ + +#include "guard.h" +#include "machine/cpu.h" +#include "gate.h" +extern CPU cpu; +void Guard::relay(Gate *item){ + + if(avail()){ + item->queued(false); + cpu.enable_int(); + item->epilogue(); + }else{ + if(!item->queued()){ + item->queued(true); + cpu.disable_int(); + queue.enqueue(item); + cpu.enable_int(); + } + } +} + +void Guard::leave(){ + retne(); + + Gate *gate; + + while((gate = (Gate*)queue.dequeue())){ + cpu.disable_int(); + gate->queued(false); + cpu.enable_int(); + gate->epilogue(); + } +} + +Guard guard; diff --git a/guard/guard.h b/guard/guard.h index d2fa103..c74c6ad 100644 --- a/guard/guard.h +++ b/guard/guard.h @@ -14,13 +14,21 @@ #define __Guard_include__ /* Add your code here */ - +#include "object/queue.h" +#include "locker.h" +#include "gate.h" class Guard : public Locker { +private: + Queue queue; public: Guard (const Guard ©) = delete; // prevent copying Guard& operator=(const Guard&) = delete; // prevent assignment Guard () {} -/* Add your code here */ + + void leave(); + void relay(Gate *item); }; +extern Guard guard; + #endif diff --git a/guard/guardian.cc b/guard/guardian.cc index 0af6b13..8bd410c 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -11,6 +11,7 @@ /* INCLUDES */ #include "machine/plugbox.h" +#include "guard.h" /* FUNCTIONS */ extern "C" void guardian (unsigned int slot); @@ -18,8 +19,20 @@ extern "C" void guardian (unsigned int slot); /* GUARDIAN: Low-level interrupt handling. We will extend this function at */ /* a later point in time. */ extern Plugbox plugbox; // singleton + void guardian (unsigned int slot) { - plugbox.report(slot).trigger(); +// plugbox.report(slot).prologue(); + Gate &gate = plugbox.report(slot); + + if(gate.prologue()){ + if(!gate.queued()){ + gate.queued(true); + guard.relay(&gate); + } + } + + + } diff --git a/guard/locker.h b/guard/locker.h index 08d19ba..2f8d267 100644 --- a/guard/locker.h +++ b/guard/locker.h @@ -13,11 +13,38 @@ #ifndef __Locker_include__ #define __Locker_include__ +#include "device/cgastr.h" +#include "machine/cpu.h" + +extern CPU cpu; class Locker { +private: + bool locked; public: + Locker() : locked(false) {} Locker(const Locker ©) = delete; // prevent copying Locker& operator=(const Locker&) = delete; // prevent assignment + + void enter(){ + if(locked){ + kout << "LOCK ERROR: double enter()" << endl; + cpu.halt(); + } + locked = true; + } + + void retne(){ + if(!locked){ + kout << "LOCK ERROR: double retne()" << endl; + cpu.halt(); + } + locked = false; + } + + bool avail(){ + return !locked; + } /* Add your code here */ }; diff --git a/guard/secure.h b/guard/secure.h index 15a0a72..d737a27 100644 --- a/guard/secure.h +++ b/guard/secure.h @@ -14,7 +14,19 @@ #ifndef __Secure_include__ #define __Secure_include__ +#include "guard.h" -/* Add your code here */ +extern Guard guard; + +class Secure{ +public: + Secure(){ + guard.enter(); + } + + ~Secure(){ + guard.leave(); + } +}; #endif diff --git a/isofiles/boot/system b/isofiles/boot/system index bd5654b9c43bfffc461578a9d22411e0d05d3872..99c5ce9b4288a619be4e70ac2f00d5bd40d389cc 100755 GIT binary patch delta 36369 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 delta 25474 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 e>^yt=cHYyUH&&v8`Suo&`n%1M Date: Mon, 1 Jun 2026 22:30:50 +0200 Subject: [PATCH 09/22] chore: bug fix --- device/keyboard.cc | 3 +-- device/keyboard.h | 2 ++ guard/guard.cc | 2 +- guard/guardian.cc | 7 ++++--- isofiles/boot/system | Bin 107000 -> 107128 bytes 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/device/keyboard.cc b/device/keyboard.cc index 7fa0270..6aabef7 100644 --- a/device/keyboard.cc +++ b/device/keyboard.cc @@ -21,7 +21,7 @@ void Keyboard::plugin() { } bool Keyboard::prologue() { - Key k = key_hit(); + k = key_hit(); if (k.valid()) { if (k.ctrl() && k.alt() && k.scancode() == Key::scan::del) { reboot(); @@ -34,7 +34,6 @@ bool Keyboard::prologue() { } void Keyboard::epilogue(){ - Key k = key_hit(); if(k.ascii()){ kout << k.ascii(); kout.flush(); diff --git a/device/keyboard.h b/device/keyboard.h index f5bf30e..90e2271 100644 --- a/device/keyboard.h +++ b/device/keyboard.h @@ -17,6 +17,8 @@ class Keyboard : public Gate, public Keyboard_Controller { +private: + Key k; public: Keyboard(const Keyboard ©) = delete; // prevent copying Keyboard& operator=(const Keyboard&) = delete; // prevent assignment diff --git a/guard/guard.cc b/guard/guard.cc index 32bdde1..dac9120 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -17,7 +17,7 @@ #include "gate.h" extern CPU cpu; void Guard::relay(Gate *item){ - + //item->epilogue(); if(avail()){ item->queued(false); cpu.enable_int(); diff --git a/guard/guardian.cc b/guard/guardian.cc index 8bd410c..8818aca 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -11,6 +11,7 @@ /* INCLUDES */ #include "machine/plugbox.h" +#include "machine/cpu.h" #include "guard.h" /* FUNCTIONS */ @@ -19,13 +20,13 @@ extern "C" void guardian (unsigned int slot); /* GUARDIAN: Low-level interrupt handling. We will extend this function at */ /* a later point in time. */ extern Plugbox plugbox; // singleton - +extern CPU cpu; void guardian (unsigned int slot) { - + cpu.enable_int(); // plugbox.report(slot).prologue(); Gate &gate = plugbox.report(slot); - + if(gate.prologue()){ if(!gate.queued()){ gate.queued(true); diff --git a/isofiles/boot/system b/isofiles/boot/system index 99c5ce9b4288a619be4e70ac2f00d5bd40d389cc..064e2489d07d2bd01b7f503da6395668894814a5 100755 GIT binary patch delta 19636 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 MpER1287WTx|H?3(B>(^b delta 19742 zcmb7s349bq_J3E;^z=;5NhZhSoZNxjfsg~jZ6F*Xp!oAZK6H`Y~?orU{3_V@`B(OIy8wEIGDh$C49E8kQX1RymsAjeD!-HI5q_A>IFTgD*sq8fvMz6U|rORnI?tvEgsjf2OW|#HC>NZ{8*; zpPl2kCS{?Wlk{xvTxg-AdfwHoxSSDOy~x&hxO)C>=gjlFtKTD-iRP8b)7j^B8dfI30RLkC9V&^&x;~*U3#7vY|~PPtFSYy zg{@yS?|MlXAD-ukc@J53 zwl;w8d7hn{?1>FzyRC`s4r1#R!1f|vkUQElr6@q#rdU%OtK;!`KF{vL0E*ETg=0)C zvZXIC$c^gE_Dj(fT(G^P{+=XRP@gzOZm;#LqWHCfc+V|?@SemM!@Cy7 zc`kSYc$m)PJp*|7=Bh?y*ke0pM45V5^Op(>JC;AaZ^%AGur?u)z} z86erkuNEXk{uBuQnimyC@mGqXJWmIrUXCRDpJ8|O%DZ8 zRdb@pL-`LK+RJ&NJh3!g&JE?=adL$6F{Pyp;V!LW2l#iTbJ#ULqO8<^h2$Oxmn4iz z1;kvm7QT-GL}tvbG{SM&F!*BiB8f7xdXbx`!QJ@jkN1kphQENv7~$J=S$cLs!8}7& ziI7Ec0{%*MjenrCdj6b?(u^Qo1O)%6Y(+GXqgdF!Xo&c!u@OdG!vrNmr-5oDkFF7*MtMu%GtuS$DodC5o#%<=y@G~z zHk7;;W)6Hz%ECG47ge2yEj3D}U^{u8zg?c`F9EmVYBsrIBs9#BgjRB(Mma1zK7YNj zv6&E?-|#HgA2pDd3$H)(vTmBu{;sZp{l zjd4Qb-3DoBlfoAP@mn69`yPyYcQw;En>chI8`7+qqzAS|Vhu4g9uzb+%4;2s5MD5R zIMNit9FSTHA0&nT78-*sjZ2y|zSb;VjBGhgkQ!yWrLjzCoTHQOX~aQexQ;aF4*Xw} zxZ7KZOD4MK40-)6c?}hY2L*g$Wvu@ROH6i?7}i1zN$G4zNwB0W6;h50etkhgg3c9- zQh_D+a;g>I^#p7Y--I&+s!@IvL^Vpe5d6sZJh^j>|L7Uh%{@(W2DOq?V~F9Fm=ooO zmsx~Bn6^gGJ3Hr+J1s)k_lPC;$tJn~CSXhZIv9c>f~q(0TR7wz z-Czzi%=ymr@fE>=^=3Pf))Xk?1#3P`TQub2qN+>!qCQxF`|7I5)V&Q}7k78<>~AbJ z%=;J0D_D_WS@FF<~3uT@2R?#hhix6ZhG2}jo3JJl`XUQT%y?)*E z-;Iq(Q+}|k&wsMLK|A%b8U7mO&jNPSCH+3s>i#)@M-+Ln;XJH+VL{dP@Xens81h^7 z&Ib3~(~YPTq4PQsghD4Og@I;&r_s+g`wu#$a3Y8`0pU)*q+6QbhWq$d24D8?{%^V? z|48>T#PqQp;m_@W{6bUyYygc~tVZeI!EpT4w={f8XVGO$ViNCKp6+^6L~%Hu+ap1* z?8bJF?0ZB&_bYm+gOYL5$9bzj{B|;M%sNss*C?7GxYHP<(|mXLc0ri}cv3|fkB*|I{mt zf8=xVqTZ3bwvW@BBS`gX4>oT7%_w1bY40rg&9i)1?_w6mm-bHa*W>xauwzz%p=SG6 zfp+{#kQ${f*B}@KVTK*7Sy`le4604}2Gv5C0JO*$6Uzm5=HCr0pVudbzgQK*2UXXy z-uyy!Th^6(`wU|1`Gh`woww;@6QW^MSFcl%fo|M%TxtS>Jf?(>h_-q<)8*)Meub3Y;X40Xsi?g>$y67~|L zq4+%udGLn%+1Ti7 zPIX6UZ$lWGP*G>30aehJY7$@?S=l%8%|u z_>$$?oxCqjpY7xmMwPM)e9b5ycKLRqy}(bRJR{~{lOHi*wd zo59zh?ZS7Wy^WtlJB_n@d~7jKMZ1o7N4tZMK)Z|2L;C?=gLV(!iFO}9iS__zV|+5k zGi^+oe0&%0H6~f!{2?DRCYg2Pj{|jK4_}8)JpXWv57Xkzm`;$AI@ZT>cz3iFe8ku? z7Ri^7^~sm_@%pjE_a!>p_w!%JCd-HS^Z0Se^2GzZ7X z&y7!JFX%+IV0x8^*t2}Z1Rq<$=b>G~*Pwlr??n3mKZ*7}&hGW4ZotA#b(S?jZf+X= zYXHB@Q-$J{;7U*`VZyV#`@IQOLveKjjNjXwTi#_EKO6Y-!2jMn8LnHr4V060i#PCp z-|Lgt9p~})C3`}!Zq95Wd>RiPp2?Q-W%v2mO1=s0V15McQvNgAgFIp)jcqa7#eC4j zG6ZBHt_Sn=Xb1BBXjAxEz@0QAvi&%pG$qEB2o*!|`<2g|l%UMU)kVGrSGBl8yl}M* zSC8S!$KK{_a)NRV{daikWS^1(%lF|bfe)W-cVL@K`ua4@9D}*Z>@)6~>SJlV?NpyE9p!ze zCSwMU2dK9$WA#)gyVc^~%ufR2;B1-?&{VV&cz3k#@DXT_@OfxY@HNx2qizo?djI_J zerxW!vEj3WdA|+0D|qZ9%iv$c9oFdD-e^bA zy1CPbMzxjt8%$xhpqPtajpEQ{8*aiz0+wdLc5r1udQ8fVg8C6)a{r-I7u{IbWkISe zPblRhp30G{OL+}WS*844ob09i%u_k+6n8Jm#S&7vC|7=>10TPrT<+h2zk*X_2mZ~X za(0ZzEUrKX4qRLzk1pYh7MII8CH%w1GG3KzdwP!iSZQ6SrKt+Ab;F*!NtU~fu6s)hlZom5*ge5>EDT zG`?Kah2FJjTp6AO08)Am90Ik`4)q#(sl0YgJW^`QnjI{i&wBY+RFl(R+2hUl3Y&#q zyIcJNch|Mh7)N_I&P+aNZ86K@^VepvY`$UbP`~$k5GpBQcF?sULPwE`(H?`nR~+%= z-^YNqm6T6$%5ipu<-2edQ2+{0ZUMPo8h#jLMNG*z<4Mx8}aH%&@YexL2~C25v2Q^ZbyIDh0Acs4>u{psyW8ZG>FyMnQyBk{zPMII80C<|)Qb&z z8W^Xn5}gvi0_{17_$PksS<0E^XpD#{39iq9UI{=beqQ{Vk@#)8gd{l%w&wxY&csW$ zn@Dz=Iuxf~fDSS-vOb_;vk9H<+J+MW#sfXsB#|O75jNv0+DA;F!6!N1f|UxfC~wJl z4P+-L?F3BZOW%m{2ZdvuV~*&D!5jQG64nu`>d~_i!VxD|0d@vFKa$`lK_#g=CVn~) zzX9k1Oh?Fz39BcLBOz!t(8~Zw#V@ZViH%-|Ig->{+;}$Y23#)_FWF9DSR9$^8F1eL z=x__;b`ev)`Y#a71$2gmksMpe3?>(1?kjX{CvWU@74$d+dDW;Y1U#GoQg8#(L5*=z z2%M^)@T!-d()WSquOzfDXyu#G7`~`+t}8%Ot?(nzms^t9bOG_Q7bHO-apR{;kZkXg z=tMOJc4q*ZV__m!5GLspwEhYcDpOX%!{;Gip~g-&+vzHT?qO<57+oj50w*Z-lO^ST zoP7En>mFRCltGak>&OsW40_QEiL7=Tu&MnaLyk?-=ijoSX>@Oq6P$jUinI=;kA?cL zK-l_*(EzB2X7Ngp5N$>^E^L_pt#263=`yEEEH;Y9if$ItSGd#BLRW>mM5?~fEn`xo zzS4#0u9N$c^j+Pww{`}xT3%9L#D3!U)OTVp^ELH-Sv@~r-$Sk~=SA;j$=%BNZSPTy zHUGU_Ijo#-e6I(p#eck4mfaI}k($r(WkRH`W(!QG^>lbMEi?I`ZN8G8@QmFI6y1wh zHG1-mXrw4AXB4BH(P^ez_z`t$x2=->J|c5{43}6+&|L^T6$*@?atDeiHOM%sYgmTo z7if+bb&Z;UfFw{yj+N=#6*dv9(}_I=7%5RldF2p7EdZFCC^?7lAp_9(HX>8fR$q8X&aXJ9hVG}Lc5(twV_9{-N0X^4*Q3;b8wjC#$)>JSV7P;C{Vr7I~ z2}WcLs2?^+Nu{z;^Z+P$8B{S_*iX0)qidT-?gjEC=r1RhU(m?c?4(~0ge@xkII%#|CZK3}G-*I$ z(?vwf)gYmj{HTeRT>D9QtU42??=7gLOv1ID8ih1D$PNc}lSWOsU$Q$x$i3wA;m|L; zBkW|dod#E-k@ry!C`PeJSwlaW8p%Gj*_vBJ#rMvue%^izrZ>Hkx}s<0e2lgs=@z+ADf4aXWx>^VZ>*T z{v7RAV0N2Wc@apARJ6y0oCSI*0AB(9eM=IXF2ElvcR?h61x|u?U4dkyd7(r)XkJ7C z8gF3|!YP)qj+cQUuVuG15v&y;=xPxq4kDrqM-~LjZbk&RT1d%3eGg4Bds@UqKRN|Q z73hpm>D5#i^_+SY_%ygy5a&%)o8E%PaLgGM{1J$52jFd>|6fZIn=Zg85sv`%g^8Au ztP-&Vwx=Y)2tN8itltGearhZ}^2x7Zq|8nQp)<~z4Sxtwj9+C7I!XDEND`fUkPS35 zq02>$?ux2k(a6T>Plq-)UGD^GqcHGzK`CSnyg(S_k+h z6DL1M!>i-`!0iJ3V+;2p;d}$oc!kBMfcwe9>%2PtPADdiWT*>`BAujI)&&$&E&DpJ z`6$_60bo}XE9rx8i*_#nvlx8xXBY@ZTSP@P__i2#ZxAtzK2flFKtE}b*r*J)#X2W~ z@L)AoV650VZ+9Wb0A<+ELS03O1H?7vUU)^H3@6^tmbgu>M}yUg@~!Z%rvo*EgDw2!c-p&S_J6xCPvohvMra;;VM0hZUE{p z0-Yuqc>Cj!=yI!RNE!;r$G{&mXn5a`GyMM`c4}1eQl+a7Q^t>yT(Kc^ol5&Al`uJi zs)(RA;b*b@9Y?OrP9{NDD)HCp%?56@?x4}iWBcpqWv5V!b?R&aE6D# zr6W~@NpT0cY;(mHhKnY+gH|e)7BrQ*WlkC#l~TW)Tz(zc3dyw*r;d8PxEfcTa^c_Y zxcCS^QWZ{%{UKUUU8GC(pm9-C8HO=4-&jQ>P4t7+cBajXH^n|%p#?4kG_5-tQY|mL zFKwW8Jx&Uxg=+u+*s;?&W?6h=0CkcLPe7-21tEsBqWU}cft;A^@$ zzSNq}Yw^)CyA1@x#YUmNRSKc3c7IE@aZ(g5*+&6Afu9}>GDONC!g>si4UbP9JGu@3 zD=f1^0FEX$x<>}l)XW70+m1Q~riOm7+Hyd3_fCO?XrnT5Q3dEt`04rxBV`cbbI>;p z=Svlam=2bhhy4IY6Pqq07d9_I=NbHT8N&dOx;%{TO&GPm;Cx!hXfkCxpwYxdB0?`A zO}|0s4MC^BOo9+rdk#?Ded=~RVntXuF!h#Y6WL~gR61I^5_?f9R+EX5Z5 z=`VBfaO6JT9nVXHkN1*ibmS|JXURDo`L5$t>=Ji=)q|bp{k}@~rDtO`()Io<^gd?k zm898qHD4vD>_pxAQ^%MWudH>00<@mx%TJfFH~5j$z2qL9c-)!pa#$xm^h|f`bgw+q zpZ1^6pE=-(=Y#=l8k4HN*$Y= zAq59_3ASN<#7hc-BAh@wgM*>g3B4pfl^?q9#kTXNzbBNY!z5=*lQKx2&H(x(-Jr}+ z2qQa7;@V-=$l@n2r(g^EzWG_#@{$fT`kdw?2OD4B{O>U>~{=a#9rxK$XTyiO`xmE(C(@2{h8mW@e5`@Q$ zy6wL$vGerHaa+dN*kak!oWRJ6Fp5HQxM?RIFPe>Es!HLFKpbK*Zz7u_;l3UdWynfN zm5C-=k%~RCSF3TbV(pNF#izx!kYgl6yb-5K7(axFCtr%wGE^4H5}%vM5>YcG8R2(Q z_~VmX5Ld=M#Sl``<>Tyfe20`ah)^O@3I>=-jLHO2OI13h=2WC&M(A;ZOeeu;MreCg zc5?($(n{QNNNCH$&w8~!P8QDFT}aXnyIBa|b1tGJpK{k61k5y$7U*6n29S&?Y?cMv_Fodc5f6L;6I2s$kOp#+z0iDm@lkWV-2SRZ$$L7 z8R5X)hrpLKrv!bJ&ei(mPry5+_O0GX1@2S^?sC3UruB{fl+xiyckoTCo$GM}-{s zBU{yrfwg8}p&D4=1{TeMwRlHugO}lxC*9Ax?lS!}zZiIzVvXZ}6+1(e{A~^PR>K(( zf34cfV*7tS##E0l6m-UUf<17qtrX&?2z;3Mdqw1`e)QLVu~d9WpiRJ;y{#=yVoB_?g(b6|LFRg8tJKyc zvrcTKrX{l~c1-&Qryz56vVEkjPG*((szJktKsVqc2W=zHY=`zwA4_MawBL$YqBbXm zsrV#9OD$#zMklLO8=1n=@YRI&1f3_8ZrPB+#@T7LiOOV;!sab6WU?Oe?|G86rCl3# z50iVz+VZw+DtlH7&S7b+UUTQM7*$rnB$xb&)-Q)8!jN$|`OFu_HZM~`>y^YAvQ1*l zZc|i{hLmZqiU+k8Wifi)KvTb#}c zq|T}+GFY+7T+Cr@dIeol5{>;fC6Z2#KP&79C91!cp3C~U_G0iAtX8*ZtJ^ZKR#d_ie;dryPJpk)Pi8(j z-1#^l41cpGG5w03VP*WCfnw2U{%BM3Spr6R zaXtpNcFX#F_AW~?Cl^39mi?$Fx<2EROBd-YsNB><#T)A)BR- ze}lH5h$WSqOPQ^RDXH~J)(n006gPY`S2bHPQ!?t6oJS25B~MX>_DvB>F)}_?BzsDR z`Pggw7I96gSJK{4aw?V5+nN|>RA~1UW2(HNEyPzV?6kHKUrVz~TKD#NZEe%l=5*A~ z7c=iY*m%H5(O#dPyaXrM!hdEX+=hMto^z?gU%Y_n_=xwU^RIAcc ztr}0Ysyo%H>r|_vQ>|J~wW>JPTn;N#t8i1Tl1(+2!wOZDY2C3wZ&hfjRhy~SeNVME zIaI3_wAMe%juM$B3)hdZ zgsA2u&R5NqqFpoVPzo9P?^LZSNNuWrsDiSbx9T3&OlXtyO>e}WZ_Z`Tpl58VRp6-R zdJwI~SBQPb7}ct0{^N+6vp!X|$`;isSX6VSgsWDOqMDNrJ-6ihH6z8syW-VOuEAGbqHLdevQ3hWhP zd6G_ONA6{@@#p#(LvJ9lk*=eIq{`7-4QDx77|zWDl@6weFKxEc-^g zeG)5-8!Kv|Lcv~#?Kj*V?j?i;EX(K1IB_qsFJarp^(ST2bIx7f7j^i}}w`Q#YmbL*NA(3;Y)3}%7*b8_n zcAyVygQmdjdTrhm)|-8z?Z=50x5%li0E=7qsX$)Trs5P|B)&E^O^JplB)Z#Zt$r%& zg+J+@)7)@~Yv&ecYMtgku0%qI}~Qh~^;hoHAPLIGrtF8@2t@+1>4|B~57AgiUSIZe^)}zYn+@ zK8_o!-7y2k<90X$p)l+5`vqAZHUx+)Z?yL53|88fDjzzk0VlE63TA+%{}b?ITJilX z)^9CF0{w^(*Txz&1M!Stv*v=JUnl6z|41Uh(q=(#-Ax2ykAP1wo?SgsoIrd71O zp02#PSI*wYYfD7z}*tIewOMfpcT$!5tyXiXR_Y$fe)g0V$YXk z;9=tBnQR!wo6SPDS$A8ZYMUT?Ogz0~Ht5Gb0T0Xr`WF>6z(u3Ak+Tq(9-XvjaAuda zowL|X>{n|YA7lmb)*VfVTZ(KXYfxQ33cNofU_kc?ymcEFd|v}j>dFJ?F9S{yweBN= z{wm<9l1p+5dUFI^^eKb%bE9OuV$up9ViA7p)+w0tKtx7bYpsBv6!ZIpc%8REz$*oP z;4s}N;MQGG&<_QijJ`EZAMPNjSRfwMHa)~*$JYqHrhBG=uN83X#w6G_0IoYFr3i>| z+A8Rq?)?UQkAOd`6+g^kZ^vJ+wP5>9psgFKz@8Rxt6mcDtALX`SH$1XVJAsHVzf07 z-zOWfr)XL?TY>H@;7#{<12GtI5_c}cFzY2jKT>0}S?r+cg3T)L1o}wPf)Y3wVw;Z#MJz$-=;`yF(zMq$>$Xx*r6qRTc=5mjpa;ylq%b+>k#ftYx5`fJfjq zjK62NRTpu)5R?Z58D!qhD+IiofLjHUfZrJS;?}sD=#s(%S@J~+8~0JuLNwPh~GwnmAMX!?qO{ibLG}Hq4o-9S7d^(ix*)sKu>jW%5C{Hh4Ab;yO>?zT;S= zEhq5I675rfS&A01hIM5b+8~@<{rVe3TeanDV2N{}(e0*vN!@C{(S1^jdl`lu(m%47 Kq;ZTCC;xviYy=4a From 1dc2b042b243104fe19b6a85f7d74c93e3d51c40 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Mon, 1 Jun 2026 22:44:28 +0200 Subject: [PATCH 10/22] feat: sync working --- device/keyboard.cc | 4 ++++ guard/gate.h | 2 +- guard/guardian.cc | 2 ++ isofiles/boot/system | Bin 107128 -> 108016 bytes 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/device/keyboard.cc b/device/keyboard.cc index 6aabef7..a2a574d 100644 --- a/device/keyboard.cc +++ b/device/keyboard.cc @@ -21,6 +21,8 @@ void Keyboard::plugin() { } bool Keyboard::prologue() { + //kout<< "IRQ"< zLQr%SQ5Uic2#5);Tp}QUR}}F;0mHG1E4mTT{D0M5-AM+IZ|D1_s_WhL>eZ{)HA(wF z%~#$vH>8N!O{-HKUdJa1>L+E|))~kBLrMdLo#6ni`e;?lsxMZxtvbHv#w2=cz}CDk zCIzU3`(>fB<3Q!2j+AME!UNy6*?a_{t&ufj(0uY$<&v{k+CF3B)6IE-SG~zkG$kgJ zl+rt6l1MduB!;GcRHBKhTy#AE3hTTp>rEZUE0?@&dGPYvmAe^?eN;5<9a}3tHnMqZ z>}o=KH}|)nH;djeG%YzUW^9ZgTpCtcU-41pk`{5V%Ch1>n>Pa&(X8Z{h`+GMkeetf zV(5nCqU2tJQ12mDK2zxmIfUm*a=haUgO)G@Agv&pb|fc8KNc+r7aj%hCW4%3+BYRJ z`VB@<_G<)_qp33`D*iZZS#pK=Z*N(#zjDRrZCk*g3uB7@7DM->WW~SjMt01N?D-h# z+cQ}Vj-ig8>G7#<)Uj^VUNLlO&)Ml7k*cnC)lU{aGhYBNyeM{Jm=!hAG&c3NpgckF z-|k`I#-40@AcES{gR_^k4P@@}{dcY#eo_Qv{jAMi)xu;=h@vTJG1fwNVxkJ8AexyLX8kzJP0qwlvPq0gcydrk5~7aH^OsP~hx^MUwxVqQmc49SG31g^`dzwJ zoE=Kd8MWf5Q2KC2WN<7vF7*a&8)$tPnNKKvDWgO@7DCTu%n`?h&^t2iVt5FhpJ|Vn zG=Qk09+3rMc}2%wOkAjRNkazEt(jrs#bBC~9TxRH*Y`rOAT)5v7AARTFujo(X>D|e z*E7CQ+BYl0>Tt(ZsXP%GfctN+=s?&mZK(^^6_2l=>$5T=vMV&R2AR8=6;VOYWepOS zSRvjP)W_;(&Tx7?Gs@b_9h}I>t@QcqVC%^sHI3TEh4Gao>&6ff{jZd*=oy3v3>i zyHE^!0knLLJ@#(od<}l|Y<`0HiXZjtl^J{|NG=WJOW?tlV7eb2+^d)9=SLU!N)Ubh z=wExK2k-U;Sw&Z}_k8Ksz4F95UmER55byV;<>-d`(kTvyIKB^E@3=*Lyo{c8Eb!UW zTbu0d9UUE%^b1#~TVLSgY-j3%kUp_qMUZ{P$ciBVB52AuXCHrc9#<;s1s1NA^#P0; z+#M$_&E$`51U%Z>k5Xl+fd>VL7_&>dTB=!L)?~F;x}3u-l}i?05$e2D5fFSy+6gBi ze3A1`wgvvXqXUe4IO8sOs^QSv4I?X8oU2@N*_q;Kq zTQn=?aQuD1)BhGEhzBpz=)wVB(S0=QuKF1P;VP8x>fJ-L#wCsC1m`cps1^I_D=uqB z4!VHxfqm9$!|8w#n#Ynck#=pzfaMpk zFaYy|OB%oz;klnXI=ak18}t7N=;so36QAXT3CzT9Cf&mzF3Dw()-qBjRJGq^e!fOq zYtRnlV&4Pl-c%mMGuqsB++dPiQh$TbpYuJ<_{uq-$Jd>FPR(Ec)EFZS#*=)F?q-N? z^H`&iMjE7BIB71^p@q(Ywqs1kihVFf;DiXKfSZI>J2h!vCg={lhf6!BP43&yHH~BP z^|{v=^0#wV$lrRCL;lSmE@_P+Uf|-FX{2dR>@prR`v5ZJ2Wmd*qW*ctq0VSbr^Yf( zOqa-8z#uN^7DM9`Jl;YyQr}L6!vS#`8k^38@xZ<=8gm(ks?pr3QFUy$1@YE2UX0gW z7|S(o(&q4frwhLT#88;U6gsPg-e51$7y1^%yBJ)xTMvF##f8AeU_(^?njP; z;Ro8rG7ahk9_SS3-%Xs2(GAw*%`oJRas8OdDeBxx$`DDR1-7R5c47zlMaND7}qgj-Sm&q_~z5WeIlJNc)|m&kyk2R z6<4*~IhafN8D;D)_NJmG373@15!-=)`4{YZ07r1dhO^A>R#XA5VPwU~8!X!&Ys>pe zpG_<0fVb-ysZ07iy+E6Jnh6LNX9K;PcZ2RP~{)M_kx z3@gTR#FtE8w+Y8;%1SuFpGB4Ph(lAIDX7DT^0ncED7N4Xbwju`_3Cr~pE^1akn~7j zTg;uDHu*>0(Jm>0!z5}cOAyCgrWs`kz0DASLSd|W<}PVTWbI%C- zU1bTrn=V5wVJ6n!-A>7%;8HGTE#|+p#sBFR$jVbsK8{!fgjR*Qq<4C0lUnz=>hA5- zw>;A`nFA-&NBgDFS>?Wit2pF6Np(ePEIM@^vN>Y=8F!!lhe2GDKPMQYIdN<*{bzZO z*R$LgKgg&Il4(*un>hJfI> z5;o_DA-W-#Gc`T6pST89lGe{j)_VV*TA!G!^`G&6d|trn))<;HIEs`u-!j-UKr98o+B|X0 zt;Bh_qvP_s|J%3pf8^2W@8EnNcHtlNN6P2JxMX~*Z|y(WUNK_Cts{!D+@yp{1k4)s1wyL3$ea*}xZc#n*OPa0B>dz&CWo zi}eP7G>(uTfgjopU!~)nLMaFmTRS>zT?s~aDi{lV0`R}(q6NSg0gp`F>B74@`5S>R z_)R=^;~o(7`b`2sI1PMWEB((zhZxxk_r{9(t#lB&S*>)&y$*7eZoJn<4%1e&N9h@~ zM<|(OBPZ}2CGCM#$7wmn$LR#L7tuyZ(eRoF-H354ZADv1&!8Pa$z&UuMdQ#eqvdFu z=mfOS(M4!C(T!+dq^)RQqG!-DsB0Nler)AOH4hECBxWVHSDj zMm+xKFeFD-?7?FV62Thu#x@Y2(t|`e4e&+aM|Z=IH1Ib7Pox`XYL3mLtuqV6fFmqD zh$%Qi|PBbY*wbBwVMTdsQ36DZ|KI_Fg5Il(lc{yaobQp)pYaAOk-un0xr_HS{n(aYjmPhH)SHn_s8>BrEjnx>VDTEvK7^W=Cxi^) z)QN9@;Fi4=AaWEPZb*+)P-)ggT8^T+Ck5uOLfq|`c%>4puN!@?M0{8 z7m82yqR*on-HU#T&fbfLtt=$x>9CbW;+A|`zp_xQ&8P36E6k@I=)&`9k*k1QqjO!i zi67+A{jMZ&dmjD9l`1}&M=5bHoDvHA7 z=GPTJkuklsMrFFR<{rjWy>_`tv`=pS@Y$8b_bTdtNg$Rg+`vXR&)HB#NEm&iX`C~r z2TCu3Tpi|#2TPv+L3B6Zh!3$r&frT3-d9938o^&B$@T98az^rlfsSNoA=X2hKD$ov zCYDQ}@FwP~=sf(<*wRqEhHpaSnP`myz}|n@NT>}l%QrBJqm3IQ5#l>GwvYrm|G8`U zec}G+_lGBbf(ycMj{x~3&g)Ik7{RW4EIsJ(O*shVC7Y5+GTppstTX&P2qn9p2k255 zp*dUjG}))(HW;5sHb3_2(NmC4pi8y%h2{J36qpGLYg#6oy2JlC$k@EtS7eP~{s#yp zweiLjBN>p*Rl`c5U53%Nc~kHEx) zwUAMrLfc-jCuBZ{3rBO3pOtFAU+KNDiqR( zUW{>uu7EwaVSKSb3t_ygaFyc$m2ZXhC%D|u8K89ndYIFy$rse5ag7^o_FTauEcgPP zBCeh!gdW1fPLOQljA~YAjLyb)bj}}C;%S1<>v%W|=J+y+o;0p0l5IH%86jGY*Vaz_0Ap?*l? zNLu2AG_i&~ zh0+}_O$!M63_%e(8o~bxq}hXL*2}rXn@)T=-s$rW;!29PEXE`eV1Gv=vBskTlpgHK z(?e!R^CkvhF&?IFHxeMT0Yh2U?H2wo$iECl0`WNqp(Mz19kCQ(V&o*))QYYh9KYa8 z)-ZJu{{CKg4hdKe^6S)hb0mqRDVs~jFh0TWGbSX`@(n`*@F%cnd_ojse-htl*7OxT zE%HJe!;NCp*iT zH!$*M2~pN^W(-2|HNf7$m&CL9Oh&^=GW@-vmXW*<^l5{HxnA&7rD$oDkzCQx@Ss@2 zL?AsjYzcOnz2K{OmPq|sBDEx1Ljg#*x8?!C)9S;f<>ilg6VH$z0r%O4sPqhzRgaq( z!ZSjw0Bk&vQ}87sTTzROiM$_(hX7ovBSe{D<)LUiqr94ccKQI)2>f5W)0k42>=^lW z(Ch}PRYwb^FR)ggJ>+x1{0q=e42+*A_;QMi$yO5Yv0g+-jNFD>KUPlY2Hv*XcXgL&yZvglO0~N5AX^oMOqWgyq71eDZm;(Wj zSmVKL_Fzx`?5Ogx`?2R>7DQ}kB?{7a=z6FJ(-}M^;ZzaCfWTySG|B8}f_@ep>?^WH z@Nj`yQk!&)gBg&;i-wf~;h&TOm}`nKC-Q5MRV4Y z%mr-hBH*>=zwGNNlceUBLwO!z*;M+&d$Ys!E2_?_p_Ek(KhQrNEfCk{(7zu|C2jQc zqiN#iZ0d8YLR?l%Z#$MG&MT&W!lBrN=mLhuB@l98&*Uopvy0!uJPt29XnyJkzPI`+G`qf&e{k@p|ujkTNKX!=4x%Aw}s(S)Yl`*H^cB(==UQE}X zQfIIaBh0|_6LkjFpTygCCF2lKm4C;Tuj!)vgJ#z!QL@-HwR!WGCrJdZ^Hj6kbm!#J zwPzjVDt-U#0C9Z@jW|~>&M2W{&y}OzUVpBdRmqpn9kvDzv`(@Hk|4P({NV_Khzg_c z--vRC=L;skV(${~BJV0|--uHDp-V)xP-QLj&W(djks+kY%BZ6<$v|syoEe01W?j$% zRZw&w>EUPfHrb+VBf|no0RHYIMkFS`QWYDUD0qAK@iw6}u!+#cG}wW*czZ*w1$vqI zIC|{oa1_T|zm0Mvz$8m|lMziIszE(`A&l9XACZeAFo~Y|(T+m-%(Ym1O1=PF z)j5gbNCEf?ss1p7F`(q4w(Fr4>6zfqkI+1_07hkGLPsZnS(VwU-lJ=2w3oW}ZHYLT?)UQzHHRh9_!Q|E@wcj|V8NA_)sYHe(j% zM=(`EDp{OFTYm^1YwfZm!TOSf-0b&I)lZV9S6$?r9T(o+aS^KHBAMe7qX=K^=s1Kx z7Tn4fQd=p$P_gPl+1Nte&X$p{a$M&s$Lp*7YwO6CqDSXaBxMSHBXmEp$Vg^uLsDq< zFX5wmGI!`MWG+eV>Ny5TV?k*wh8k|^T|ru)V_`d~9)^<4=Doj2o+M+(KV|Z?mvbK9 zSW$e}Kgq|5e7v2H)mucsKH%ddj=$!H56{;&D$=9+DdgiKKCbOPb_!d%1BCN#V|y=6 zpe|sv+xRKB@lm(2#i8-XaRXAjjq~xA)(s#Cv)#rGZsTnZrQS;V;5A)&m-SEPDc-@P zPy8QyQkfY{hB}YH5K%alhI&RdNq-4!LdIbqykw}o?qToTkCg=p~-56T|)I?s0-Ck86WrJW8AcdI47TSr7;!cUn(Fd~~%0xRT8XU?p)^Bs{*lZ`$JXlf+?m-sA@Ey0M9EL^6hjM?>QoYif=-!^-lk_4Q#g@) zcS+H8qDdgc!z9TdzP&(sK9wYo*GBqnk|~`?-n%7ngD5gm56J>jJ!P0eA;)5sOs{H! zH0(v5(@YU6t7(bGDoG+(k&mvVl9T~nS0!bm3-x4Y$|h3WE-9%_T|_AW{CeIqLfNWSkXeRD|_c~e=DOJdCT zHX!C=lr6dB;b=YOnSv3oyYv+?L7b*NB3@MIt*2L02$7;WokWTX0$jk-%VDlQqd*5M&oJEXNsLl6|m$G$^}{r9IO%*QTeo0)xNqr5W7Mr9=% zC%bG^Q?kByf@M9&g~~?lBM^AvcT()G=WtthH`yZw-Uyt8q}2w zoBzyE65`aWp)EeLz6mpAeXHkovCJrYWTW7bJ4>Bzs*U1?bdlLP??hf0_zO+=Q;klG z_3(ef)FnEMGDg<-bcn2P;ZWHqT7Gp|^?e&B8?}jSR3);yaaeWaFB_$ZtnU(kd0DaI zKMW2sN(`cL{3e4@OLTFX;ZlM9*lVnfQ85tNC>CU+OpuKNL0(^?pfrfx(K3wu6j{ap z?@3)tG)4HMahwT4nH#)}!w2ynC3X5iD%?xBF=>Z5i@Zk27s}TANSNr~Q#pJenMZz5 z%4cJkn5&GQO)?{1=VeV6=WoUh9!^o=GiBp!k`jTtf!1;^Z*vQL_cjC7I-+Qa+bt zv2v^yeT18>A(%STElgH+%_ReHPLNs>7HI@GSDA_%Rc%U2ZY{}lmhs;hQ#igq@XREA z)9SA)^qw%8EL~mA>B| z;AH8z;9+E!Cn+cDh{Jh+!z%%2VvUT+;dgR)XO__rvpC#HhMfKpF2BtP3k~rkr#H5x z2EI*rku&K3@W|x|+jR!FYl;0FzKy?J<03@;dlpR34{#P6ZOWN>2(9WAEoz_Q=*vJecOk6>JqYnQ z&9~rl5x%&9)h}>mpI-y(>dQB4nM+YiOr*a4sy8r>a#yM zWy^ZS&FyV~vuS)3q}s1I=aWEOuPRT@htYislzsEbJXTK?KSVMkjZ>8?YrxAaGahC7 zV&I);-Gm?Hc%ziye5V0t#zBzL`h?tQ^=I8J;JV!Kfk1yx&QckZIkNW%Y5DqtvV@^L7aAx!!@u~;CgdC1| zNZI-@37hWXe4U54hHvC>^;`rUrmx;KZrXMqubGjSIa zwe9gNr=O^h1te_v{hZCHFgg0q9B$Mb9KM#rQ{67YUgq#xWzhm+butUxFAI->gvH!d zx0w5yvl=xCS9O)c-ItsFi);YoFZ9!9#K{E<;DM+P@TW<4sIa>@CLIXXWxReb;_xyK zHwrZlzk|cw4Z2quz7Q)=4|ITlD{J;IlU+UyoXstN3Y!3rLn&0o=WXXa+mx*k7x6Y{ zbI&8klrs!{9%#0HOZlOEC+EJV1U>?E5dLSGp*Q(!&d`PTRLX&NR&(^;2n~Im|8Djm zhvUz{RC)T<-V=Z`AKLkGeizra6>#Q4;|+qt-{ErBTQxZi9R8sOS57`c0&~B{AP%nx zO>W7foeMSIkvOw=loIJAu}=GB?qF_o3Tjt2SG{cR!|D3~&WtnOusD1Wr#D^7C%;fbkcc{y6wIkVm|Z*J=8j?pIC$ z?^)BPjrS`NO{Bon5v-L>Wy)P_I4?>Yex^)`8MsNwY>q0(e!?GpX@Xt!bbELrQzdhz#^U~A|gisMb3a4f#GnGfI&jJ zG$J1&qJr1T#sv%*1G-$wF0dZRp|C3u1Xo~D5s|!4bys)7;J)9x{rgQ-*Hizyu7CH; zT>LoT>PG>~GsJCc8ne8Ci^mA+)mF3l;e%n(-NJ=!u>h7GS=PGj5esi(yE7lg93L~xrk^5;z zf`@dY!xGZSAUZdJ=CqY-qAKVA;)cT7pvtAD_JfrRKeRk{;ls-93}cttO?xCx7kk{* zv^lYnknT_m|m7%BnV5*V&$sJhUk5`uOtWCPa3p@831VyIB9!&YWy2cK{z)L;4K8hoU~U) zYW&xXp!aVPEOk;}hBNs`*s|~<3ER?Izq_*j>$byS(1kHYpU2Z38M(>l{K$UrBik2G zLo(CF@_6da%t;>VN8R6#Ixn6+l{q;lD^AsQRgIH{dsYbW+^b?o53^#WlO|@}8Cf6* zVOz`=ZtNFrFT_%JPE_u~wt*~MA>ZZu^)JDkIrppPy{d)DdYYzZC)!H=Y136%bW~12 zOeSMnoINfw*N@9(aFHbH$Z_97a5zR68}Mli zCQCK-WZP|Ddi>-pHpu!cVPwMceIG8ryR!at<-!Z$mGyJ3Vk8Z}Q$fMnyL(G&ji_5% z#`36dil&!xY~pj#G@$Erac(rN>*|Q=9}Ss3z|#iWU>3WAXu7d$H}Qukdb;Zr@u?_! zkH;WZLTNoVn5BQ z>VTW9`m!HAom(w#iiA}z+t^4yYaWYa*4Xa%$Ez8=jlP^0W&1V4k0)H^iMs;)H_X}D zm;Rd9HE>y9&72)k)YaEPTfH*9JAZTa+t^yvXfzCsUs`e9nBXgQd|_*BODK=sd>zz? zcV6vS5H;aVLks4J_K!o1^%iSum0-ujuYU*LwSl z)xGF9-r2#kyKBzg)!yDtllsQ0?k+6}e&Ax|Qh`ms%BA6ud=bjq4`b@`nd`>PZBsSE zsCVJ@`2mYG~rz=X+#G3DDbLoJR$tGOBNs3 z{^$I4e9lBQNYMu0CeAm7@%7<+U!C>mTdVP%Pto0&*4?KCu!Qy8fa?fm zI-o)wtxav?XpZQRH;L~Wo?+D;8Kn&lj4f%^Z?#*n+EL+&XC z-ZXH|1WoWlL-55?&Au&X=+K@qzEDHXV;yqpZ;|sChG3E#Vpef6BRT)Jx4t@c=Vf7P-DhHNjekRu z@e3P(dMo1HaQDT^hKeiN#(BC#bNv+Z!Dg27w+O@8UeX|a!h2Su2hHtnZKxWgCf@PH zY39yOoSzLtN&Vf|*&O*>TgW%MlazB{;tXM=4bl^|rB_VMXwILf3f2s}VWHpl>fsCH zT_=#!fIi63`J-1ea|e@tlhaoj(ja}t37!^J&KlnIXujBrH1@}kmB4qHy{B!Ore3}8 z_j7yuHbJ1T_I4#)D%5DnPkOK$r1v@YHT_5L6tVa_D)&k0@hyx*1~h^n)~QS=3l^~4 z&e#wQb9Tl~((!###JS(mXZoZSvkdO3*04Xcg0qmFwK%I)Y2(nLcuE zO3(K3Sa)*2s%T>0;z9r9t<91egX;;X)YEZ4?^ym1|LA?fkOpZJC%9h=*N^#hZQuOB z5{`Z;<1|lS(a$CJx=54yzsr61{h zWUJ|MTl8;W0Y~Tuu4p=BU`p5bS<0+hyggU*cK!)}i{EERgY;t#T|3Yjsfw+?xERw} zO|`=b-CSg&C#$VtS{&76_YATJnpb6~zYYwerIilx-f!t$mHFa_-@@W(x~4L)=p*Fb zn(Fl)P4$H1{;D@Hq(M57tr1M5M=KM=V_oUbmGRd1yK3Me2SzS3#-u#kYKhmCR;W z_Epv1@Jh2a>QhzHcNz5QK?UR`+B_(+41U^y>7ijgO zf^g~_oI$!Z^&e~v7rTWw?zAZs%EV^s#Vuem9|pH=tOZy zD=kMgyp;||HMW)3p_ZcP%Ya@9b*#38#`$^s+?VPII8Sj zv<_9DU34|7Ub|>Bsvf)OQB>V_(Q9M8V)8Ef`Z#A7X7#T2_FvYpt7r9FJp}bDdp}a<|<6NTfHO(5ANN&)oaW0e-0mXhzmjEiDn*a@_`vBE^ z%{(FVsI|sLR?|$B@6sxif29*q9;Eds57SL3Kc)LneooJ!JVLGGT`UY)10$VchhC4mhGW$qiWtm|B7nwUiz=``wxNS`Qpa$w0X!A`y-25iQ#oN2 z@ql*Vv;1S)ccNF!IZ9t2n@BR~OB0*{BY*?=c5I^f&ByfU#6UKaiKlXq+q4EyUC6lyaJJ8#%G#;L-!|-Vv|{w*yrXWIdhu zh>L8b^(fcSO(>VseJG!z=TO#B>m*mwwqyTU>UD^Em)1{mrp3eKR4f+u6l3VuVyG(_EyD=1+5p0SDq3KTPIAolmm!{iS)P_fGwO;e=8Ts0jJ8K3f z{r*Q^&D>R2pKRP2MW@zUXz$wapwK*RJ8#Xy1|H2|)4Vcv8#Ib<_*#=Vnl{(gMr97t z$V2Z!vfx;UM8j%o)v?jQk~Pddm=38=i5|?U=b|V3-zxR;!A*3yg?#q{^6t`yPD&yOWamKM?X7K zTvO1r>)GB!#5-zp;~epFanr)aBniDuudcjJ6kEqM{j@4nWK8l4DpTPL4>G3bURZ1r zPmXCyeDN6)vIZxDBoIp#UP3vWwyvupB!-gpBYzj)1;;NzUKwM>jioSbFRPGAevXNB z3Lg@Jh8T%L2vbQ4!g_+7k^EqEr?GA!fxfvut~@at*@k@s3Tvv(2~t6 zH*1J?k-bPKLjc@`4Tutt6SYzI=_u((M~|$EF+$6NFfExcr4#5H?_RV%Y+> zq|)bK$tPXt$FHQ3G`t2j2FjmtQRicFcu|DXYQvb~?>_&7IP9JzhBlq*)FC7aJ!Cj#ap^ zeGY=Bcy5zLXS~)c%yS7)AjD^5f?n~`ov$VMavz2dccOj7t4-l}L*=7D<=bHKVNGt{ zG{J0-ItS;(#<4>1A93>xNa{G_NQ3cto$&{ic7k9l$IYui-@zw}iDW%O{_`>(=a)k7 z-+__0z zfcQ?p8D4sBW6}g$0_=Mf?Z@y@jeQY-P%sM364<&DwaDeB88$>S4rZrN0UOymX~Ez{ z-3x-GIpD`jVc`Ii!>^Yk>HbXtT3-*1-px;!(N{d9`+T+ zE@n99+8dDK4x@j2y?}&M@r`6(&|fh8QoLmW{J_n-C<0hvUJgn#yR({Q)+udZ0Goa> z>Z%~&GHbA|2z6E1KZE@7P$ZC`(-2A`EweB^!cB~vM45J?x(bdP_>kwBy4bL=K-@=% zF9!K6`qmo`5=ZyG(fxkLCq#b5gg7k!Vx0h<1dGNeI2ij1e4MQ4C0H%;9NcItg!S3h zLYd?WXZFYI%io6qPM{CI=^%-;?#<=NAq7})VruBsAVGK>edH-NuLS9jOcX05n)8+; zEVvp`4&YH1gX!IGJ&o9%cq@T~&|lti`lMB03t(dq!0yboY*5&p%PdWtTq{_KyYEb3Sh?|?i4;`4hxD!?QzUN z#}$C>X2GZRhznS^JcJd_z;)<<8h{<2WPDU+jl`6}WGBdXfy9fh?s~UiI*FjkUF6f~ z84C0sqbJhJc)H3zfq)svmc3?=Ao<>g9abXdV&(?0doy##%sP32)5eyK5 z+Ax@w7z+!J#lpHRvFu5z1uXlR&^{m)2e3(`x?+j5UPbpH0H@G>;bsyO6X3Hr#8}h< zXaew2MF^(%09oSY7#QvV>Na{pRuq&c?QOi#wFv zCpEwcHpP>LfJvxQu#saE8iCtXwv&tD5nW24(G(l7h(8c6f@SO?YqoRLxbXnJb))V~mpx4&_9!;OY?Bs_;nZN8(N4U&N>VqYMi{_0BNN2&%Op@+ z(`TDo1CeE{+>s|f;GuhWl#@tmdcRr>FQvD=-$%S$LRY+>Cax@@&F>>`@zOJ>#+J~? zmcF95gx=HA({($Jj!0FLTR5v+2X-mI{8qAxV()1`B0iTuZ*5RtGbM)9_}NSm(lTu(}+ly9nKc_m(uNr zv&4<1^eieQYPP?tiCQmIi%RJusHT=u1=a9U`XQ>GrS$v1SFp^>`)RU!T?(eE>crRF ziF^#VetjF)^!TUKBr&h1>HL>LVx0bxp~L=SX8&jTH0-!n9F&I0OQctKJJaR(y;O!I1u4mJ+S*pq}apk}7qPN?IYHf)0VS+hDP3^5ZoNmJ(7;ONv}&6Dsmhk-Utj2Mg6i;s{Q24fhT zAY^$+uQ=Vy$$&I-vpo=76c<4v<=(NgVQY>DsyhH?ZP(7>VX{5+(Seovxa z+ju*bw~zC7B5z;g?KIwY7ivpT@9)Xm*a+2YByX4T_NtrPKH>1qfDl}y3Dg+|__gQx zwVVCgSNz(ZVohEWH(=;Z?QViF{U$&Vp7U#O@oOL9?YPFBcEuY*+}6t+31i4Ch8R&~ z$QB@(|K~U}ju<=1^Sud!Md4^R4t~{i{Ygl~j>Ini4Br2^_J4Blf9mjmTJd`da@=xE zU*Y*cHcYGg{sgMxv-*)x2HI+j!BW-s%0zdAmwQ8+S+YA+5n9wH5;X71euO!hfsbDA$1R zRn*IW$o-}WhV;HkAQXkK#_J|H_|`R_i|}8PX8vo%sl30Iw=u`nYa?%$VTiZRa*}># zWD?4D7m0K0>)n(}q||Sulp3k9Su_dQX#)f+-byJ~TqFtkm11|3B;r=e+#~^Sy_9?1 zBtB5zB27h#JDEf&E8HXNiyEbDdk1PX*G+I3ahxQpf}| zUaKiP)5!w7R@+*ULHdgSXaBbD$|4I0Ii!4FOu8r!=aAnKQQ4LQ*%@A?PcDhJh*BsF z>F!m2&LK`Dg372oVowo)>HCl=mPjGZQhco%II~H$yw0l(?Ml+q%#sD9`le!v0jb3% znHFlalEegE@hV?*B^g2C|CWd;#8M+g^;9Z6q{?~$!zW=L-lwd~C9!rh4p<=rOK}5g z>^Xu+Tw<72+3z7K)nkB@Nv!zaG^&02mS&10QqXp0jEE6O$eE{_-_B5dUu51zyrs;{ zC2!$jL3y!&#K=-0bH7CClZV-$g~W;H6J<^w$-(1_@`d7f7iK zw28~+jlM6LGKdu0EV&m*Dfg;QO5y0$cPUdIk&>FFwAzlYsin%Vg(MD78%k^uar61; z<`dD4M-yc(!}pge>xxJUCd)@fBn?k7%7r2li-#Izj+ewKu3{1pukSUcXd=ZMelQQ0 zmnnUU5xRr9%BW%zNA@Xo#iS|~L9$d!k%J`LWz3Qu5;@cTb3rtdfEp<zfb@Q4kj`N+yWbEO6l|OIhoMMMuk&ZC(=3M=9DOsbi-Nq}>uA*}*d^Ux_Rs ztJtD>vxGQ_S=n1c^78d<#AGMUVg{QbW=R6MzMWwDG>cssE=g=m9a}R?NqlTaW+v;q zOR8*SW3oPWX|j=l$wuxa>sv~hY~)+Ak!Zja@W8JwRaAnkXFLl;*+_O|q|3Q zHc|)KNE&`~2#pLuHgW^m$O>e2p+LV7CL5`MtS`(kx#RdB+BvMonNKtU|B>G~+&jh4 zh_LzvJ{u}EIgyQ1oXExjE*nR;tgp5rSzli`t`n7$8;E&p{9WWbM-~6m0ULOBmEqT@ zc$Xyf_QQK~yqbSy#;Dj;t>S^gjxk&Bm_ptrq_0Az5xY1oLvc(avxrk^WXGuR~Pf0E$*!cU-J_WI+2 zYAz<;f;&0hR<8VMI(gQ|zvolEfFK3k$*{+W8`rau0C7;NJ$ryB z39?YiaW|(w3_KDv$D=iRrF8}g$16GI@C-75kHNOn2)TC2%GgfK%i4nZ)ieraf1gg_ob2OUiiGL!V>tUqNu z!1;`=kkem6tTdN3Ihw=xii^`5I{>F&#^twaKhIHeXORepu?{)WX3mUEZTKwW5!a1T zmdql{#Mm*4<1sR_z}QH2dVFWeoHCXQ$3Flbj+nI7D6c<;2s)H6AH%%Tm)=ZHmV=y! zk-a%aNq(GoeeBB;c2xprVvT)MgN0!n@7RB|j!7Ih_Eb(km&@O1Obe}J1*bO_s0QCD zyviB$e;aW*!WPb8oNBydH^+^qZ;qb;&Iae?I3?=|l1m0D!=FGnkti==H4@_HC&++& zV^ia7e~e<&)hwJGtxZezriNX+fU~&~s^r&UYQ4?BeSA*q6)vEgg$tR-=sJi;08T|LA`XoDJ(ceqnC| z&fGW>sk*29?MV`WghTnqlQ4R$SBacWX0hC6$!y|r7-uV2wj7U{%y{I}htcob;3s@9 z?>7<(&UYL*GiI9~{g1$zF~(8H>3;#9Bv^&1oL&!(6)#l7g-h*%_In4#H-|*rXYBQy z`4ry^M)All=6EKUwGq+=R(m29gmR7>2QsIxQpj9luc|>evoV?fq>lYUmR)t6t>g68 z@OqA`2O}Wta_Xfh4?&#o72a*UGU44#9QP0T2f@r`lTht<2<_zb#(B==9Ma|cz3gfO z4mXsa=8}ji69US7`ZPidh5kk@3OEaqapZHMSseFY^SzYYeemfvE{^@qo?ZIOlu?|` z$SS$GT8ZfnEBTyu;=A?;|@ny*XT? zcdK0Z^@4^gDN5*aVIK0H-fgcFxDr8q2%!vn91d ze2cvo>+OkZ&v}$7rWLvNiRJ#>+X3oKMhG@1C3?8y(DEdaCI)-rEcyQtL4{=<3y4&hqNYdrINfA$#D=XF!PhcB=J=IpN>|aMp zBKTI~9;C_Hk*-9(1Ty`^J2_pceu;Pk^(l3Ay0V0|WA*sWQ1-L7p3s%fPy*MZt;hG? z8A>&4>$~^V8OjpY)(`Z>;9pPXMlYVB>0dOR`@ Date: Tue, 2 Jun 2026 01:00:40 +0200 Subject: [PATCH 11/22] feat: everything now works with prelogue epilogue model --- Makefile | 8 +++++--- guard/guardian.cc | 13 ++++++++++--- isofiles/boot/system | Bin 108016 -> 107480 bytes main.cc | 1 - startup.asm | 3 ++- user/appl.cc | 2 +- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 65486dc..29cda84 100644 --- a/Makefile +++ b/Makefile @@ -163,10 +163,12 @@ clean: # ATTENTION: using the wrong device name here will destroy data on the specified # device! Do not run with root privileges! +#bootdisk: $(OBJDIR)/bootdisk.iso +# @echo "CP $<" +# $(VERBOSE) cp $< $(DRIVE_HD) bootdisk: $(OBJDIR)/bootdisk.iso - @echo "CP $<" - $(VERBOSE) cp $< $(DRIVE_HD) - + sudo dd if=$(OBJDIR)/bootdisk.iso of=$(DRIVE_HD) bs=4M conv=fsync status=progress + sync # -------------------------------------------------------------------------- # 'qemu' runs the QEMU emulator with the system diff --git a/guard/guardian.cc b/guard/guardian.cc index 36720fd..e96a6f0 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -14,6 +14,7 @@ #include "machine/cpu.h" #include "guard.h" #include "device/cgastr.h" +#include "machine/io_port.h" /* FUNCTIONS */ extern "C" void guardian (unsigned int slot); @@ -24,7 +25,9 @@ extern Plugbox plugbox; // singleton extern CPU cpu; void guardian (unsigned int slot) { - kout<< "IRQ: "<< slot << endl; + if(slot==39) + return; + //kout<< "IRQ: "<< slot << endl; cpu.enable_int(); // plugbox.report(slot).prologue(); Gate &gate = plugbox.report(slot); @@ -35,7 +38,11 @@ void guardian (unsigned int slot) guard.relay(&gate); } } - - + // Manually send int complete + if (slot >= 40) { + // Slave PIC: send EOI to both + outb(0xa0, 0x20); + } + outb(0x20, 0x20); // Master PIC EOI } diff --git a/isofiles/boot/system b/isofiles/boot/system index 1c5d8c4393c6ad736b419c0d38aa37f43e49391a..5b788761e57ef4d5acbb610765fdaadb2eb0b7a3 100755 GIT binary patch delta 14441 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 delta 14972 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 diff --git a/main.cc b/main.cc index 4b39ee1..8d53e46 100644 --- a/main.cc +++ b/main.cc @@ -13,7 +13,6 @@ extern CGA_Stream kout; int main() { kout.setpos(0, 0); - kout << "PurrOS 2.0.0 - Task 2" << endl; kout.flush(); // Initialize keyboard and interrupts diff --git a/startup.asm b/startup.asm index 8c5afda..25e85dd 100644 --- a/startup.asm +++ b/startup.asm @@ -370,7 +370,8 @@ reprogram_pics: mov al, 0x02 ; ICW3 slave: connected to master's IRQ2 out 0xa1, al call delay - mov al, 0x03 ; ICW4: 8086 mode and automatic EOI + ; had to set it to mannual mode to support our own testing rig + mov al, 0x01 ; ICW4: 8086 mode and automatic EOI out 0x21, al call delay out 0xa1, al diff --git a/user/appl.cc b/user/appl.cc index 366f96d..87b2894 100644 --- a/user/appl.cc +++ b/user/appl.cc @@ -18,7 +18,7 @@ extern CGA_Stream kout; void Application::action() { - kout << "PurrOS 2.0.0 - Task 2" << endl; + kout << "Helix OS 2.0.0 - Task 3" << endl; kout << "Hello O_Stream!" << endl; kout << "Number: " << 42 << endl; kout << "Char test: " << 'A' << endl; From c28b565177cc81e32b3e959f512f81e864820cfc Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 2 Jun 2026 01:28:04 +0200 Subject: [PATCH 12/22] more or less working --- Makefile | 10 +++++----- device/keyboard.cc | 2 +- guard/.guardian.cc.swo | Bin 0 -> 12288 bytes guard/guardian.cc | 23 ++++++++++++++++------- isofiles/boot/system | Bin 107480 -> 107576 bytes 5 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 guard/.guardian.cc.swo diff --git a/Makefile b/Makefile index 29cda84..98e148d 100644 --- a/Makefile +++ b/Makefile @@ -163,12 +163,12 @@ clean: # ATTENTION: using the wrong device name here will destroy data on the specified # device! Do not run with root privileges! -#bootdisk: $(OBJDIR)/bootdisk.iso -# @echo "CP $<" -# $(VERBOSE) cp $< $(DRIVE_HD) bootdisk: $(OBJDIR)/bootdisk.iso - sudo dd if=$(OBJDIR)/bootdisk.iso of=$(DRIVE_HD) bs=4M conv=fsync status=progress - sync + @echo "CP $<" + $(VERBOSE) cp $< $(DRIVE_HD) +#bootdisk: $(OBJDIR)/bootdisk.iso +# sudo dd if=$(OBJDIR)/bootdisk.iso of=$(DRIVE_HD) bs=4M conv=fsync status=progress +# sync # -------------------------------------------------------------------------- # 'qemu' runs the QEMU emulator with the system diff --git a/device/keyboard.cc b/device/keyboard.cc index a2a574d..a82af6b 100644 --- a/device/keyboard.cc +++ b/device/keyboard.cc @@ -32,7 +32,7 @@ bool Keyboard::prologue() { // kout.flush(); //} } - return true; + return k.valid() && k.ascii() != 0;; } void Keyboard::epilogue(){ diff --git a/guard/.guardian.cc.swo b/guard/.guardian.cc.swo new file mode 100644 index 0000000000000000000000000000000000000000..2fd5018957c374361a25b4bd9a965cc18db47de5 GIT binary patch literal 12288 zcmeI2&2Jk;7{;f36t*-pq7sLK&|6n3cGY-In@i$4Rd7mVsc}kNmjg&;y`I=Z*SpK^ zY?>$vt>C~3IDrsw;s%tD(tiLdE=U}DfE%b>sM-TZgv5zwcD>H05)*Q0s~PF%*`1Gf z=6z;%-i_l%;ap{kM)C!QG{{(C|1+;$8Q#NwI>1;cqoz>hTcqb}=ccx35?8+w8#E_8 zJL+&(hUNt!C3kI0nx2QcMrgJoD`+O4!gBMr-H%<}Mk}Bd=tqG8cKq0L@uPkybCC8w zQSYadZle{@3TOqi0$KsBfL1^&pcT*x+$Rc1e;2z1UmocCGt$j>t;xH$I@1bh1+)TM z0j+>mKr5gX&~m%#+cfW6?h!PpPrI=BKp0GELP95g@~S0pk`nzBO4 z13FVF)2Zo7ukljvin{%*Uccok^shPA99P{(DdcWb86oLW!;@`hh*`>pjwflXM8ky~ zEixk>(v2*~Sx7nvSCZ{@e1}WUj3s8o81e66@&R|Oh3w&$C3&uhDnni6Uypdin^_q| zNvW949$Z~}*qDisS`1ucIBR3Q+mp4htquS*dpT|PER6bKD3|&m`&m=CSt`yaxhQe(@PtRrM zk?!iN%pwQQ2jqLos&Gk)4$rS>u<7LyQ(2p=kIzh0#;c=r+PgU9@Hy_NIr1Qgd`WE! zZes8}y~OFFa2!&z#6w7_K&B?a{tAnQ_pwQ>Gm=!#Po}ApM(?Fp&8{aK2f^0)y&$go=;LYCh zCd;Sng$sD(JI{t>&Mw{NgwtmsZQfGLlaa% zUfq18KJ0C7U`_2R{gyUQ=^>6sJ3WrKKE_pJB6W}_SGd{!QH~?=zCO%Nb34bm5_p3+ z0Lf9_6?=K1;^LK6YeH%o61vecZm!~GEsd+QA_(PC^|ZSb@S!C5ET6t%vP}>_)gUVM zqD^v3hLLW86|?FMTPhJ^(V`AUIvA~sV>%dhAEE7KeFTrYCm8KOOi%os_IY68HKH|C ci(fgY?74Uci;|bX|Dt4UZ{4Q+9|b1+7r<1Zf&c&j literal 0 HcmV?d00001 diff --git a/guard/guardian.cc b/guard/guardian.cc index e96a6f0..9b22f8b 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -25,10 +25,19 @@ extern Plugbox plugbox; // singleton extern CPU cpu; void guardian (unsigned int slot) { - if(slot==39) - return; + if(slot == 39){ + outb(0x20, 0x20); + return; + } + + // Send EOI first, then re-enable interrupts + if(slot >= 40) + outb(0xa0, 0x20); + outb(0x20, 0x20); + + cpu.enable_int(); //kout<< "IRQ: "<< slot << endl; - cpu.enable_int(); + //cpu.enable_int(); // plugbox.report(slot).prologue(); Gate &gate = plugbox.report(slot); @@ -39,10 +48,10 @@ void guardian (unsigned int slot) } } // Manually send int complete - if (slot >= 40) { +// if (slot >= 40) { // Slave PIC: send EOI to both - outb(0xa0, 0x20); - } - outb(0x20, 0x20); // Master PIC EOI + // outb(0xa0, 0x20); + // } + // outb(0x20, 0x20); // Master PIC EOI } diff --git a/isofiles/boot/system b/isofiles/boot/system index 5b788761e57ef4d5acbb610765fdaadb2eb0b7a3..fd1a1579ccca44d6b2475e090964cbec378568f0 100755 GIT binary patch delta 10881 zcmb6<30M{9wR7e&4B!F?$R_s!BFkk*;c{^U6$DHpnrNfVf=1&KHG;cALCtF=ii)St zAFXkV&*jx5B8?hDj7y$NYAae}6iuSW=%q2KrukBhHoWuC{4>Bc{rYvjk27=jr{UX$ymp7jmN?dK;Q3?a&@ORJ8oy0*%-s;TiRKIylw z_mK&Hn&1glDr`MjxTMu+;fnlAh0Bh}hc%7rlP-Twc4BH=M94<|81$ILFx(X9jQb>0 zl2&-gg>{8BL8s}t5Sm)AnXus&IU!ySi@>aer06s^ z;TShzzX*ISVMd})nC9ueRwFNwRR9rNcF1iU9>ZLWus;>hxwjOmH54P0 z0>hTMhVoK%`6k1SKNaikf%2qqj8BXR$ad$dnl_dud3N^>C8rzp8foEhr#CS!(Hbx> z-OcEZ5bjh{+eP!RrLUV>3ocKb5YUw7rq&v4sL2q5;Yrqjp6(+1OcBpN1k>~=#+1b1 zfXk_FmL{8GKnW&ASv^RYM(qBHTt&N6J-rU|Rl~EW#=A*@FdLQRS@1kANDdE-=}xx$ zlY)x`J9C+C-EmiPU-$%XCeMTkI4UJdwg%z+l*rH_1)y13tV+`I{MN&it5jH{Bo|

^-0op~m=Yea&7EA!)w<)r)X;AI+vE2RlB+5sZ2Fv5{R-v{Izw8qO_2`wE z8t@zmd_7du-GkTt6)euok^{Tq(#)Q6Kv&$EnG|re3rXd-m--9d%IpIRF+3{<7GN&H zr*UGI1E|Vb`82h@%vuB+ah#)XuMpbwXdIlReb?N~!ih*zA+o<-f+2X+5tE=2Q6IEt zG+}MNP(){aHQ@{Wbm7jv*fl$4^hSXmp$yiXKE7sDVf9yq%kD%LRxfgCk&@;QJi7vN z^okJPDe7ScQmoq^F8H%>ZT1ZBM+GGEYsi({Oz;KV9ta3zSq3N?wIB7n{R zY;A2zEsavUMEZ3xR1Zz=RUsGkS8{gp*zW@Uh;fnodyZ3Tl>ahCON8hTE$*TjBw9(b zQ%%`kLiUd&d)Q9Naf_2(?utKhQ#DFoQ|}v5MdW&ULQlT!u6In=^ELI}?N_N+=~tZ7 zArGd@`kAt?3m<9R2f5H<`xEz3eT;(np{HJ(>Q7x=A2U|08@nWAYLx!M*q4=ha(`

$;;nnU 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 VoRz%^1ATno&?P4W%h?Ln{|BCMOT+*G delta 10756 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 Date: Tue, 2 Jun 2026 15:09:24 +0200 Subject: [PATCH 13/22] refactor: added missing locks --- device/keyboard.cc | 2 +- guard/.guard.cc.swo | Bin 0 -> 12288 bytes guard/guard.cc | 2 ++ guard/guardian.cc | 2 +- isofiles/boot/system | Bin 107576 -> 107568 bytes startup.asm | 4 ++-- 6 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 guard/.guard.cc.swo diff --git a/device/keyboard.cc b/device/keyboard.cc index a82af6b..c4c4df2 100644 --- a/device/keyboard.cc +++ b/device/keyboard.cc @@ -32,7 +32,7 @@ bool Keyboard::prologue() { // kout.flush(); //} } - return k.valid() && k.ascii() != 0;; + return k.valid() && k.ascii() != 0; } void Keyboard::epilogue(){ diff --git a/guard/.guard.cc.swo b/guard/.guard.cc.swo new file mode 100644 index 0000000000000000000000000000000000000000..37d140727561c0dca2d41f341aa0c55b7d480398 GIT binary patch literal 12288 zcmeI2PmB~r6viJaN`ngdi6^~y@}{1=YU07@$qUh}A#&lSBt}U*`c?I?nT0hoS>PafmHAE0RK0rj z>g(!PnM^mQPaHWa_BW;pWt^yY@!?mt?pse!uO~9LjJ0bYQl2<|;^+_)-~EPn7|!NV z*;bh~;TdhM$|7mQJV#&CgsoB*arNGaqEVc(4J*J3jHtjE?b*G{-|9Oiwu>#B=SLjJ zW~=}!zzVPetN<&(3a|pK04s1eC}2Bl=uIr-p8jHX_v!0BE5Hh{0;~Wl zzzVPetN<&(3a|pK!2eJI8589J(J}nr@BaV4{`>!{O++t)aq#U%q7D$?r!k_pz%;o0 zAkhWzA?Sh*>WJMbm=1Y7{;!C7z;%z~ZZA+QCEgNxkY4d%=|lh&~2Sf@}8^{SAHvi{N|k z1^5)a58B{)@D$hs9swJ`z2Nt?@C&{HpM#IU2jD&M4mb}C&>#UXfRkVs*ap^uKkp;D z1Qx+B;Aik7_yKTX1z3Sm6_|664hjDN(G1Z!3h)YA(yFP0s-x4qRjOKj25nKNY^Y2& zQ*}ybwrZ>F&X%fFaqYBBjao8|wOMAnkmyv^YHoyhT-4@JPuBg&Myz~YtJmwV69ukI zOgcjZ6coy4K7wwpW8tGca3EE(i$+-Y19m~L7-3LNp|WZUZB^Tc=#6iTF$i4$)Io0> z*KAQ%>(Qrc+n4pYK!bA%>qXrkG+eD^E|%1SbJ>+T#q!}S3@fWaZ-Xl@R4RL3Ju&Gl zF-E;=RgsCq&&&&4qZ!(vvnVZNB_^DPjbvh=r7fdGXDW0Tb6JPq0IrF`NpUESMK3Q4 z5#?}`r~=m`bUnATgl;C&%c7*nGyR&hI?sfaXOt10R7Oh3G|yVXCQ5XQ+;7D2x+PV)-sK`y<5YM@0 zUn+m|M*A3?aVm}3DHfE7WHt~u0>$7iJRx#Fzr4vYJbHgqx35(34G3_HA4l>xC+5W= z@vN8~KG{hAhPzp^xHI}4>!<=dFKbO5?-|@q;&7fB-1mMvEX_U22Or;R?+;GG1Bc4$ zl5qb>a3|Hx8Fb~dVdZ=r;2B$0`16fZGpFWNWb8YV`iA8oPR;+R&@H9rl~Q_0{{n3` B8fyRm literal 0 HcmV?d00001 diff --git a/guard/guard.cc b/guard/guard.cc index dac9120..7047163 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -19,9 +19,11 @@ extern CPU cpu; void Guard::relay(Gate *item){ //item->epilogue(); if(avail()){ + enter(); item->queued(false); cpu.enable_int(); item->epilogue(); + leave(); }else{ if(!item->queued()){ item->queued(true); diff --git a/guard/guardian.cc b/guard/guardian.cc index 9b22f8b..a35ad93 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -43,7 +43,7 @@ void guardian (unsigned int slot) if(gate.prologue()){ if(!gate.queued()){ - gate.queued(true); + //gate.queued(true); guard.relay(&gate); } } diff --git a/isofiles/boot/system b/isofiles/boot/system index fd1a1579ccca44d6b2475e090964cbec378568f0..f5811403ce13f22060f63f9080eaaac4f828896f 100755 GIT binary patch delta 11074 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 bne|P&&1A#*t$@|>+alJ+Zwj-%1u_2vvKGvs delta 11456 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 diff --git a/startup.asm b/startup.asm index 25e85dd..7fb8d95 100644 --- a/startup.asm +++ b/startup.asm @@ -370,8 +370,8 @@ reprogram_pics: mov al, 0x02 ; ICW3 slave: connected to master's IRQ2 out 0xa1, al call delay - ; had to set it to mannual mode to support our own testing rig - mov al, 0x01 ; ICW4: 8086 mode and automatic EOI + ; set it to mannual mode aka 0x01 support our own testing rig + mov al, 0x03 ; ICW4: 8086 mode and automatic EOI out 0x21, al call delay out 0xa1, al From f968c4b5a593bbd43387401fcc8e4f65faf5528b Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 2 Jun 2026 15:10:44 +0200 Subject: [PATCH 14/22] refactor: added missing locks --- guard/.guard.cc.swo | Bin 12288 -> 12288 bytes guard/guard.cc | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/guard/.guard.cc.swo b/guard/.guard.cc.swo index 37d140727561c0dca2d41f341aa0c55b7d480398..ce6c807cb897d5b392738ff0f4c35d563c26c6c8 100644 GIT binary patch delta 41 vcmZojXh;xCG6?hZRj|}EU;qLE1_t+Qa#_Z_8^vn0S&C9i@-|P?&SC)o+ZGEB delta 41 vcmZojXh;xCG6?hZRj|}EU;qLE28PP3a#>R58^vn0S#nYn%QjEb&SC)o-$n~R diff --git a/guard/guard.cc b/guard/guard.cc index 7047163..f175977 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -23,7 +23,7 @@ void Guard::relay(Gate *item){ item->queued(false); cpu.enable_int(); item->epilogue(); - leave(); + retne(); }else{ if(!item->queued()){ item->queued(true); From 6211dd4a4f84dadde6770ab3b1ad65d28b1e8b91 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 2 Jun 2026 15:30:11 +0200 Subject: [PATCH 15/22] refactor: change to leave --- guard/.guard.cc.swo | Bin 12288 -> 12288 bytes guard/guard.cc | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/guard/.guard.cc.swo b/guard/.guard.cc.swo index ce6c807cb897d5b392738ff0f4c35d563c26c6c8..4bede015dda7ee2c86b351818fe5e7332cdf71ef 100644 GIT binary patch delta 41 vcmZojXh;xCG6?hZRj|}EU;qLE28QQ1<+4o7H;UD0v*e^EmTjJBqueued(false); cpu.enable_int(); item->epilogue(); - retne(); + leave(); }else{ if(!item->queued()){ item->queued(true); From 3572c5dd4503f241ac16d853ff3096b0bbbaa1b5 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 2 Jun 2026 15:48:58 +0200 Subject: [PATCH 16/22] refactor: lock issues --- guard/.guard.cc.swo | Bin 12288 -> 12288 bytes guard/guard.cc | 4 ++-- guard/guardian.cc | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/guard/.guard.cc.swo b/guard/.guard.cc.swo index 4bede015dda7ee2c86b351818fe5e7332cdf71ef..ffd255f1f8397f844a52d627c0186dbdc090c156 100644 GIT binary patch delta 108 zcmZojXh;xEG6?hZRj|}EU;qLE28QSNbAls-l}8YRR(#08K6# A$p8QV delta 101 zcmZojXh;xEG6?hZRj|}EU;qLE28QQ1<+4mRioTa;&F5rb@Sn`7uwL~(7X!mKAYKT> sT|it0#7RIL55%!R90SDuo9`;bb50ge7oKdRCA#^(iXP+UN!ocV0K&r;>Hq)$ diff --git a/guard/guard.cc b/guard/guard.cc index 7047163..8944543 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -38,12 +38,12 @@ void Guard::leave(){ retne(); Gate *gate; - + cpu.disable_int(); while((gate = (Gate*)queue.dequeue())){ - cpu.disable_int(); gate->queued(false); cpu.enable_int(); gate->epilogue(); + cpu.disable_int(); } } diff --git a/guard/guardian.cc b/guard/guardian.cc index a35ad93..8ed93ee 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -31,9 +31,9 @@ void guardian (unsigned int slot) } // Send EOI first, then re-enable interrupts - if(slot >= 40) - outb(0xa0, 0x20); - outb(0x20, 0x20); + //if(slot >= 40) + // outb(0xa0, 0x20); + //outb(0x20, 0x20); cpu.enable_int(); //kout<< "IRQ: "<< slot << endl; From b928d4e495b1e648396f8f3d32e5017d08adbc44 Mon Sep 17 00:00:00 2001 From: Lioncat2002 Date: Tue, 2 Jun 2026 15:53:38 +0200 Subject: [PATCH 17/22] refactor: lock issues --- guard/.guard.cc.swo | Bin 12288 -> 12288 bytes guard/guard.cc | 2 +- isofiles/boot/system | Bin 107568 -> 107528 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/guard/.guard.cc.swo b/guard/.guard.cc.swo index ffd255f1f8397f844a52d627c0186dbdc090c156..7d565eecc89d940623a6696354bf992639eb45af 100644 GIT binary patch delta 99 zcmZojXh;xBG6?hZRj|}EU;qLE1_ss#8-+f}vqo_;Fj!6IR9LTiii?3^ArN-~aTyRN q0kJO-djYWr5W54h)#kej(VR@~?vrh_CNk;kPY%=)+5AvTo)rKWQWYEk delta 97 zcmZojXh;xBG6?hZRj|}EU;qLE28QSNHVS=`XN}=xV6d6Ysjy!43>O2#Vj%7T;tC*6 o0b+k3_5orqAoc`eo6UC>qB$oEsIyGA(waE=kgCY$hg$Ni06hH`TmS$7 diff --git a/guard/guard.cc b/guard/guard.cc index 8944543..4716319 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -38,7 +38,7 @@ void Guard::leave(){ retne(); Gate *gate; - cpu.disable_int(); + //cpu.disable_int(); while((gate = (Gate*)queue.dequeue())){ gate->queued(false); cpu.enable_int(); diff --git a/isofiles/boot/system b/isofiles/boot/system index f5811403ce13f22060f63f9080eaaac4f828896f..8ed03ac009957e41ba4f6d40bd56d5c509b26145 100755 GIT binary patch delta 10488 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 I9=jmw->9>mIRF3v delta 10488 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 From 6c5c6b8a5e654e08e2c1d4d298b5dbb43529e6ff Mon Sep 17 00:00:00 2001 From: Tweedle2dum Date: Wed, 3 Jun 2026 12:38:27 +0530 Subject: [PATCH 18/22] race condition fixes --- Makefile | 2 +- guard/gate.h | 2 +- guard/guard.cc | 13 +++++++------ guard/guardian.cc | 34 ++++++++++------------------------ guard/locker.h | 2 +- isofiles/boot/system | Bin 107528 -> 107016 bytes 6 files changed, 20 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index 98e148d..8db3a38 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ OBJDIR = ./build DEPDIR = ./dep # ATTENTION: using the wrong device name here will destroy data on the specified # device! Do not run with root privileges! -DRIVE_HD = /dev/sdb +DRIVE_HD = /dev/sda DELETE = rm ASM = nasm QEMU ?= qemu-system-x86_64 diff --git a/guard/gate.h b/guard/gate.h index 2f65934..0198fe1 100644 --- a/guard/gate.h +++ b/guard/gate.h @@ -15,7 +15,7 @@ /* Add your code here */ class Gate: public Chain{ private: - bool in_queue; + volatile bool in_queue; public: Gate() : in_queue(false) {} virtual bool prologue()=0; diff --git a/guard/guard.cc b/guard/guard.cc index 4716319..7e95d50 100644 --- a/guard/guard.cc +++ b/guard/guard.cc @@ -17,34 +17,35 @@ #include "gate.h" extern CPU cpu; void Guard::relay(Gate *item){ - //item->epilogue(); + cpu.disable_int(); if(avail()){ enter(); item->queued(false); cpu.enable_int(); item->epilogue(); + cpu.disable_int(); leave(); + cpu.enable_int(); }else{ if(!item->queued()){ item->queued(true); - cpu.disable_int(); queue.enqueue(item); - cpu.enable_int(); } + cpu.enable_int(); } } void Guard::leave(){ - retne(); - + cpu.disable_int(); Gate *gate; - //cpu.disable_int(); while((gate = (Gate*)queue.dequeue())){ gate->queued(false); cpu.enable_int(); gate->epilogue(); cpu.disable_int(); } + retne(); + cpu.enable_int(); } Guard guard; diff --git a/guard/guardian.cc b/guard/guardian.cc index 8ed93ee..03bc944 100644 --- a/guard/guardian.cc +++ b/guard/guardian.cc @@ -25,33 +25,19 @@ extern Plugbox plugbox; // singleton extern CPU cpu; void guardian (unsigned int slot) { - if(slot == 39){ - outb(0x20, 0x20); - return; - } + // Spurious IRQ from master (slot 39) or slave (slot 47): + // In auto-EOI mode no manual EOI needed, just return. + if(slot == 39 || slot == 47){ + return; + } - // Send EOI first, then re-enable interrupts - //if(slot >= 40) - // outb(0xa0, 0x20); - //outb(0x20, 0x20); + // Re-enable interrupts to allow higher-priority nesting + cpu.enable_int(); - cpu.enable_int(); - //kout<< "IRQ: "<< slot << endl; - //cpu.enable_int(); -// plugbox.report(slot).prologue(); Gate &gate = plugbox.report(slot); - + if(gate.prologue()){ - if(!gate.queued()){ - //gate.queued(true); - guard.relay(&gate); - } + // relay() handles the queued-check atomically under cli + guard.relay(&gate); } - // Manually send int complete -// if (slot >= 40) { - // Slave PIC: send EOI to both - // outb(0xa0, 0x20); - // } - // outb(0x20, 0x20); // Master PIC EOI - } diff --git a/guard/locker.h b/guard/locker.h index 2f8d267..2075cf1 100644 --- a/guard/locker.h +++ b/guard/locker.h @@ -20,7 +20,7 @@ extern CPU cpu; class Locker { private: - bool locked; + volatile bool locked; public: Locker() : locked(false) {} Locker(const Locker ©) = delete; // prevent copying diff --git a/isofiles/boot/system b/isofiles/boot/system index 8ed03ac009957e41ba4f6d40bd56d5c509b26145..a3ac9577d231e8e631de922953803fe56e7b1cee 100755 GIT binary patch literal 107016 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

  • h0e`XjPu%QY2xvw9ARgc8q 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 Date: Sun, 14 Jun 2026 21:54:54 +0200 Subject: [PATCH 19/22] template for task 5 --- device/watch.cc | 17 ++++++++++++++++ device/watch.h | 39 ++++++++++++++++++++++++++++++++++++ machine/pit.cc | 11 ++++++++++ machine/pit.h | 29 +++++++++++++++++++++++++++ syscall/guarded_scheduler.cc | 11 ++++++++++ syscall/guarded_scheduler.h | 26 ++++++++++++++++++++++++ syscall/thread.h | 27 +++++++++++++++++++++++++ 7 files changed, 160 insertions(+) create mode 100644 device/watch.cc create mode 100644 device/watch.h create mode 100644 machine/pit.cc create mode 100644 machine/pit.h create mode 100644 syscall/guarded_scheduler.cc create mode 100644 syscall/guarded_scheduler.h create mode 100644 syscall/thread.h diff --git a/device/watch.cc b/device/watch.cc new file mode 100644 index 0000000..f9c5891 --- /dev/null +++ b/device/watch.cc @@ -0,0 +1,17 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* W A T C H */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Handles timer interrupts by managing a time slice and triggering a */ +/* process switch if necessary. */ +/*****************************************************************************/ + +/* Add your code here */ +/* Add your code here */ + +/* Add your code here */ +/* Add your code here */ + diff --git a/device/watch.h b/device/watch.h new file mode 100644 index 0000000..f178023 --- /dev/null +++ b/device/watch.h @@ -0,0 +1,39 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* W A T C H */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Handles timer interrupts by managing a time slice and triggering a */ +/* process switch if necessary. */ +/*****************************************************************************/ + +#ifndef __watch_include__ +#define __watch_include__ + +/* INCLUDES */ + +#include "guard/gate.h" +#include "machine/pit.h" + +class Watch : public Gate, public PIT { +public: + // WATCH: Timer initialization, see PIT. + Watch(const Watch ©) = delete; // prevent copying + Watch& operator=(const Watch&) = delete; // prevent assignment + Watch(int us) : PIT(us) {} + + // WINDUP: "Winds up" the clock. To do this, the watch object must register + // with the Plugbox plugbox and allow the interrupts of the timer + // module with the help of the global pic object. + void windup(); + + // PROLOGUE: Contains the prologue of the interrupt handler. + bool prologue(); + + // EPILOGUE: This method triggers the process switch. + void epilogue(); +}; + +#endif diff --git a/machine/pit.cc b/machine/pit.cc new file mode 100644 index 0000000..ebb5faf --- /dev/null +++ b/machine/pit.cc @@ -0,0 +1,11 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P I T */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Programmable Interval Timer. */ +/*****************************************************************************/ + +/* Add your code here */ diff --git a/machine/pit.h b/machine/pit.h new file mode 100644 index 0000000..f151428 --- /dev/null +++ b/machine/pit.h @@ -0,0 +1,29 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* P I T */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Programmable Interval Timer. */ +/*****************************************************************************/ + +#ifndef __pit_include__ +#define __pit_include__ + +class PIT { +public: + PIT(const PIT ©) = delete; // prevent copying + PIT& operator=(const PIT&) = delete; // prevent assignment +/* Add your code here */ +public: + PIT(int us) { + interval (us); + } + int interval() { +/* Add your code here */ + } + void interval(int us); +}; + +#endif diff --git a/syscall/guarded_scheduler.cc b/syscall/guarded_scheduler.cc new file mode 100644 index 0000000..ef0139b --- /dev/null +++ b/syscall/guarded_scheduler.cc @@ -0,0 +1,11 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* G U A R D E D _ S C H E D U L E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Implements the system-call interface to the Scheduler. */ +/*****************************************************************************/ + +/* Add your code here */ diff --git a/syscall/guarded_scheduler.h b/syscall/guarded_scheduler.h new file mode 100644 index 0000000..4582140 --- /dev/null +++ b/syscall/guarded_scheduler.h @@ -0,0 +1,26 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* G U A R D E D _ S C H E D U L E R */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Implements the system-call interface to the Scheduler. */ +/*****************************************************************************/ + +#ifndef __guarded_scheduler_include__ +#define __guarded_scheduler_include__ + +/* Add your code here */ + +class Guarded_Scheduler +/* Add your code here */ +{ +public: + Guarded_Scheduler(const Guarded_Scheduler ©) = delete; // prevent copying + Guarded_Scheduler& operator=(const Guarded_Scheduler&) = delete; // prevent assignment + Guarded_Scheduler () {} +/* Add your code here */ +}; + +#endif diff --git a/syscall/thread.h b/syscall/thread.h new file mode 100644 index 0000000..91a41a3 --- /dev/null +++ b/syscall/thread.h @@ -0,0 +1,27 @@ +/*****************************************************************************/ +/* Operating-System Construction */ +/*---------------------------------------------------------------------------*/ +/* */ +/* T H R E A D */ +/* */ +/*---------------------------------------------------------------------------*/ +/* Implements user interface of a thread. */ +/*****************************************************************************/ + +#ifndef __thread_include__ +#define __thread_include__ + +/* Add your code here */ + +class Thread +/* Add your code here */ + +{ +public: + Thread(const Thread ©) = delete; // prevent copying + Thread& operator=(const Thread&) = delete; // prevent assignment +/* Add your code here */ + +}; + +#endif From f890598adf21f4e4de38284c042a5ac200091b14 Mon Sep 17 00:00:00 2001 From: Tweedle2dum Date: Tue, 16 Jun 2026 13:12:48 +0530 Subject: [PATCH 20/22] feat: context switching implementation --- isofiles/boot/system | Bin 107016 -> 132136 bytes machine/toc.asm | 26 +++++++++++++++++++-- machine/toc.c | 8 ++++++- main.cc | 6 ++++- thread/coroutine.cc | 20 ++++++++++++++-- thread/coroutine.h | 8 ++++++- thread/dispatch.cc | 17 +++++++++++++- thread/dispatch.h | 11 +++++++-- thread/entrant.h | 9 ++++---- thread/kickoff.cc | 11 +++++++-- thread/scheduler.cc | 54 +++++++++++++++++++++++++++++++++++++++---- thread/scheduler.h | 20 +++++++++++----- user/appl.cc | 15 ++++++++---- user/appl.h | 10 ++++---- user/loop.cc | 21 +++++++++++++---- user/loop.h | 13 +++++++++-- 16 files changed, 208 insertions(+), 41 deletions(-) diff --git a/isofiles/boot/system b/isofiles/boot/system index a3ac9577d231e8e631de922953803fe56e7b1cee..e656629ea4b090cbcac05cf910ecc5bc78d74e2c 100755 GIT binary patch literal 132136 zcmeFad3+Vs`9D50ch7cj_Jjm-fv_n1j*1FmFe+#iQAAXBup%G?MGFNDRbq^Q+SVnl zXx-XcrIjKoB8w90ic4Loq9SGtRjgE~QuBSkpEGmry%U1|K7amRUYNPhex9?;InP<< zW@*LfQI=^M?#D7tGKdW{VnQ13FlPNPAv4?l{$Rt6K%OSWRWK~0x|j;EQ(OA7A725iB^WhtK>ouGOfA~!oo$uRZl0r72)2ie z%9h5;>sp#_%QhB%)l`;Y7)=elU4+~FpH$ZD+28a5@rRLi)7OB$Jut4a_S34hhTWKM z7z#G+r!{QZk7?Lv|6ap>`!^a6*mW8X+DkPYvKMGLY|qqi#J)(wY4+I~PPa#DIKv*I z;Y_=ShO_K44M*)<4ae+|hO_PO(%ih{*k5Wm*ZxGqdG^~H&bMFGaDn}-h70Y-HC$vr zq~T)wZVk7yS8BM#uF-I*eYJ+$+m~y&gMF!n%j~flj@zecxTAf7hCA7PG~C(ltl@II zP{Up9bPad4TOw}WyV+lBxV!zChL5q|*YL6Ss~YZMZ_{v3`w0#Avj3#v-u68j?qlDk z;lB2b8t!NRT*LkCxf&i|Pu1{1`vMIQvd`4;VEbeZ53vVmc&Ob?!^hbr8b02RYWM`( zr{Q7t!LVBnC)&*#KFR)2!zbHsXn45YsNoUz(;7a-eoVt7?cZzoRQop?uCVJgJj!0G z;nVB|8m_cwYWQ^fA`PEmpRM6D?U5QDZ4c4#7`umt&$7!je72pd;VL_%;dAWou$rl! z<#X*XH9Xe-M8oIVZ)dw_-)+1)gJja{PQYwf6pe{TCUyx2a7u|k!@61!Q$zpy{l z@KXB?4KK4BHGG}@w1%&@AJcG+{d)~Bw|}GIU)psVzQJCq;T!D*8eU<~)NrkRk%n)w z&(?6AJyOFr+e0*5Z}-sfEq0lPSK7H6US)?gyxRT_tMV%Ex7uH7_%{0!4c~6Rt>ItU zFKYPL_OlxPjs3WW@30@z@SXPE8otY3so}fr8VxttS8MpU_T?J>oqef>@3F^fc#VCU zhVQjc(C~eB9}WNB?yTYa?LrMdV5e*NLAwP}kjnc*_SYJI*#1nzf3V-z@E`40HT)-g zn}#2;pV081?LTSwQTrYZKW5*i;kEXS8vcv@a}EF1o~z-D=2{!qiu+HYuhv)!oSE%wtI z-fBOl;cfQsHT<0Y8x22i*J*gWy;Q@E_5uy>uxD!c@AgF+e!)Il!!Oz+HT;r2M8hxJ zJv97^U8dnz?OYA-v_l$x&HfItrYfJ;?JqU_hW&|#-?ZP>@IUMqHT;(StcKsVAJ_0Z z_Cp$e*S=fB@7XIg{JveI;a&FC8vdt!xrRTmFV*me_E-(?wolXWNA?LC{@CuL;ZN+& z8s1|UYWPz-UBi3r7DUi0@1NOUYq-h&OvASQzJ@=yU)6B4y-maW>?bt*FZ)j#{=&XT z!(ZCBX?VYVqlUj~{)KYj-^~jZ@OATS1srIes(}AAPf)-&&F3iKU~{Dc4mF>wfd4iR zR=~H-y%g|WbGZTzHCG-ASt3rCE<P_DlO`9qD)IWUtn$`m< z-<*;4MbjgI)}|}|8qNPT`MWcsUu;{Oy*J*(!rQy1X&JuO#`kt?x|%@uz4tb8=XI?g zl<5R4P$m-afie~V@X^Fu0E{H?-QJGdDxcmt!pYNh-xVPn)#;UWzLuSpHQT~h?*p4O zekzZ|ZZ@`Uo6$R3wp>J_Wv4=}u55JO%<$;Cxv|l8R~L=0TNxv$?yn52g|X(q2AZs_-CkMycGG1Tnf~wE&!lLhV39w%RI@qE20aSw%3p3q z>b;mUv)LT3Y^*pW4%93;WK@q+S!ir}4qXHU_A7sT2)VxMhur@o1{4vk8;4xK#Y9hr zp+t^a`Se$69NnjUkHvq%-R5{@eIW086FxRJebWs#>H`4>{SIjJmw(^3N}7VV4j|ve z%pX^=KYIJ-<(sRsU>?pkHeJ}#($bt;SvO8qmU4go_bn}O-?i1s|9@i``2qi75_OO$ z5#%_jL{eJ_6R(Xy0bh+xpQK2twAo(89B%qaBi4XXwV+ zS2xbuacH+=c8{*DcxSYF5a0u9lAgf9#+KJnz7I@P#obR8NvqPW&!2h`3PW6=BA%Z` zVaa#nW-})Sf475*jJ;M_`)?pk)rV8c76~~%I_-7ccSqo>XK6p4P1r^nA}cw*SBZ;X z*X`SkJ_}CITV@(hp(u<^ys=RCcM-+~U=Y1Xp-oE_TH0B-PdeyV!u@6Cmn|(69^I8( zh1Tcaei3!#xy?jYklOV^X>5Ase=RNYSUY81ADHEEu7`zHstaoR2n|m6MyiJD^Ut1u zBobxVIGi1LQcX%J4PUYFV08VMgA}YAKCynD$#SlpKT(SNjuoRVDIBnB4xRlAHb7Rq zs!z7{me-Tov?_PET$4Juy5X!oR2XX0eJHBJNt#8vhkrU(WhVY5BV=PpCMwuvi&vY?{gEcd{6D+;Osv z?j_SDA6Kz^;Vu^eqaWbix?t$+?j)C3Xz&}|HTpBh@1*=o$<;1AKznt=Ct>KQ-AcH& zYLY`ruQ;GdM|c`V$$}f94IE;d`)EskA!3cfXl|#8VIiW&;i!Q%ti+?NpYKiRZlztb zH#1QXI_kagga~1gLud~|^9V><9!b9|ImMCu8qZpDAtb{Kvr}xo$A_?H$r@wf zc`5X*R9IA3(NH;c2N-LlKd3zT72y4q=FaH)SY5^8`bx8Q%;CyAR-6}Ddj!$iiZ#mg zhUQWluN!x`a_Z~R_2=cUjc$5fjTIA+4lPx+)Q&rhCi^Q4FAHDS-ECZ+7S*bEtIm6j zw5q3A_m#D;uvi~KvBG|n){-{H=N;5T(e>jF>g1Zy-;tPjZc=48jXS9P+NuSU`|KID z3%{W{Q=Nt~uH71aVvIu(S2`+Jy!MmzdP1+}P};(*88u73F|G-1VC!=t8Vs#{X@65M zr`}G08_{PgzB%}gs)s{Qu?ai*UdQTZ6A^#jL`l-0if^J%u*yIbmu^vQ0WKxy#CZal zk-J5)Zj3yVj?#r%$sNU$pId58hZeJuS+nFo>s-h~sdKULTUPRcBWB`D*lF(MW+JM5 zK@YGcDGM)xO4L(pI!1&$Z=s-S(UFYVpQLx&59|F7dQuw_w6&@Yc6Eu``160okNuU% ziE=QxI=V0?9aZv;O%+FS$kGla*M;PRG48^y)Mk$+T_*bo9rCC<2Ifu4tR*I z@&{o#zzILFj%hTT-jPX4uRidvt5iy_mclAkk?O$?28z6Tu8a2q4tT$glD;6JKJXVu z*H*e{kcLED5*hA?C5a5{9H}dkQn-@OHsUXb^)Oh?2v1aC`zWl}>^I@T@sg@LXf0B1 zaOUMqHPS={L0;-SX~aR)U40@uC*?jaJ#Bs9Ym_K+`;QVNJ_?o&>HKA>{JrK# zL|o64^T(2s{Qb$1s)rp|(G#lwd;>2qCZ|=_G@)s=nog+^;6_n_8|A2KIDN5W?N_ko zj?ndindc~9{{W%X0MYHWn5#n^32MjfuN||G*^!6qx~&Wzoaxpyx>%pzu}VBe4j9rL zLikp@N~8qYSG#H>Re*3rS+R=2vbX%4VccHBibSUCT%D%6Wn!v6GZ#5wi+#1}?siHj zx_%jL;R%Nm2ddo$J&_N3?N(%d+8_w3R{lJC6%a9ED*RGDH6nCMLTC+z>H~j(Dc0nl zi=kd0Xji4soUhR1RU9_2TXLA|wb5I~GHUVW1g_-KVtrtWn337SX*Arp^_g~@mHZ5ZU;{Rv;b%70NWp1uAw~I3MfzAnYVKSha?Lr+U^qxyYH*qB)M6r z?EXpFeQ};Hm$i<*%%0I$mpOLB+U^YryEU!sK1)h{{?C=&1qr+3UAxV{D7ZfT%YT01 z*j>vmT*~46gxwyk?9NnnJ1e^-3A=`CH~%_&$$?m>Y{%|+ZMQIC_YD$L+DBB`O;>ie z&DG`bu%o}>&mVmB{r4~Yxy1GNYuDes{dB$kyp`Q2NU6_%mooK%%M*61z|eEV=V>g( zpQWM~I9?PQn@-B3etz>A@T)#>KfhFe)xKHm|COs6^?|ws!w-g@09Jg*rZ%XMMi9i+ zR~)FU&-`Ext;nch7l?Z=f$~%lDqD9?qgA@cDEA)`4e2LW|A*P%BC{+Lvn*w&%K=h3 zyqJkXnL*L|z+6#oY+8_uIBVQ~gzoTR0*FfWW02vPIQmEB&NHXe!N#V)eU7oj9*o8< z0d9R@4;W9vGiO1`?XEADwj6kHg3ImBtek=yt(*+5JD#tDt&8a}gsNiBh=$$_8)p!?|vu;+WwX^;K9egXOA> z=JAlpT*&1iSEjkbV<}8#opPpb9x}7!{phB@lQ^Ol-ZwV&bmr_>FVmJCCG|BtcHGv* zTsCmi5R1uvBquRE57O;Pp>b(tbYOTM78Xc_+l+bO|gu@T~tZs9anL9@$VcMdB7YX`qN7YQ zk`&FI+l{#5ppAo*Q#Wp(`GRiiV25fd4mgR#j;lDZ_z8x7DYH>{v#BF19wnK{M;!!A zVEmizb%=*@Qd(r(d0uLk>dC>^6K86D>4x1kV~^CaGn)D=Jt(2`w#yb$KwJfDpSetbn}nZSBsQ z-6sBH>&B@B7R>DsLG9Lj9{}}WhL0@ z4(l^V&7yL~PBz4vC5KP`#Yai4gL;R!ZiJ2pKA(Jblup4Bth%7eGj<*!Z(72?Q+v32 zy7KS}JcLK^aBOAGK6&W2SA5B~_YPJ%hVAD5sscY+SfoJC(%xB7WlGp1XEz*?<(s3m zAG570jhfv{Yq2r}S<&EP%KFVUhlW-U!!5enYY--%SOEvg+Xs#l4`*0J7 zf$^~iV^vz2Qu!GbU49Clw36n2eT>)%KY+NzU> zHuNLNw~Z{f)_;QfU0qK7c-7USp7?|mpcJuI;*6mmHhl|W*EjONf!XN#og{5?7w_N0 zf{^_W=8l>07>sxf7Q;ZYK|9GHe3BBXr9o#0MoNV#PkOG!BPX`O8c{p6RGbr*Zr4DlfIF&nh-1PB6@>cBdr z^!(PQK9226a4cOD-Cd2DAleVA)_91I0n=R%Pm#}KTyt2fh#Wz9R=KJ}QgyZN#2*Kd!nAXWk zn&n<2Jm%h7Rt-HDGl2$A0$q=uz|>BjOnr+(=4~Z#7(6+-l$?WOB!TGicUehJxkj&& zokG@WyQ_M-)bQV|d>NOTT zim@KuIZZ1 z8Ji|K#CTX$%(=edv-MY` z*?b{l*_z#PtfcZ`;__++d5g$naHuIWK&j>U*CgYg1ZP}pLZg>cBGD(RtQocA{)>m+ zkN98qQ}t@?F;uQNENL+i!DD1!v+PeW?#)f#!C z!Qznhc=sW*1fR7`GRqUtldl7ua-^j4H6VlgaB~VcC+sMm0MO1nk2D zX%(M24XP^8%-{#qssNn$?BLFhs-;y0Qp)&aj7di-gH8W(%J@16q-d-ajW+VkGw~_X z*B{A#y_$Z~W4(J;?A5G1S~@+zOfB1IuwbDJ?C`&(Y@L;kr%>!{!-v>HQvz@A>=f-&`@aOXZfP z*s?t>D@Jl7k?pmd9$f{G@U(L$Nz=OG!3K>(yr#XUC){I1X6t9GF-5JR%4Htb_0n6eDGh?M%k04K2_ zq8YefD!Q@hE}*j0uf2ND;Y>TaS2FG`nuYS_sU_LGs-GWz5@mp1y{Y&MBnnnz>XE1V zz$1?JH;-z)>9c<%ny_=~uj!rEG|c+2fyRWeB|S?m39{f{ZQ8LfrGJq*ZPUsW3+UOG z97^hgL`GJyXpg6)RKNG(J1Q^gj3=w{X)e>$=Z_zVN}#MPYqffsxLKaEpLe@byDUY` zo&Ab8VyzKHm}n+7`@9?}Ye`lPaJ5Po4nC~bkr?$t8zVEPw26^UTil+Uj>y&=Lep{y3>@Mc9VSGWzi(&RLxSy+@&kIgIv9mj+6f&5)Ba^=;`c>qsTqDuvYYW+O<> z9l6Vv95mD^K8%4@%??u?9~5Lamfyx5T5(F!y0`d!Bt0ux?|(mD&!4RK-H+FEjyWnn zafa*1`WZ`353}4Ks~1n!`|!u>4Num4_Q&fjOV(T3N>8^C767NevILlDU#2O^+!XS7nDj&>`-3S2#&nM?9{}_zN2CrvTE0}+ zeq=pWcCjr@e(iN?9EGRz_vop3f#O8$x#OuCI0G-6CJR)x>t%ta3%U% zju5deOXF#&KL0lf%_B-;q+FIRy;NdP2q6bnJ5-8|!(&w%%)?-#hHGwcy@?|xEZXOI zY(e>4y6GPd@i7pQU~<1DGLUbFZWEpjN_a+2bts&`rdG?`kv53efJxzzF!=oz9$b=-_JVVVkGH?*{)&S^{S!1A5-7A zzG{>iap#R7`6c^*9O!Fzh}p&tBH4_@WLCwlN%9=zIv zFZ19xd+<9v`28Mytq0%e!FPD@H$C`n55CWXAM)USE44gh9=z0pclY1}J@{}BKH7ti z_u$h!_&g83*n_X|;J175H6HvC55B>JKj*=BdhlHyyvc(f@Zg3owLCLCc##J$_uzd! z_%IJ%>A}zQ;FCP~Y!AN3gD>~st2}sv2Y=Xuuk+xWJ@`u={2dRz$AjUy zc^*9O!Fzh}p&tBH4_@WLCwlN%9=zIvFZ19xd+<9v`28Mytq0%e!FPD@H$C`n55CWX zAM)V-Kx%o$Jb0-G@9x0|dhp>Me6$B2@4=^e@Od75u?Jt_!Eg8AYdrWP9(;obf6jyN z^x(TZc#{V|;K7YxYI$aO@FEXh?!o(d@L?Xj(u1Gp!6$j}*&ck62Vd^NS9$OT5B{(R zU+2L$d+?V$_&Xkaj|boH!4G@za45BW^E`OmgZK2{Lp}JZ9=ytfPxRokJb1MSU*^GY z_TYDT@cTXZS`WU_gYWR*Z+h_E9(A`n-@Fov_z=In+(~uOOW_a)-4_@xU`+D$U z9=y_npXb3RdGOgDe31uV?!i}i@CFb5um@k~!8d#Gmpu489(<1n-|xW>d+=~tYWe1Q z@VE!>>A{D3@KZf_l?R{b!Do5!Y7f55gWv4I@9^OFd+@a$e4_{7;lbbZ;JZEeJ`aA# zgZtA{%QNP|OFejZ4?fU?5BK1sJ@_~eeu)R4>A~lD@M}Ey^&Y&=gWvAKf9t^?^x%(q z@C_b(iwA$fgSUj-pFK&e0TAlff55;&gNF<~uJ1?P!p47vJ{p|ADw=ciM=zPthsaH*zb4AbIy^Ldxc&Zh{z>0~{!yyh!Vs`A5U*4r_pYF$; zc=9B}IOl?jbI+SF?)0;(?m8Af*)sOjQKwa&apvedZ#iUiyKwx-^G`Wz%n8R|3iWuB ziB{lA$&~*Q`T0c`FPVt%;Y8Hu7cP+cy*Cv-BDPplQ7*kuJUviKeX+h{gd=H#0>My; z<@2Wx=&Q?a@|3C5rq3`&pFQ%-c*VKro_+4|@o94xPMJMDK7CI0^!eS7ITCCB^y)d& z!8$%}#N$qiN3l>jefDLG;%ASI_wU`eci(ug_<55TTpk~2fIfR}{On7|R?nY4`HGIl zSqrb2GJQUbj+`}le!P16f@;9$;VZ5`!xo5aeE#$W3ujlK6z_FXeAx6w^QKR&o<8j) zfh6nRnq$;QIV=2QJV0cO$co)yjm!*Mmu`oM@k4qOu$wG0uHMI8ox=;h$!g^GlJmE!+Ux+e50 zlJ%_NKg!=M=$)RTcdF=>f<`}wf?t-*pOES=`O?zddc5q%`FjesG&vIJ`kR%o%XF*2 zZ>xQ=oK6KFM>rGuXC(9&gFF!YQOSI3gb0*^)_`jQ_&frk)1RNv-w5)2@Y^Nx$0hi? zK%WhM*JS?W1plz3FQc4WE;AB*o}KHBcCs>A-?~WzNnRpOehDMvK4?wZ9e6J1$wTI@Rud;9ro;x6Ty- z=652l_rQNBg@50VO7{%3zoE%`3sTda0{)SnV>jK~!H*~FUzE^a4EoXd4L`u&_yhc1 z4!<1rsoSBi%%lgUARWea2hNxb#<%8QnedP8=uz<7YG-UmPl4Z7eX|{H1;4H5U@`db zfq!dq`c}O-K>r%RAHA`qWl%DIUc$eP;70H%H;` z0{>TS@PFue>-&D&{o^qBdlBr;OZMBkTpa%)ySKw`Tm2gCZg{WlbSHv;%2D`>!5@4S zegpV3kbYbJ-bU~zf`1Xd_48nzuj_jk$ajE$NeW+8SSe_SalHk8Q8IsQqCQK}-d+K} zt@<7Y{!8Gu<=;f`w}Ri+^SBuNfoRV%5pl-_>yY-p0sI`)+qz``tj9EeBlr)3-&Xp& zz;6Km|1vHdc&F|0bQt{E1AbfM=|u47gWuM8z8L%%{JJb9U(x#H_?)^!q{ROB!x{B*n4xdmr-ER(qr0ePO??_OcQD-fi&N z26y4=iF}U<0&vp@Sc>Zqu8X&|w2Z{J=KVtX9tWuib-fJyBh@ukeyH5mz1z}KPC++a z753{mwJ&TRXZ=G-Jc3p0}Kwb|1`6+xA_?3co7}rzaxApv&qCD4vf220?L*>SFj}}KY zfZtZXHW7Y33_g9-`MMxc--|)MAN;obZUFx-@c%D<$MF0ft-fD+>*)2p5B#Im_vhfZ zH6GIM{ouF9x6b$YM7}qI{KZl1?*gCcw^irwcN!CwbH4~*&b&r|8gL23a13-oidaa>IED{6ecDZcI7oEUyHWCl03w0wteE#v#f zqLosRc7vYtLQBgZ0BgQ=za&CF{y?wM0RD?9{Oy__2fy;gw%0O-gI^6ke?nZ__Z=&J zZ5*UY;4gm(V_XXVeBm?6AL=(AMf+`Q9zG2EH7~dQ+)o7m8u0%w&;7Y?wEbK%-LCMf zt$u;&b^`xM>nx?M{Ue(|440+CV!~?Z$$fTEC0iwe;4Yxt@4`){#x+c(q9bz=incM zZ=HV?HcLFy0Pow2gcpY5vM|C*qn7{y=V3rjCl)<^3d;Ley9-+NBGL! zwp=Y0=LsMK{R7Qucu~1cVx|X2e`5J1g+KMGpgq^ylRJj8ndc)Q%lQ-zzS3O93H0Ll6DZbEjVlK}e* zGH*s6j5IR*Mc3eQvwqCh20IQ$N zHexg98vgbn{#~V0K|I@KSZiq7$4vM;gr}nTO*(4w&%sEt zsD)>sn*VQb)&>ezf_@_e+6RDNfy?|0C{IvYGT31sX#Cq`e-(DW|Zv*JaZS568jP!^g2iRmC-t{E9yU?30={TgNSbC+sKc8mZG1?9$K@Uuq!0+E)v z4!3YH#y@J5MmU%og8AoQk8=q_X$1>jgExG66~C6Q(zaa{Fa-;pZf69et7BCsC;i+?mjEEvAOfE4N!S_9kL zL4D2TSmJj)9hnGqj>JGF!TcPz{jQ9W@hreld8iy;1`H{$MAHcL0WnB8NXXAj`Uz#? zPa_yb;hfW8I)}AlL|1_q&I^+pP9r;9kcslS0OTn&I~t{_sY znJVHF1I5;@uy!X{_qc4s#~g-BLQjIiKQ*?=?DnC9 zV1EVHL6>d#UZ%?(LJgp>z_M|P&xWrPvJox|y$aPXp!Rh+Dn)6;;drPP`omoonspZ# z3i1|U&iyPYztGqd_ECc0Omt}1sUtBSZL&IQlI|!%X;?ksOD-qvexM`MTarJRBSTkL=;hR9K z9kR}c0RQwKe=tEM>l+DSvt!oRNa9zZ-mN(q{F`28c~%4h{PTiJ-UxgG2ZFo>=(nG_ z@)PYm72~p%l|k6gV)irl<@>Ya zl@A$!4s&3(3NK`b5dN7BXMq}i3YzCY219lhyNsdfQehZ|)7g&t%z;o-OsSp;HGa&7 z+Emq9xo1+gOsP&X(%CpW{{cePj_LxX3DxIPRaL6xiB#F_i}pZhw-XQDu2uQBFk3lX z?5cJzb|MRz^ys=m_zkiZ+5yC@0Z|l^4oI8L1*F$i(~R=pV_kiY&$(<~$H+#GDA0 z#h(Z>vKVk!D&XKBdNWx+3~`cVB;v4C#KA!FNtbOz5ph^5;xJzZ^&OXE;Wuf~2l7$3 zRLH?4@q?-C7()(Ag&cI&WV9pcVjLI&*=&yZxd6i(h!%}BOyLM!iTS*D@y_4a{e>G%tEOV+A5F|%noLuBHhZBqc@Utaj?g^5kD0U&UL=LVvBEWjm z0bM=m2qaB90?Ct({BVIg=_q7dx!j1UmKsZLslL2=luRZcDqle+f78hbv!VJVF8&wL zL%7V_z_9KhS9*A#YNo#hAqMplTuCC*N`0!8_5q9SMA$|)n@4+w#r!jc=el(3K3bMG z>Qil$PXvBc+OaC^BDPVVYNPbiyusz;QQZRl9JbN5{(@UUuZ2Ld4vQJgF;+Dtf9)6+ zhf#fonaQx&Uz9ljU*RzI{Sp>`3Sl-RQLqXrEBW@Tu$caYaq;g)CW%N`>{nqihl>81 zeJ>0cCA8>IgvIpJls{YP%1Qb7%NP~U1nmk{rp1LJ2)soy8X|xlR+ZLqaXMOqw zA}yVH4+moHnP&CgLpi6zbaV?cU}Q2X4&{Z( z4Ts4NNmP6x$kS-{EQnfTaZ{NMsi=572#dkKF;zsO;*g4p`R8=+b=fK^4yma4Z=h~= zIo8FrEm3huMa6G|^`VE&s5qpe;;+H_ugg|ZaY#kQnXtsCS$tMeaY#kQ-9Y7lrg9@G zN+S-bsQ46@g=e=LOb2=Mvyl9PP63o70dY8+&G>!bQ36JkZE0}FiFK#hB=uE z6f=Q!ltA$tO0nnZv70hkkJaM4Ds(%Pf*Bk1a#;r*cDi-0ac*dI4to8)-n>q5{FEFMmgTF-{YqY z;+e_Al9eVA*d%t0A`EF}=OFuR^OvC3X-@GLN_Pu# zDZ^}V$tFF-qeW)B4S;!-7^SK;`MKZGURu+i0ZBg|qDGiS5#9o&K!4PJ=|P~Tz8SK# z7vOKXm1LkP2*>EaX6Vn8W;mSGdx5uo6UPEviY&a;wV|X1rLy6l22NT14;vHd2n*v8 z2(NXTojOkrCmMEun#M5g4T#`5h%-zxyLF}$*6K+{geCkLgjPAKWlSC)vw?$BvZ~Rs zHbMOvb%?R!6LKsNGcoW_oo%$CBC=HFo z*KdKFjjT|k=vnYHvX_I>RR;0Q(lD1JWzQwEy}&@Qqm|h~5Vh-)Stf|ucFBwjqV`=f zI|>q)jhD<$f~cLB%+7+St(VO55aYX{SRm`pHaG;xF-zdZncN5$s!2MPynTRMW}_!Ft4H8@U*RgKF`E zVcrWa!|FoQGOrA(c_ml;>{Rx#oL2_bypo=p-@ANN3v*V?AYpA*0mC-#khF8>l^kyS z;W8zIJs77P$9gftj8n3TG9N>cgwv^>rQ(!}AwA30uqr7m8P8H-3f)}>c3rASPqCop zmFB(R8INcIR=1JEFeOWcDR}hhXd|wdT`4J`EVV4N8^pbu5!pgd)x`1}mug9VFpPl^ z;LT4$fMwxljRje`L83u&vt(iy$_=A&=5b<&?G9<+R-UunkqJ)Nk_lj_o%K3IX28sq zxXc`|unp@LgtOn#5dp*EyTQ8GWvA?V{0-F2F2|Ze+sV5g{DIUD zJ?x}ikFUY{uggx^^~i*!TwLOF%C1K@Q2VEtmxU7R3ey4J{LFcfMHLj< zY(RcGTP!m@e>Pjw|A6NcF!I?Gu5I@a3lhXTaWNP(C41>q@#k9H5_ufdO)keO*H4vS z%>a)9;VrN~N)?HS1vLZwO0(p7GW>L{H@6BRkqnL#eK;G8L@~PK%eQ+@HvB_2=xmU( zeHkk7;qPYzPQq7z3E_JK3bM<{{yT2B0Fx&*P#pR%%;8BL1JaeauEu4OZ$u~=D741n z>qbpA0+jSqVgNe_2C{zu@+__l#=991FJZi!)jmhEFmNV3wPM);4h{hh>3#+QrQ@LK z{w|!Hxj~v{L+KoluW)`Yt^g!{%!WZDkhMs5fSLQiiNjY4kK7^9A3S;9JR?$^MfZHG zH(X*w*?vz2=PX>}+E~~y3Mf1RPF{&`>v%OK?x9Ux3u-2{xF#FrQ-33n)wsk&A#56j z6iNfM4&S?uQzp7<6VHH}Ni8wKq2mQ0Z{iXY1+ZxpQfL;SgZSR+m_W=UAG5*8fC*}e z3D!v_D22Gh#BCrL1r*}W#PRsP$uTiRn-~ddCbh%_TU-^88Mws6Oc11+`~@+orUELQ zh{CVM_oQg7p;>`+FK<)HrC**oc_ZHnA$C>F?dSY+hy1IJoD zt;01&sRAb%#+P_NIggqJ3!%h3ic>azZgCnN&yDc&J5*fw5fsxTt0=@}*-{8b9t2@1 zHO#ap0b1?yzQ7lL+19YmN#~ymuu8&QQ4U)f^Y9Q@rJaN{X#aL2;$t>+pb8s|aTOX2tNcW?zRX0Gp8-BU;XL*19_Qd( zUXMrsZp9u3Uk-0rvP{iA)r)aS1zCRuWTZ>IT63qB=?}Uv2gBe8YB5nm3%=ik^euppT?1oQPsSiSz zF{Jr>+$=8JC?|a-Jh~xe4O)4sgrDj7)FL%o_DL?=@bl<~Pc2fP3o1{yIi{gvWHFTS zsYPl!X5vpB8;e~TBg#<5rxvMAZUrQ%8o`ZF2vI9UC`gBW%&CuPOsotHz6-)#P8~f2 zIzMKE50xr=rCf;OIW+D}4=kZE?5kx@T{zz`2TM`04djT|VIB@T#W8h(7@{ezMJ1b( zO>VP`R?d^cC=OmiIk&NB?Ig`v;zV(&a$*vO>9A^fPojmz5-o2cT;}JLeAV)fL5t&u z5pVXp?C^u3lYxiTB2MN-An^~G1WpF#tn7^ zZUK|6N?G6m5+!ivAxGdbFlEVAoE%AkoIT)~{ew@U#JL9ef!41F+b20qI|ntHG`D z{3P@`pa`hG3fi}LA^f&s~mNC(;GCife&D^dhlyh{4G7j z>gq|@oC^#=&i#C(x%9KSSY>4uaDL1NKA=nBU`B3xuE zYh~aUy~QpJ6g!&&>=OP1(Qk{C2lY%IAG0Bb$Fr4z>TN11}^O*c45HJPN*3&uREIERmw=3T}rZMXsR)x3!f#1FJZNK>Sq^qECe5P z)O%=kb~qmOalOSR)Z2yq?7OBxW}c&&XuIr-k~GH$`yh*Fb`^uGtFktu{fsFRAv~tx zaOimu{Osu-hvMi0RRW9z_%R#8=vTBk-|9P-2Kz#xe}C!nRYJBF ztFM@63{0bzZ}pm`(aVfM5mnQ(vp$66;B2?)mas62AXmz!bTUr5AhZ_}6(8yImpsG^j7Nl4bvzA{*i8n@)0j zcF$h{xYp4+S9|`wtHs40rqF?%bumH!cbp%pWs|LkrWpBUjF8#RjZaZC3|9G{KqqW&RO2>oMGn5Cc_bp?DqeD{(Exl_Zk9 zP|RNC*Dl-0a2ASbj*)5~dA#{#Y4}D|AtKW!aSQO~ zXXgBbA}TlwQe2*?{ClBN6o`fRfKe~TVhI=A4f1T%s$r&|fcyq>vX`JHVm^uo@_e_0 z_CIJapf!KTr=WSf(a&V0H!g6+I_JMrRWm&h7FD=43sCyd-QC#hCiMA3+KB(Ip ztbs1uNIs}r3F=u14mZ)AgSt~dmCYV;C^PAx?jkL31UW_rcnea@&usaL%Hen%7pg`F zmcfY_jtj}tU}aoOtT2rSDN~LM@i@;1H2n*3tQy=@Hl5=_D?s>$Y57s7wQA*@h-;_N22MdLg%;;3Fm@6-W4%2IT3SC3(az=O3?`N9Djg10YZM}(NCy@ z8t@}(2#csFv5f1Gc$+{MALd7=00MQ*OL<# zPP=!(H~?ac%doh`q6#Qfl9mqjn?WeV)d`pADiPn~G~GVb7ZwJC#k1YYwC^4~F`+J@ zNf2O%b-w0g-$~K*G&TNCqD>OU`qSl#wuUs8!+wA_KV9|{%6Ss`4#%?ycdSPq z*dKK=0$1Xzv#jY%22{>9S~Hg2DCotWf zAd@|TS(tVgzMTCfQj7x|}PhhGw8HTOHaES%g z6PRjErV3QPQKxK+-v#UmOtmIM!UC|baYc+Q_5`L{lBsp6PEQ~so9YQiMN z3^nAn=XyjCePRLEBf<0uU+B<%BsdLkP|QnDAfT4{^=_m}9}c5SJMQN4*n*gYEK8$Q+Qb zaak7MFH$A%90I^wg9hKRYe*GIJ_N89to1Hi4K>aofEPgBnc#4!aSj3O0rhju$x1o| z@U5oeJSN}(Z+`k6WVV7tJF|oJV125C9Sg#RxXf?K zNvDcWI#_*Rl?=zPj#>n5cGl7got#oKGnhM1FK?MI#{3TV0XaeD>~6AJ6NCU zV7~zMW6i;a8{iDp!IqO3Ai+QbvmJ)h*+~YZmmLm? zGjW;QaI;>>!P{e1 z_wPr+fPBn`cHA$##rd;RiT%P7)^gVx@ZKv`b6t)H{Fn{*fEs!VncM*xtRMH{I2P<4 zW{GorDq%aweHK!?oMDiY6n@MG4sS`ivwE{4g1N;?cao7a2f9rV`ZumzHxZ)`^`1lq z@-aa?;{@eV4`mcqJAj%;EheAOsyPvqfsR}vS7(4Ksqb=J&1VH)25NyLn^<(K@yPbQ z((o7Nv2M9Ek^c&S`ylfD@yeMZ?aX7YVvESm!j1@lS3q6k$X=pl-)|**7i7N$^;Adp zA}t$2a}eiUyE!LAmVe#311>2ma*TcyY(!a&z;|!QOi~$unnx{`RfJvbWk6cLdBs1& zE6J&Il#pdt&i&HXZ(iNkN|vJn-`#2*%Dm#0&EeSnKB%AKl5B8ZYxJieH;Mg-c3N)| z=TSqVp>z3oAsRY>Dkx7xLvPXuKHN-nKc}Lhc9G*%fzt2;pvv*8Kzo6K;CNM_gCOd7 zRiI1|b-XGN7epPe3Um}CF2}0^odi+Gs{)+`QOBzS<)Md=%uu6iIDZp>CvbJ+4ack0 zv@lDJ+d*A)2p1Pj5vc{mC=@HlM7aq;k>@mtIg~-iFG8Vp|U0 zhSb4ZPW!_UFnPpOCGF$ETTEei@U|3GcA4g_2{sSjhSb5^6F?o6%I?mCw;^@#mZ_OM zDLvhlF^=KE+mJeVE9`4E%LuY;j&&Az3H#}Kh8(;N=kTp+Id~h+FX7ALJa`)}2+;@+ z-i8YWR0nUvMS`eL|7fX&BCK!jLYoAu8prcIA@a7 z!P}l7@HLfTsUmXlHXN6Ox7;&0-({nKyOtHmnZb?gpR3yGnI1Wh7}yFp~#w!|LE|04xzg zQrTwG^SP^p0Hb66eI$yv*`3BI7xV`VwCvJHx<5FDHahVI*Xft`@ z)~8O~E_A8NA6i4%Gu-x-=TbF8PEJPhF2Ud;CnqBXnU}&}BSJ<*ot%6Yf-lh0WgNFS z3abjk5u6=>7l80F*#Aluk&}}Vb#l^#u@Ek?V6?-@$%wp=R}31%AZ2+GEz7~lh&nhq z6s(b{>_Q7|E20ig($NcCHcIqXI8Y+zCesS0f<6KKQuo~Cau67xn3BDoJU2O+#ihJeluHs@4O*jH3O> zL7F}{Nk`)_)fJcWjm48D@8b;x?Ical+(HlH@+%c=Q_7}f#|YAlpSK_heilW5l^PI; zj0`zske)jM%|m`5BHig$)el6Z7p7ebPS}#e26J zSuWKQMI*Qb>G%oz2?dzR0HKVfpcQ50{2EVmlx3mLN@nDR$qh%y&QND1AB4_dXqQJG ztu?r*%x0)};T`~i=j7f@6_K-&8R}iQCa}J6*@pZ=M2317&Vn)zq$=AyFs05);&^o> zJmAsOo*wr7Xo(r>UAW<3jdI!QtYn6I7j6QmlMP z(q*B=EP%^?-U2M8fS~ID1*ui?Itp!rmCYtpfvzV?z=*zp+uBn1nB+$g{0x^V>Bu2R zOC6K^j&`6X9BZ_Gh%9wX@*EI4fPGA=NG21t)G^89H0uGR32St%m|JE3oE-YvyJHjq zek?O5MAtgPVw56Ad(y|?S_%s{(MnhFEbewG-eE+ZcZ1G@UW&)V1Q_dZ%ghU%0Axdl zt}q~j`i5AC48WP}L^sCzTsFBWC4ZiogRgxw22Ev9#vK_8r0?y^XWw5C z>KYoNMHMf2?m%YiOE=e{TY+tm)8QUi~ut_fTr1(4K(~S@HI&0 zW#V=!wJrfk;I7;(*8jbJPM=R4s zg=?(eVS3J4#kx{FM~PX*S2Tjp66c%nX0-TYWmXYXvx*4cybLMWFwY1&vx*4czYIFFiU?o8#9qWhNOvd}3rbnPY`i_&oK>jz z#zQizkfq?zk!BTAI?3z5RmfrLtU^R&R^hDwrp_wzo%LTCJCbJ=N1jkzfaaJfOPt-J zJWVtKO_8O#0+)Fy5H+wXk-kwLyrRe&u>Yh*rh(#E=@Vs3qsTU}dGJVCVYxUWYR*BC zyLLAv5WkInmlbeW|+$@LEN-E|-%2I4jZX#-O!y`zKlFfMEVRLd5QIngkV7;8m z?#0PXL``mJ&fE(=w-UvK(VLT-h??98o9n5HWdvDIeVoY+VLx4$SN`H@Ik(~Y5A8zQ zY566005&3vjI@Ffjf5lD7-@w9W`y`wVOo(Ou@K)XOe+>7FT}$IY3TGu`kyXaO>WZEs%mzRfZ)$RrrY1KtLEvuy zC_B$kMv|5UGZ=`bsmaaFt`LSBo&)pqB{FAn)1K0PQUk1rfIu{pnB4TkXjI6_P2zRJ ztq|RdYacGNimg&+W@g8e$(CU^LI)29SkSYAccC?S`kpmZ^mp zmz`~AyWt<;@Wp?XZ1OvYUxNA{&5@s=a^5-QhN6-;f+s@4&s&hD1I$%`sQMv{bo8f) zC7RKn=;%M6`&o$o`MQ;J#Mp`cxn0OTM3XOiSbPaf<G< zO_pXbL(V44L0XnwY-f|@JPV+HZ}tHN-0S<*pR4K_Oo zQC1?!yDaj`u*)`*cUfKlb*JXYHny|N!q z$Tmxc+GhDBSamMjkj-q&X}Fnv52&0oiK3CgZ5B*txS7ot$CSB$0D}K9eEE3`(C2`l z?*VEjn=6?y!uO$PkXc8#1NT<;!cK@gE15ajtVOl6lBsr9+CetXo+F4vpOr3GYPB~$IIEC%&Pmt)bYI%kuq_EkvW%tAR} z6mefABc8>KrN4@<%k<|rgY6^iFSIt`>lNVg$_5!m#w+BMSgY~1hlYfTvkHKNgyqfF za8}+{L=vG%c)+s?GB+clR6j79r50{Ff!Pa}`8;DyzGS4TH%l$tyb3}E*j1?_vT&27 z7H+12^)r`k6k}x~OTF^C1jH3C!(uF}R&KJ?%1r}U52doRxpI@GR&MC&(=Ho1`VVr{ zPF8NB1&yFT4St!sa?=FD7ZjHK$?uCw?caekqshN68dd8yMNsaHOXRH<)T+vLRIS_4 z*AsA!N)?gcQHrW{8_qMPYxV;$pnjAis#k63;t8Ow7XWUgJr)Y?S`MEK5_Y2w+i zg1D(X$JE*df9tmo*nEF1NkrBzVruQ;EU?aV*=p?~rq(WIfx5uuNVlQZE@Eo!;zqD; z^{}~i5mRdy4}$fG%T{X_F|~HF8Px3w4%aSXYVG1ZP(O7!Dn%*9m|DB|kIO>Kc^4(> z=Pkfe3J98y+_sZti|lNcBTu?S2{_9ZWe?%;tlR?8OOg0K|qn^HyO_kFU}vc+ARCGE!u(yJoQt^;{FbhChq22CIiB#={NarMA_ z9Rzd_099C*6t=|cKrMIz0uf)_*^`Zv()iLiM(2zEEc`5jAdBsIZt?OAbs3OKTqRtfhyXYN%M3Y18Jt3O;xa=Xjd$WQLm44s z7`I`p+-yJN!XU%Vz(i!k&s&x{mY>5{6Nd8D1kRXha9IS59KIHD9AAqddUt}(*DQ|b zYZjzGo}lxkh#`C_g7gSG|rkJ-=ws;oY|1Q9Ielvl&>V43n+t7o4yvs@+dHzjYB zH-dd!ItL_c_2pf#QzT7w^|UVdi53M;!m2ihv_C-eaa>Xp``M3mV`5*!z+3p<-fBbp zLr}X@i@T;>pMu6dAm89hGC?8!1^8mL`iEPY=mctaYSBb4qp}g8wBD*d3slLqiLqH^ z8Dn1oYU_RGYhBp_6q?9#Vsa;_S2^kTcM8XB*yPHNLoOkkx5(&NAQPxC)tE1@6HcS;!g@lsvHL!i&)pHN3U(23^}wBA(H`k#Y!1KD5U=CC=fH`TQME>Isx zW#@5PZ>niM&6#`(pL1o5d`|04HLVx+yP9Q0`T#Ca)A}&s@NV29Oj`Y7kS}L0@*3pa z-j`oe&3s1}83nWxj$UIF637THMpk`AAtJFL=k>l~LGprZ9KLqxG+h+ryxvzLNNFMG z^*%MPH~D@pXG#{AJk)PG7Rh0IHL>S!RhqYf|GQKfnc4f)%${#$ZgAOZX75uo`oB_KEc_@&8{ZE9xkQ!{%WuS)~bBdsRKJ~gxN0Df;R!*ky1*tz^(kWbC*PXU#y z8OjdVYNRezg2kNK`_#mq|_EI0*anZbO7 znU4}_KzZ5E0#@meWn|KWQ6J*=?{0Wp@!2PL2sKPYw=4%c`1^L&>dNfFkT{KMSUAn@ z3gm2sOe{_7u9Po#lq;YbxW+hL(ntT5mg@+d>j(rE8E0fE?O79Xg$`j3NYe+?YQ&jw6Z)ZZnK9;>_R@L=klc zM;Ucg#+gBdk+|zmKxc6Of4`?r-CMU_cYyi-Kfjmsd-s0NsZ-mjQ>T_&_oyBV{+$#vW3J80 z#S}ARk-gbr_yByHv?r8xG=*B;%(<=`Rp{lMW}@9B-GB zYd*!6-1!n;OB~-^+NyaF{IuHPMR9ae4F8Q=*x>w;ff1OnCMzFF;-)^D&g{aJ>70v_ z<>xuA7G7_i3Wwo0Q0RQ7t@soGnG%KV{649^?c}55(5NW$Gkj$&*|VK|8s|?*{-1>G z+0J(Z{ZN_=;~3jcipzWkUte%M(R9yt3Ym}Mh;$^DMs0>?JM&CbiRsTX{+T;ApBa^M zh2oEq)mgmB)n=c8j%F4DSdG67AI!?)A6#lNcXh?9KsNv~+^@uk#XX)jkx`%hSIXE6 z8lT%0dX#%Juv|m&di>l3^sSDfW%M1A8;kG4PdsxjkxLQIxs~Lm;>+nI`dP4J>5luE{YI2X> zitZVo`D($=CV{E4DVKxrGSg@CK`{PVR3E2kh!FM@Cm}8PB<@)Q-Lv;8oa}h3<$6K; zM5MM3{=jB{w;W*&2?u(X!|Tl$8Ec#T9)Tj&XoV%avR(2anQ|Z!(Pyx z5_IZx8}#DFf6@RaYk=ioFMJe2rb~8iJAm00P0l7|5whesd)p{#gw+_8>!fh>l+i8~9G3)dq);)%d&% z)#$i-TC^EKkAf-t4tz;cp9QjbAj&LgAQMhi1K|;*;Q{=XG%;9DQN<{G*(Ikz=&-82dCn0f=VST>MK^SPk!Te4g+L zpg+K$oMD>%5Gzwsl9R^?*-ZWbs0P0tM_z*4#|h_xL?b5Ts4jk-@Z-SR>*B`=dE1fa zt1u zD`*HA>&jKbQKq$)xreVnp$n0}_v6=DoW3~9P6mg#u50jn41eWo@fB5g`&CWgGUe_j ziEbp~gE^pO`wD0a6U%l1>YpE~xBFa;lAEax+IImu|LkcpA) zZ@^!M+nAN?`Dboy>yc-9{u#wRgul-@3DF|YJtH;qt(X*vbE0}9L(W>JsgB97W%RSR z4qb;wh8s5Ip;7~f=nprYg==i@MQ*b#a+4{(1;hGmtK4MU7$m#oCb+AcP)A#-27Hhv zD!iUt%ZpcoatVMzP=;e_{=ip=Y#9=vB^M-gxv3jM$p7ykf7h`@1qobf+N#w50p<5GHUGs{i0&=E8%d)tHV1!J zG}9mD&t=T(if@6^Q8lX8WP+2SdF61YB zPVow)>=uNSfw)J$fJxg{Tm-IrLH>9k{7$4PdqMGy2>m6H9uLU>#JDdh{uQ|RRKu^* zbk9wpnC7iS>hq^Ssaur-UjQ9xRqM&EEy( zcubu&FftxxcNhOjslNv$hxj!|f6kg1DwdSm21-XvU0TnI*qi+p;(aC2H8CmD2O0IL z!@560XKGo6`jnbJhB))@A-E~u%*E~&Hneu`V z8~4o22v?7a@2j(9;}6Y_>JrE6zme=XVu1AUzpAnQbe8 zC1sm=R6B_4I)2r%ZW^ftjl6ATslOg~E2G&mNH&Gn7qOaJ%u`2j5MJg!5KD9`qY}Nz zOthMOM#s;OfchBzGH*txEKe)3Rc`F~nWs%22l*Fi78yR9dXAoR;Hbf$2#E4;24w8u zc`ndpj-ovj2hYY1p4WqPPMTcc;2CFDaPZ7p<3{gSrCDU`Z2YmaabxFN7DFAs8d(I5 zyz1mY+03ZtwG`C@pv>jh&Zu4=7ut%NZ22Idn%tEaB4&IVE(JE*Vh=lPFR%p`Yrn|y ziAbJzDU(l=PEG4ahX3dv^!cRnseLB=Z_wUDlEwCZ7-Yp=LmXorf6?R zqj^-(S($Gj{H@(qYG*8!kHh;?+pmIVc0P?5v$tK`{u*fX$@XT4h;2*6;s|!MkHQKF zI7`KDm83GU+{ECEoq7uuK2xx=MxrJ*w;vjAWw^Ft)AXe{@NGfhX*VMoKeo2zwms7* z>L;TYsAwjN|7f+Kl%UevR9I zU2Qpki%yWA%pE)l&C3nAd7?pYVJYxE>In0hXUly?n)}>oeMs*q`wjf*+r1c^AaI@2cWu&-h88k5=*iV-+uZ;Nw6)RK@#j z6)*ep<~q2(RlM_nO1Z@8rQ@&x=x*hmAE%dx%B6YfgK!~orSc}e`RfASns>t3UNX}v z^xnwOxp_Z$e!0PxN)qzZ6NS8BS{#yI)3?F%sj86APZV<7^f)BvdAXnAbyXoNK>eIa zYR{Pwhoqm!Bm1^hg&dhE8cu{qS|*c|+A~)kQ(b891A^YaVSM9|tyc?Z?2fPXo@4 zmFBHszyUb^Z7yI3pUS))EbqskG<)h{)Wc8(H2Z(V?-?p{Ni6d#K${tg&3?fLf&Uyg z)l+Q01uEJ74OoPCFD_L#NoRx!WCeoQt4mf{C*VlG0xQ=#?2Z z@AYUD=GOS%BS%kh`NKlmI%(p{w^0IqSQTpj6h?5v)b)C3@ND?qLgNN~%O{T(82 z<1+;Jf$;Z^7-cU*?abp-l3xJ!r360{tR2tc{@eKbUX1(iG|l`nhV2r<6j^x9Gtq{5 zGMr*>;O0t9knhM7;mk*3OCpp>_hPEi&xE>c=C&*rnFIn&| z;38_i6yGZ#=~nzMQPbUML!pakks#2h=n8Nq}mw*A=$HNmfD#mSqQIT%4f*DK&GLBDxS%CflPA~*Zd;Gc>%oqi#Hj= zd4Wu;++=4lNJi!bPC=2%^w1^-$#Y&HW9J3717N}T<1ZuB9Onfxc3vPpV8&87vd`Fg z0X|v%P8TLCDamnYpRw}-_kzTERuO5*c?oUj1<22poNqdoNG26Bc3yzgpMk=~I877B z#~C{>P((eq;LnO?`lB2N$Qe5?umq%XK;{TJW9J1nfwUtabBLU=^8&j;;&QexoMYsS zofo(nq(2MD93*G#yukZFx-TGel$^2i0-ptmOFF)A4wEx>Uf@ZPev&53d`QO53oxfS z=r%2nEftv#$=G=TQaeCdnouRzc3yx~p2xr?at$k)w(|m{@{Kuz303lJ=LJaRwB}6- zRkCd71xURel=mi7$+4XmAob&*Jd{u+!**VP)Ng|FpD}eh=LPU|DCY%8eGZgg$J9LM z1u}MCfK)!P&ed?6qgKufWbC}aD}b(uDR_cHUYb>4~!riO02Wz z9kj>rC2KgQFU~45>BewOU(_+Z;h4UtV|p2l7wu@ADV~N%+wdo8vZL{$ z9gTMa?TslbBpY@#p5ZXf9x%h4M0t+Ki*`KDvY5x=699FG@uJpSpJfw{~w{iuXp_^IJnfvG97(2Kln(FLn3(2X?m+Md;3 z#4S&d$qeEvyB}Y+7P9udi7@~?j#Z9NOIYN|Fg>h&GsxTVClaDnd@>9xR^&x*SNI`r zYxq?lQe^B!-p)P%E3z!#atO7tAKl1QUPM!w(y49xL3=O$J^=2&!C&UB><4FFh2wps zdKWb^bbiJ)_~tVZe1(_rWZywXQKS6K`nQ1mZU8?4S)O>H7|W6q0kg7Cf~6MGH{s95 zlKTV_VpLbN#Ml z*Y5~y#NW0QUu3v^SDI7$8iu8)@f#3(4ZkFFMY&=%+ouw8O}zdxSf^4UN^Nef?p=WS z@Ob8j6f@r~)qNDuryQKUixn+2F4a8-{97^YL!`CSmT;+#Y5f`go{#AgR_I)+Bb{%| z;a)X~GArRbxm5QtO3D~6)#X~6Uxu=VYkuayxe!- z3fI`FIX+~~n5J-a$HO(E8b(#*)JF}!7Tyoz^QE;Y1AK5VAKmTz zfWnZYa03n7dJL~GQ_?G9(q^FYQU|{8hvUr#T1r0ZaJ>#vo{V`9r+Ifq4Yap!2fAK) zPmOu+PV-{&il+N-fqnvik}t*>Eh6J9k(vL*@3p7f3~i3ZJPov&p_sHNF2$cjM@qDajB63y7W`IJOm7?=rwp1IN<^@?yb?FB!k>uP z2OwHcCO(gT3x2DgM}G&f&q@VTxZhoUfx3zIpj{ubvZ-KURfw_Sm-%~&zsp92S zL5jDQUg;E=pu3cJK`fV31s*R-jsERApw+W(XIJskQyv0ZJ?l1B#Y>-?+vso5G<3vi zxU-6vW15G6?o-}GH~+bcmqVl<0liRp;Sb6ubH{&I@pAk&4QjAPdD~*%1wd2f(6kJ^ zoj}*&PpXq8A8jBb=WTZ4w|d^DnITw}(aWJf9ATeZK~I~Eu%iZ9<3I);1i)iXI0I!@0TZo&V;4kwBs(8KdPR~vS zg=+Lll_ zmz1}!MC}CH8&l-q?Yw;@Do5E?QeZ!v z+}}JSZprNuGq%^-UN^O zpGR%0J>;0XH<_{$WbC)s+o6w#a-`;0>~fa!?2 zg9@0i$RiFl_7R6(kWO)A`-nr0eZ+yz&9I|LN!qXJjOw=_MDj}H8vBUDYXI;FYa0#o zqlM3t*=p<~4tIn8(U^zlhiCZ}$s-Om_7R6KfG#WVlH8@_5n&RcoXl2ZA947x6NGBG z5z*zd;MG06v&fw%T3{s!;V;AI%k3#` z#vW3z$Dv8FsHe*6O9>iCn1?RGMsoT}UAx5@|hK*0$wRS>$X{sBJ z{1f2E7{NS7+vbKNoUr(jgR@*twloe$cxst}BngsTO`2?1;BcfHce6oT9MdJN&^a6- z{bbNK#dHb3io=mJDJdgQZD(7WXW`BcN3wP}ay5d`Wwa?>O?#QO!x3jMnZ?XI!E$HJ zHk$(y9KXZ!a4}#d2M;a#Ow1s|k*pn#aG?DiN6AuZG=syDtR0RJ;9;&d0g<7wJk7A7 zc`mT~DDYO#k)K8WJeds3wzI@bdFZjgtGQG(X1OcMpNpTexVt>ktilHk^LWsZbt^}e zb@REuqCGB`ri_1Ceno{5^2*mOxSvaq=FL*`b0J~gR&*Ex`kq9{kq=Iq<&67Qg%iJ{ zfn5?0DSKRf;=^%>-vX6)+~*hpePZhCY_z!QXVW$S6<+Qo0PlPpnj|gjw%zk_Xp+6W zGHPI#@JjGjKTXFu0Fm%AurRhp_N6?_^+x>3QUKEtwUhCA^w;ml?<4BEE{_v^FVJR& zqKFtFAsA4KlqdANQv6XNKd&1Ex6iKZUfrPP?BPLE6d1- zKM`?1)748Rdde5zx7t%~W(Wq4Zop`auGRE4Xkm$K^|vSxeip#kxX;@bqVoCJFdo)8 z9biscxt+>v;wW!lu0+G~J}8|%;_u_oivPi=Za=sW;V;9T4^jPDo6d~tUIF|RV)f^4 z!iJ3xf|a+~`t4_498Gzx-sbDi*nED}uvwW)^L`IPu5r$j3gntHHT4(}=9*>m;+6Ad z)w#8X3;35K?LUCXpD~ubj9Fe~HkB_j`y=kewPK30%t$o#X@r^fNf75i30C4ylA9eN z2W3Umn91DCHzMxSK<4H~o1^J8wYk|XJ)pp+ItRR0g19GU$n&tV+??9m@xv$hZcHeA zS6gmwE#KDmcA)P{D15tHZeA_l@5Y1sIpb)f%X4uV=Wn*-=TV??e3KMyp@g#NsGE&+ zFi*!p{0W0e?&bAKvvZ3YZ$k-R3t$0MU={vsDF{n}E|EQe ziX3Nw%6*NN<24i_9CnOPjy<4W9dkT~rffOv*;3?qBdGG=q9mjh?ZI-aXykkO$niJe zcp#R+^8_u&%EmjDr>m}6BV-wsF_KL_>KF~{i;VP)6@tjIwRs||lPFH+r- z7kf|^IVzxTh&gVFW3i`gk>g@e`(uu`#~ju_BnLe_S+|hf@{q@A z(7E`_B;*cnTQOskt&Qs)Pqe_>S1jZUVp5d*Dl;;2) za1<$W`$a|0ioWN06jau_l-xr0`fBbdPnQz!Hu(&GZU_CIm}fra@GHvGbI4kk@*&Xw zHRf4F0?WfjC{N91txNe|jtNE2E$xPWmA)u$5tC<#=2$RA)0cR5OS2Zcx-<>xm46@p&^;O{`@kxdeXWf8lJ)cqHWuPIs%>bLMG{*@#| z3O{dMT)I^}mC1&e^5R!Ci-n)J=Xr^j$BZ*_u(fYm4u4#>5SQ$eAV+P> zQOTdFa%0=*#@;ml`5hq7Qw04I))Mv zv~j<|O&+BzBJxO9)Iz2LG?UvKf2!{7!B_-OtF2=w5%Dl`wE+l^%@q-RtY(dDY?9`* zmh6upCkOFcy|Jl|VIioF%OCRSU}j2`E1letJ*944-R9Ol^oAJsZpI35&P2I}lRGk& zkVO`8xJq3|i8Qk)s;fJ-F2@P2=FH-T*1B6Wb+_TYJoDS;H)mRkP4J$Jt(jb@uI}VI z3dkT(3Be)0CX?CR%KO?5#KSjP)~(K*HVbhH=h9geaQe*aXORap5J;U6Hn%bjQ+k*x z4``T{St_hihUpd`P&43*JP#Ti*5c`d{_E8617CB;!cC(pWgBD^(ktNa~1>ow7 zX=+50<04@NHiX)EU~ZX%66mW#KG3PyDpy^g?5RmbPfI0bt`y|-)sfVk zXh}!&dMNRXP#-PccFn53`*ML4JXCt(2xW-nt*S>4Rs&h@b z&Z~N9%JpeIf}W;}m9-NWRYRI)i#(<_Ru{5uq*jYnu@9j1oEG31xm?3~X*Mkr1%@6= zLlYz6irAWysnrDA{-%XyW%@*%|Jy1-X{Al9XK!3BbWEfDWt%H`1s%sifL(DU@Fii6F&j!CcOgdXGWS3)~wZ< zlpVJwMzzMe6HXx9T35GitlK$B-Of$wc3wJ4TPyRYWu%XhHtqQ+9kxc=#dcza!uk^! z$l)^XM9_h(&XijZG&qy>YV;{Dr3Itdzj2sILScEuBqN z2)(G-c&9u!H2^V@zMD8s=pLNPHKgnU3k&w2+S-oZ7k9pO3C(=mkhXPXq*G5EIv9Lt zMpDBGWokO7v}V&hYX+4{7rCmF58AF{rrLmxMYPk_2+T_5#;X5pTVi5~l4M{{rb`~( zfH|vCG(GC+vYs)EZ_A4966YAPzsQ`@(eC;Lc-3j!>AWiI&%`-*7LnP2*7=3vNSIno zGe>0EWA$2YSntjyD|xC{XEm=TU8uE5SyH=MBpGZ!~hTU)U~2*)L{{kD!o9L%@h7@)WcY-I(y0SVk{@eat?8zd_c-htR5vC(rJtBg6)#z5Mq?Le!ob8K?+zW$_KBU4@c1*;3i*mS4I zoL*I1U(UD6)gGd6lsjs~b50p;vCFA}{glbHEU0V0^#xUJ+pLT|F~&`~-qyoz4qFX; zcXF<)bN!vQv#p8RT6cH?pZ)r2uVZ|0wRb6N6)wOZyg97+1E9kRH4akV@hdXD5&d0uHlIn%Y= zSxJX8n+6!I&Gi*?Twj5)ebQj9D!|9`p^1!WI*(p`dQ&`cRk>!C4y0-jTd5ZqekD3k zTh%TD%WCba7PU;WOkh{73dZv~c}zTY%u$0)8ZCCv)>4Yw*41TM!&P&yB z%()a(C11uiVk)RV^P_#u^mJbnIN+OGeG^U*!N4sf&vNQ8+o?kv5|Q#q?C>nmM2fbP zLMcLAm-7+_ zugmoKmb)&7)as5Tt)sqTpTN!cMfz%-7`wP+CK@DG>$8`N>VBp^X$n)S`?R3z&>T#z z%ji1NLNHtDW*0djX=fLu(}+h4GGA%O%TwJ50~X6S8q|=Q z-IyJE?BXw++)-fCg2~)Dp@nuWYc5OJT6$kIv#{IrIom^>4?K8leVOW)Ix}e%eX&=; z+K!i`+woGb!bNGqh6*+IJ^GNmyeD$KKh^pqs`iScK?Qz3`yS?Im0t%8w>oT2oz7SH z8(kN;VyBhC%4sg!iBv-HrM0%W^Dwb%=eiLTT^#+39#qE-(D@BwG-78YCMT0LUZq*@ zFZ9gg9wcdxsR=u06(*kkPgiKFZLoR8Ih2W;#6!kRhh4>)p6GN{FAz8S(EL{o;Ai*+q5^$*PDQ{pj>vFz)tO3|LNa`O2!n$sJQpvGcBc&n#9B63bzo)^=BR zRId)+oZOK=rDH0G<a8iU@%7_4y(lO|xTTNmkrBE&k!QeWrTY}2oD{aF#Ybdvnu^2F`e^Uc!p?i2Nx zse(W)1ua-&jrHp#Ou(lTpK5^(FVLh}KqqkeR7E;U?4%m0Ki1&N`iL8LS+zy~iE{VH z8F;fsI888lTd$sybMs{~da^CrPPfJ?>s8b22^ut~%#dO(=+1G*X0BCex8&CmVa<;V zm%8W|H2!umDji0;XwHC0D|Y%Q^ROp(w4Bm0(>CXYVHdwB39n%qh)uEH`K~G+@o;{Wc(Mjr)1!_lERa$_dRZ`V6L;DkU1-|{!6%@BB7u3D2 z-8j0$4!*$pt%h(*H}ldXmDH{gt23#U6=y+YCC^Q7>Uy3tOn%9xR`%Gwu(p>t&x=tj zaeA;-BrRcL7bmXw6U;1IbK-3-NVH96lvDkCvgFs%x~_V3pLjQPcPAL2SiKh$6V6vn zwml^7pW~LSvjh|`UAfl{app5_MYbDi3RONC7 zaqRCk1voRl|HP(%gKO++OIICej16xhFXN}ed!_<|3?kHlYGdx=BlQGL$2LztPleEj z@ch+k3%?A?%Bfo2RpoWzwYF8(#eIN3Z)O{jO#05Cl36{+G61^)JD=TJyHD?u8ad*^)G84TZs$Ck&gE(VIPf?|6y*QvFv4X}tz)%4qZNiIko zpUArW$v~d$9k<7r+m&H=9$-o>9Q`j04T_t`gE9BL=cM`htw&ribx}DzR5iC|yDpg; z_8W7`53-|t&kDKK8Z<3Gkb_sGVHX9)5ol`AiaIXa*cOcDgUSg;52?txnjW`JtC^|6 zzwIYeLkZVUV%CiY!EgETdb@38R%J16NVj*U31@*M@nUy#$dhX3nqj;A){t6$b8CS* zV;;AlLfDNIC#z_#vOCq4;!IF5UFnb!_!e zKuPk~77$9c!K6*XR7cbwHz&X>P2ucZ#bM=3u?M@m(WKuY`8yrI?r4CKw&C z#I~c_uSy%K&@TAHX=fss$rm^K8f)>SD=HJ(8Zo`PUC~8~X;^1y?bhdxnbOYUz0aNn z(Tx^C1D?pPBn>B+D~U}qd@(U69W~xm&n(*nf^l@Zy|Zq0q9jg8TpsF#P1LIAI<1)( zcB1NbVQw_uwFv9r>xpgM9h0^01=S5|VOafslfj_cGp^D-Pq1y#n#aI$q}-fI95a^C z|JU`G>eje2-5SM+BnHBIW1hR`=T{7hYrS1;wB@AHR>CRJswrD*fnhw7?$dU|z3Ez- zc>2M%)W9?FoP2NFvDTR#OvuPN=?*|ABMT^%jiHLH3lOA(svkI8X= z%*d>Et^rKch+~b0*WkO$p&fA!m9}cOyZE6iJHXdfmbk50wZfcQwSu=wTknWaI>~N# zoABBL=m>34JELZ+y2Gg7`j$*b#*(d15o}`n??E9uGjv=Lx-EqW9U8t^5^wAO6_ECKCPj@QPS$h8pO~_q(e}&%vLGRfx`I)Y-nZ^qRDK(ckp6`FXH$`Uzg6VFd7G2}^gJv7-CAE^_#>KL zobV{0u)T)m^VdQC|1r2%G4YSphc}@(ZGF18f?t8h+4%`y@nO;A+m_eo2VHpgCSM-0 z!%z66dnhk_-G~j9d|Ul~%RVRHy}$DAge7$~f_Ssh5KdOI`EhS0;`zS(ywvoB$8YWn zUdV)s-3E%V+zB4F%-%xmJYIx#m_>QFT{Yv4xnQSR0 z-&TKqhVH)+DeDb>Mf>biz#k1^+!$daPr-7gx8syvpGoS ziLH#78JjR-9Oq$=$z|lQcQygF=iw?Nr6gBOMV6=KX5_fsH{mMB({XdR6Z;^)Oas#B z`oY}Xj9GrntctSv%+5l4HjBuG!BtdlVaCiqW)}JkI017xWH{e0*O)QWo+CryX?$mo z;VZY(WD570rKg&y6H{iLYC0b@Ee!Rn>0+>*3|2U1vW1(?lEWtVoSA`_2n9mx3V&-d zr7kn`gu&|$gQ?fFEI0Mv$JI2m_*7H>9EPG0hY0vHZi-t?=F_HTrO2DT?L^5jl-DKo zbPbA-_0-3roK!(B1633x{|WNRS5hlxDN4_IvN$Tw6rVG-_nFLtX6317%5$c8pJ~Bu zsnc|vYHA)dnZr^quhpn8oh<5!Rix%I^2^tY(T>ANoAa7;Q!}QibQ}rE9GBd`T9dGG zvLr~i&D_UL#5_e_`I6{GFMm!<8jEwdbMv5Q&zkywGnwqNRx^E@DIw#}ndN9U&!H^d zEAjLAVV3@%P8PpdiO0aT1{`c9ObeX>Itp=`8lT4?O_e?j=&NQ0?sK4#kQwXqk4=-leuoQx@bippBrVzSn9dNY^FM6Za%oanwDX7^GvyUR?0DJZp? z*|3h2UY%}g&@VI}Hs){5Y|7t*!>HIkT1+hr*gOj@tASPE!v)b!H{we%#F9 z50tdDfP#9u7e!XOjCsz?Bsy;DhfT{CQ_mD;o-tECLWT`prV)nzi)LPzse2G9X@zBw z0-FoUgQgxezty~mYw0ULs}1(VeI;KZm~y9TUPpbFK0&UeW8nMivhs3!=@afD%ir6q3&!UQtCS>`4uiIzM_%7x0z$;%bt^sysj2XsP1|023E%W@*` zQai&F`j@sdbaOH6QKlR-bH;6tlru#n)J;6FM=Cr>TZtwk%>)LuzSLoAzi+aK{Sa>I zCbtOIs4#AF>t8U4o88H+M0fn4$-Y-~3q5iPDR5Ig>|n)|+sG`@&HK>KBV_Jo8`5^o zZW2g{(g@I1)@WA4(s9#__VH8G zn!A2A4rqr)9m5L>@Uz}DZ6zPCt$ThaE^|BSN29yl#&Fs1o5s#W7|mwpNm0`*J&l}L zsQjH!cN!-QVjeb4i0!zkKb0L9Q=WOc&|X+=d+BSTP3%pshki|{wldfBJ#aY(jcOY^ zXAS>}yNoC&T`~-gpqzry=`!qbaGX1?=#7c5mZKvk!<;OKIk_K$fR={xo5-Ka3gspE zQ@I!8;^n2KyXiU({f0_AP45;nbT5miaIZN_ejhg%^7m15rTy8*AGl&>TH#dDv2lY} zq1R;>x0+^>vI|#aaIp`|Jqy#=VOmrZo-|WQL{I)NS-gZbb4$*a{T(QW3Co_x zTShEVt{%j6Onsik$5KyBM;?RlC@%z7LXNc~HDOp2uxncWhSnudJCmmqU0}r& zSSJNmWkD*2E_UWc6sfSd`Nv#)#&ng|n?9CF=}zZRT66OPw&bOn3u_78OeULm1KNlk z0I4_brZs8NJ)#jMaC53`-n9>kcb@~Ei@%N9{j^Ws=fLy#BAdb-ETQ9cWz z7rz{~Al*ngJ+e&cUYUZ(qW9Z^dzUK?Y)GSB4{6;>tHlh9m0?SQ`C%AlondS&+dS?i za&5WGa(z?=Y^Vfw98pqu)Qr*4wKny zrspn#yH@%lI`EaHM|H^Z-_Z6KcCBOMmv2Qw%dk=52O-> zN*(XzNTc|)X?Z<5gRSUTu94pvM@{n{dS)1lPbqDX(ZgPTBjDK>o|i6T_uG1@nYzc+ z!iC*uYW8vt1BDN#4c9aN+05L-VL&mvw3TqpU8VtyxY(+UHFqmAWh<><3rOp22bSAE zZU-_LFXW~lgZq7-Y1_t9FG9XV-Ox!{OFK>HxHChCe z3xs4Y7gK!rCDuG&{b6ffu2%C_x+*uvnd``y)~C(9TgB0MF-ieXpeE~i5#UHW> zxy>NhKHe<>aRLG69a@9Ip>^Un+X)Y(X4v!~BN)Fl?xmlFmV=p%%zdk&!v~qzCYM;g zZ-t3HW3t2|Ue7ry@TFZ=OZXCpjNI}aFq!|G`a;*rt&HRrqZp2{#kL(ai;h|+I4j!e z7OU{gB<8Hl@;iN^Te-@0X3Vl@%_^O5vLW3vR;~y0O}`W$2X$UzogbCyE6i^2E_)PT zxx#u(8mq5w!@Fg#T;BxYr8hZoc(+WJTQA|8;bAlGo6Jf4xzxseQyljZKVxo5E%#Zp zUnKq|1$OIixqq~Q>D?tcpK{`u-C|wtOaF_Q-O66>s}sfiBFfAy1?Ijnk$@LSx?4BQ z{U-v?I%ekGYnH4xt6~eq9?-3w<-QG`IWSU~$y{%G_Bbm>9=E=j`_AM%Zp|_GzGlrrYTfIR5D1YL6Q6RkoOXX`7k33O`#7CcN@T z&GfCfInPY9Snc9BC|(EXwZJ!+NC_GmDQJ88SX=YM*0D3(uNd0e%0p%gl1H6ADQ)Aj#q_7jmjEx5KoqfJJbE>O4W1 zrK)g(zh?XEFsn0S3ZG&AMcKF5anDiHh)%w=RU$|FXBYZi55Ud|9XKZuvq!C`yG1%D z^w{eF=C=rEo>OY3Kz|aW{UUyfm{@DPz@Yc;Kmo6Z_}fhTQL`BHeeiOpA_+F5&!rYvax0%@w_;CFSDY zkK^%h*sd*7t>8pmuusb$vSGHmFc`kWur}RkT1&Sv;sWAnDqO}~SPEnN!N?iC1nX%4gAm_W&Xnp&3IW168&SbD>h zCWAd|T5h)0dd$>qHSNT5*Fwr7k;eY4?oqA|oix*AA2w|}&D6`0(oWL`?-KK&rLDPo zR297CdbrBj(rGq#?RHH2tZDib!1Ju4w;PUsFtB0yXV=pi&Hk#IA2rsABG_ZH4^0}b z@Js2JnSc%35q+mdf2zsBlpi&@Z}B_(gKFt7H8sts21xqSi%N=g6K)0Z#V#@5$ljfk zcp148m(Xo%;NY}I*NL*Iv6`&g05R2=Ew&21nVC+V9S~`gPAIyW0nQ50JCa#}`dgU{ z`W#t$MmZVd%TkySIAY1t56RMH%F-E;sYRK+v2N^%90qY0+}?`ZvW%GtlY7)G+$pvl zQ&BZpx6>lmC2s7J@r2|yUF6E}Gme>)j#?7?1GoPo_e9E$tK1jtRU};}>{Eop?b^tF z7qQGeW)|FQPFio)*xo`o+&+%n_t;lF>L&EXl-cEXcr;x*vjupp62NWr$UTh!?T_Lm zwrF{e+oAt4T`)J@HUOqnC!6fbq4Cya-L4Q$OU_EQmeF$d6r33HH2pt7&@PburQ0$w37d>-F7a5t z_Je2z85u{!LkMZen5Y9msPSxOo+JG{5;obS>mTtA4YF_AWClY1}l@4jy(xZ0i2Rz(L zHHav*ifw94T8?NnJvx;H%wy)Z=XKZK)Q61Ple1Nx*A`!1TI5s+tWQ>kQR}Bwd zHM(a{G&Z#NP_%pa(7}Q6!F^HxW#_Lub98L<@c8h7p)-3nUAXn4{^)|kLx+dJc;}YlkH&8^T32czA4V2x-_iG_YH8J8A>R zara&~JT$V~MwVpH1;1)|WF*4tg8NxARxehpsC50`)(opIdYX+AHVM4P&B@8 z_z<+8iWVJGolI*{539~s!XpU0I!-{8sJ3KV)XLR*Tn+%F1d{eA*&IEPWYe+OQgQk4 zvYsyW%HB~M)-O93FRS;ueku7NGptyI(`Jw+_PGM^bDL^%XdQ8uTnYiO$-Ahv!pY~S zjLE$)$$d0>5KSMZY6BS=-iaF?$NudDL)VT+i5-eYhWAt%r#=*o*tL{gSeSk-Gs#?B zPtZCs20LK$m34k@T^rUy5q=2{qElmFAKt0 zvHU&uXN~*Ji_S}-Wr>vO&1Pd)YTsy8QwiK>aj@r zd-seSKC}-KRJ$U%Czn%YG0cftc>+YuTyx(yG`x4;c(h;p;&SDpaVXy2U5EGV85--x z`!+WXO3)PU0yBpxf>Yj!2q+M-+F+Oq#IXW^h0;dadd{~s&2Sl5E;8kG|7>Tru{UNYptCXKFMby^^#zn8A zkx{sl@)c{Hm;mHs6wd86V=&GAjugQ~5HHCW1oMV=H#XkxxY{Y8|FWK;1G`5qj5(u& zqriv8Xb@nq2IJ0P{rbq28bWo0Tkpc0b_YRLA(!AL$B{e5vQ9!oE#hFAs?>PHH^c!9Mq8Twk_>l?l zOJQ4i-TQ{F^|B=iwC-s-AlM|LZp0YygT(x--2vmVYxLT_tJIooipGY<4~V+;oCDXc z595T9(Yn8#*}b$_H4IZW%Ax%ttnMi6gQpMk$XBTt_Jy!U=c9 zjp{~G?T$u<2HY>mX(aRqL%d{Zb4)iVmV%qZnw@_x*OAh>)_~NF(QGRG=iAQQeYPiVazt<1_&t`u7FutmQ70Okc5bC zun>i4FK_$oRJWJ}J&R?}q2cR?pb-c5 z!iN!~ICl6TjpC8vLD9(W9h=WwH+-mn|G**Wj`fs?c{$*1@4(0i9iB*jqc{LlMEaUN zqhq^<8UD}+v`@sL(>;W?XRpEM977~sDuLmoSZr7)%H>SS(kOyDI5;ewj_8M%P^aEb zg3zUYZjkngGzf%9wc?!w|JLbQ7^k&*l1lhdeHdoDDdg#a{g_9(4U0k&%XnB&4$;t)(2is60ve)Jf z%_nIVQt&JTOsVd+wIDS(X=$&E6>XDfy3?n)03|b<_C@d&_E{H4+O}&IplGEy^Ck_v zD=BXzSY(KJ$J}eh+SZ23b~xr@Y->xhS?&^La*C+2dF7cH9B1)PT*TINPojN(E(VVb zCdufFg~#!wQf94~7IxZ$fH9E#ak@zT4QufACLRF$E-LaF;}YryXSygWA*oy7W1d-# z`K&*XP8Zs{*us>+zzvKAh;H7nW8i@8IHt|Gp3C2avOSr$lTH=VSD>3Ezs z6Aubp#4*sl{mhG{UB-wPU5s^~yJ_d9=ms}fWyXD1$4T`u7qyQ`SzL7P_LrZr@gi#s zylDg{BpDO0qfywyA(d69I63~%ItIJX*nECEC*5alIx~$R0aCWGT$sC(`g3`*^^_Xz z2f1_wbAwD%h>s@)k(yF)*^ZOd=kl9QiSWhwt13{Zo$1=W3UfnI=f2VXL!IN-z^;!B zRWPgAdCB>kU$*JOi#A_;Y3B|sJ8ZuwTHU#SU~nInZ8|Z3xOyV_E`muK= zae&h??2|bk@(u2VA36rf1DHp|&+w>BY~hNOK~h`;#ih$iC&FNshywJ=quCrtx@^Wf zM=@v0X&Lgz*9;*eVEc`sp-s0P6?1Y7<7mXm;URux{Kn)6UDD!(wn5c%U)_ndl(9~Z z3M|fB86-$BAxd_cd>M5J?kZU`E*WqboN9{V57QmPno5#rD^f(18~Y4~!zD-#@Fh?u zBqp2o&bY9B(8~4^tu{dCoO$NS?aQ#%xjbCXik4yBnCr*<6y1>p@5>k6GipkmK7)G*?CUvCSdx$lGE#Jp&P^}6=j2{dbkDzCQFM>B%`CcS*ya`818dWZ z?&-7@QN>S%d$j5AvlC`LE~03MAId!o^X@5LA-acpDoN3M>2wd?%qzO5Z01Gte3|YU zhwl`M?xBc9>9o4N?8kFOx4hq$@D|;U_<7M2zFfCm^MPq64pnqJnU)mY4(GW=x1D)j z(d}LCE4p3CeMPsQxUcAT2lo}-R^Ps&+qc_SbenMdif%V;U(s!ionLetU>6kKmZSwm zx0!W8(QR2>P;?tpXQdU*Z4K)vy6t0)(OrH4xV<{>%6VCIyRzDfZU@%1qT6saz3BE= zbxfEzw=Zfz(d~a)TXY+n)_Q8>_9yig-NvKFqT6V+IjvA`7s)#^FA&~sa9QptS)!z; z`1y9bEUxhC-R=B1SacgXdWvq##ySK(!3SGQqI~qsA48TY0uU!h@|hu*z;DD6f8M9f z;c510q2d87N0LN{7aLzvA3g^m`2F`;kxCs>9Ge1DA0F~S{@-rD@aaF|6yG1<+Z4Ypz+a~L>jV5s#cvDnS1JCU z03TQUo&di=@dpC@O^Sauz~8R;V*&nN#s59P|3>lS0sesE&jk3xivK>qxu=WuQj<;B z*W-#$3-G5D?+EapD!wYf|3~q40ghc-67Qw}pQ88$0X|dl%L9C&;==*X&9Tha;Q(K! z_)P(Rmg2Vr_;$r_5Ae$r|6qU*DgMy_KdAUa0sbe7e=)${p!hcf{5Hj(3h+A=|5>Sfd5kQ^8(x&+Dvq5fY*va z%|t^1K27nf1H4`F*97z&S@K-ASvjE?x_^$(eTyaxK z*ZYl%HwXAz6`vd6?^JwwfPX;o-T=Q}@r?ogDaFqV@JAKDG{C>1_)vg9src0a{!_(Y z6X4G){-yxW%lRpp=r01iN%6Y_e2(Jx1^6<>KN;XXihm)%PgneF0lrP~ZwL5J#eWpw zyA}UcfFD#mgO>sLpI0kBCBWaP_^bebyW)!j{4T}I0e-LI8v^_jif<0^&ntdOfPYo- zfdGF(@%;h*L&dKP@Lwwa`T&pQ?3PS)TY%Rq{+1>$DE?G{zf$p^1^7P2e;wfCikq5rz2B&KbAZ29@woy1PQ{l8 z_y-j44eieDYzKUMrS0sg$=Zwl~yjqR8JBEXvz zzdOL^D1KjnFH`)J0p6qd7Xtir#lIHd+Z6wHfbUfNM*+TD@m~e_LB%t*>3V;);!^_r zjf&3-@V6_zIKb~xyd2>7D!w7WKcV>M0ROz=mjw7%6(0!jClucw;6GISx&Z&B;;#?z zNY0Rl{SWYZ#orU)GZnulz!xe0K!A5C{@DOuulQpDey-yG9^e-%emuahRQ#C$A5r}G z0e-FGHFaryc%9kw{JV-j6yQHsys;sjo?j|HE5QG#_^JS}m4&5D zv^v0>6z>c0HpRCE_!7m>3-FbSZx8TZ!E;gj8R_(|Q~dM*KV9)H7pD2Q2;LAqaiH06 z?$M>dCt63lO8BeS*N!MIZj&eJCdJdSM$uappXu@P@-G!{5AgRXzAV7+Q@ks{KcRSE zfPW77MEUyWB=}Dz!JnA~|HCABZNtRzPMZW@FbRGVa2^@FU*9D)UGsOT;x{WU<_om3 zN#wkG68!a(;I~bJzh@HMrSs499ZD{p9|Awq{{h8aI=?)LoNr8mJNf0sRuvMOsd~%DGH&Cui*>a?Y3p zck-C*)7b?CJcypACZoCK=_`n>= z=e4+9fOz8#6^h@gc)XQG@eha`_6t@HeNlcsg4>R$F50JfyP#2Y3^?=kE`4X+Un%}| z;EXrfPGkxHrThnH-~yjD7LI0#a6ti;bM#hU~C zRFxBNO|tCK`O5F!P~rNS-O3+t(Ng{+ipP7+6o0eI`Ki`RyW)2PZ;oJWZo~yXkJ{`- zf2DHbjZ4b^amC~PZHhk%ocaB`4T^{QcD~AYJKBbo|8n4LM?Jy5k!v*l z(VyG&yLuT?Ic|^Jc`|PsMX%L(<856kf2YcM@@-a*)#fPrbLEe>#VP;&DnD$$4=aDX z3rqRGu6VpnOz|J6oE=)8=PUjj;7zEPhvW8T2{m{dCd)r;@6!~2<1AY*cnPC?mMDIw z%Ac?JX^MYH+t&)kcPRd^io5b00N#N~j&p-{eU&hmUx z--T-TQAN=b#h+F`;XNAQbj97av<-^yRQ%bcHr}5qezoFmYaHK_!_OOlvwpuE)bG0m z&qOc$6`0H=NURgkYs zfwSCh)px-<{T~6|fkm6=_uKk%a*l}nTy&+5gD%x{-l6itdielw<}2PXs{F@*Gv0dD z|8~W{ru^~7QN^E9{cc03+Uj4u)mH$S?|6`6#&p#;sHkF_30JVho18<68L?5>GqU_O!lt0Orx%~bG z_?gaR6SWm|kK)NLVT(VY_#>xV`OfZr4mj=1SA+KZP2f!bZ`6;vMbr6xl@o5K{f+Xw zcVxM3wo{Q{rZd?;Zv`z;JhV%_z*#S!59;Mq#UBaqEx?&h_uj_cn$Am<|EmH2WrCwn z?@#OD6~LL!cn`D68B_Ug-@23kR^^YM5K#ViDIVtcUd59Q`ZmBZ#X~>vUw|`Tp+EUF zaMsu7gZg@2<;0uSH9hsSEdRFx{w2UE-#sYt|0w?o;2rS#?^1qXoubJAt!2Ayt{PF&NjpgNv$B!Z?egHVj|96^S=hwYS@!zOlw^sSz zrMP?e#@Vq4Ret=GfbxG$@zAgMzRH=Z;|}L9{kP(s!8ogk-R{(%_>l{h-==u{?1JK} z6;GZAvV;wa$B%O;{|?3Dhc*-+1kUntZ_(VO`0IhQ-F+iyNACgNfl*OY&|W^Ga(=4) zGP-a1JPMroil3TL{F{o0diykR+QV-*q}$hzfOEX|aNvhbL5D*5p?&U9Jbv^@<6WzG zn4YtMvm8Rd{pE_g=WRx0ek`D{WU_r}9HT@SVUrqMB%#mRq}~=R+$0IUSF< z@%YD8PS~$~PWe{`e$;;`eumB`yjQ}U@-{{8Ig}JsIz8s9l=PG_} z#n#K0RL<#&|Lbat|5o-NN6}S^->-h=YUO{O;+L(p{I5{_4&WVl_U+NY-rfV8_1>=I z^h=fhOTbz0@xw)me^=!{tmD3075|0epV$7qSMdxAyd$cQ-Wcd}3vkL$9>1~y76YfA z+^>4RUgd02JRGlesy%;F=MylsCZD~^?;c}1Rpq<}IO7fdt~V)v`~aTvzfJi=JA9Yo z@q={A|M!Z=kANx8!&t}04ZV`=WIT+8a{j5#&a&J zhR-~A>qVFN5pH44O#MYC<)|156lf>4O#MYC<)|=eMxM6No;*dY<)>=eMxM6No;*dY<)>=eMxNVlGxTIv8_vDTbIPP zE{Sbj65F~YwslEt>yp^kC9##elIY4^Nqpt5B*Jo65@We5iL%_4#98i2A}x0%v6j1% zXvYV+>||gQ}zr_*|Ruh&*YRnn^X3TPT8|MWzX!C zJ-bu(3{Tm!JY~=Hls(&1_KZ*2vp!|d{FFWWQ}zr{*|R`p&jgh{8&vj;P}#FWWzP(i zJv&tP3{ly$L}kwul|5Tj_KZ>4vqojl9F;wLRQ3!~*|SJx&m@&Sn^g9UQrWXgWzQ^? zJ-bx)3{%;&Ol8kBl|9>3_KZ{6vrc8tJe58BRQ3#1*|Sh(&qS3y8&&p{Z3HR~64*RXlrD@$6N_ zvsV?*UR6AMRq^aq#j{rx&t6qLdsXr5RmHPc70+H(JbP8~>{Z3HR~64*RXlrD@$6N_ zvsV?*UR6AMRq^aq#j{rx&t6qLdsXr5RmHPc70+H(JbP8~>{Z3HR~64*RXlrD@$6N_ zvsV?*UhNv)eVq;gaHw^1wVLP1=q=8)JcKtq;9$P7(Y<2>`}=Vq42}xqFv5OgFac%( z>_DJ@4~UU`D~*7q*|P)Xd-b+Tv=_1BuOD^+3E*MkgFJN_BNPlG2CrI;GkCqDXL$4w zM^|IJuIkEmfx3E~b3B5IFB zN=_>p9869)!nHeb2$!johHaXY&K8n z18gB~;tB|k0mW&$?y&so6UZTi(FO;#`p0R;1$m~HwSPphsMldwS)|23Vn5L*jlesd zQS#;=o|ism9|2+&)fkz=3C@A^jw7wAayjn3zyFMjaPauW8!x=LUtV@0T0Mcv{J*7L z&2AJ&5FRN~6mEHfWRXBZiWtR;i6SHph+X1H#wK{ZD5s4#IJRLOTbO`2fRGa9N6Lja zaHJ^8fde;I)m7C!lZKb_elDlnVPIj9$ac_fPR{!JmPOaGo^blHc*A;Z)A5R zGO^596tINJB8@g!Xvh>eo=Ov{IJ*UEEGt0pze5kmI+m6Hw2iKRD1MHQ1TdOLA zhfPBc{uhl=HNh$nvFXbok=f>RTjU-)G-!t7=~Fon*JDl@+UcyLV^V>W!UX;qo};Y(74zTRcF$etFPC7T6qOX{I(RAKg^^Fy$iCJN69zEL!gvT zJkF_8vbuz;q9K97hvX#c0H)dQ^YEz47I;LLn8KAyHY-5rNnIb|{UPVv;ySais9`Iv zHPBdAjKlvEKT1vvV(krJ=+am&KSAV6;p~KqfwwQqk%WA<<)l|pWF-TI;hkGuUm1#x zWs@C;(KvjvkRt9sX<3F54Vz(4ab~4jIFEqdQhGx9g-glWxWi4T)xlGpK#YWRdaOpd zg@tPwko^AcbWuB%IFM|_$k|A@0Guv}UwFI%JhoeoL{Vjpp)3~PGIBl78fkDSucu29 z1of^;t@a}D1F*_!YF(%zyQhGGdDeK=ysLSn9FDN+5GB4{q-=*Fa0~#d_Yxl`t^1>7}=6nG{U_w)Fj=y}s8L!CZ30XFdv@C;4=f zmr6j$8&fG;SACgqdYF6oj7+Y*yb5l(IAWfh3b&W#8Kq_epXK3#-Ex|i{~_LPP4_0m z>EN>h)wwzOdW*g=e7T3~jS10S-1IvF!`|8?QO!6dWNuv3@Zge@8F#vAzu4Q|r3Dur zT>olox^qD6M6Z9)HX_-C8vMTL*{7Oi z$#d$(TXv80NxJ9yA&=jq_G}~bPuQSlay>ia^Z{K&dF)Soct>+!|043EUfi!1^4M?l z_nh)Og*^68znD}0$3haDHa;F%Ms#H~DqJ6--YdhZMdqnkbJBf76`3Ma@au umK**}0fqx{;RvO}b~UH|{o}dHKY1sncJ@@J?-8!QXw}Gn)F@-4MHR;N)%93RJx!vArV+X(4dmVD6FnEc12wq zHbiBSvVv;^ySuU)6*Xf}QCUGj^Lw6iX3o8LLU2FdKYt%D%*^|~&-=co&Y9C@vaD>> ziKbx)=VyxJ1i8Kj(MswDsH4>52qlP4Q4VHIx9x2`a$Z7? z-Mnu{qp3mGcDQp5f@`R0x-c+iw2)H;nw@ zK`c)f)vtu_6BzgJ@Okag{|2#|;=uFJ7FYaC>&pBZ?;F(K;eEr43x7V&9t>Of@rG-_ zyhw>-AWTu2M+5k&DSX3=iw|=NqWT@^f3kt0h1-6(t^B3v6g5MzJs`@Pc9dVyG-G7&oftM}|{_?Y}fNJ7JppnlmuuDs@pigm);kt~Fw4eLcso7NMW z_E`66+H2jcX`i)9(|&82rUTXjO$V(DH660f)pU|ITGPqaa80LJ12mm#b# zm8t2770`6LbtuV6ONRBGrZcV2HJxRBpy_PuHBGm&Uea`q^|YpQtp_!oXWg#peCv8m z7g*JrF0>YEy0vw&rrTH-Xu8N6qv@zMQq#rOv6^mc_0V)XtDUAxtQ<|Zw~{s8!DF&~#7h8cp}IF4J^x zYp$mISW`6J*E&nn{j5_o-QPN1(*vwNnjUC%)bt>$K+}V*u%?f-JenS29SA!4Fw|<) z^l{cFnm*ooN7JR&4owfUUexpn))Sf@Zr!Kp5!TI`F0)o?`b2A)rbk)}G+l08sOgie zb2WXkHCofBSi?0v${L{QQ>`wVKFuo9^k^$n(-l@g)2Ca9Fq^6FUc_dQH=3S}$q(EbD1akGCGw^x4+!nm)(6Ueo7V)ta7QE!6aR*2S7W-?~847g%F7 zJ<%Ge=}FeHnx1U+(DW3mou;Q+IhvkkC2M-R)r6TkDeTDU+ zrmwV~&~&wRpQcw>H*5MTYn7(2ww7u78f$^3S6UZpy2d(J(|@)`YkHM6T+`QD12kQ0 zbD#SpP1jiqHGPM5v8L~|F3|K{))-CSZH?6QJ=U?BzSruZ>HDm9 zn!ex4(ewjWvZmKsP3Q%wv_EM5sOg8SuQdIz^^vCkX6@AUBi1%eKWaUv>Bp=`H2t`B zm!_YvZqW2P>l#fzXwb}e%hL%>1V97H2th~il*0F$7}jItBpVXZ?Zno^h?$|n%->f(DWATMNMzDp3w9*>po5Y!@611 zFI%fLz1>=-=^fSrO}}DYsOf)N=W6;@YqX|cvxaN>b!&j8->|x9`c11y(>tw9P4BV- zntsbVgubTApSP{=H2seCxu)N>KG5`g)@z!6-+D>YA6QRo`a|nMP5;ZfUDN-zuGjQO zR<)*gTMIS)AM0XGe{5Z#=})XNny$A-YWh>_SWSOs_0aU^Ry$4av2ry1g_W%7FRdo@ zpjFzxvVPQbgY}iBE$bsqe{Jp5bfdLR(|fJwH2sbBh^D`_?$Y#k)(x88XI-P|?;9^y z5%{68N)bOc&Qiqw#wm*UZ{sSH!`_;}!99V}C{b(%4NAhZ;*1ak#NS z5x+KODB`!qkRqBI#o^P>IP1(|6~j&+cE+$V4l3hHsbGjnol2QnA3-)pW`2ven#-5 z>aCITrhhK|I&2iSzvz^R*tRZd`U~%RzHQh{)fe9L>}^;Ns$_FY+P4jlf?AiX@VhmB z6Y=_#@VDF6rGFW1VCH>!cf)dA)ulz`Gqu91>diQYA3aJt< z8i6t8wqLd#+Q03W{o$hJlrp2sYkn!O+4t>v+hWZ0?=-hpQ`5h($?Cn4@>*Z7vkdV9 zeQe^1rSe5PTx)%~0LU&UUpUPL29W1Yj@Uo+n87Nl&Q$?Jyf?ny$ssrKmryiijs?rIy^NjLU;||u$ zpTJA`Eh|TvK^v+*IQsHT>2DR>N|%UC)7x<9ge*Ol*HrC;+P?A~3{J&hRVloT+b3g! zi;Pr7FwQa;acO`Y2QmY3u3majRQ6H9F{}oa3W;B}xhf6rlzvS`uo0yUlUR7M7)7Pu znyPxo_f?z2D_Fn|&#+dN)t4VzcCac>3X#DVHZ?UhP67u^MaL$u+FY6HhzFI`SM7Ef z0KGsX7&~KlsgH{i9UhoQrpWY=KomhG!vS{JD*K{6iN z)YCTa{%cc{6fCj@ts!U}22InY>2)+G+nPTfhGq^lgH`DXKK~5>Rq$?6H8w%Ml?IDe zmDQC`c?H1T@`f%y@IB~#<;Je?`pBxX!?oo`&8dfR?~L`WJA!IW+1<+ZhQ>lVUp4M< z`INWA>&IrV3vYV6=6z<#IS7ZIDw=A>9Y&S?>*f`ktKQaS6pgFZ_40OEbt|>W^4GlQ*DWiO0kNH+kd=WSJ+h_OsYzoUcK}uu{f}SwGVX@XR%^)Wl#Fw)J>*t zN5ip*M);+&pALMe%HiM(tipD>pJDN{ipco9i=1S9%6j|#$#VO zQlcUlUmWe3l42G7j)t-$Maa|N`h8wKB=G1-R^&-4!bItbh znhzQ}+i`#lcglM-NGw^EE6%eAk1ZF>1gT22qv4<(AGX;}dk%{Pr@G-~UHKFx*)n?H zQPG!=itccu(VC@utC#NWSUCab9+hXJZ9MBV)nnLJAjGP&y?FAMjWUGFmrpR=s~QOP zEQ?DH?kYa;*i-oLDfA#S67vY6(TIC8%R5}=Uajw&Q&mX!AtY&vv|nE+Z_v38|FXjN z>2A)|P(Uo7v~644I5W3;b5LdQKI9@YxYoDI)*2QU!X>=7Ykl)thi0%n00)jsg z-mCW+NX%f0^g}DcP-W^Wg0d1wC-A7zzy;aD4iBGs^TmVrxxOS`9J_;P<~jAr^QhCzV$>plYGI z2g`Sq9Yo5JOXv!zC%`pu+`wpTq(EvaBv(qFqog+b4W)Wa|MsDWzH(Q)L^l z=@_O3ao@@+oe;!WWmm22f-$>q&{}L7X4_5XEuLUksO-*CcDrOHmT`U-c8RLrQ&O8f zUa3A1Q~fi8klBo=b!60PwjyVbqoTSaW;Anlzj78;&c?@_4OOaZV!5}N?wyps!W2mN z`+IBmp=R#cMk1~sP^Z@Svn)-StdCXBy%BStAMbvq%AmN=59##W8Vm52X8HdvCAHaC zssLBU0-UW>pNIwcFeExX2M@w-$JV$2|4aj!!V$3mWv(U^+!PgHClz2$EWpDm2@7HY z4vY`*nq~p!=>Wg(rL%N>vzqb)CAHZ*sZ;A)dlGLDnWd|w>UP{6a%A-k1Ca55I_B=e zX727&?jBO^&WgDkLICy~=n%hUb{)D=`>l@o4L9?9it@Wq`E4rK(cEL(%kB_r>vG%g z5bgJjnBV6pOvvvaDXGmKsr)_|^Lwr1xAF2;S0;b=pKooyd)O$-d}tf= z`|Z`o3Y_@vcjEh0%TYRmSQ*QSn;ns}h@Z1^f$W=?NNUdTn!>Bio!-B6EPx zf|@O||8JoG&s^HsuZ&|9e9Y}AzP1u=BliZ&vACkGl0R(sT4yD!#>Pr#b0JvHO%SDyOGh?Qj@ zuNqfhvujJeY2f6o*}AH1kFm?xTvK*fKAl!^2vmMcxv@38zU-5grV=7r9OaZ(Z#5M1 z@k%o`ri{kIp!%wDdoZe3RDDfF%8>$ef~($~yD5ysun@k^!j(_R+KNI%BD~)29KP+y zshnmj|J@NPH5U5` z!>YL4V~zU|x*x78jj&$rL;lIp;F)%hsBsuk^c-2pPn7NBy>ifa1(mKgh4sybsv8W6 zZYR3Wu9C(|vl=W!$Cm9|@*Jb6g320Hc6iC1HjOl(GZ}tjEAEXQW&2qujYGBP{k19V zXv+|dUE4)eA*ka(GFFY-YrLxKI^aNc*?v2a$e^Gf&Xvn+4o{PQZ-UqBP@n(L9((8N#BEBXmck`bRtU;cbFGmn^XfnA7(AZ zZio}RTIt&rI~BK3^SBi;Ze{UtJGF(lNf%9YafFzC7)gkk%x#R;F*pw_D}r}6g{M#bLWcuv?^DToYeeqWrZQT zA#z>LR#~w*T=N<0s(@fF`e6Uc9Gt?}-y*rz zmFH9+JSKeApKULw{-%CZzJ(UPae;DPY7D8b$|0Sg(gr2eSkX+pla_;yYB`pc+086{ z5U-|mJ4#3;xIbn*l`EB=6T>S`z@1io@Wk--ze%Djyy6O*xPGrB28UO?Arm+_eEq+r zWMJj-G8bN#oRbUeeN-Q8T{%VO!a8s|MxbTO@ERUn)><10ua_CY8C{hTj#f5OY%M>M z{WjW9|2_LM+9S!$!~c=?9UP=~ylQGuPP{|TKz3mqZa+gmY3L6(PTYw11|D9&i=s`= z#PGi{*i4DKgO73YI5Tc&|2$%FnAQL+=ABdWJ{tN((ndDgG0%IJuG zjyWkr^wj3T$}nfNb%n|OhRt==qvuuzz?VCvf?XFUA3cBvi(LWqKS}@t830$M;{%u` z0|>A97YoVG*YKrs6^dn=e`!}o+BzofbZIL`+U3&m4%vHQOZgz&(d2$Zn&IIaS5zt= z)&R3^w4;-#ATxDL)RpEFj^b{2PHj)+@20%ak;s!iq}kr5grT z2&1^?X_U`w4Cj6#_ATzb#>v!}(rqwT1eLB?BDNDF3%oa@!Glm*bot=+Z-{}@MZ`OH`IR`sV7F~qF?tSI!V z>IpxI20S6WdI%WU5yRtNL3V!Cv~w1c`$pfmTo{k(19yI5)$Oa5g~-frsTwzZ8{hFwkKy^(B>kWml*QUn4s|kXHB*iLVaqDpobE!k3VOHZlcA$m4J9 zJpMa&%_Ugug`mYW?{sT#lG-l+wQ6k080(dpac;{MM+=901rzi3l0I>Hd-w;Lw{mKt z)^|Q?8S8Lg+%k#X+Jto^*<_~nf*;JE*yF674YzWZ2lM{%?(c}XXP;Ph+wE$Yg-5u& zk^jTl*;`f)FA1-IcjcJ&=qc1d-0fVY(6Y&hC1iZWYgsEL zD~Ojp1lu8Fs@zZMh^>=F|0SIHj`MSZ3NOLW$x4>s=g9pKC)T;rLM}DfTQBV7aAz%g z1(>b681+;&?GIu}0r__h1dI{eUDSHJWcJ9+-qCOv9*OpCRoLF6N3D$*&DGeekhSGA)MOnqbZ5i9y$S7xd{Q=C z_ED_D+dF&W+7`6nn3-aHcOY`eFttL8QLWru5`Pyo^hxlfyq6@%w72cCqO^AjF%0x< zP<;oZY{p`_31xFZZx+2Qn-QP6%Vs$xwZ0d7sp@f+n*KSsT{K@?RK8VfO7{`vUc}sg z!Mc`E^u@~k1lxTF?Os;N+d1TRIoeibb?E)^9;wf8E~B zfcpm8I~wM2;Gg)kMG?g23$b90+9c-=_sI$CoelRi#+R$|UhA9PUFFsl%3*x@AumVU z=p@_-vG__`dk4ZQPEypok0_1#SBpB(U~&_7Fvz+tVAmgZxYKpIb#90>Uu2H(B!QZ0B=7xYPhH-a9e0%e%Un-3`!;*)4;YBif=(&Jm55j8t1p5ZdHigV$n_iW)^5F)_%c1-F(e?GDaxl|R48Ic{O z6FF3B!R8s2n$C$fh{g=YfKNCW!koX7Jj{OKcVmgV_UCLEeyKgx^}$~1I+W9H_}y+_ zC3A!mMvOw-wo|C<6YBbxouWvT+B>G@r>?GxnWpgN)i^%a#h1AFo-Tffi!XQaV_p12 z7eC9zFLLoKT>NSmU+3ZI3*zN?EL z=;BAX_zD+4!Nt#T@s%!qxr@Kn#oyxM?|1R*T>M5C|B8!$*TvVn_`NRvpo{mKiTN3E z@r5qFlZ)@`;!9opC>KB8#ZPtd^IZHA7r)ZQ-{|7+cJYt8_zf=pA1;2Ei{I_y8(jQ; z7cV@C`I+M4b6tFii|^^;hq(B17eCg;PjvCKT>K&zzrw|@cJXyC{vj9tjEmpw;$L_1 zAG-KGE`FbjKkVXz-o*UPa`90Y-_^wrbnzoxe1(gj;NoYv_(~VQ+{It(;%{;B_q+IY zE`Fnnf5pYW>*DKO{9YG-(8YVXeizrCMqGTMi|^#(`?~m27eC6yk9YA?UHm*3zr@9_ zbn!R3_`6;Fqb`1fi~om<-{s7xcFQbU*h6>y7(b3zTCx+b@3Bj z{45v0$i=U4@vB{Yor{0S#XsZXH@o=PUHpeGevgaa=i(2$_+TJ0f3sYC)Wvso@dI7_ z2p3=B;wQNH87{uk#V>d9*Sh#yT>Skmew~Zo=;B{-@$b6$dKbUf#UFI>-e6*WMqGTM zi|^#(`?~m27eC6yk9YA?UHm*3zr@9_bn!R3_`6;Fqb`1fi~om<-{sy7(b3zTCx+b@3Bj{45v0$i=U4@vB{Yor{0S#XsZXH@o=PUHpeG zevgaa=i(2$_+V0E{${!OsEhCF;s?6;5iY*M#ZPeYGhBS7i(l^IuXXXaxcK{B{5luE z(Z#>w;@@@g^)7y|i$Cb%y~&CB8FBH2F20kC@9W}AUHm8)KhDLU@8U0X@$+2#Vi$j< zi(lp9Z*=i@xcId${s|Yq!NqTJ@vpl0rhxNWcx(=URIlEB`u6KTVBnyhpLPt2OBPO> zU-_r1nRDk|(IrVtS}=9`g)=U?c-D<8&KK<#FPd`c1UOlG4`BsCylPS?HIh$K4!#;Bg;=dWz?bIAeVY} zg)|sS>gV$Z3QUhTxld1>catVhnL2H{7&UtMDbcbs&KP~h;ONx3Rg-5;i%y$UIc3KXH1$Ot(>-?67*PHqWU*vfz*x8pSGZCR^@TgZpTH3Oj|T>+LX#^ zQ;!pWnl^v#V67{N_7qd6O_@1+(kxppg?)RA$us9nn!nglR;rVG_2fS>cS@z!k46>N zueX>nZIPpoFqC*v?@6L+=A6p@eJ`kt&YlDXDepC~Z{Pj{`u6QPpwEDwgZlOB)xTFi zk)WpZ2KDaUr_X@iJ^S<@*st$^0sRK{91v5RIS0W>cio!n4HOIJ&Yl*vecHix)5RGp zSQQ_Ai)aloZ!V0P-STHAr`P03Q>RRtK5hE6X}zXSn>1A{m_2jWv{*h3pIfDj1fnK? z6~j(DY53sixH(QSFiz9v&##(SSsWd+ctPc~+0hx3W}$q#OMPr?mp|iAX9#0a#3)D! z1XmkE6hg}5Oe`(&P87q^B3GNkQ~fixLqlOhAf5_b`f%{kF?<5>@xZY`E@ppn3||8A zzD-R{v*U471@L?E>hMxi6Xr!@ey7CzGG5(*pB|5!qol&``7MXtpm@8=M8A`PpB0ar zXGn!Y$e7;SfIpak-}^s>o3y#9X<)qFg2Zs!0zV@jH&0CncP#K|JbrG>p80$YJnZXAsN z`3blxFye=CbVt7B#^YmR{tHpxIsk8}yoUg1zPA*=3BdD#w{$-)0lpvilk6xt`DY%~ z@vj5^HtPE`@$oaC(D+8+(^0N1g})p41mM_c8_T~FRr-Ff+}G|t`txcI^0jxo-`TNz zn*jL_uy3heECGHPcuVD02fP&iTgvy1z>hl$z8m;Fh^yl#Qk4wYT6rbZ+;~m{9d{${?pV{5O1e$6WKQz0(lDXmeM@|cvs*pmB$j`e@47o zYWM4a-wnK_eAx)R&1+3fx8kbPZQiK!Z8yZX06#MUR}DcSWQTFQ3B0BIpb+`_58(fo z`+(sdtv|62cuV*91jK72aK=%m>#SILFM)Ui@Rs6T2mEp1|Ce}A#0IpZm3JZVqm}m% z;72R(!N6O3E->Duz+2<0(>*?x?u`&1cNG7-fiwJ;^8GOIu}8sK-m{K^4*|a7DEI{6 zbw|OM0DtBvcpdQ9kAiOmzUL_TZs3Q3x71HLY~yW_4?2I(i{)=2`Vqguz9oDJaDn!> zC42&K^CKyPBF#Nx;>^kM^a&R|4m! z5Ve2LF|w_VLNpQhEpOo&m4KfqalpU(9Qp0vEsxiR!2ag9TfXln0Ivo9f4T4P{h;Oh zlHp#8c(v3nFx>gTvvJjVQlZMV5TYeGW&l50dv!kW;&}TBG5d{>kH9v_w()pez1G<1T_ zeAeH1ow&YnIq=7TAE_*(u$ck;KHx{HgLL_O{f#7Uccr4!kBXbG7y|JxAGVx-6M#pK zV!s6V$-w0do#TIMte({YpO5>erT*te;MZ1RSpe?~ALB_uN>%EP=QlcuVs#b-*hS z@1gPbi(>X0A)gKWNOh(V*lrwCT1dAS7}JhsRg64soLIZCrv8o@3m-ar&&&U~BIREn zwEe|A6;QKZMH*Hcj_^Cv-jCPc-jC;2aqLzPI&m@}WE9Wt?7f zbVSz7ISYlayT1n360X;f@bw3s?e$^uQ+P>x8TBN7)H>?Vn1gf&7J&9=7x25xB4v?i zMHj)8#Uh79O5hlH_2&l2L;_z>H%~HI0eqZD`16zLH8*e;%>4zDDNLn%e;dy-AoHMf z84hCw6wDe1l6(Sni^6Y0i!UeM0Qk;C6_4}~^^Ak~DI9!TMS2jPN8rKVF4z+iz9;^r zgUF0lryCd)UvLzj@2Fi8WQ+a_jwA?GOqd?KY;qv=>rG6HIpH$HB z4<$`+UZx@KN8EAWgUERRaWjgNuHpsT&+doJconBzBzE%N3^AofG>NYiv+pIPu{^vVWNuXC+L|4X>aBH4@?< zC^1XYw!!9QEfv1QNR*c+ALH$3vixL&hB*_e!C>G#+`MTwW(bjq%nFT$LZC3f(oO+y zyviID;V*y(()oe-q@^%3JZX0TNG0vbH1Vk*aUA%QXmKx2=A$^NOz>od`91h2A((_? z7LGU-kMxjjX2a2PKvz4k2)zdno}2(@=x@?e;cElh%ae}*`56sA*@7was)RR~!o(Gh z!pV%Jdl_Lb%hku4(0VV~G#_ix-FD+U8#I4LT{4=zHk0Pf6W&&7bZD-bD~cH1JOE}p zoTAS{kstOK#Z>+i{GN!b{7eCavQHpg@sAX=m1b*Zh;}UZIgq?-x4Zf|S$7$v5juSz zDkgMGSZi;Bbgiu`pX1V})O%OPYexDaku7hmHB-|Ui$XgAv_Tw5n3oa*`xq&`l_;e4Q4#7YW!bqxQaQRse#2c~zCd$nt-WtTMg_c39)*(?>cR0<&G@dWM09fax(3ue8rL$3W!EN)?_Y?77C!*FG3guX!F z5l`l=h?H*&XpgOK`i8>Tlas_}U(igVo+p12WCvhtLTKEFlld4B?xYjk9EC+7yJlRZt;CS$Mw=wlw z;C$ly-Ue~=ZBY0U+%#y+!(pt)UG3S7lTx^juc%YuYDm^-g)}5eDXch*=um;V$x5s| zoT?QrPqjU~0`MKJaGh4D{I~7F0>~y(d5~QR8Ogbgwn7q0N479Bl1!9}!_;1O5M7|q zABXaAGR&011t-`FqX4pvQ3|Y|O5vQR>>zl*F477QAzeyg+&^uF>j1J=DGy%wRSKu9 zvV(X6Aiv6`6oykFV-wSyZvJNr%tI#j*3i&|Dj??nY|1b{uzFUzF26!fr2}ECks>m9S zvytsj#buUbBijtz?9B6s2GjiCA|S zL9>eRo2dNB$zWWKI!Xh0sIAK*#ha^Dkin&3gNb;=gCtVUPn+@=vt#Fwc8_Sg6l`J< zYrnKZ;@3_SEh=n_wJ{6qRuT8SgA_9ie$6z|;!4}%9&M3x0Pc<3lh@gy@B_U3aoEA1 zQOAnOc-@}wq$kAWBvT$@H!+uTzOd#YA-tn;VyCH%?Wzboe?}c|F_Uf5i-3_cf$0}l zikrLg)-=~l6rm?z@0|y{HxzeetC+~;YH7|JFy7pMH6ndoSLqez!JzL|q}x zQ2kSuNenyJFewxS1gM%b49q#Z4J=Qp#Q+l?)T3Cp1ATg=3> zEtv<^r!rO0f6)%uGBk5AwS)A#W;z@M?m%{W+15M>)j!z|Vu^qKNDeOOA^pOEmyHmc zwKHtXPC95dDe*xErigRe^Il^2#U8SG*+d-!#SXSP$29yIb!>24=Ht3cpD@o4df9eO zh0eYVmF8I8Wm^Sz3hifX*#(+CDS1RE)#W-d>1YWjuPlI?pUAbdVKt&{o z9MatWzMpwwdm{X1Z)_ z`RDUyHPfwYrrQC!FG4!1nJ(McggAuw^i8I?HJj(}LHuGryU)-u|IM*_g9KvUhK+R| z8bs$gKTzw&dk;(&*+uLjv!07Dkj3n*(n)5l%kY+MI?TTE(guYiJEuWUc~5vSsj4pdKdH6Tt~NLZw>r;4s8-La?I z0~a4pUIy$Xm9?F-7p6Bo@K+RAkeoM@-)8wY#9!brZiC#s3nvv9Z&vaLP~zl@n!iX; z@kj^R<{9w7F+^J&(t}951EN+9IIV*$n#OT=PNB^fd#+-@xq(9vj0HZ`u`?eAWj>3O z2wzT}ykHe{C}2nP8XPKy)Dy}48kV;(cnvZQJ=5oL^6}(l;=H6nYEI8jb$L%^_k~HW zFB0GlM!N{JCD^Jv#IsPU!bpA-q%R|VDKazSp}H^2(-D&rzrunYTH{Uzm$QyYc4Q!; zcPUgkRFmBkc3+RtYPnxityN?^E>JO~%1FScY8B5Ks^kRUhbPV{$$kREFzHvMOE^E+ z3R)B_*M=gGTI?(2^K`rj+2cC~lJRf~l3WyFE)>YgAR{}l3=g?N$=H)YZ^7;Z9L5SD zqP2wV$)LRuA8;V^I^wc+8fr4=1_;79@^MIOr6MPT3^f_l9Z+8fR+B-7nhYw3^t2eV z4!#XF88jKv85&9DWRRgIgBEG2@bek%dzmaRSvkOp_%k`)PvJn!Z{H1O3I}5T zoFooKgJzHeDZdH2brO#UT9l}vv@h$FF;5d1_K*EkiAbf89J*?)R z^Q)0q50HZ$#FV#X_y@vjBu2p*V8=TuB9#L%zZ!_maHPsm_-{cpe6;bA@-mHHQf<@& zKcr?ILuzne#95?3W{S*}D04B8eF@T&{5+~rASc4wEj$DQc_u&N_7U8D${?>K5|l{( zEGX}Xu*m_;YlzBv5GY8x6Y#YV{2=nj6d-hFds7fk=J}{)4T8 z%%NbAa4?sD$CeMvH|h99sG9r>q$)YVywC}Z5d>cX{ytH~BOT4C?%>WtLijW4Hbbk!wGwSDo6|KDI*uXRKFD^I54}#j zYx&n;n@{C+X4kj|F!e+d?D(Kti!>BokC4?8N*I3lo2)MK{5hhn9&`cupiAa+D$vq{ zF31O6;P)SNfg?TWQu&|@=m(vAvdIUX{{cirKKE2hU}W-1kjj?8a9V;?wgg5_(rrM3 zW-@PNL$(C$_BP=#`1F$xA|YdGsFvVyNON$=XIxB0wgiT13D|8Nf`3S+fgMlhkOvYJv7z6Zd9EKl=Xe%N6QN!ht#SUafh|8R}*B!8C zC)NP2OH_$pcUT8#y#pt#JLn}88LWqo8hhPg5A?s*HfeF|4!>xr@b&`j$Ttf%T{c_7zCq)JT{OtVcDl-$MGCMufKm=oHn! zmJst%;ALF>OqQRlYGr*{n-Ha33Pgmhtgls&^)Q&sM$#u+*-~hng2UK`llcZtDosAs z%DxT36dZGK#Hq+u)~8z8D*^H0D`C~j`cx}h2Pv0K6q3eP)~8z8ryQyI0VqU24Hq9z zUdF@Ec>AS{PdYD^+ROf+Hxi)aakLD%vOm~?{lO2wqN!zn(3_FY0#*G%uj&t$06vCo zi43eG`-5K9A7uWqKPaE4r$FU&t=5VCL2s--C{?(qQmIvBf6%M?gDWAu!9h&=6=C)V zy{bP*!GjKr8<9^CUo?$L?99aY`vgLs(kbc843WpyfN45L_;%ycMLttFpibvAC6Yb^ z#h0G`4$hffIU^J7ALfhIq>1nsN)|U5AcEX3Un}k+>OsMf2SaGoX@8M)`QHK zpfw>!*>aG=pHauhTb%8T?wm08XXYu}i6UbT_y#EbfFsihMD(EDD8w`y?d9aY%4=*I zpbey1v|{ktESjN^jI#A&sp9u1W$3%@sAjW(XF}TD){RZNaS}3Kx926oo0G+|< zn;`CmN-NtiSEUe1e8MqolDacQh^@ezkZ$OsB7VNs{ivBP84p%csH?NSk+M-gN6`@Y($lq+j5W$>6wF^rqrDNQM`+>!7`0 z*+EAyix!NQcpF11_J*?3@NA3qhC0&;ehum(&$q!QxDF5c|GBI!Mlezn5PBnt>m{s1UiN})7}Hw@EsI?p&#~X%|STXDm}wol%Prm%vv*bQsvl~ zN{?`=?WG^!Qmw)-Zrffuhq)*~FXI7E(JEbVr`Rgp!(6+d3ip*!Qh`cHx;}I zj)H2BPd23N@ffRPF!%Tb)gB-2069JpZp%GBLAA$+?u_v`o$u&~cHH9=RC|0R%MxT({ z=yNh4t{6xUYNJm`ZSE#Y0b6cHQE6fOkk{f+OYNO9zpm}d|ZFIblw2<29!?l6! zT4wkOd|Ge-p|t4c_1^kI9aA}#!Xg@!i=x~Zx|oWbaMDfO`s ze56wCjXsRNk1oBWTCuyl4n!^&`R(04=qL<>Xc~@-aTx6xu1ttgoU{kbGDxp?5Sa#* zkR;xyhT0Ewm&RrMdBVe4?guK#r2FT_XNbL!O31vO zxGZqHV}3UTg*ZAUs>FB9j|DW$ffG9B{51BtF=QQl+a2?{kXC6VDXwFFm6i(sM#haN zHI`>+_QKlJYT;K2n|Rk&!G6dt}59 z?Fa0Uk%>oR!pP_XfYa!m-3gJRMn)#*p17K{!a>Y*!m|F^LnD4boJ$4|CaS~_jktEO z#eoxsM(;t&PLT>#&OO;fqeGB>rxD@r4LVf~jWURNDeyD0KBmh@R?aZxrewViX+8zm zeT)R8v#zyRIT!Lc>jyM%LHcC-rqt$?J za$q$!N>O8@zd^cABS{<^rKqvdW=Cq)gF^fZaPjiwW1M}GWxuGi91*4B`2dE4ntWN6 zkKu?YjZKpg;D{(SBb^1QMntJqy6J}C?%T4v;})$Bw~28e+KL! z?aeWV;<6k3XEY%olDZQqFb!OO&{DKBp#9V+V9UyE=qkLKxO9_)C=aOa95|Vo>0Y+B zem3I1H{sFCQ;%S(S{F`LGxT9Dkq_h&IeRCQXh=eYxja9J%kyLx$K+h@AI#-`%K7I` zY<(`y58&cF zkKy>Z*@$XAq)}S2+ur&WSZo9H297uvR4T%;569+aE`EkIN-Mg^W($*x-hcD4QhP{c z&ZMB!q%I#_BOq-)&^g`Fy$LE(mk<1TkX~np-`mavqwcSc?lH(|=tdTa;#RT~vu0vs zu_$h%=<%X2y9Vo^-F&O1j91J)nr#;V?4yNF0f+&J3`aG8!!$wMVkZ8csr+$5Q~ww# z*>^Sy>LK*k0W^yIUr<5zoekA@M#+f_amd}thJx95HdNpFGC)@o{vIbAX5ZORedpUC zeIOCW2KdRsP<>~*GdAJ$4@XC2v+r!EzO#h?r6CdGj7}@ncMg&c*5edn&}p*o?8%sm z>gHd7E}190ppspuF#68)6AYv8Od`d94C3d>4UmcWzo2fOWU~Ax6Uk4e>sO6BZxZ!M*kJFL8XOHSVb6emB$A#)WdlI+F zD?^zB@^lNma%xreo;``%7u!~IIKELDJc2vm4f z@7b6EOll$H4?!-Qf{5HEpU>z8DGV`ZQdkx#WFvB`dl%%z`v!LzFH&b-e5q`=Bo$T;U z5#5uRk!X$)aB33B4jjguZ!7ka5n_~%gETJRW_TB&$J~aM0Qu%!45ou(#)}NDCFGnB zgUxnBeus8*L!z7Ubd%FsC1ot#b*E^-d9H`Y|fSqh-#eAFFciG#Oro4zD%aD(=)cY`4QDIyjjPKY>LX?7ei- zEHq&eUVsKpBc{`+Q6Ja!ty6vPp<0YJ4c63CmxVBTm+zTSTqieuMEhnz+ z^fFRG#^1~Eb1P07E`lC^;A}Q$t%KNkSQJ{(dfUE$&!p$cnzr9yGeqi<&LLRCOcI^YJAXo-pnaz zMpGzilg|6a;|qDl+cWS*b_;eQ0cN#|IX+v3@@bXNok%>C)Lzd|>wsiAU%E$(11PPYLnL?^|1$a2s)_E$+O@tnkVD2W~xYHer9pk$93(L z+gr8iNo)*brsJh)Rx4#XHhiCLFxWQe40Znp@ZL%$XU!ZD`NUQ!vsEN4Q_R;>L=uZR zI1_gJ>~=KPif|66S>VBJCvczbd5GJN~#pCpX7X;cy&=%NAH|17RiJ2C}C@H6UC zr16>=DXZuNB`@9w!DehQDpK5wl3bDI?{2#)-J@8sAdJ?IGb?!aBJdD|@Op1(&NA73iZSosLAzb4$ywY6lXXErX8!-usWWAs5Imn{PdOsW4 zVlVfzp>uc$0gr=#FV!fw-2G;5#7VT`em0NV&qjf9IZibsWDKb&QaFP46b9R~CSp1Z zC;9q?k18G}P`-2#P!sq*+IY6$l;f;ol8M4NmpK(Q@}{Heo{ht31n@l$V+dWRQhyfY zCdwuihZLLhH1=m;Z6NQgu}g`iu`DkG#snM(`Xr4@TZs>{@$-Sr)VQ?I=j=c&JsByS zM8LA@ec&Qq#>ZY(ZwraIP*RrZqVW02|t>TsIrfM4D zXGp#D#@sOJSG0~>R+RzeIXDV}?%GhdAC4lPju!znl=l-0bF-bND8d4Zc0gw!d>u}{ z)@i3gwRjj#MkEySOthZ^ZG$vIrye!zYMgkKi1z9+>*w5d2RW_4wZ7 z-d0Uw>d{xA)02?C`*3wyoY-F69yEu$o(pk(0Y|SzIEmh5AGIUciGJ|wLx|l-gqNmT zw)q&1w2Q6Stw!kl-DqD)vlEB&JtJy-s39RcCw9G&L(U||DVfnvV(|H=Ok0dSt7${M zs8W*_us<9b0a^scVz6&!NX7^}iN2|sDH*eXCT52R(Z-h{)~7J$r_jXz2(>x~ZU!hA+3%fr!lA=0TUOtVD~zRDP!VIMiH4k19^bg1KN@Z`=xcS z$k~9Y|1ZFwI4Z&~jeAEfvC#uSe$}Y=JG$-{*n+6BFILF5fN3!qf8m|O1Puy2iAvWK z(6KJKZwBC@fnVWdG@x@_a48dfLZA&`y?-gr`F2z%b7WuzVpa=FIS`M77cy$20w+W3 zQNYi+oc{xHGEWaY4(rzdz3+m*Vc6pWZ$OL7>iY*1ZI?=5+)7*lH$rt_E;WDNp5OW?*qL7bbZ&pqk)T$u(0r0PhDuE90guO=Uj(>qn zj(x{xz^gac&m@_Fg$yY#z~uV^*HEo6!X_jrzxd#7Et! zrN$MzixO4j*x469cJ?`A=OkuBGEZSRF|of|AU5 z0HTm*`6(zr{L;>bEMLj$9odDDwNv?4AU?ZT|xuOlLXrA#d>}PdTUVCV-+>agaHM#~hv&S9; zW3Cw+y$>~duwp8t+k%+e2=9p|e-}82+HOx_Oz|`7M!MW)Jg^rmIHnsW)$F&-=!`FcOdA)XK>t(T9#c#SOO; z*S~d9!91*k`4G}{nsNLbVViM>T#8577KQzzl7|>4r8TMdNZ+g}zYu*txk6Iw{R8Hyz3H^lWX(UekY|^KO5Y zN3k$v3&*Nsr$vT2s+G3nJTK=V>zY~ihBQ7Gq~*vQZOMKf7wV=qv*duendJ$wFxi1z z1)Z+VEY}{%a%jwwJ=2$=v)`VqiKVmtNS1?QImF&>6LdBmcD$8xd*1FPM>o%N(j(>q;Slky5hFqj_WzL&kow>PDs;f#oNB^1CW0Uruh^bpXM^T+_@-qF9eZ~hkNrWw*HXD z>*m-~Y^u4NDvHZtIvh%8;gB)i2SGnM!$uv^pB^~Fb}6pSXV}tdi#Vi@lGmx&t%0O- zhV5)*R@?_|o`sk{x#p-yk&%lIf!wTx7xuUg7Lttp!rti+oQ1={KlC{yWWPl*3xb6X zASPdap2&B2vF}b)=&;_T*a6IjR=of-)!_}RaLA(}|uLD_Jhtq#> ze6Hmw+)!Y@t7q)jVzq>jDi>b8jI@twlKW88xKRibTfPlqQC^^dcgV>ImYXVhg#6Vxcd z)}AGEE$V;!*bKpTI>C>#QO>UxC6gg%2>b=?AIn)ef02B)sTCZ5;_7$Y41tFo3xDG3 zx4~Ma`d=Q-5cm^UzvEym(M%S8wffBpsAmZ1L3H2@fnP0t6IC+=5)$%dsE%r8NiKwk z81o!CFJPqg_F~S1^8!YCglm4n$9VxGLo$Ys^8!YuWXwF87;;|VSj2T04x@}FUd{^` zYF=P81kCsgH0t5JfT89E^czmn&cl(tq2>kn&6!&q8&k%_!=b&Q<^>)F#CcX3pn|>9 zTFnbkpDQ`@t1-1a< zl1{vH4wDTvFHjGtF%g#YA%>b4U`jpcDTHuH4{AEZQ1b#ri-B~Ep)%EKUVtcH2;dUA zZ7UP4<^_nJ2V_bNm1$P<0z~yk;#B>SNmla$L~n)NT`^mkVl^*7^f@4ZkD)TbYF>co zdq6(YXe-VO7;0XC=#M~t)~J{B0*0CwAexSYtKlj|nVc6e)V#pCkap3CNLJGVe%?IE z_Di>%Z1XcY$!fZ`6FnxYJ-`_px<&%&JJAUZlMZBZP=5t9I8$J}3%U6*P9lY4`hXhK zv&Vfu;3pDQd>qpUTG@9i$MkramsQ-rE9+o#{fvs~7hu$VK91=F_L$zs?Ggcd zOfN^{0W}(DjI$AF0S*}_H5w17(RdF?`)Q<$Ookeb8yu#oH=LLf;pKQdpvL2j%S;I8 zYD*8t;{i1u=lH88hVTgdNZ2paCMLKyi7GRh+8&BFS5+aK+%__J7*vmNX zhxXra7}xSSn0qnaFO$Vv5~j5`=MJ3po?hyhH&IbmBX4fXlYnoBfO~p>a@;5tk93e{ z`ms!rgy17MR45*fHGCOLEM=xY|sskve`HP@GVA$w|$uREQ{ z&aMa9V+NT=vTlad)LbeA=L4RZs3LdAgyhuR5+GMPsM^;OQd4s`L3)pas5Z~TskxAv zntK+|=0w=bG771wIcCR)fIm-E@o`&A$ex<>aa&8snVR!+H*JWg05|>yNcH2?Tqq}n zbX&e7HWC(@e4{Fe2g8t3pM@$v=qEx9D!{3a5KryiN8|HgFFgA3122C@T|160*4X0M=pu~` z+Yscx^9k#7wFQ?d6ZKMv^z95P)DQIt^eN+jkZT<;#F5_FPwvj@_2S}|%#y#G9SygFafMt?y5@GUS% zWiq~j3UwnrL9~XnBMuoH5m7?L^AOz0xSnGN*H63QltDVJqzgVRCxW>MhjcLm0x^V2 zIe6gI;(D^}A{LXIAWf&0%uM#vo&}R(>kZIBZG}|E_+->}E-(`$=Cf`mHq&KKc^ah6XWiyE(`BD~4Wu{OaVXYl zyR(@t$25P3bh)h?tDCPj)8!D!g7hL=7q^=H8FfE3)8+Ur8<~Haty`dV+d`U<50OsL z?E&c^9I`l>^I|9!Id3x_*XHv!>9k-`inCCEIKpmhi$*mz!u|+e`5T1XaDJN+4f)-W zpb=RMp?rVKQ15Sz27e9?;}M+Xr@7Q81q{_wdjZn&V>_RXox|t~nSgETfSQEZVXA<N7i0OGZm#mI5vPB`Y<&&KIM)C+-Ldm`z1 zh`BpbLgu-|<>xrCMmPuJi4g3@^{Ye``PQFTeffzy3=OC$=Uj;rUiIatY)A`Y$T}kG z%TGNZ?WYm>a1rv$c}sXMYis;l!e7GY_w>sRPNsr6 z*JHmW?1MCd!{DIThB?<`za?A(X^%v>6X$yDw}k1=&>zd93(=XAJ@#9|5|-m^2?-xl zevF#z@sjp3>dD)1iiR@2$6f2ZAp8^W;9R`qKo`MWyyQSazaUITzaUITzaUJn`UPP! z2`>n9g#8;1BY>O4OyQj(YmWVba5@C75OOh&IFSkR9A@f$Fk00?M(d+C!c!xcREmm(pa|GT`gZpCQZ9=rqv%w;hoZT9!~xYd>CY% z-R;WY5W|eHVfz_(O=b^x4rV#SksT1f!2sGY*aBxb!U+q@5u032Rv3pPzd-JTCuw4K zCnmQma5&NjTt2Y&8ke>b=WvAhU|?k$m-gK_92rhe>h(i2BRvnC8jhH1IKmHQvCF7p z+MVsCsfHs?d&wjkw?O4it(MOLiK$;dq{j0A`Are!M-E3!H5}o~vmZN%Nv|S@!x2*r zM=1EgfsqAt=4CVNWAp6iiYWN%~m?ep0PjE12Y-!ds3@FWKE4 z2&y+ffYtn3&5*p%@wc@q9vYzO427JO?8*}N&#+ZrC)EW-n1sQulG zWZ3X$)U{!sxT7tO^*hq|Nct8YoIlS}r3_%f*DsUU^Y$Y2H)j_*w?n&Q4sIe{h1YtA2+=21i6hsmPvk z1}aALo^k=C>9mqDW^aX)2EB1e7knU!epF&l`E*>H_mtCVL343AN{C&n=R4pIi*>Cy z-OZoeX{$&vtThUspDoAB8l{kV!B71y!rFY~q|-#&Qd>FLrWYtrxG)P| zsqTpwp;FMEbh&wPViCWk?a2)BTiWNLq5KLu-!PO58M6GAb{6|hP2gnLiZL>o5Rt_j zKbs!{FGS+I;*ilbXHkQ`L^c!Y$=!%391obA8&!&0v8nasXUqV?5i4{j0-UZDysy%- zFo_@k<{Ny=V+g-)<7u6=7YO%~-WEgnd2vshq-r4ia@;d9WDi81qNJyBc?HrpHR2zF zyeLjS4e?-_z5vijP^MmfU*6NscMs4eNaZ^$GW{GMtDV`NlJLvO`b7}5#XZpthsp)1 z;%9e9edUE3BY=+98cXR!YN#y|4O4vm>-6x z#^0dvtoE@?htf6N%hq@u=m%QkYOT>N+=vkA<6EFVYmHI_qC!z$iJ=C2SOqv#YGrZD zw5YGqP@^}{p<1I>hoU}dLyfUOFVGq{Y7Nytqy~F-)D#lG3=M)~W zkvQeZj-*k*7d}FDEYc#sjAZ<_;&)-meT@b?IjYKfdrMuuDmO*`*|r5;_Kv#Ghp$6A67m-8{);g-#}tpG?=eAudap1(H#JT*_4M z%{Ic0y;Y+L{>>1pn0(8?RIkmZL68O{4@aDemwjIRp%%W3(G5@^2gY(GJecaO*^!V= zauAuP>com{%KGm8j@s(2S#BY_s<}4i;Td)H)+}4DhqX=-{qQ8bH_?xJYxeKJ-_|-M z)M4hR0Ojr?Q*|jnbCi(v+|ur2zsmknc?qNEqtwHU39uvrWbMBa;9(kMKI5JK|JU2M zfX7u`=bo9Ptr=N<}W+Ap~Y1a6Zrp*0CfLz|e;KpI+dQ}U79gqz$vN)k+ymh=M?TJpaC+I#J@_gOQt z;og3CzE7H&f4|pW>)&hdGiM!0o{s0E7sQ0=X1&5RJC)f!spokRRo7rFhjD*(ASzbVf5EmE+c^*fF;*Hje-0Qe{TnH zJN{CiC;MJcM)NiLl-fXdT~(Tg3=QIA`l^jIt%$Sn9i(T|=g}>$m8aRRI z)O($0P+#zDT&aF0L}k5x%Fw?6ebuI6)Y)Y00Z}&lsXnrmnJiAPfT3@4CaAf)nea=u)Qt?EZ;&~Fw+wZv z^#uOijB+7-Ai8X!U9vACIaqleCix>JZtO~OWA7?)W7|j@51|746v3^if?lbQ4g+m} z1Rr;yE$ycDBX1Gtt+qi*2^LbuSFzwefcGz)Z;oKQs1CeRAN_Nn)l^DXK`zN(A$0j=kb0gSJ9>`pepF-wVF!lDv0BLg)bEtkglQv-3k^`rt_hh^z+6= zT*YKuMGMesDy6G<9Fw;d$W^uqx~--||FDTBBiKUO>4!~|crX27Q#F-EMb&iqL*F`> zQo)Y8Hn0}9yE`zBuqk!X@^Jq7)fZHERgcflHKe+i57woSQn4VYZpcy|b*|1@S!03B zyucROQP+vqvulIu>IsP}tIP)|7s zT3DM}H@~j>?o{FC~k=! z8XfbL&Z(5Acyf}c5t^i|r(M;nwf<43E4ZM z3k}Od{A9?!Nh%ha9(V(&pXFjyu(CubI8QZ{8H>p${dlVET$pMr6Dvx!nb*0xWlg`J zcHOeyv3ZWi=j*}yQ$x(oC3&)HW}B?qB{Z+B(y$v(NzkUHaKrBL`nRLbCKzsy69@*c zbJy)^saXK_20cf2u+K_1lBCyV)^e9Sqg_Ep3v06myUH3YXxhz~QH8UTkeKr`EatH# zs(7lbnaMsU%_Hk2ml{`z_k0jJqaeFd%lt4KLP*px<$Eo?2J zxHYT5c&NGo?wjDzI3JY3w<_Zwz&OgU|BE!=D5FV4oQpjI;wS3>iEr?A`5oY|ja0TF!OhBO&P zEje>~(SU>2kS49Fvjc`-VAo_YmK&JiktN>>y^osX4Pz#wc0VgubF97O@phKIuExKR+CU|)9Z6e6XKa&Q>y4|jiRqBwc~S> zcD!CnN*XHE_;hx>u`RG`H7WghWKg(g*c#O4WNBJ^Xc`;+IiPY)(wv%;{PSkvMX6TwrVtZbXI*X#uS+M)I^rOnMimSwf5w)g^~broKpPT!V5BWx@!}Y%OuR zzZ6xV)hg-?Z*=AQ(2&yGMYlO$?(2xL(-oebuC#W#O6T+Y!j1(~27GrT7roi@J$utl zZ2HWmu3SMFlkh7Sw+@jJCN{q3CJVXRj4>vxKUSR$TI7k`mP15|Nb#EqnZFKh9Bo{#ZWQx4E7Fm(eCfJ{~{v;vhs#8RqWb3WwBkrp6d72hP zvj*}x4IS8==A=eizA_p}>jZnrxZmG7!*pVkTpVMwt}@H%9NVpG(vS1?io-R{jSU}L zVvNtMMlt0ZmeFT1iNl@+M#)1@$!nkm4JmVKMB5>5hiri8%WQ~5^+qda_tlchV>ON> zEnIh-1n1o;qww2E_hJ0B zF3fB+W4v&4e5jA3W|>c_#5g!HQ@E*K>Zbbj9Js}^YtG!_*%fndW;brmF_!VsMKR;C ztS%)ioW5DQpjpJ(o79LkuxoPW?z*H!9ZJO7|z5uH_I8fZa`XQ|rgy`~tsWuy~5 zo`}Rz@;IE>WG(EdQ}r^*9xH2BHH&VIRQXuFHHArSCRNvG%KqX+D!VAzKXN0?Hq+a8 zmiq1SO1spr&m4bRw;eSxIq9*+MR2=0*`YliO;8jKUM_}0nPsxsc9!TmP6zE?_H4VC zt+x(-LsH|*ed<4t1%*d?y{8HFnW&T7+M;%Z7ncs z%7WPb%^{~wj88AkvH@!_Qdn4#y09Tr-B7Uuwdl&V`%`C?gM4OmGQ2=pk7cn%Vjl*- zx3nwAQhbc(h~!9gp1iswE}$@37-6kIZtHZKt%=X!G4q(rLh&W*thQ>ckLSz~8e(_I zh~aGAU5u{b3u!w(eL01)H+(q8G?&NQdC<7i08`N#NhtOr70A52tL z+ccV)aK5|s1{#jHtHG|5*!aqIvNdViM#ON${l(K*9&T51`i2XzGEc(HSq|m|e175t z+#biX*A`n)rCdfbvrRPZs;%m3ahXN4jQ3%d%S3`(DwA_192&W)W@mODu`ls6oz2G9 zcagrJiY+zis&OXbORf3{HYrVbeU=kSnK9Wby)GLY6f~JIW^n-t{;!d4CYEmU@=?rs z5RkJkGtbq|JrP2XW5RgS;Ao@7bjRG@E5$zzG2G5 z=C{-Xc1H)~D_9LOp6N!oD58fkf8QeR`ue6E|#9K~scF(f+IUGKb>4aQaZ zPa#fYVB+A=a%y9#6WOG7%5x%{lWt#vJxeb{M0S17*;TH!9A$$u9pQ@gqCH6#bgkzr=@VWdkR>#fa~B(qhXHwDTFyuGgIB5*l&Gr zsv%_*RvbT+8n1r{;X4-Q2$!#H$b(W#Y%8o4uas6i`{l#r4?K*wz!#6)549<9POC=@8%Lk4J(!Chov7}@M={Sx^E1RtN|=dP6PGs=uOOLNR+)I!$i#e` ziC2nDyhdc=)gcqF3mLZ}?DczLiU0UqZ*Vc&du_WGV{XqlR!8_)H+1{d!XH*<9M9(b z95FqInRw=0-i%{oT8HC#h)Hzu=}To|Yt6(wnTZ)P6LVuGX2nd*hnbiOGcgBdV)o0# zyqAd?FB5ZJCbsHK%x{^P*)lPwWgMF&R3;{^jH9djeF4O*6naC9sVEbZP$s6IOiVmw zI~UVTCMK9nOf8w%$TKmWWMU%8I0{K9RLm5qGn9`h!Beu>zVr?9@x;g0?#+8_;hEUB zGtR1CVzC{-dn%RsHJ%fKHzITV;R6mc@S+GrO?W>a?|Ow#ot<8QAL8THfxpy6_?Pa% zzffaXU4n{h>0ciIQfdzFp0GU*&rYePY`y9T(iN#}v9dm$Mmq?DG9Q^NS%fQ6YW)ed ziSitRM^)9A zRO+B^YzCbok+o9i%8glX0N#nzG>tQyrhNL}yXccjp)u>XhqWoS?u4p;R&6-0>MvBa zuc$dY)x4sry-#I6roy6{b5NzSExM!MLvd=jld3s$!xbN*eEQ!5^yxwRr(3tXfN(j6 z`icr4QrTmwYDQ&ts?;5ORpv33en{2KsBCeDx=?*kRqa#@?pIZxR;gXvROPEGT~wKS zs9^QSR4S}HfyYlyHR0El5cprH#q?HG>+qI7puZveyc<+SQ7t{F78I%K1)ot0;2~9w zHs7U(_YKJHjSP=sai#RXzoSn^xaUB)cGE(0tWK)xqEe62|J0)-;;Kif3#wbKrf%+} zai8}4+!;)~TG68BJ&KvAQ!6e!&8Lf1RklUd&M5V1wSwv&Qfo;J*@bFOwppEJpbe#v z$}Uo9X-&3OH4KsR&c9DByn9$J7*Y$V&`V0)tmZc3vJt*y{{lT(6RBmdsJc7VyzCK7 zi)x8f_7!~DMPJrmXudSimn|)-?iDIm`K+2(iEaRE(z>R*c!GLUc>w=IJm9DTv!w8* zDi5f+$cGU(?o>;gvUjS@fK$(^rSt|R&7MOQwMVM%Bq649-QZ?ae$tHJt9%H#l9e~2 z@}&nv&E2SZ5!KvrVQIG;FCr5;bGLQP#q6D~V=Yu=u0^R=)G|VgYVN37xKqug9;RMa z^FBivwzjARuc*}5)LAX6`cd?x4n&{@wi+pq5)mNR>-emh;tA*_Y4kzT&vFJ!H^T-e z@kgu}Ge*^S@y(E;{zTRrQiPK9e^3J1aris>lmVZn&dhvx=qRkhI!Z*2>CYHj9lBAi zenBmS0^!-Y(5ogjzgLCfkt~cQoNKuCFWD^nsl{@G&=gODpaIZ8>d`GteRGyl2dTel zqIlD3JqF!#ol1jClL4n`DX7pSZT+-xRZ3;Qq~?I1cB=FphOJ)*)tfBVvkOUe0C%158^AOo~k&|Lc`jl$PcB@VrP4+%J53fsG->5&tr4>(6?zm$e0-Q|Nv> z-qWTf^qkiGRQ9;0p)~k)C%)TJ8POfr%pucSx!j!W4A)^KLF1wNXy{Z1(m^Y|UhZ@C zXOlb9pO0y`8IwTNRQZCczDX_kQuZG0>(X3Mea1IApyngXf|DxDj;O`NY?NHtWM;AQ zZdfZqF{Jb()6eX)k#%XSs?g72CzDC(Ph>YK&7^h%8?H^Mwa=?HLwE`^T0G$_0FklN zcE^j5UaAHT`r_wR=70*}pMrT0sG4pyf2RtY>Fc~9RkKqq>{h8^@`kFj4Id*HHuJn% zco$e^7Z~d%{l4^=svV*we`7D!`>on79j5;%cv&xGbBK7o?x0#Uq~^dk8c|ilDuX2n zO=4Rxtd{-{wQPv|%S?KG9l=%itNF-?54$*H)dP&o+eJjY5J}yJ8NlsxqiwH$A_Z>RR8dnv3fEyVX`Sv{Tif*pR9pQfrE8Yqwh0t(~@1qxR0y z5CTc>cKeMya`@nNZ&fQ$8cPm*cl5ADEi2NnRujcTCi1RpH+2VL*lvW-17{r zol{)CN&(zA5&QD7I#+ns16x$|1E$7h5rG2>w|^dneTLLuNyJN^PaC z4JqOixTvWMo0JN#!xkxA^L)2i*z^j6g$-w@07p^gW=czFIu(-is3WmT7Dfev*(cEx5`y; zhOXPA%kX$p0%TQ$ZEMXsAY)C_-sJgY!b$JNGe)iz{VjPlsy&hUq`=dlN& z;d8U+u}7rgkC102SQG1hx5_2jvWKVPkCEproTeR9o!sG2Gle}S4%@MWe@#_hNo28{ zG-#(jLOrcKrNT;Fj*W_Uencn-ko%Q%@^$VlHS+tC%)rcG)u67lK%8?o)Nyd#K?`v{O@gh(=*R zESsNK3pP(J9?wG!SX4%)K2!nv3#xXN>}|4nBvGNY^4W`M0r&6fb~Hi}-aXxjsjU) z(aXe5SkGz2KmF-AxhLjy{L8eu)9Fx3f6^|Yy(~j}(kecrPh-Za()QBLBBgekDfG7d z&AjCwquORYsj}OB>mBKC%%vy$rO4+-iIU1Ic-VAwXK+!Z=E?Nlpqfnr3>eGDM2W!haw z={mE%pnY20QZIC?IpF~L=c}!MPJ02e*3%#ElF3+ei7j`|^FUJ%kY&VM2yMs}+9-6Y zKG!AVF_-gZoyYVWoyYX7^Jq?O?M2UUDJhEu1n_I&Zu!o4G9B1iE1U_eJzRLVN z318C^ouPPSq!Zo+%m||V?iwaVhGVbo(nVFcH0K>xEyq>IakcHZs(MJRBC%mDr1Lkd ztX6CxP8zDx_F^yu%;L@7Z9LTqoo+7?<8+zRbuCZv^;&a+XsXZ7KrIzSWMFcQxjuj!Qkk0U;kJkKRR9v@`tXBqHU9tW1|Co#nFlJOWS&`-nB1J zcq^Vq6SWk^ZQhZmLdiD;Cjs&Jj$`Lo%ifGzYN1;e@ zeBB5VnW$Gcl^FvDb|koIbg(!gTWzCG^^A@Vj0B_OgN38{NytHF(#88HCdMd%M%1^@ zNYoQ@q95q&O=z)iaB!+HT{6-RGYGUAkQ8mDZ6kPIDoSx1cGhS}7KCxfw!eITtNZ(X2F^s79B?6xbcLVHy-Y2!@u!~ z#;L+!<1G{81@mosnm!a~#tU1A3*&{U(E)tzn;IC|dbG2nk;)9$Hx3O!yQYhM+rW*DlT#DL!T@@2z~TtxFgV>eRG{?Y=)knWXQm5{14sKB`-+95qeX*F6^ouO%NG867N4*eTJv;j-&_XdfDznI3^O*scQo zU03Q0%xaM{AK9+WF;W;E9w`Qg`$orgmfXG~3~ac6W@xA|)rw%#Jp-kJT2Oo!sG#tBv@c6IK_Ly)k{PAE{mzi*mo5ZPjU zY#K9nq;G7dAYsi^em>32K5&C9qKD$=I4pDQ-KF)!&!gGN2a1}ug0Tr0n*JBF1yMSv zD?c$%3~rjj#N=&K0JG8}_bb|~8Gou+Z*$d~HKDCAJ~(!DoHLl50A85VRSy;hVm|8b z4y@ELj#eajg{Tff`$xw;)E8|hbybV}hG2Z=a6ek`lebVZ>coWDjEVH9Ejh%Vn@5Ao z#`=b*vD6Na7N==7!`RG_+=S|CA)wNE-h0{A`|_XFNVOZReV0Z@0 zgkQ=kvaQ840SmzhXvyr++St)MF>qsHs=emZOC_`le|~>$%}-U5v(%D33`Vo4}+Qa-(sZ!H)K6LN(p9 z_CHL?wua8a~ZjuuDz#zt?^Zf72=H7snpI5nd^$b3tXzr1(PCEI%Q`RSSd{EmFw z9>xJ__3Sm1hli!*$rlO+CT27D!c9L+$#2XO)F0;P8hO-%KVQu*mID1@#K>-{v$!F)zO>w9A) zdNH7Ky5FX(t;)=asTRq`^-l_(o-m9GwYa^GT8*cCOAJ<7%IZHLC<+I2b&f}#>v#6vHhsay0Q67C&r7k=P68Wp*o6v{XLMX z{y-I!&FKxY6&1A&6sL%vke$A|z8ndr3UKuGT1F|!p1`B$PD3LGjbC4`Us2RIJ&>nS z>CO#mDi|HdIzKuX9G)07o2+srx7=8`IX^N=%LiK5Zo4;L+uv4n1373}009;H@J5t1 zJ?50<*uDLoVA8;?jLSf??rK^il)7O<48Ji2IFrpQGmWtx~e+&4y&*X{#m zVstdG#WFcn7#ckq1?D{mbDr!EV#$=L>_{+(Z3-on?VDb^p$I(#T#ep4PEQs<>paGG zJ?Bo-w7C*n&S0ydyA$WsBSZgLPiR8>W{&pjvGVva!=(7Jt(5Im)Z!%2Gi%?YHu9~U za9kI=;;B82<>_(ECKtE_WJ9jXb~84Zk24D`c#;A3e}iTg^bF40vCf3tEofY(U_BnF@C=wz}T>ygA>yKOiITJgX}ZKW~dH5X&8c*aI4)- zk{Eo4$kys(wrL;JlG%5~o;O{xZJ(hA@BGbH;x?^aL=i)@=P}9^cgNq;$6za-HJKbq zD;`yuM9={(TkseT3-xT;G3mbDnml$$j?xO|R()Qgx7At@iL(tm?6_NFmAIMf>*M{xsqIVRwz(_sWA%;%DD&!}-^pqG;fG9> zoK|3*?|f%82;RZ?ulHR2{O|Fy2_IxU{qRGZEJp92(qB@+Re|}HyiNNn#{WRzf6Mrv z3H%wxpA`6y8UL2R>6wuv%U1=i@4f^6JAv0|fu->1#$-QNFuqmbYZ>1m@FvFh3!HvR zPyOi=_$7=V7I-h?Hw*k)#_tmN^^D&m@EaJvSKvj)9~Ahlj6Wjq_b~p1!0Cy*G_I!w z{xQbCEAT&O{G`AiVf8Zkme^}s$82^O83ygnO z;FF9$Ch)g2{xyNWi}7y@{2s=CB=C({Bw+}Fgfp!FGJ_X+$rj2{+wM*p%Qg~zNW$4k$c zCcC~%;Hw$GN8lS6zgOU`j6W#w3mJbz;5!(9Lg3dh{f*otl<~y^e}M4@fgfkQQQ&{gc$dJx!g!CspJx0jfq#eb>jeH2#zzJI zZ;a0f{FjX1F7OI{KLhw*;0qZ4u)y(9NUcAg5coRAKPzxNfk@|nOyCzV{xyML#`w1d zeih?C68Kvf|GB_N82_cfi;OEgK-7QT#(1s3-^ciBfq#hcjROBT%&^nDK84yqEDG2>bx!KNI*MM$EFg{Py96HKRw7y#?h*K0#_tvQGR7Yi z_*%vv5qJyZPYAr5@uvlT1>@fp_%)256!`Uwzbx=E#(yjDql{N&llpKc}3+<2?d@objs!{tt{_C-CnuJ}U6%8J`jOON`$x@ZT{0et~Co#5ef= z0$;@VCj?&4_-6&aneoR2P7kvuefyfgw=@22f$wGfM*@Ef<3AVp2;;vLc#&~cm7Mq6 z7_Sxh`xsv>@DDM*QQ#kEyj|cAGrmpWUt)Z>z@K9LpuoSyctPOLG5$7zzsUGI1^yc2 z?-6)Km6?}65qJ&b4+wk};|~dZ1LI#5cpKwS3jAWmzbWuu#(yC21C0Mn;De06D)33h zQ*)B@{tm|H3H;rRFBkX+8DA&x`x%b}ew^{G0{;TzI|Tk!#`g>S8OHkr{(Z&|3;d^y z-z@N7Fn*W710B*4{4emijNdEpWsE;4@U@ITBJdW*pAdLA<4+6x3dX-H@M{=9De&tV ze_7yTjQ>{PM;WiGPU^#*j4u}W-HbN~{G*IF3j9-ycM1ISjQ0rqamKF__&+dyoxs1t z_^802XM9HBFEM_*z<ga`vv|#8NXfN|HSxX0{=J07jTGd+oxYJzFgqHXS`A1bM%F! zRL~@FJc$~wRM08#m5lca98Xc!`F9I^Gvj*%-mdX5xcGvkJi8dbUf>rqe#5S0{+$}1 z6Lb&MQU~JKLEz=Cqun?Qe)}x=duGA^>n!+3XTd);3;y|8@W+57He)bY$W~@cn(ZA1vSLvAfrTJGd{@VFQK2$5c@Q7qwAx#Ct z!mc}jF9dD_p-{9|vy|WH6*7fU?jN7;l=P>@Lu7`NTj!R$A3;qsx0}e}`={I;i=l>>f8rKT$&nFrG z7p~vN`l1lS^!g>|e`%qqr^CPjxhqu9=jsgp$BeJSSL(kFySIq(R?h!4KN`T+zn$@W z1iqi^v3D-oi}nT1Z$qbU;QHUr`E9T}tGDmx{A0EFfLFc#9|Rxg{5A-So!`%M{tv7% z`9IA0pTt+1uZP8aoew>%#irx{^S0iuqRh{cpY-Z_p(n3#{abmwR-SV}`y@AeOY|0Q zcRAzszHuvujf_h@IUhK++a|92-_QNLt$+-8S-D+;uQZP~jN4{??uJKLaQ!yiij~jp zT+j7fkI^Vfmy5Ox%RnqKec`lTJ+%lYkX?RLH%X57X>v3mYhuIHJ>W?rr|)d&9z zcn#!VAM3wKc!BdvdpyN>mg}){4i_3ZoW=8UHrKz3@pD>h`8>?Hz2$i$=l>hv zB%hHX4BUHto$G&`AN_DIr=4Wn-jutQ@!vB3jRw=t7a3nt$2`F63x!3d*Cyc9?q)GB z7i&Bf>=kzLYY-smp^Y;6TT>05+-k;a18`bBxt4Jo$r&`IUpF#tBVt;fd8cl7POw4r z=N`^)Z-SoWdOpGVrCvS4`EA&z)tvuH#%;Wu<&1wHIPt^9%n!>L|FNzg*Dr(|UeNi& z;5POT4|4vwAX2hxDYr$yNgr%XC2ObW0VjFBPw?J0&TnH8Sv|js^Vc_;`Q63sPBT8n zcrzRP{alZY`C#qn)4&_Bk{@OLx8r?+>$#Twndi9v?=pU9nQ8a)jQ=Ze8kY^lu!Hg6 z0LN3Wg5d6?KL4Kc+X&%}oPYV^@^ae@oaA$Ny=iwVkLz;a)UJ)``ev@@5aTw$$GMCT z%~Jn3*I&W@;VRC52jd@YGVQ*Z+kJw0^EPdCwZgzXIM6R0UbiZ}lOIA4=BH?<(1j zID4=RILX0=3AXt+F)sb6=UCsKV|{x!S9AgAmv-07xD6C*dG*b}NzQMrH~JHCJx3Ye z!27Ig8Gj$wBmK;eFmB_!*m-;qxE^m%&o!90zvldMzMf=U&hM9TZcqdN?FO-r_(#rf zBkw@%_3I~$+kkI&9)AU##`_%}m(`QS5IEttus^Vc>p2%V&5MnmW7q3$#^w5T71#69 zIYyp#UG8K2Gr~`v;(BaAzD{oUU5wk^&LP`AaPGRpE;N)*VC)UADz_mPiA7}aJBF62*AMCjH zGcNnn51i)9hOZmbzfTH+KLoDV7jkI5*B@~`(ogs^;0=Ka?iT*uXSx1qF<)QddL(au zgYzF3>-9;-zrudto48NEv^ekM?7Y;jFyrbK^=x4Ln$1S9zRvaRV*Jw^4F2o1NjSoI z2m5t)9sB@rnwN`tA9RrGc^Ej&i;W{?_57<`&&BL--_7~I&G>d+cdVYg0K6f{1}_Q! z;Xk;38|c;Y&m3%sXdb2ie8BEg?0FiGYdz<;A)7Ab{%i$K{g>jqsc-slu@+yVlxWYwfPJ4%b?T zYpuhz*5O*ibHZ(F9j>(w*II{bt;4m};ac0`THE4U+u~Z=;#%9{THE4U+u~Z=;#%9{ zTHE4U>vXMky4E^fYn`sOPS;weYpv6@*6CX7bggx|*1BA4U9Pn**IJirt;@C6nMFXeRP_Ch~|T@|Y&_s3!8b zCi2K8^4KQw=qB>`Ch`a;@)#%bC@1nbC-O)q@>nPGXeaV`C-R6V@|Y*`s3-EcC-TTA z^4KTx=qK{{C-Mj=@)#)cC@AtcDDp@s@>nSHXejb{DDsFX@|Y;{s3`KdDDucC^4KWy z=qU2|DDns?@)#-dC@JzdDe_1u@>nVIXesh|De{OZ@|Y>|s44QeDe}lE^4KZz=qd8} zDe?#^@)#=eC@S(eD)LAw@>nYJXe#n}D)NXb@|Y^}s4DWfD)PuG^4Kc!=qmE~D(CT4 z&f_bDmx~vboX1x=kFRnbU*$Z$%6WX1^Y|*~@m0>_t6b#xD(CT4&f}|`$5%OzuW}w= z_tDMJIIghV$9$)1= zzRG!gmGk&2=kZm}TbavophJif|#e3kR~D(CT4&f}|`$5%OzuW}w=N}jr z-OUIhL)!@RADane)_~avMEXfJrk^W%U21-dr$@R`HhyFQ5YycWGb>u|%*# z!6sth#wG+z^X{XjyP#=zE#Q2^xVar1VE#~B zg!oQ6_~ID@LLop!@(z0hHsHuqiHK149&&f5INu*GiUZXV9O;&I>Pxb6zIi;pEgU)c zZg7zisJjopv>toQINyR^n!!YYaJP($>U9`_yqVR$sj0r35p)xAMSQ?){PIQ>{5*O_ z4Zxd28!QW=OT=$Nyi^Knpo2tlBrF%&LBu008(>64F+yE&Pz4(+f+DCS;+r^yL)+I} zYvN^4H%uh4G7%GP?5;?}m_TI2y*hqL+$azoa*3jolmP^-iYC(3==!6w~Lf`wn1F-#j_tI$@PTO2xO^|1*&b4d~&X9-X z!r_wQSW7a1nh7g{@W{H-a?+Rat7t4bxFl7d2xO!+H=bc_oN?q$-4`2nYPN|^1ga{l z3T0!T@lZJm8|hn8Q?%ltvpQr^B3Mwoy4kpksLI7HBC$^D08_qZctM@>dBiZzPa<+* z{>Ug!Nc(ieS6^NHAlj(AOju143{O2tR-2kN@I)-nvhwglo}vCYI=2@NTnCS0g=4cw z>dU3OxA)3WK``YKldxuJmX4CZz;1XtBi8J^jxFv7s?_1NCkHhlYCRV*qkPeMk-$+k zN4~V%x#rqf zq2XR2K#`8r&hCJlP#a(sJ&jj2jtc4Yi5E0pVXZj*F_%z1c?&X{C70jM)p=pHTnDuS zW3}71S9G%Gr$&yNjB*(jd97pOgv!xi%4yE)acQ-0~5{a0Q?B%xK(O3O|YDVdG=Ue*Tv zKzOLc=L*Z|+C?e}^KY87N?ewEMYP4q!((lls7vF7K~XVw8BB@j zMiw?~7mgcPoYfEC?Blu$6So;~Spj)LG-u0FKKx-kB1seFWaWa7q7iNAaVSZ%TE|0y zx|W3IrWFnAhUWp0oMS%aryb1JeLK%_hdXF*qoYW3XSC?;292s_v*p>h3xgLwn1
  • h0e`XjPu%QY2xvw9ARgc8q zruxQ*3n*$bPK^(bjZP!PG=CqXsBiokVzVC!rZ8+l)4;^x!w9>~*Fyha-f$TeS7`(M z!qUFXb!%L-*RPk)x43y{I0or=5V$lP@a6u%{vQ0bohFODj&2KN`Gb9@-<47Ow!FRX zqknkS3yl+BDUe*U1zjqz?GL`qe7FB) z-f936qr7)MZ%RCPo-JwKW!~kply6*Ma+>%Dt`1p#!z|^mTVirPZUxI#$nq2)PGXdG zwFy8MjKn{TFcrwW+qrxT*KgnMGJ)rUx7ij_%S^KqmT?Jf-SQj|(2d4bHLrsp = &stack[-3]; } diff --git a/main.cc b/main.cc index 8d53e46..0f972a2 100644 --- a/main.cc +++ b/main.cc @@ -4,6 +4,7 @@ #include "machine/plugbox.h" #include "device/keyboard.h" #include "user/appl.h" +#include "thread/scheduler.h" extern CPU cpu; extern PIC pic; @@ -11,6 +12,8 @@ extern Plugbox plugbox; extern Keyboard keyboard; extern CGA_Stream kout; +Scheduler scheduler; + int main() { kout.setpos(0, 0); kout.flush(); @@ -20,7 +23,8 @@ int main() { cpu.enable_int(); Application app; - app.action(); + scheduler.schedule(&app); + scheduler.resume(); return 0; } diff --git a/thread/coroutine.cc b/thread/coroutine.cc index 2edf67d..6bcf326 100644 --- a/thread/coroutine.cc +++ b/thread/coroutine.cc @@ -20,6 +20,22 @@ // Functions that are implemented at C or assembler level must be declared as // extern "C", because they do not conform to C++ name mangling. extern "C" { -/* Add your code here */ + void toc_settle(struct toc *regs, void *tos, + void (*kickoff)(void *, void *, void *, void *, void *, void *, + void *), + void *object); + void toc_go(struct toc* regs); + void toc_switch(struct toc* regs_now, struct toc* reg_then); +} + +Coroutine::Coroutine(void* tos) { + toc_settle(®s, tos, (void (*)(void*, void*, void*, void*, void*, void*, void*)) kickoff, this); +} + +void Coroutine::go() { + toc_go(®s); +} + +void Coroutine::resume(Coroutine* next) { + toc_switch(®s, &next->regs); } -/* Add your code here */ diff --git a/thread/coroutine.h b/thread/coroutine.h index 93d178b..03b1461 100644 --- a/thread/coroutine.h +++ b/thread/coroutine.h @@ -20,10 +20,16 @@ #include "machine/toc.h" class Coroutine { +private: + struct toc regs; public: Coroutine(const Coroutine ©) = delete; // prevent copying Coroutine& operator=(const Coroutine&) = delete; // prevent assignment -/* Add your code here */ + + Coroutine(void* tos); + virtual void action() = 0; + void go(); + void resume(Coroutine* next); }; #endif diff --git a/thread/dispatch.cc b/thread/dispatch.cc index 1cff4b5..86d71d7 100644 --- a/thread/dispatch.cc +++ b/thread/dispatch.cc @@ -12,4 +12,19 @@ /* active() returns the life pointer. */ /*****************************************************************************/ -/* Add your code here */ +#include "thread/dispatch.h" + +void Dispatcher::go(Coroutine& first) { + life = &first; + first.go(); +} + +void Dispatcher::dispatch(Coroutine& next) { + Coroutine* previous = life; + life = &next; + previous->resume(&next); +} + +Coroutine* Dispatcher::active() { + return life; +} diff --git a/thread/dispatch.h b/thread/dispatch.h index 738d4ca..4c5de15 100644 --- a/thread/dispatch.h +++ b/thread/dispatch.h @@ -15,13 +15,20 @@ #ifndef __dispatch_include__ #define __dispatch_include__ -/* Add your code here */ +#include "thread/coroutine.h" class Dispatcher { +private: + Coroutine* life; public: Dispatcher(const Dispatcher ©) = delete; // prevent copying Dispatcher& operator=(const Dispatcher&) = delete; // prevent assignment -/* Add your code here */ + + Dispatcher() : life(nullptr) {} + + void go(Coroutine& first); + void dispatch(Coroutine& next); + Coroutine* active(); }; #endif diff --git a/thread/entrant.h b/thread/entrant.h index e9edb0f..ec75227 100644 --- a/thread/entrant.h +++ b/thread/entrant.h @@ -11,16 +11,15 @@ #ifndef __entrant_include__ #define __entrant_include__ -/* Add your code here */ +#include "thread/coroutine.h" +#include "object/chain.h" -class Entrant -/* Add your code here */ -{ +class Entrant : public Coroutine, public Chain { public: Entrant(const Entrant ©) = delete; // prevent copying Entrant& operator=(const Entrant&) = delete; // prevent assignment -/* Add your code here */ + Entrant(void* tos) : Coroutine(tos) {} }; #endif diff --git a/thread/kickoff.cc b/thread/kickoff.cc index 63b8ad6..92f2214 100644 --- a/thread/kickoff.cc +++ b/thread/kickoff.cc @@ -13,5 +13,12 @@ /*****************************************************************************/ #include "thread/kickoff.h" -/* Add your code here */ - +#include "thread/coroutine.h" +#include "thread/scheduler.h" + +extern Scheduler scheduler; + +void kickoff(void* dummy1, void* dummy2, void* dummy3, void* dummy4, void* dummy5, void* dummy6, Coroutine* object) { + object->action(); + scheduler.exit(); +} diff --git a/thread/scheduler.cc b/thread/scheduler.cc index c68850a..4dca848 100644 --- a/thread/scheduler.cc +++ b/thread/scheduler.cc @@ -8,7 +8,53 @@ /* Scheduler implementation. */ /*****************************************************************************/ -/* Add your code here */ - -/* Add your code here */ -/* Add your code here */ +#include "thread/scheduler.h" +#include "machine/cpu.h" + +extern CPU cpu; + +void Scheduler::schedule(Entrant* item) { + ready_queue.enqueue(item); +} + +void Scheduler::remove(Entrant* item) { + ready_queue.remove(item); +} + +void Scheduler::yield() { + Entrant* next = (Entrant*)ready_queue.dequeue(); + if (next) { + Entrant* current = (Entrant*)active(); + if (current) { + ready_queue.enqueue(current); + } + dispatch(*next); + } +} + +void Scheduler::exit() { + Entrant* next = (Entrant*)ready_queue.dequeue(); + if (next) { + dispatch(*next); + } else { + cpu.disable_int(); + while (true) { + cpu.halt(); + } + } +} + +void Scheduler::kill(Entrant* item) { + if (active() == item) { + exit(); + } else { + remove(item); + } +} + +void Scheduler::resume() { + Entrant* next = (Entrant*)ready_queue.dequeue(); + if (next) { + go(*next); + } +} diff --git a/thread/scheduler.h b/thread/scheduler.h index 0ed8126..b5b74f1 100644 --- a/thread/scheduler.h +++ b/thread/scheduler.h @@ -12,16 +12,24 @@ #define __schedule_include__ #include "thread/dispatch.h" -/* Add your code here */ +#include "object/queue.h" +#include "thread/entrant.h" -class Scheduler -/* Add your code here */ -{ +class Scheduler : public Dispatcher { +private: + Queue ready_queue; public: Scheduler (const Scheduler ©) = delete; // prevent copying Scheduler& operator=(const Scheduler&) = delete; // prevent assignment -/* Add your code here */ - + + Scheduler() {} + + void schedule(Entrant* item); + void remove(Entrant* item); + void yield(); + void exit(); + void kill(Entrant* item); + void resume(); }; #endif diff --git a/user/appl.cc b/user/appl.cc index 87b2894..49c0132 100644 --- a/user/appl.cc +++ b/user/appl.cc @@ -12,13 +12,19 @@ #include "device/cgastr.h" #include "machine/cpu.h" #include "guard/secure.h" +#include "user/loop.h" +#include "thread/scheduler.h" extern CPU cpu; extern CGA_Stream kout; +extern Scheduler scheduler; + +Loop loop1('A', 0, 20); +Loop loop2('B', 40, 20); void Application::action() { - kout << "Helix OS 2.0.0 - Task 3" << endl; + kout << "Helix OS 2.0.0 - Task 4" << endl; kout << "Hello O_Stream!" << endl; kout << "Number: " << 42 << endl; kout << "Char test: " << 'A' << endl; @@ -42,6 +48,9 @@ void Application::action() kout << "smiley: " << static_cast(1) << endl; kout.flush(); + scheduler.schedule(&loop1); + scheduler.schedule(&loop2); + int counter = 0; while (true) { { @@ -52,9 +61,7 @@ void Application::action() kout << "Counter: " << counter++ << " "; kout.flush(); kout.setpos(x, y); - } - for (volatile int i = 0; i < 2000000; i++) - ; + scheduler.yield(); } } diff --git a/user/appl.h b/user/appl.h index 03d5366..d0bdfe9 100644 --- a/user/appl.h +++ b/user/appl.h @@ -11,14 +11,16 @@ #ifndef __application_include__ #define __application_include__ -class Application - -{ +#include "thread/entrant.h" +class Application : public Entrant +{ +private: + char stack[4096]; public: Application (const Application ©) = delete; // prevent copying Application& operator=(const Application&) = delete; // prevent assignment - Application() {} + Application() : Entrant(&stack[4096]) {} void action (); }; diff --git a/user/loop.cc b/user/loop.cc index 1798919..36b0e5b 100644 --- a/user/loop.cc +++ b/user/loop.cc @@ -10,7 +10,20 @@ /* which thread shall run next. */ /*****************************************************************************/ -/* Add your code here */ - -/* Add your code here */ - +#include "user/loop.h" +#include "device/cgastr.h" +#include "thread/scheduler.h" + +extern CGA_Stream kout; +extern Scheduler scheduler; + +Loop::Loop(char id, int pos_x, int pos_y) : Entrant(&stack[4096]), pos_x(pos_x), pos_y(pos_y), id(id) {} + +void Loop::action() { + for (int i = 0; i < 1000; i++) { + kout.setpos(pos_x, pos_y); + kout << id << ": " << i << " "; + kout.flush(); + scheduler.yield(); + } +} diff --git a/user/loop.h b/user/loop.h index 03aa72a..7494844 100644 --- a/user/loop.h +++ b/user/loop.h @@ -13,6 +13,15 @@ #ifndef __loop_include__ #define __loop_include__ -/* Add your code here */ - +#include "thread/entrant.h" + +class Loop : public Entrant { +private: + char stack[4096]; + int pos_x, pos_y; + char id; +public: + Loop(char id, int pos_x, int pos_y); + void action(); +}; #endif From 212b41da881ac36880b8eb871360e74d41ca0203 Mon Sep 17 00:00:00 2001 From: Tweedle2dum Date: Tue, 16 Jun 2026 13:31:50 +0530 Subject: [PATCH 21/22] fix: protect critical section in loop applicaiton --- isofiles/boot/system | Bin 132136 -> 134608 bytes main.cc | 12 ++++++++++-- thread/coroutine.cc | 4 ++-- thread/coroutine.h | 2 +- thread/dispatch.cc | 2 +- thread/scheduler.cc | 16 ++++++---------- thread/scheduler.h | 7 +++---- user/appl.cc | 9 +-------- user/appl.h | 4 +--- user/loop.cc | 23 ++++++++++++++++------- 10 files changed, 41 insertions(+), 38 deletions(-) diff --git a/isofiles/boot/system b/isofiles/boot/system index e656629ea4b090cbcac05cf910ecc5bc78d74e2c..ce920a0154ed8c184f0a75d8517372fcd6c94a85 100755 GIT binary patch literal 134608 zcmeFad3+Vs`9D50cg=cl_K*Z}*^zw*1vQA#s34KW1yR`-ML-COEeIMcq%jI=E3L7D zd#hFIf~XW(EKpafR#B^{!Z?-M)qxm`^P;j4hGA8H^J|dPibgGC*7wX}9IG zAF=X>1!GH=QN1g2w}Ey4&Vb)p{ckjOlN@>q(#Ey_qjptMjsGP|@ASXq$Ag~$qX)yT zdUxXrAkUEEDj1eg)rtzRQ&aMiACCZH2}bp6kbiF@Q;W3Qv%TV3W3Gx2>D zZECnD%UJkjLutBUG}QBUA#U${SW*4afrfX9&q3M^UjzE?;JAvKk1N+3_RciJP_St~ zqhZT_M8iJ&ZVmhG+cX@oYc(9Smufg#Pw zHC$xhq~T(_TEivwRT^$>U#8(U_9YrFwZ~{UW}mL%w)PMWx3ha`xV_z8!yW7b4R^HD zG~CH?M4lsWWT53lkL|uTxRdo@G$!s4WD8^qT%88-5NgCzD>jBcCCg_vzKc4bbEn@ zE9@B>KEu9H!)Mx~G<=plT*D*mK^h)uchm6McBzI(**O}nv_l#`$NnDCO!Y30w!hHu z82dvFkG0>_@HqPg4WDa2tKswP$25GteZPh;uy5D!c>5*|Uuairc!GVEhA*-&)9}Ui zB^tiO9;4xj_URg)WDn8sWV@G!r`YW^Jk>7H@H9J3!_)01L{?SaXV_nBc&7cShG*ID zX!uh56%AizZ`bf_`$-L7Za=8uIrg0zo@?Kt;d%B74PRmZTEp}0xf)(zPtkCdeV&FF z+GlC_O8aCDUuE~x@FKgjhOf4ZHT)|(qTyfLJ`FFn4`HlO<*>wV)bKU-dm3J9zoy}3 z_D&67Yd@pm>+DA~Ty5X2;pO&i8ou7H)$niZr5avgFVOHxdxnN<>HGGquqv2I{NW-h`?-7+(dB55ILc_P%A8Pnk`%Ml1&VE6|zqg;& z@NM>E8eU`Hui-z~w`=&1_DveT-LBSfy?vF2@31e^@Sp5UG<>H$M#F3E(>1)#9-`s9 z>|Pqa+itJnd+Y)Y-)pC7_&&P{vmllC`|Yna{DA$bhW~88qv5~UuW0x|d%K1ovY*uO zU+o7q{IGqeh99wS(eQeEg@*rT|60S3+H*Dhm_0?qkK5;I_zC+g4R5ed*6@>dKMilR zJ8SqUn=?I?$EWRxhM%#08s20d!d{P(`Mcey;m!7Y8h+M(O~YI4of_V1KcnGo_9GhJ zZr`op=j_`w{13ZU!#nJy8s2Fy(C{vMhKB!XU#Q{d?NJ(j!5*&R7wthBe#!2p;g{`F z4ZmXNXn42Hy)BjBf7#z-uBqTx?JqR^n*E`MU$@`X@W1UBH2jABtcKsTAJgz2`+g0- zW#6vhx9yuW{El6%;l1`%8vc)cnTFrBFVXOO_81NCvrpIX`}PnGe_;30@P~GL4S!@8 zX!v70O~aqqO_)Keynkwct>FgyQw`hpI~xAXenrEL_I3^Lx1ZGTf9(e~{JDLnhQF|H z(eMF#g@(Uuyhb_jRpUYheBC%(0S6nWDBzpM@e261@f-ylYOGMe;l`5{@V~}^3iz(E zhXTHD?4W=njl~N1p)p$lKQ^W)psCR~a?a@U&K*`c?3`hvhmEP|$P%fj+1aot6AO(C zhm9Y0!Lai$zGVCb=U-IuO2x(#O|^KasM%gov#nz5XR(T{jnOln?uxY$KTlD8`Y_X) zJ}hf|a9Gyp@EO(Hq7_a5T=H4OEa}*Fbkx|sK6U!julqi4*h0~#|Lxn~umMnqE$Nw` zH#`JreVXF0)%@R+zb`%V`S$f$pTrtic%Q6oScb>?*e7ipt|HLolXVT;d0p=ZWf}ns zlnDfUpo{?kd<5|(0K*A<|4G~J70+xO=H%(x?+*j4N~@^#HSMmb-X6YcKiH)4Q*ktQ zqp^Ma^q!H@ zP;u?H^)ORW^9GyQ!x)U9uu2@S-jCvdS2R=&Y4CS}Uvd4Gs`QE;N~`>EW4K~x`C)oe zQN84_Q8i8_ytCnTyx8#m0LTZ7s%}EAs|+hN9q56I0F5*THi~x5j*6N$8@e+ErdT@; zzKT<$U?`r8Wv(0B!stUJl762YKd~ zZyYmm{IQhHA_$6;LfI3QQoB&sp4<@V^dSya@_yAynkOP%>m^~MZ5)zSfGb1c5d03 z6@|Y$Kt=xkRZ;U5kcNkkh#|NADofOJ+VAJzABC^phy!@TVB3|I9KWN)H<3)&J8Nf^KKLiyWHw?y@ThCp3>6Eq8T9|z-X|I&-~Q^~Q>p&hFS_}6b)h}RrV zTga8+MvP8SiKiF$C?<9j-mUAmM3ygS5hlHB`znT%A70o>8Qj@0gMG&&G3vPEWE-7s zhD$!aeBZ*oE&@g$!25K;(Aj+nF0s(yH+o#WH;&&4`Iow=S$L54YRe{K$f;q!cDSZ; zqC-k6Kd4FZw^YCXqGZ91&_)i;jlHxbzYr1IFdBZt~N&U_|)Yt5%-x`U4;wCa6oxELv| z>S@+}Ma|1B)`w86u-~Ay^!pC#;mC$@hjem{=wV5WzciF)0kSA95jVdnJeCEprXhc>eHIg=6$>%FPIxrbA4 zL*Pc_+464>?NRk`_-Qs_C*O~=`q@OppVv{6^r!sW$djxx5XGe%Ra-!o6LaFcfy~J5 zqF6gpUP(vk0FI0^8J{^Wc!8>l_t>S=(*<9Y= zucrl>`6K>mG@9O#NlLFS@Wcw0(uxvTr7BW=u#JHtubS)P@52kg2lVvpE(pNOs~z2S zN*4_hOBGJcIZ_^gC7FwkailsXq;Lh_?Yh8VhcywbModpcsbMm#S06Cp!3mP8J7{%h zs**c*v6Ct)NHTe;GwcxRt}gI4ij3K@U_BxCG3jaR0?#< zcZ9ABe1RYmg)V|)?hNsLjKT34B6D?^GryW~2Wm#{SMK8Fx^^2U56*Z77}K00^p9 zeGj@F5HX}G{3O0sBJ@#zEwq$Eb%9FpXJ^Byt?)XHJAfV9mz-Rss^ML% zjhV3#2heMlA2CeKB0 zuX|kY3^I~LuUDeEO4N*twqX+RObY9n!_bo|_^zL>f+NlR9juJ)rA%GmacSC8R{v6> zXB6ww%bOoeG&BDeDRp_bDD&gu=I1NX>*MAh21T3yK^0I!>NinA@-r@; zV0UFDp^9gcQkQpOyc+O( zXF~-O5dY`K&3&&@O)xh|nVYK2J$9`wu-%USMjFItspC->ZTIB3-MgFFeUFs7ynf2= zg>k!!T)S+k_$+hm?q(M){$|GQp4H6m3T4-)?E2z%W3JuCYx1v4`{F;JJ9ZaoyYKeV z#ridgN%h!E*?o{Qb%6($>2lcR=x@xs)?RWj+Ahnn8`F00jN84vncX)@!5g6Lj)~iy z=i2@2yYK(_CWaySV1N~>@9^iC+1^PISb%aShJd}W_RBx4()bMb=a_8AInD?CxJwC%a+8&6e z>aHHTaBQeq_)*QceJe-4ck0UWcMN3= zA{)xzTWKjG+~5kbqI#RDIPb2s+}VH=JyvN@yms72H4H67 zIRBSCJURQQt1N*Nkqyqo`(~F;VQi0x@Di7(gts0JYx&7wCCm>BITMlDB}0{*QiyX0 zoXJKdBh(Ew(FBd&GM*x$Q!{Sw%8~ClZNol*q**vqc0*&Iti_F$<=-z`@_p(;Mu8i4 zmNDKSd8jQ*ud76y3zjR>8_$PK#zKa5T$#plk0s1fQF6+e+Ih&#l6NAT|4HJo8cyvR zx;txa#JRL(M@c=(qQ`Gr%;mnDhFDDWBQc4xTu8Sjg~nx2rUPZU2ndi0w>i&%mqW_; zMsDz(aT1krd6{JB*m(ppAo*jR~juyl(4YhpNjDI*CM&FF&~W$yM=| zFR=-zAKu)S6_1ik;mZjE79Rf1>m1_2?4%YMbKc47B_D;Bo&;&BgGLCgEdLSjgXvH&~R!6!=FqllwK~8&4N)q{X!VEEbUUk1)e;ZlsAuq!#gp z`C+w5^*Viz;oVTzyOBrpPWhJ7+_(3#;9Gg3Zy7E4CMKF_;wYZ2ftiGsC8do>2m&9W zrKPYgFUDgKVmF4!#cSWy?5^Ht;y*ThoJwH9tbzz?xB9bi&A(ndtR$Spd0k)#Ho+-$ z9Akt|v^#k%!ycr;=>-}kg6njLbs6VgP3836Y>3rMj+}hW`w6XsdWRXgLB|81PrfQb zr{D;pC8+ZB-ABormhkV^9AVM*8ANNxg`2NB| z1#%g@XJw@+TL^Mi!x34&B~tSN+p5y2-nX;{5go{i27@3Qwp1S;Ts0K8$W8Y_vik7A zssh|1H?0w@b=COl!(AiS|JJdB=5OhtaW&RZjSH0VGIQv@g$0C@MBb%HWi#?kBp-iF z&0ID$?)xPh{0B5wk-DSI#Nl6j?16|TD^n^zr$v^Zf;X-D@M)2oeiWcQvK*5sP|71W z?HAyL$nuvYgC|68dRr)it4@|ucu_F76gb%fZDTNtQbNy;^rvH?F0Qt6&<>va2QNNSRsXJeFwWudH{%n*YVjRvG`d-7g z5O#ed|0|e{Y}ifGW;f{mHUc^JznME`!ecPtF_;Gfi3UGTFbJQdglcHe**TF?Van%1 z5TTcBQ3ie`gwfE=#*2@Z>}*IU=3}}iA0rZybvGBXk!+*1bf$+1mDs0swjK17UsTjy z!+n6ClTeH5M|pU1i8 z5M$)T>nUQtu9Edh5x%Ppr*kyTXu!r~WP?9GHF^Q3$y*lxr&s)G zh}%D?CZip_8&fbiI-jn3PksBVX_D2WP0%uY_C zf+*AyC?$-iF^<^?qJ2w89!8pt7ht+sy)T9cC|@RqMbpWvB9D_pO_>Zz4adI*8UJK* zb}K>zX!LTvB=TgXHN9rs|M1fLG5?o+P#tCMNagY)k`^Z-c#T(ZYiN2+ITXqdLqSHP z$dfSeMWiDi`DzA ze>JG=edLzi=C7S3-w&y=S8GH?gT*0nbnT^7z}H^s4?sAYeXJw5eh{enSM~c7vBa$Y zpfu%qH50zVYhkTeXdykGf9K>^h4gcg-Q#imL6^e$SeSdu3vujESC0DxqM3=J(@-+1 zzz)q$u<$r6EL-x4QN<1e6ZWz|YWb&5gQ^TPa`FReWdKfmdT4iB)zT^hNoD*l#-yW_ z!RG%uWxNCeNg5A{Mhkhq$t!)$(d^f$&U&Tc4~(DG1+Gane@EOr=fpB?cN%9d zhH!b2|HGj6nw7&lL^iy>a!kjHtqsv-A2qEU&J94e*ADb(K0LzP&K)34YljybG!F5a z_J)!xPNdBQZRnVV-cg$K3+m<4eh0Ptr|norv6HH3Np_At4{^QTgNBWnJU8;I)Ug&P zJN&i?W(9~&y@__Jy7sg7N%`#nfgZ8nMXPserqZE41Rsu3Gj)L#5L8_@^u^F2KI`&6 zS36cS#E=Bjmw$i+lfrOYNT~}9cM=;Unt{iqqIWj@5vc6YYp*_YI1`WUm9&>dGg00= zZ6rIob@Rhdp$yQgH?;a3iGsB=`KVG|V3T8g_c5(E9Qt>>2|Fh(8ycF^u+kESD@h^3tK*f+ak%Ts8 zyj;%4M>%bAM`AiE@34TG8QS#;$X%Iij|I{$Wz&_m)rE~YsclVF&3ncy)x1YKr$cra z&G(&^Z8aLu{E01)_QykRDo&G{W~8C-zvc3$()O zk_lX^3?|iKUEup^id&B0h)35sol?snOU)aw@ZPH}%0PnIb>q`IXSD|Owm}a)mG(@R z21=I2#RZvqTDrSBT8TDGA-TNS2oiHg?y@C^40ZAjh7lK?$6bWCF;HR^YzLS^`8Ctddm{^ zmNwJVErbQYrLTnl;_a(B-@moNf|PCn%_YKH8+^x>h;3~M99yDnYeTR_i7gEwkB13w zM4~@fK43ie$f|w=$0^-+C`scO`BGE%qwA@%i*9Z3Yp;{%P~{1L zDSJ@la(GZpO~j*SdbdC_uD29cj;e<#o9+$VzU?!$H9M-O9?;b5A5C1-Nd6N_Fm45I z-i73-1B){E>ieY(k^kwDWD#7M`7Ouvuq8|9(-L<0;+jX5#7Ma;O?s*Leh{V`h;*nF zca}vfHJFRBObylC+w7X1QYu$k%9blber((+PG)r>@1te zg>(x#kE`4aNY+6)%%lgMz=a~zpUy$Z44=KN)$@U_>Um~2^=vy(J)aq*p63i!&qti6 zC@0*ox;2bHzGA57BkFncD@LhdIA3OxpK81@u9D6lUr4|UJ$MHX-rIu@_23mAe5?nb z=)q@u@I@Ycxd&h6!RtNv10MWw55C2Nzv#jDc<_%r_yG@o#Dj}^x#zp5I zdhikt-o=CW_uyq7e1r!---A!};PX8AVh_I3gWu}G*Lv`WJorWr{+tKj?ZNkY@CFZl z(1RPkJ!H0VA3J*TkgHQC}vpx7C55C-kukzsa9{d3h{}^x#zdp&rA2S4b+jbL(lrhD*058lCp_x9jJJ$Qu&AM3#< zdhppEe31uV?!i}i@OlsafCqovgKzQRFM9Aj9{eK@e!znt@!;W5a{1V9zXw0;!TsUn@{D@$ z5)acQ7~@P|D3Mi2g+2jA_%_j>RK4}Q>t z8!5@pXa^2fx*W-{HaU^Wcwo@QogPs|SDHgExiTpEZfc00{Nz+pqtCfrADg-~0W}VdILc zrp>SV)xueG=Uv+^)tIzk>hu{iFTHH`t;;Vq+F!kB%9WGnT;9EB52LFQOSWPdhk#=}PE z3(g;Y?kQ)F9CE@XP>&^;Xa=5?Ncn-tuP?l4$pk#hh^WssE|C2EBpE#_wpde9Ed*S7ir_G1O;WH=Ak5x@uPz87_9x?qHxJb zJW9GC)t~}CE8Q7=A)*+#I(W=+m_M^B2ymY8xAK^@6Htm&ayKnvMGD z$!22Y%H1%`UyU}*MNzXjJru?dXc#4+^V+?!sfh=PjA5D4-&n&lg4QKFAo7!Xqp_=H;NAov< z{(JBzB=OJF{Jo&R3jXLM{z&2fRC(=(9y+Rcc}){Fo$qhKADYO&D$b`r*-tk$;foV- z{Yu6EsdT@9-SR{|tL$g_djxuCBzvHoW z%Mn1gtC?}TOm`;uEwvw((**EwR5PxBW?X+U$Rof%Es<{x6M+)Y>T%5nzkecsZd`v8 z=)VEKD3L!d&fg3AGVnVk@+ZalM;v__-Q04S9_RCnTnWnk!9;!QJ`pGZZ7BHngMV2P zUl|~O0{CBnpO(l!P1*mccCrI{T@v-C#Qhoy`pe*-lgPJ5h`>+TZGhhKiF#GZb}h7% z^Ah>iXc3V7fPMn__b2i1`dR7z1$u)M^%f+jyAAxKy~l342f>de>R%YwUkv)O`1L=* z-}Dpwy$-(v>Qlc5zEYDOlz?;u*I}F`8HlImUlI3@?I?3oQ&UUrjP0lh{FdsQ?Wi62 zJo2OM&yU+*4E_n=-<-&|>O_G4)r0>K_yZF8^WyrOz~2UbT_WFFsrC1Q-}~<^r+)DOxg5}ZKY2>#hg{4+FvDEOa%-(vp-{>R|ARKAPB{~r7{iS{pu=dT|8{~d$B z3H(FH;O_<$k3j$bGA^XQ)$({c6#g99)AD#a0sP;B-_m%#82ryr?|l>Vb$Ptp z>p>p~eQBF+xg^XNH-Wzh{vE5{H^F{O^>zgMPalI{f^yr9dYP5zpEXsN`%v(UP_7o9 zx?NHhpPzc4=D*o;xeSH=tH@VNMHqdXWTo!{r5#`oWxzvMy5A3&8E}Ou=>lpmK z;CDd2`4igzulb${yB(mW_0+OK&x0Gb9erI<0+k84x^Hi4x+78FTBGY@G3b8*zoqp- zJ@}izKQXbse1rA4x(WQZpKEH`pJe}2vHw%``8dkEI8je^KRRFYz;7wv%-1ULTdEJ{ ztLHyj9#5ICQ^9YkT$rzI;Qs+nUGCPcy4?1HJQTmmaBdP`b+9F%9lN{X_rNQu>R*FFXdn9{k?N;BNxI;u!qB;7hirPUcM!mpG}5- zOZ=hWPdx^I0{GL9!CwsiOz?U5Os79qr5^*S9{l^zkIlx>GtDor_W36Jc5HXn2wNcY zIokI3cxoBnw-&9GfV2Z-9TaI8F(8i*daO{;~S2ZQ!?soG#M|s$Ecj6Rrnd zZ@FFW1^+L{;2!~hIqbK?Q`>jieGH@$)YWgmPg)nE-CZuN&M+ub2AMw|Lxz4%h0NnG zw_JbA!M_nUT3SEe1O7eWw^aYnfqyIbEyb@s0)Hsl=1K5H=ksb+jxmt@csIs_zYnnH zBcIkADx=Ip7s%wZ{U*vJtT`&cKL`Ay)nyDiGr>O{{G+u&n*6ExMits`OZguP{j*We zEtTH{@TY>`lKx`w{{;SVcE0=30w$xfYDaq7+EAuPkE~Y@2y09G9)tGYx+~a5F_zB#wDA{5_!N zr;Kp}?682J2VB5EzS7p8o#!)7B@Z7tZ?8b(YCH?2aD63VE@DEeaAiFcQiV%6448#W zI0~4BOSlj)3zu*Vx-4A6T|%mG3HJ`E!o3slV53#IXaj&pa24}*nUSLkH%Aq22LD=8 z*q{4bWG6BZus=WJ2IRp=CBt7h53idI^dK&CH5k_K$qi?a+bVM#;M+k+hdTepN`i<_ z3=~^mL8Kd4eO$H?oiW$&w+?*{)2D*SzqX+C*3z`^Hr)JeLPL=xzX46qndkB0e$D+S(1x4q)}tY*vp^ zY61_miL^%cO`JHUpXLbAM!RxSK!MWGMUa>V;$@nV_6!UJVj({`zjmpX6q^yCp`hGY z41U(AUm(&lp2sa5jPj2mr4kP2d<^h87`1nz}mkT*XQ_7lo@0<35#Cmr^)xBv+`;#SrIVg;#L z;DoJI%7uzP1npAjE@T?{;8?}DDKA6CDLa6~aMgjmCRxNM23lL+g8UG!M_snzdjJ}t zcA*Why#v&Lxg1OUj(tLQ`;;`0NiaXd?SLy|q&)#J)FD)ghXG0Dm1r7)ULXbu2MPI^ zNk5^C-yyBSaCR4zPd01Ch^zoFoEs)LoJw{$KaBD@59G--+XJE&|FD_LY`7p}7=(s` z@GG#dPZsfsfmRmF;SXTl>9P&qBTS$;G#iTi6J?uSjx~(7eVfQG3B3jQRj~HBY{R!6 zV7PVY7CiRj`YO(84L`$eLW|%}5Js|aDR;%Bw9;^C=uWWPx-7KYjxZ49Ex@e#SrmSv z{?h>E)N){XIv%s?n7};zw>r=@~$(e}zLa>(MGB@IFwEnJN$&}o*Um+t*e+@4F z?YRVzG%=8GJ%Q97(=2%%jQ~?`JG^q7VVZd%{*k_@AO#lx&dbMOHd12^lWHfNLW_S6 z&NM(t!zC>1F7l;!Fk6KRpm9G4?Q!)?7V*6eH_hTqc8RBeRpGJ?-#N6}Ci5H!OaOIq zoWoJcY?~Rx<4RB$Yff4xl#kgVlM}@oG}Q<^2M2<@1?ab*x$+ZjKLrD?m6m25vZ`(#)cBFajaLdV?2!*V4R(Zc%jLhFf)%;;Jvd@oM z&%eQ#@(*bCg$%~z%uaarPm>D6IGfIP)NK@m{^Y1~w#koKe`&Jn%zO^c-AY-j*6N8y zIvZ!{Zz0sxQI!J@qIz$#s!BB$PnFF+_a6}Yy))stRnlat1_tnE4(GY5U0!t*#yJX^ z2jNsfy2{T)^nQHTqA?hm>PSjhR=gULY+7X~8gnyr9BXnsWL|bAah%xlW7hL8fQnOh zK!o#?u52mSf%XjLZux zH80?F?aha}r4xz4b82 zW^r65$H!6Br$*5Mz{@B|hDs+JZur#bYgW1}yxWCBMAH)s+ryaLKFpCj4MIJF9uXA?FAOw ziLi|>>Qil$ewx2=`FK^gLN%LhbiF_S zX3%RO(8>TVlh?;V;ZJFrlD{HOUTx&UFf%xL^%rJv`4SFO-!GHbk0H#4BnsAH%1XZd zYVt~VIo;r2g-j6fivcxx?F?35&0YrsC?(+j_~ey-n({{}T{$Tqe<|m#GeEms)6@CZ z`PEyu#HFfIGg4_MD7USU@^QHK2}D|&%v}S~*2r6!a6sm+J7DBrG}I1si+}M`WiX)T zuH8Yf!9JKQ;uiyI?iz+jCN8mH$T$_qPoX)C?y2`fG02;b3Hu18aY`8t=42vwnVh>~ zsw?7FCg-lfg47&v!d94aL7BVGhVE5NqYxa6lYZr8P|aQ2fp8Ppe@qtfivcxveHg6A zUAE!p+%>4?uDd{e&E;6)ND1ezK{aDz8M-NbN%&;UFO& zGwCCg_B-UQFqGXDZ78x8889+9cMau+$qk3e4$0j00+6TDEPE8Izix9OHFrH8gvDS} zJ3+)R2Grb@e=K*M%QpO+yN1-M+; z=Wy;CQghcZjPS1lD__KG5%g zVZu(@)H**iA^JFAa zJ@S7@ZI4?|TnRGy?2^q={5U!u!*M%X^Vh)y;w~s3U%XG=3Yy8;7Y84)V-#Y{GTR5) zDVx`WTB|v&*ejczgN!Jc^)A_@FL+J1;#RZ~Ft1{xM71VAw;ftbYx*l7|5l1JPhl2C zm}npa4YTABP*dLwiLeEN;1s9BW#JfY*bM!-(hSQ;T?f478|CU*Riy0PD{hPkak*L@l}A0 z&>|x(KSU$p(A7p-fq?1Z8L*sIC`dFs61r)v1j!ArAg3semJ7qPXsK9`k_;x1*2Z@m ze6B+MEyaajen*bkx{Or5y=kS9fsncx1Wx|%N*3{ng_!SlB*AdgCYNpa9*5Di_TkIH z;j8_b%aPJlH~!ghi<{*5DFXV~A^Z*=KSDASMCA$d=~O^Jy52GTARb(+%iK-8{S)o* zX80avs-42S@Hh>G3vnqs{Bz|hRY@@AI0|+SFMzSjTp=`@A7CU<4MNlmSAy4>(g9L~ ztcV~XXLc@)D!@EsmE$D&*8p-phl*L6`Z6AfeLeuvi@09JW!7<*D~0(qW2vnm@PSK> zmk7F}%`j!=P_v6fW30T;OK97p|V1IVoJBTPkS7 z@S~D9{6B&m;LXpJgUnTsXw7%~~aIk_}v;btwsO=Zca z=D~|V=#6U#t^^T@;ri4(cobOUT(*(NUe1@FLUWi0`~QnH0=)T22{QR0QD-TZb+7=N z)F7tZgE~tu37vq)9l*_%vTa#ZUI=p5a!|U;Af8bY?uZm*>m#GJz(BCEl+i{IwfT`z zDu~+s$cPD|wm&l33KEn3kBoMLs11;e_JXJ#kc>hcj`=DAl(o^$Cmyc>;&Pq5* zSf81niY!?W(7PVpK6xyE6=Wq! z#xvD4h5jr9yEa**msn5>M{^x`27d@vQngs!Mh>SbnQEGXSD%jV#Ko|q@{I+Qsp2mC zK>S2AQaDG+R4d1CU8*WJ3}YY!c=I!Z0hWcIH5O#$28jmA&6Jf}C?|}@na7nIb{(XF zTX|f$Vb>u8oUkRk6QLrD+YZxVhCk_RW`l*@P`4nQZHKlX)PQ|!vPj~#!vkPF?6Q-# z9kzk`lFPBglims24kVbLfWP0BF;Wt?9getErD^!Pf)JomfRLXK2bt9%(M+zdu=mgv z!&E*?#0alorRRpp4a?RcG1x1TMG`k3ZU<|f z%TC&ScmmWdF2@>9+liYGuY>ir%TC&S;F!VR<`t)~8i$|G=0g}pa&Rek#iTSAXY--G z%R-TKf`I^Uer7GmvIr6lRsbrIRh&PIE#)oX@){ZW?B&+Cz8Qt|KS(YFh2}Yl6S@M)2luV)~BSVa||fp zN-v6m8~v;=Ha81NU>ePSEsEs&vR}g~mww!fPRY(_f_92;%W5T-^*C}c8)EVb1`0yl z$;2zz38XV|RpK(!Wb~zEAkT_Hf1*oOudmU6(!6=tgvp>*im%LZA&V9B7)S#ML<+5^ zVB5R{1j8H(la@?j;&T+EAO*Jbg4c-^W1jM`AOd2(L)^Da5d$m(KMOm^IvGeK?79XS zfg^YfmIcUuvf1GU=$D_lXv3a~v*=Dh=tCMO+v$+W=43mwb+(jofG+sSZ&M5C0wi%B z5d37GQWypxd)8FsDV=#J2=PV}H8y>j7R|i}^ zW_|1okViQ`V|SS*pD-3lrxXTg@g8R(@u22L_^us*k?(LxPWnUKDEts;H{_{xI*vac zuNKVRv{olj)2YP(afCfoKTuA@B_;}B(`ZGZZ@`*}=Pt)YCv9RDsOi)a6CCEQ1hNd5 zn8=5s(TYN20Nst}!;T5e&*Wp)KLlzzwZsIQ*;7DX!6hc5@K35Fke4e}Qb>gpVeTtD zf906#ug&=~V2&1GE`6IkCmIpHRZ(y{;S#eSARRI5&yOmzR4hc&H=$_Md9D0^lrtogJUY9P2B-%I<=VLA)G{R0upuP;+s4F z1hp+&<(s%DJCrlvk3jvv+1%-&ZHnB@sw&$pGV=C=W38Ur?rNh%ffEhm3v@yZsQeWc zLh*Ir0Fe3F;j}p(KjG(ERA%^Pl-oqBFvPfV2?SGifiRdFX6ictt)g6ZE&V{T&PjWn zl;SW$-eD_!9^NCXB-9<)1S^A<%xsfgoXJVW8rqmfOPOS0Q~eKQ{S}0bF3XxreuN7s zt8LaY@VUM+{{tmp&a%NY<$;^?D+UW7|3 z$a)lzktX$$TZSh8B+x2cOK~MgNEqEx%ZFRQ`h&|xN6b3SPhoW%*d%8$Nh9+yU8#)} znT+{z{s89!oQz?$A>vkmlQCaG>Ywm%j)3?ijLz*fe*4J08#jw#C*`ECm?uD_tU>FL zEFn>J%olh9gf06dmu*NC-KV1Hqd~pMI76`98b#y=I{FwDVRBD)Qfq^t0XX}DDuzxX) zVdF1r%EI}EIZ%pB9AhbIZL4EEN+(8<8VDhQQv9lA9B zU6sIe0Jrsoz$d__L1G>*lgnk_7TlD;jgP{83j79?)mngi6iQ(EDo22&$wsU!jMM_x ztaAi*f%%#ixKRsK&2a>5Fb`^hSG2&~rH()>V-I@bvjexhL` z^#PDNa#|1roskXk$Vj~y@@==^HW;*%G(G1Ekj$b$59EUho(s+da(7|eH*()3H!rvj zkJ+w{^ci^HPlJFAHVjqeaai!R3(K&;37Sc&PfE&2;Ra*a*&`+?9Y3#PtX~DIEE@i$ zV}9goNqCy|q=qo4t#3t$FIRq;$))3`SBwX5L+(iDA1vl4uGa=dK)naGUOIl>#klWR zPD=cv$;ld(j>dg)4g8Lav2KQw2LDEJvIc`qOkU|-&(osJfI6r1RU%*85U=f_YvAbAZJrTQyfs2uIKVNBvt`4_SSy?6O zG{6@$$-q-Eu)L$#6$5fs*w0t~afohl3=Gl+*vgt2xTdGrg@IPirUtu&Zy?&&F;J%s zL^+@(lt7RkRCN%$tEU=%_7&XlJW{B9AD}h)<~P%v+k-s@rf_(Z0vXIa`;vJOz0@&q zvo^q>FADqFcTI)N1CD0A?XoXQ z&^$kQF0y!5Co#CXGLy^ek%c0J*EAdsaS7;WPxlxUm**=-I1}KQ~vAfybu|)lMa?bxiQ_Am+X@IYp%VUf^=z!zU9}b}AR(GXH{` zCFj{fvVW=q-H(HM1+K-(B8h=+_A0-3*+#k(=%zW&RD0nO;LXp3{e*JIXX0)lqWC-b z8Ybq?`4-LKZID04W&RO#>rQ4wd_lxR0(U~fcqWMW#6X_)2`q38(avQXnSC;_ z{#cCLdeCB-44N0LhZxbeIIDz&3qv=7KNf_kuAcR0K-Lqu8If$tvVRs263ig!8w7JR7x& zz|mx+8_3S$@rJ06;(=V>Gobwd4NhpyKQXz2Qz@1geGz%O5~5tH$@GNN*REQu@EVHc zNB6@HL`)Gm9qf@>#K%9I7$^u|3Xw^m$~=K-ShQTt&D1uG2&NK16(YrK#4LDXc zZYrD3d8U;hd`mW-2_g~{52}?|9#}lXFKo=%06OQHdI3DaQ3HO88p2Z4EU}caR(vTzO674hFf){Q1zJzq zNWh_jC|ftSY>Bk8D$umvfw}jYtX8j2(@uq`lXs<1RsV6DQe#^ z#rhtea6Cc9L% zYi$Hq!+wA_KV9|{%HD^93CA)Cx2;1S*dMhs0$1SCUSc|v0Cix9){JI#d63 zbT8zgd>GUMTr$SRMWiP%RZqZa>rh-`LG=Wtipf-h%CrBV7eOeS~DIIM4y|lL4>4a0I zgZ1UvU`E-&`U;}o09GBWPj#?kK)3*x`5ifFRPjj%t54LDVfop4N$!2BgG~WJpQw$C zNC)dv9jrc4E2gD`^{Eba7fima6OFKg^{Ec_b5K9f9PB3oPFEdl2l4_W_-Qc6Yz2v` zUN(@+@17KrU_{x=2J*vfhv77Kk^$*u8EHKWm$@A`>m}S&o&u_ueHDZ$xaQzW5RqOs zpnBQsz~bO5Y}LyKR4-c(>Rp~df7)^sx&LOp9w;MH$VLd((jszv!egO@G9T>3`QV#C(baN3=+Dk#g{t|WU(E+QfZY|BNjpYo&IkQ!KFIRpd{D;I zvmkPg7VE}qp}2u!Xczqe58Xd&1q1Ri>x;NuxWoBtSNWP;%v$bL4PLgx zT9vsJlUBWDJj!(sG2RY9|Dz`+fletLY$E@e@mY_ScCj-X8 zoK{MAqLDoZx(yKe3RjMsh|!CB`;dV=ED#3{QC7Ptqp;cr)Ld#Y`8-w)_xECsTs&82 zf-0%+bzIG31)-6L5c`pOF3nHJLpq#-|t zlgMHT%yacGgL;D_d$E?~LAzwxKSK69PDJ!OE^r7JA zD63(37CB}T$^g_{YO$Qy03+O1kQfZi zGs5iz>5|Hm-r@Fw^iJhb?{J6E{YYl8(Ieb;Gk_;?_2lg`BV8>EopC!%uKN14865_f zf1JtN%Zpvb)t zVQ|3|kw2qVI3j9ZLy=uzzotbVp_KwoeNv8#aG!!ApK3OX3Az0Qm5;N<_rP9?bGBG) zC!Q_l#D~qn*-ymTd@Y=_#TSD*E1BIZ;cPL@nb+aA(v>lKC!8%7 z_8ppKgjsxj)RHhrI7rv!;4jV=b48lsoGtDT*hrPL#WWI5m9xbJ(^F>PZNS-LBGDA* zY%!7ClojL@rO|R>igUJ@NQoR@cFq>_do)9FndR*L&SXNe1?!wG9tFZ!urEm#NjzJ; z0IaKBcGB76I#BO-Ia1i_#`?03XHto0iy7p9p}92nZBYTv+2Z%W|3b@*rOUh-iD!#_ zAjqLq$q~O7q*9dxBitKw&K7q8OR|j;eHtYeA|w!tHAv^%aW2iN zQZY{e`1GOTi$T(}p?leA#d%-bRQ|mT&W0YsWs)O)E9WCTcNS_AbII#IG zsRR)@K$@-&kXC?ow#znJ<9uYgIzT!J#Mv&x;&^Vz0n&7JfOHvHjPNV7!Y;@|n@d** zNa^XFE*r)E7IM^v$2Zq!Wn#8S3XMGIQ3U zc@%MBoayw=R?z}t1*!Le6Sm}lDNfLS2%^Dv9+&wbZq|C-R2gKdmGKiGw8zyGSAvMF zj5F2B_!O`zT((*nXR4L)1W?)AC`B13WM!PGR>mYO1^aqeL>*ShR4e1(xl~IOjqr2K zHQ^wk5HlGfq<*d`Na2yuNUmsvN|fg zfe^)2j4MGzj*Ldscm8;wV1UauN|gDfI8OYSg!)YDGIc;i2BaoOc3U{Y;|Nb zqQ3LT@5!%>b9iJlqQ3K259<9cN12os5>emzd(vgGJ3_94yoFc{A%Wfm)P^JLMk|ZW zgWJyn7+D;b*LS!X@;oidxe=p5<~e)?GO1$a$Z63wpdROPtPAxUVyV-j%;hk!M86Bulh+O!JiizilJE|(|#4Sz7f*5QezkxMt_R=oj}5$L4Mq2S!a-|8o~O~Wvf7fUws=Q0Od4XDp?-`34RqwC&Qt70||kGC^tk^AR(Xv2{%Ih zRvI2iP9{~bW@f1N0Z@5%RXA1|*^>Q$iX@bS@B-L8w2>epkp!%u8LIsZtOG9FkVry6 zMH2i_PQ|5CEnp-epdtxfL2aWsMtBnRok&7^@`5CU>1>Gk3K7jRq)RVX2< zLJ4ny`kv-Q7)pq$P{J23)rv4hBYY+ZLEb|2IV5N#V zI}AJ%mq~^ZfsY2h8geB#4B0EH5o~~=FeUsKL!e#32>`M77|l-PV#szZ96^e6R^T+q zbSdP##NQLlZiTbRbWTxR1ZK~|`5yKFb5JX;cKp8q zIJ7m>^z(=2PHe-({9OQ^)J9Ty6apu=VJiOX0hYB9^8+C;td!>codKRwDt7+{f#IcM z_gjFcmx$f104rLHg;xNcp}N9yITN`Xd@P01~^iIqX3?*zzzV%v=U?O z0iIhVvV#C#sHg)0P7vy#1yxgxymQU80U!ki^n$a2fx~zoG=}%V7xR9?_q-1YqNW2w zvv@zTg!hy0CcW%o-iJNK`zg=ye(Ef8%g6A3`aDu9e$D$Cb-bUshW8Pj$sNi4p1|2B z@;<79_j6t$cl6u5kNKGQu?KiRw~E~JF2>y`IhiAIZZ?OT!3WU@c13fuLmX?;QP5fJ z>WxmM--TRVifbV*lRwpA72~FO(?Mg+uGYM^XEGKSz%R0xhMQ(hKt=t0rugL3;l@Gd0E>|eM+PUyqLga3f=FwRW*?SX%Q@(!+S zhPoaEv6SB)$Y`A{V{Q%$;ybY2pM$iJ20v!~#RwnfQi(?}5QIDKV&@klzf}@OY?e`! zE+w~m_Hol3<{J+4l)W$K8V6DC^hTmRHQ?gTIR~xM}6+98rdD|g5o3YB@;U;b} z#ZpvXC_jtU)0H*ciW*&6za0n}h4gP41UKT@;Diuofx(Yi{}!lGT15mWx=@}oqWne% z4tqs^E6)i=9(%P5n!G+_eTZDryLD7>&x|l;a^#n+MdMa%CCS5Lw1p z_kcRtNx!d@4$J2USN1PbyE9uYGTP?L8hG`@R#zKs+bH;aBZsTZ5=6k7AL$FtjLu~hvn5*jvTbM-(i*?ruoBPa-){H=s8KP2`aB;9 z5AEeKAay^Hzu_i!&tm%>PHBFgWuUmkCK^Pqt%2M~m!9 z=_KyKGSruWD<0Vs5sBv(FB~>{9u5U~^E0UDCzPpnB8wQ*I}at9 zA=`|dBRtVtjiF%)1XtoRR|2u58&V>@BRu>}k+onys72~Ho+y!Ck#&y9cCdN)S6N}X zI3g;jM=PIz{iPOR89E{=dPtEJ_{R-RWhDc>og<=RkQC_-_8={iiDqDAC2X8hmUP@+nW%Mvb{W1Z~nV*2q<2+)*=*H+_O3&aH_#vQ_jjRsAx-m!PJ>fU-@`rNk{6{rN3#6+KKt5pnkXFNP++c5Y^YVe}M^vr@kr`;(UhA(%jHlK0{||1*su$oUi$$sn8jZ>_||L-`BMGMQ+uW(^Tk; z-#T0lk(+RtaS;ifrK!-_-C+IMWvkFxnhKrq*FyQb7fMk&;tW=GT0C^N5A07|5%p_X zX)1IkUp$u-MbQZI;8K8afRLY=^b_jk9CVNpkobfzuMy0UbI{=s^CTz9oP!QyK^TwA zy5}!y{@rmofs&&~aK7pT|*oE}& z1od9cNoRZl5py0Wa1&qicgSmyURw0!}vscERz{allX)`kHI>LParbLX&Jwr z$uD-AWFW$TNu6KCCqB|tBk(ZbASKee;iV2|=5E7GBE(&f%=`>~!AJd8c&6I*Xa^?0 z+ha0T2;A@s9g{G%5}(T$s+Pg;Ssg#F&?aGntd+}s2}!< z=sgcQxeOA&aiyee5VyVveb^sByi+seSL`Bc&*Kr7s!GfV(oR5bECN4k(=QNd>bL%) z+5bW7iI8f982FFoIxjMh%|%tOj?D?vm8|4|kA zKN~E@^@Obg|4|kAp9$&$mt%bi$dJH4;*f6vUI9X#%T|GZ#34D#uLJe|IER7%s0#c) z11gWwDqqB;6jM|M{@-v}Xc`Q226*$c82ke9(7*bzzpN}4)CzP65dx}*i2qDPdoYf} z_5bnqCUABYRsQ(B@4kBP^^)E@>7=uCXJ30sIvXVH5wc(s77YkCo$gN3&`HNmcL=Bq z#O0?W&W|{ZiXwud;}R6NQ3ELI;NZB7&M4xzff85rC!h}MsQ>Tx)Tz7F>t^}={-1eC zzjyDqPMz9LojP@@ZrzZYB9No2>#gH|Bhd3)NN#T|B=y$u&n#Vm;H$DEatL6(b^O!O zBz&#)9~79Y7CMYfV*|6yRDlpkR zvzF)WY??^ySt|px3qPyG)g!(#<~+|@&a-Fs(94r+tT!~E3bf1emvQXnSB>?4Hu5>T zb$pJFQ;XyH%kd&;qJZ#D5#(t5bWt7{VEi zO~EwcayBteV-$M;NjI^cUI5I!97GH^1cbM~1!x_;MC+Nrv0Zbx4WmeK2UO5D(<>u$i(^+b(<@`IcLi%{y?+zba+h)d9ycY54`FLYHBrEZJaMsBWA9!&e11E|-YcFhl1Ym(P+Hg+cBnf0j z8`>G|Ww_sqKRM?tw85OwhIU5#as<7W!B5~zgE^xO?Tq$qK;M%MZsLqKv@=?=3pwNY zXGaq>b4D9>6gZ=mVCq!ijwxyVNAOj_r0s!wQNswzSm3laYHl54d25dZ zQ^}`PdrdHn7uAKmU>&s-c~e*5ls1|!H%*2A#gG|QWZhEWls0OWo0-#^NoJ?CA&-Z+ z7JoU;_U)O+EmI7_?VOfpIfs9b@Y}L9GO3O1q?U&Qe98seNo`~&wO;{BABSbmJW8#G zJRCaY#%epMjqIfMkD#ms=uroDSBag}&PI4gOvA^F>{Cy&B_^_y+OvRiB5(OnU~HQM=1YprF0z?6%NFG#vY9sD-s~_uf2CFW6Y4scLMgBR7@{9k zrUNn4$dog!Z%r|+pQ}vs{g`hrwI$vzHCKPCt+^LUdJS=Uv#6_PgYnnZJ3c>7PV&!n z4(Qm2@s?OKV%c#yzqN4a&pufE48`qk|85p(}9|a)ZK!3 zkaZ`_IylsiXFsY5&8|l>xyV#R59|K>IjX^4zyRjT=DbbXXX*?-hs-~V>eGBRuSGWA zx72nmC-uqLcVtOKfVl#8Ed>8PfQ&QFlqyrl~gSMYW&Q2&ZU-C7>*agH4b>Yh@P zO-drcQsUgP5wr-Kxio}$c_mD=$QLI{ywvOxpRN%$DChUO#4F>(U#ukOrW3ER!AQKF zGMFu6BCJgz;5=lS z2h9IgHCih}@Ck3NmdH36>f0Oc4aIk}aCBlTD6TqS!Lt-O4TOEY8m`pRErd=^PF^yr5K)d_ikPgN zqSDL<(9zB6i*G?IR`4$3MC*G%e~Ldj0zCI#gxM1eBYB#g-Q+KTD)5`4$V+tlH2W+B zQHe=#P!&JT{z+hMRq@m8yluyOl3d8C$Q%l+uNd+`-a<cpbjv z!Mo7a`=)VNyGxmkxNCptY#P|`W(KdiHi@Kj27UMIP5UPDv_kW0Z)}&M(xT}m#-KK!p2IL9<~CRz8~d#H-4SQ zSr;eS$>?C$bv1rZ;II1#zJis!y!A2? z$Vsk2Zo*B9pW_S)Ris){{4W@?JX*USAwzL!z8ev8 z%ZqOXU#{xEDhc@zljDXIV4HYabl5Xz7Sc;om+eiKW{{kOvG7_Ih*#kS?X=Y z4ECd$PE%0x@Xl-1=FNsDdy`4f*+JJ^=vw;iW!NA)Q z;BqaJoAM~Kx279xLKLH3Ox)T0>sK3hpg_06(2Tx#nOi?=jX2zk+37Vm<9HegR2@J7NOXl zv6JTw2s$?#T;SvxM<#Ld%vS3~@ReB-nLC^G+}XIfb0w>xieI&?f?8g6a-wXeRr6Y^ zijNS@;@2+sv}(;(v}D73098b1Twsl!noEGqu-NSm+Y4;2#exehov`FyQDIpf)Qp2> z2_NdIh^|nYnpXi^X0d~cb?FTKTtt?|0pa2gC1qORkF&=a{WHd zwy6=_B@7Fe*KknB?)EdoRs4M`ZJxdyM?U67ZmvK!eqnXXu|3UX^~;#kN_Oe!p^zI9 zg5&s_>gp(1MMh^r-TfPWKhtfKd4HVD!$9j9jq~R^>Wp_3{(#%hcUa0lVG!geytRO( z!c=KMeGJsA3yXliNDW~gxnZf#%2J=#{25f~T5XQrz;G1e^C?fCX4Aow-x`z89ZNbp zq$T$ShU3{Afj*?Pb7R`KmCgwW&^)ry)?gCz zGZV$!*&N5D)%1PPyss?g(-XzqHZ_h(bBs&*2g_ov1ez|HIZHN-tHWw~9S)DW%Rzk=qbvY0b4vXsSK z-58gXcKCYGjFx$;_$Wy_<}_^0?wU>A$I~bbP5V)hT%-|a#X@tVAF&UHf2)hw&O-ri z0SO;Nk#5g^6ZA0FjgXix;^o1{G6)4yq<#GA0-UN^<1QOlS>aJmV<4X0afwKf)p zhz5xQi3<2U8e3+h13uKGW!kkxF4JGed=pxxK|BP7)*s^DaP_+|N5(e0f>X$@ey2PH z5eCoeaef?Hzd#Y1w*h~aHS-@toFIqR zFTnl5Jl`uF%o%cM{Q{d1w8IPL6gjkhfdK?@IXfMjbL7za1zv@qzw?4QNe-=F;9Us1 z%M0c#IkbL(&mo9QI%(#dCWqE9@CbtF=1K*NKP0q%0hTm^Y**k~w0;4GvIi_m zLZ#H!FTl{#5wa->l|oy;07Lo0x&9LBvcA){Q?aA7DB!ohfbwmAhdn~hCYRmKg6MV`UOJk7hq^T{t52#WRp1|zhV*TqIo>TduA zJq6)6f#>*!w4j=E`l6lF)8f7p!5_|&7|!X7Q?<8pPLHEJDdM5woW9snU{-R5bNb@+ zBC~D`=k!IL(;IG3De9bFX5&RW8)uH2k!UOaBu{oWUbM6EPN1vfkY!Q~I~xxIt|&c};(KF;~q>yr@9$BTA8{tlpbxe(EiR!uJFe7vah@z2Br zEM<=QMW!?W;m~um=w?3;Xev+mA2X3ORe+(I@~u zKDioyDH3@oO5YX2acR2?4p!)j71?35EBp-USMaMqq{!5Zyq)n|h`{1}17AkT_hmNm zB4}bxn_8bj*aEl&?gaG*@E6|5aj@koEQCn&&aY+c{Ioygo7?~Y!_nm4OhOT(d`opb zSiBv;FA*%8{mI6XM8aTtZVyN*k$fHgY$_4od1x96r{HHk(4}$6OfJQkX@!49s;q3R z#9R%|n?bNWCYr^C7_+eOLNLbj=_KGw=Pd7_!24!;JM#1EdEH@G?@IN>OOakJ?@DqS z^*a&i1B}=UJjWNf*<#`K(maitLi~9I%M0fc5;={!WY_N=Met7@hhTQRe#f=gw%PIe z9dGSv)Fr!q$CJR9;LoPaPM$l!Ma3)J6G-lG6`K5#EU4H^n6Kgg|5$>fQ_VBQC^t z@kTDxMRuW%$vohKQRC#+&1!oTe=GTQdQfH8=_(jjU|2I3>q>L#*dEiwHCIvi3#QSl zig~s+j?fMl;bWXDx{7i4lJ*gNq3-$6Sk?SS!fQs+0H&@ICdi%06FwDG z2?c7YB6VVsw`=8ny+!tub*vAHB+pQ|K7DaK2eX zP03yUSL!6?k(hQoOS>zmp}xHt=yIh!EvDsm{|w(cs_qW~{S^MBTud>TPr@Ie$lt~9 zz!|ncn`1VQ0j*~&X04L_FG7F5Na>P^5Z@9f$^8l>q^;}1#Vnvazfh86NHCv-_aV70 z_?@k6R>#TFWl+yp!h)kE_x5 z*2YOuFG-Ghs2mrVYiRL33iLx|v~(3@Xe()zPJsfsQEBJKeCaAk(W2I9-*PW|x!3Il zWwf-E`FvQp*KM?nmNxe>pjT=h+T%RjRz}M?&3!;GQrbi||Fw*kQ>32*Jxyt09LguW z_4j48oWC_g4CX3rYfQ@x|CxHITMXJxpzHA`%_+zEZ6qQ6HoNd!?zgFD3^rx(V#p6? z*k4--rJBsJ*Ps^UgJyJ}2hbe$@%6Coy#T9esOiC!+i`y>{=yI9EB6U}*@tuVV9FD? zAI0A*@s}b=A53`+L2q%v!CYEuIGB>`V5x~0!k!~eq`>6m9PtM3=ZG5a0QFVKO(QRY zrmF$|1b-)S^Gp1Nf1!w13+>e0+Ys_s+*dOD49S(y;cb4SX%!zt@Du=Z5xgQx5($Tv z+>Ib%8=dQdgLyQ+3QdK35z>Ij+zInprYx_{kmLhHpqYD5qFFV(o-Ym}9HF%hQ^5ti z(Id1%ZZqfEr{PY71Pdid9Z8=C%-xX^l#@LY^1z#(p>+i!d=J4t&61?g(Bd{hK0src z%agf!hE_As)+B_!Bt1i`6X@zVMBe+LXJ~PjZ8-(z6^y_y!+aN5tO9R!Yvxp*H1KJF zi#T2t?W6k~=w-wGEo8*Ac5|=8mp%EjXb%S^jZC&Bn2&ov62;e3YP}MYD!V~Sa|$Dr zTG_2zvc4WZS^ot2a)VRO2GiG5vc4VzlwQ7&lU@y`ucu^vJ@bKfW`h^g*Hf~-9E7F&K?Ptc{aJDPFV7#*4dNib)H$b&+b<=Jb{iT&+b<=xBi};t_2S{ zkVUBl4>|C{KDS@dQsj+&Zogu>+}P*#D`r%Yt9@?2qE&8YR`Vf;3j2@)XV`ziUsyyZ z$yKwbh~!k*XB>ET)iOzKYv zfFXrCsj!bYyb=K4pkR|>d9?CZq4F#2BMx^U{39_9Utf{qmwj%(!am~g0K#SET}rfw zG{Q_0oU#O6yTU%=@C(NX&2T-E%jZC=dw8dlI#0B~Mkw$~-_l{2eUYj>ucq=D{;P2@ zgJzV8&8X#o;#Xzx(du9d3v2A@o_i1)5>2W_O)WFOkx`e?(^{yjW=~mu5MPA`91Gs1 zW|ur5oU5Z^`vVHp*a`NfCN~}V7rryUc7dU(rc&o25nNIpVi45zuv&72+o1nm}SrjxDxhu$@ zho5dSch})+b;WE&cKTSs;fN*#bNSInJ$5I|8em(wVDS-LF z;Z(T24n=%7em|t9>k`Q_GkqLrJ!6qY4+Voy@RwW4oL@_F^R#famxGq)i2on_NpcJc z+DJ%CxdD2y+){1@TF+RLV_GYVfvm)zu(+G~T1_Ha$~*B}ZYkF@2BQbpVKzq7>ee;r zVTozQ5rZEd+~htln2*Ni0g8B7;|ze2^m6OUtmCM;FDg-z-i5f0yr|!ZmF`zU9qkA8 zA^e5h`4Ci}v+3-h>QRK9O04?4P1vxpOmB15+t0ozm}2xcUwzi*7X~%|rnjZpufkPS zJ97`XGImrKR=f$B z3Iy(n3Gy#x%$b$<+5>`Jad^Sv=2PeS-QQk?C4 zE`E3%xtv@iRa^KwGfyG(uR!G)7AZd+8+K=QG{1Hl zf{y^8hFF0=TMI%`ph;xUULwUg2<5&;OYurF5ehrUC&eCwzAUET338Ug9;-wO9!M?^ zE=ook(H|_uvRWQvMv4!B;uA5Czll>>Ui*Mjd>`v%W28u*9iSXOmPMh zv8mXzn@B+ms}+B?EYjRk7JEh%DOMtMV@&bJI2C))6e;54$fYbd#}w8+Bn2%zS+@|1 zx09lcbsAYSlO*Ar<22~PLm0(rni!H{DjT|eoc^Z=X z$ZTv{9ZG^}Na`cA4M1n%FHC~lQ`?G}nrv;{;An!mseQ!~yfY38qJKn2=2=5BVxS=q zF=vK_kOy1aat$;9_PH)DLZfMLGpN~4{z*2^0^sRWNi*d@{UI;aA{3SZXtV3IdzbyNr_i$eGoslApHF?%^dRK zSCIb@FRe*=AHwDQaVgP!2CzPCg7VaC&YF}za*R;*+|q7nSLu67=QDeTXhb$ewnUM) z`i|g;WsrI{ysD#J`MP`)6+1_%#&eOW`f~uj1PX)87Z>9%d;x;6X%H}Wijv#DW=71< z7y;EdC|({@O_6|^=B)_--$38yLUKFEMA|4nt9}K7F9z^Y1oN~aNy3td-bL=d#_Fq+ zw`)HP3bC&wBU1T!YvR(Z;(7n1uKQSbH_%{S3AsE3Y#!6oM`>aCtI$H*?9tuB4{k5fpdfr^rmLI)Sf8 zknIS6T(%IC?9&JiT0e~D`EZ#T+qxONZYeWkdnk>Ug281Pv=J=$32)sCbT!S`tw>AE zwB4W`1A3iHkRd?>3C~5(xC6hhIMdqC>xBu~d;n+_V+jkIB%j31=kObO7RCXZSc7I|bVXduyz$OX4IKCI^L!I(uC&??3f7Wbo6 z8-eU}EcjT>8rj$+-Dxe!xv}XWe##H_5uES`E zdGBVd>eIrU*f zu@2UAu`!HFRaK`{kwJ(^B}51NiZI;V$otB6q|*tcsv|soI?@u#MbpXPjFxMslLj6L zf}#Av?lz8*LM`7X}(_`ClQ0nvx5n z8m+|kB5R~ZD!{cD6Rky-<0@eT)=4h3+TwH=xjsv}62uKNQ3LC$P$NwYR(5}qa1 z*4zips}7)YS5~p* zU?16l12sLMEM-9IwrsHD&7gJ^IU}%hg*K^2C}l*A$ylzGHdu_|QqVu6}%o^9);SqMD-uOvDxkAZGYW!1l9dU#(1?h;pJPiB(BHTg;TYF{rJqicRSo z+kwJU+ncF>*@Mywr(B6tWRvmLQKfC>bc&Crr9gzLSqB5gocGhhRC zS~Ij}Bm0_R60O71%t}j#?d-E%XP?8)-j;Os_N230{SiyB)9X%(Fi@2V1_oU_hNZ?@ z&9>FLMJxCdbnI9VAtAnMsZ1+{Dg*P3f>u3QgG})o1m}veL26xt)VT(czUT&d+sqBw zT5rsX6Q+&XX2__D=4_a!D$pl0A}pf<+hamhJy~KxtFx?Ks+fQ|jj@&*V_l*q)~m@ZeUC=sDQRGHZ0p0FUaqw_ zWTA<)f$j6D!6F%*Q{CT}0B6^gQZiX(MY1AW&y`87&;&bO?CzQ9HC5#uiAG_p%`l?? zm9Gn8jqTZl86mM2VLWVlgMdG|iCJ1}B#xFI1YnQ225MvjH6Z~nm4#xg|4S}? zX0;;K)Yc$;?sL`l3NgPkikuVktao6_WK!m}b-F`(O>H}rOkgn~mU>MFLw4Z$bf09g zFaaRt`YK0fHF0Aiw$`Se!0^A;A6}Do6)Oz>j%@#928?O|Ym6l$qO~UqWtD|x-wf4K{_Nw*mlCm=>nK5w`SSv(51S!W&tyG&Z*EvSr zWQ|onmF=n`E%looYMlec8-X`Bx&Y6(v(t8K)x`siYvrksa~aY+^DWVeELe-{xzm$Q zJHw6|$=K?K4-BYDhqa=B(KHQBq(nWfo{YpPKT+INuA5~eL8vp`<5}i#i40Vh^-E8) z!m=t?wZ2}pS&p4UdDt)QGgVh1&5Uhg=XjnZlC`zOG6AuXJ3A4) zIcfc4YoN`VLG4aV=c11XcnzHM_{>ia__P45ZKZuI-G#B8G3k0#6^qjKO<-|amTCJf zVHD?lEFVa+^_B8SQ;tSgVAut2OoqlvD-BABH~Eaa1;gyLL6xQziLoD%MB(?4JLrWN!B zsRq`5yfE937iGn6bEDr;A;#%J#SdQ66S&czLcf$9O6CdHOk19f&9R4Vu)^;w9e#J} zbn~ior|SY$Y_u}D?ktrZL{|FX^BYEFOl@zlvq~5drQnqIMz(oX3v!-v2F8|O$#zh& z#@%SliF+lgI?gVEbnlv=ho-w%s^N4gAzPE#5zOmiao59P<#wK5pOWx~qz{Sj)mdY& zkfuSmO0<-AEjw3x#!i*ZUEJYd5@cJ$CPKp;){!pUuqDO)msB40iSGg|^Bl}fOOfr# z{?L$^2eUIZYUfX!ug499-Y5e`d(k#MbJgxfskw}8Wp|$KT6RKSBTmdDl?B?n+VQ4T zv;yYfwqjzkSRLbm58C8S>PudSS?yw{dX~6_hox+cQ;?(fsn(&eY%)c&+@GxD6|M9F zcDUgc9V)F^&_eNK%ud4N@ze#OdnJP@I#pT?*vM8cR-tY(19wk0DbmKpUM+Q;(Y|Z4 ztjkr<+Vw~PvSIAf|%VPxSp%UF9Z**%jzE3%`NC@#V*7wvv=rBgG- zaxR)FOP^IH&to|v%O>vi%zjN`D`ZwA((2_Itk(&8tDVO{ZIq~uYiTjt9x3z1tQNzg z)hKa#5+(L)R>62SY`JT)CEcP{!B{VJ+*eZVH6u|GtyV?MWHVvLA1i}NT!^mQ(_lq! zH;MjHjbu)3U*$Z6&OL2iuxbBvR@$tho$m&K1(PX`g}&mD1yCp>r}~yS4T2@l$u!8a ziG#2;G|?a{d^ORLjg(Ono#kqx%vG4~)RZ_F18EhN4#w6N_V86n5AX4NxaTf(vbDyk z;=*Pjv#M2$bCsZ9!5=OhY`4Ozj{ z7S1Zx$y+w1vBjf0Nqe$FttA;N(WI%TB~9Jps|#QArmcz@*{)|9#%*s~H%`vlF3iWX ztRlxlrd9p3vs0bS-W4k|cE3s-&4Qw^?ZAU+tX)-{NL6Rn7ummHVJ80R1!)x`W~J|= zF83(J?fwj|X)B(oSxq8s;*!pcp~=Eyd*k|Y_keSZR-M}3w0?s5O_h~3yQ~pv}eF}BJmnevtDC*lCX}zp+WjqtsPTp7D3Gb=g5v3+whRG0%3m z%ml+sYKpAE*WK#RmslY|WxOVNv7Zb0A?6-C|B&OZ1 ze$RthoR(PIo|C&bL}cSm1}V|bvM8}y7F$#0{};t+4Sa9e!=717VbwIzMa!~7H%%Cppq0DG~G%QuWZRARUn<2IN zSrfLC3Cd84tQdFo^lq$d!^4D(%%7?O{hD5e^2G8-KgFAhOj-f z!Jhk}yz{1=5NX3A_Uh6&Q(uG|^0gtbKo@T8DnclF8-S$+p1(MBp z(-`aut>%KukLyoZo0Zxq>rL!v-e!p;&b*|f&9@qFftWCv^~i$X$>KXp|Mxt- zRIus>%m1x0MfT!2Zgau+a15ZOzf<*8e5`ML7?C(ra~_zP_G;99+R&ntgO z@9`M6d>+*Mg?j&My31%6 z^w&09dOq(z(TA@V$OW(Na`f+Rwe$y-*sm|2$M+=u{EWD6`S|_KFW=2x{y*y7E1US|MqK5Bi!XBdy=acjFJHLC&;N9OtbA=B zbop`bI)5o1(&xv2afwBf@5^wR3;y;>7vH^~m(<3GRe^YdS#Vq+!W+FwQ-fA?0- zI}(!2727=*EE{w5?p;efwV0phn;-vBQU8TA{+nz3ci{MM)A8TS zMgE(R{I@9iXTkdC$og-7^4}Wezj4aeV)AX}=VM1*eY>}#v@41K+LI)vy{eY>I{(!! zzB`PVr&#gh*S~*Otbfj|e@3l;zU{Nshkquof1a;@7O<~h{KMA#Gu-@Bl5HuIZ>t|Z z{P(Ut+yQrQR+8tNo`2Syug`paljOu+4dW*lRKCOI$DLH-^ts=k{KG%|^F;h3O8oSA zke`9AunNCn82$;5a^r`>fInQ!5#x%ZeGb>PQ3pfhi^o@oCd6Yx&gP05L(^IsHyv9{ z#THZCW~z^x;&}31bC}oRt8x)I^H4P=%z{mrFb*lPhyOD1e*8%WD$mDND77S4%tel8 z0Eco2@au6E9pl$6#NNX%Q-eIZaW$G1nk6U9iXfK{cNN-lIV3IwuA!oNp_y~S%u5sC zT+fBz;cUgIHZ;vonXvRFGjp5iyvH<<_({`+pWH5dMTHY4S9q0KIBue+%rw04D9`um zA@l@8cbTffhY-EXw4C-#(W}NmwAwT*G1Wi8RkK-enyG#Y6IQT$%;flUn<;KJ;b%W)bSd*}FK_&lI0Bm3Nu& z9<%&3Gvz5$yvsD;w$y3bPcs$wm~dQb`)@SqOD0Qt;)bvID(U6xxwQE>^5$&os3|mc zrIW}=cv4FL3eCcqlVw2$W0pP^eDf%2pCyk7h%9o;20pHeqgYqnWzR zlu+=e%o214O3XVY{SrDAYoE$z!rB+x{hR0^IO9=dpLuy4_ZpoJ8-~%=@26P z6!|<~zirr3`M56>gqSY`E6(7Tyyl)oDY7W=k06GrM6Edu70n4vN2$%Mp`4Y*w6CBm zusb=kHJTBcMJLQM(zx!Fk06^BIj1>U`&B2T-1)qOxH(1C9Gdx0GHRjJfu9^wTg2bO zLoPKV5!|GMtQNWmW{Jd%Nee>i<|E8l{Rz`{+$LO`wVscg=VHyt6>b{vSAl+e zNr$P5uH0hUe`=A?+KaJE?(J~ss%>%ZtUG*l>G=kZFU&rO=5`p_&u zp&v4fkDIpBOg%c}7Bgkc)I(3a(?nyY@{(8ud>76B>?$BmIDaXVlP}6yNWrqHyD3;S z9ToAEiBPLYO~tq=Zh@}fVT$*e++C(_+?2+k4#!N@B^(`UZ#Natfm_csh2NRnm?<7( z#Hx3qZW>RRifFXM)UozIXqx#mW)`pwcF7&cr(9|BV`kbVrgn_1Yd>rZz)MXP(tNEn z`Pa0Mtz$kX)o@AiXvl{0b%a;8a_6F*-HegKXHJ@`F=OuGH}o8;7FGW3iLv$ks5pQt20am28sG{V?JbNkpCW>qQ!pFU@D=_W?N`+Ib=#r z1}V)etupO<*gk$rWT2#0$FfXeEOmQ`lvy zL5C8r*kY!2pd&0NkB7`O{y<1ebIE9Rw`n{{#4?uzF`Cq$wB=7R-vg>F^A%t|ZI{P+ z12{L4^P1Djv%TVUc9Cb#ws0ORy*kNQ7g?_CGUh4MLUhbj51EE7rkXhnpDRo zqQfP0mZ;j=S|8JHxqGs1X%G;w5bT;P$iL&-ntoqm2ASU+hr38JEoG3LODGGMV+V#^ zhf(d>wf=J$&Me6@8IU?CKBEa~2Sw+;;qWr$gqb;Jho{ICp=q42gTqtd9_mVT8R;fa zsMV!*Q~48<8&Ah@-kxYav{7NqL>rzpigO4>%P}n9V{-2l*}}+NLJpjFD4MFO+$LrN zovVm?9xcUIS(Hzv=ut+D7{a`_M?!m2}cug zcl-h}N3o@~MzN*%Qk0*-UpqLg$DfGu)E@x}MObOCVLk+5rBE9Rb>T|T6@-Kanh|-X ztc&J{W$YoIBrK<3`^1>A2g>Be$br7AK0L#xq!*pJqB~!hI>oLOl@vKqcvS} za~s4s$idc}3+m`eh-JHJIB5)|d>T3uSwx2)i>kKd3XrY?5gHk@gSVhzCzLgwLmE)l z(lX}cPUNfc?Pzv+-*2KS^OUN*1W>9XN}q_9p=hBxRGFLj%^o$fKy&Ek2YW#AhhI}LEG(N-9adD{RFwk$oy(<;xatvdS@xxYW zSS9>LmWQngmWOdzbjGo%Y)erulxs`fE!Rh7j*1%R7+LsF37aleO5Kl@ZDo_FWvr9td9pE#UGD426TfBH=7kjLi7OmUZqFfYQ0zsuBZFg06D)XCc^draLH)3CvWdufGNmD=CQ zsZ;SW)9@Ook*ydhua@6wM@{`6nws!5Oet-Y>Cj$&BjO9-d?;N?d!q3Y)3nD_!Y1Em zD)!PtgDQsB!u7O&H7$EMuPNphH4?74-PC{(7h9FE;toYH-Gu?rfS?Vkz4njUnHeTP z(bN-|Puyi%x0!}}OcDGg>6%XRTGVMe$IK}=nT<$ji>X7jJ*I7snKx!OZZHcr$Ydd0 zA+v%UDuJzcgS+EQ5OcrAmzo)f4O0hmM&uA~v@sT|bonuZ;$e#YR(l$TY&$P+DjfF11?h zNi%;Vr-0}V4Gg)|EcT++*l6_HrK8Q;XliUUhFofvNwgVz?U??M)p94y^h>R?=t;AY zS=(c%J}@;3PwOxyx*SvUXx?M$_IN+W5_Y*4;&;M9PUZn_B10o8o(B{jX06MYSWukH zgdDG;A9I8gCGM83=n;Vuhty!Uo0AILY~4A?&5-FqK` z>s)5}<{M`AtjRKqbW?u0!ta~IH78ntYB<3j+j`W@KWeS| zoJglzV8e5xaK@P>x1|H!YFpG9n#E6=73xj1G2PNz)B|tYZ%vbJ^AdlKigOO`8s6oO z;wvg_fJeYSw9nBheIY!8%%vA^c0G@Ioq!>6D-?W-5Q6 zI<{iS95;nK85F&WgJac)OmrKJ{H0T^{|B}`2Dr+jMl6yoCSTfST2|m^tAPhEf7DFf ziktIIv&AYGyf&)1&Ezou%v~|nrUMqJ|B9osjD*A^u$cB@{9yRS2zt~sZ^g~|rpaQB zmzo7fjm&|cG?h;=r-dg?RKVEZe5qLiazcL4G;p$b!v*wRMmtR7GH3+Hs4B$>Znu?O zzNpy#YPhL}P2saFzXBzG8Ldj z@oKl47GwjVpbPN^>Ej5#3eH9i-ezW`f*TOr9vzH>;VeXcq?xzaDj35`pX6MO_%S>p z58bszniZ623yx{|LpIJ<7YF_bDAu~$Ok?R76D}Z~y27O_g#|Hee%#b9BbCc*=|lU? zi%!Ti0Og>)i~2kdKb$C5l+G_*f(dAS=_QDINdz}OJVLq8P|Bh`rXJFSg+=&i8SP2a z@G9G^Crs5=(?%>h0xtA=R zaW%~1Tx!;x3qs2N=1$#{HzDeU1ek&<#kxb%cp-%#6k>qHH@yh*VlKG-AkpH`v_Rz^HS>0fZijEJ zBIkC8L|tOWE*wjO+(wb88+OJCv-GG9;&|Zpj6~nd=yB!ytfPwL>lw!sp>R7*q8}oa zStrcg<7Vjwv&N1VLgDtFL_g+O@t|9w5LITk48Wr4+9ggJiQqP;M2{gt+k<$WFa-4> zJHbDp+X2if8v#Dz$yP-pbl!@b+sVRR6f>*`6${Da2&a>*E**8#$Ve*NZFQleVrFK6 z)opsQUS?rIhUm3)cVdiq&~Y;8;}to#35eD*yr5MjEW=?OX~o*qmvc)Rt>OG6S2@MS z@uc)4Xm_sA!A-FkKhWn4Gjy&NM4w~k$DyVKeO|fM)IIHn7#R|*wv9-g7i!K_3s@N2 zXR7Z5$gxb!b;NG8;|tQ~;1>R5gQ<-AX`jz>_W3Iz*z7X9*#V!i%ed|m&*dvmXP1$A zL_CF%j*QtM0wgr{zvem9&rjNpx#!!Cxk=m6t`@k>L|kI7N;}md60QZGlOOdttm_vr zL9WQT?N1a!tV>qHJK@yNP0D;Q^Q z+loDVMh6EEjrAQE7&^dPaKT;wRVxmTj*KA#Bcs7pL;Y8c?Aa5H4(>e^3=ADQ*f-X{ zFX+AWh3n5A866oP8#*v}cF(2@wqDp9>>M8)9|Yl{@%@9O=Yfy{~WRfJ8{w*A6M1C3YF;A0HhZJTMmQ8|)j9vX0nzak7q(*$VK^ z=3dr-6^v!eR(AbQi-wh#v3;Y+@1edugA|>yq5eY_A3rp>qW?(WioUVIBST{r8yy=P zvR8vg`Uek=4UHT)l&u=qQrE?m#c-|Efk9iTsk%em?;kmwspquRt+67Ll9FzSuqP&Q zQs=15xdwNc$;hk~%-+LeyN7!Zj*a$?U2~8!-#2g#zL}T62{j~b2*o=Ls*X5~Adylj znTUsL*tn=Rk#rw(LUsZA8S@h}lp>BCNQ&spc*{(vspNJ7SU><$bb z84D5}6ATaSDN{V_P;${(8J18Iy;>#Nf~}S!r#d~7v^6R9dT?~`@X*NkpRJ9KNvE{o9c$m&ES2^s6KrajTxalJ!URzjwrr0#^^I z-i@nRNDlRnjzAmqp1W=PS!ZtR?L9QUyLWT16T#5{i1bRR#i6mGzTu&3(MLxP^g`wL z4nXyfjzg*9zKiLv-Mqbb$H*vE;t=n*I-m!Nez(QCyUsrM%-#$8F>oAk?Ran$^%)%6 zH*z&&^=um%If$VCAz_k^uv#cL?dTtpA*8$e%!3Dqhx#Q;89|OyUWM1xLe4M<@&%cG zp02ieN;Ey{O|(OXv#m_TO$(V&UOhB0W^>e2z4pL>wWE4fX8oBBl7{EXwWk|UbB0oZ**YI!Qt_}L(~o92M!JGJuo=X*1xZB6vZ0rwR$KR=o{;^ z1@y|b#!415e()fLsQ)U-pjBARpk?mY#~PcDO&1JZ*wq^x9vT=NNs&mVSMM1fKeP`V zRNMl&4=6SybpkHxco<-J!0(koB6z|vEj(xit8da(>(s=)!J)nT#)ADi5L@}|j^%UZ zg=3K4y}QTv>=_(gg?FQF>KFbQ-0@;9Wdd9um?!|EDB3@rKycyaOE;DCj|DfwJg%uS z?mc9)DHs|X+)rj(*KO}bDv*eEsQ=#GeTQf;At1(w5209x`-Wkmd9ZYVG@VFd8o1Jr zB8F0$LNbvCc5IbOOhY32X<$tH1R58%r+mdyD(VE~7=aCZ^(YG2>w*H96Ef1I8KLRX zXGh1{990_`^j_LCcwk`of|wHh2>9SAwF#78e>|{k*bul{L#$N@N<|_MqPvF>**O%4s>2s7c`J=r2|x@IVN!Em3L+k1z`4r$qJk&*@#wy2=; zcHZ#az><8+zqN7#{3{b*im|F(9$)T-jVqmyr}x*hOedTVHV% z9}c9l18D^4Z?;HW99Q9%dbOmE_)_mAQZ71RyVA;S)|iQDkq4A?(+*ql;}Bpmzyn^b z>FFJli~W5^aK+lVa1b-9!E?xw6uo=;4kcvWYb=#BR-}$ou{afwSjhLGv2_`iu4FFm zcG%Uxjk zAmL)XTqoThc@PMRQc~P4IHYe8I$@etsY)(k)~&;gzjt_W&lvO+hMHb>Z5P(vZA~@- ztsd)M?@Ynovq#|Wz*J#ybS-&|_3hq-T9pejn2<76$W>s}(?2#!T?=yFCV4p=j1IyC zmTt$8Y))W7YNjC(1J(eZC|}*(eTVvcSt`lgfT*>h1F%_!27>(~19mnsQOvbh4PMi` zPbQ>DT}2Asfg&hd3zH!9M&@{T}M?JJ3HeFc|EH`E*t9Zaa}>G1jxZuD0DI z)LPK=zQCFvlp;@9cipSKglOUS_Z>WB+w9Q3p*_!B`Q0m-v!p(>)>E0XGo6Vlq`R9n z0y_rf8eo~3TA;P$>SH~dWt65dg=u7Tf8Q``UQ8jh#L!T$R12oOdxnm52ljU*y7R%^ zL0mHvFgqL!zzfNM2`fhI5D3Dieq|%mt3w9|F+^z@S4*2Gk|y1i^H@y0Z8l;`DH-yw za>54f8$YsJ%Btl@3sdmpzA|C1y1SAZknw(Esvg>jN#!J2Tpu^>GxR(u$7J;a^M-vW zVY%9t4c#Z{7EOQ8-THJ#!Vip?ty? zOqZhnaDS4Gbusfey-d!m7Sqbkjtfu*Qa*aN)SR&jUvJ|1c-jI+Ib&R6UFTF6c_l$^ zSV&QWcY+EVXeVGA`>d)_|O>EF~?RQecbfhy8xW~M-J>6+ABqp zj7y71#+~?SlVmWM`z$qoSe1^{RUCt;#WI0tQI2Mehf4%GAkBf&Dk<6O?2N@A4O-r5 zL35xC*il0SA_fTR}(LF@dBqyJ7EnaBdL+W?r zitf4o6-D=WXH(HV6INSv&w#z4=pMH3DY|FrXB6Fo^9zga`S@kQEF=)8;~ob+m@p5H zrU~3rfBzAsm?asRpddx}tmM?9doc1PMfbqtON;I~#+IUcXmNJYJ)tC(Dqh~8eEs`ls4b9S1idurqdg`#`R zWPY$RP2rvnI2je)hKbgMw&qmC9m{Qi{Y3LK$11wLVGE0H&-kpO+aNx>=yrpz zE4qE%>xyoN_PV0mZ@sSQHcziBx}DJLif&u;x}w{kysqdr8_y}aEyZ(-Zj;yCqT3!k zx9Bzj&n>#GzSFa!={DQ77u|-u+Tiwd1-RW$Z;Mhzbo<;|i*8R_bJ1;Kn_6@`*4ih` zoZD$Ox9E11tu4B(Vrx@^=XQLpF1oE;wMDmeYjakh+`gPQhtCqC@vnL~ch0gNzT@E^Q2eBae?svmJp6ve|LoykRveFn zF`@YLkmAiA{;1;Z9?rvpn9mg+{$Gl(_i*fb6Z%aaK1K1J9^Rt(ZRQwMf{!ztElx_F>6tDMiZr*0S&GPX7P<)Ap|3LB89{zL1&-C!$Dt^9)TSXfN zmw0%kDAX_*^zdfIU*_R$ioepsmnr^w4_~ABKX~|=ir?Yk+Z4ac!(XiUr#*bP;tzQE ze#O7x;YSqzzK6d`@t=G6-zok(55Gn65HDIyf9_O#iidw#@#!9ZLh%J2{($1$9{zR3 zH+uMY72oXPKT-T*4}U`OJ`ewI#rJ!7QFa1{!8IP@a{0R@gUhzMB_!|_jz}E2e=go>Yd-xrS zw|n?;#aDRvClz1s;h$H0lZSs*@tq$2u;Q0{_>UDI^6+0PKJMXvQ2YiD$ID9b34=F! zc&*~Mc=!y(-{av66#s~a<0bCG|2_{tRq-!*_zM*OmWS_D{810TOz~fN_&&w|;NfG6 zn?knTuUEX@!*5i4mWRJp@g*L9r{b$U{BFh1^zeHXKi|V2RQwVT|EA)D9{z~pFZ1xn z6@R6NKdt!dJv=YxHHX1JczB)ScX;?r#qaX)#fpF0!+R8ez{Af_{2Ly=P4Vx0_%6kN z?%@N9|IWh?Djwnm6Y0+@6rbYZuTy-whu^ID0uR4k@oo=4uJ}d||CHjJJ^Y^)zu3dS zu6Un^e^2rK9{w}MukrBTD*hS|59F|$FgWJn)r!Bv!&?-8zlYCP{1YDDrTFJOe1qa& z_3-l)|Bi=Wr1(h>ze4dRJbYO3KYREQ#Vbl#d3d$r%^rS};_V)OtKus>{C$eA_wbJ^ zzRAPySA3_3e?{@jJ^W$Chdlf-#m7DTH;Uij;s34p8$G-vj?FN*#lxEve~*W^DgF@; zU#|Fl9==ZTFM0Smihs+)cPRd-hhL`nuRMI8;(ze)F~vl-tOVID!#(Q->3L`5C6F0n>_q}#dmu6R}{b8!yi_B$ip8~ zeB8r-qxcOT{@;qf(ZfsPE{6X1@FvCIRhrdlFW;hu^IDUp)MF#fww2 za&=tsIuHM};-`A}7Zl&^;s37q4IchO#qaa*Un^c)lg-a>6`$_me^q>ihgZtNQW$i2 zc%9+EqedzP@%?aWR`>ECYE{PgJgNO@jY&68wot@V`ugSJq6NZu2Dg+)41Iz{8*>xc`{8msadL;5=)3yS}&V zDlPP0#ZM?MY7Jr6Ps0CiC&B-I68xQ$;2)d>clrFHzOT!@@9X2BXa2vZxXb5%PQvF$ zli|l(B|0~6>Y_a&86#olu$tT{3rFb*c9n*bHtEK0b zBz_hGCw;tI%)-G2rQht)pRe@s#w4Y`TxwDg9C4>@Pjuev*Tl|KLuWf7f1rt9;zfH}`(UJ2l;SvzPMUseB%J zx8dDu{&N%`Q2YnlAD1aUu6U*PM^~S(1>O$l$Mv2bxJl{V z3#T?KpLZ+%YL$Pxk0%Jept#?@|E~CFx^4d7uYCTG;=fkAWvAlBCM$38c00vqC?4-S zQ+zRS*5}VuP81GS184nzbAe6w9U8D*aknXLqvCrN|Is2#|G47UEABSN@ij{P`~z^N zTkW;u2Lum;9bW(X0-Bupar;yMY}o`K0X_Ryya`qD`<2fX9-n_v`gk*{(tk(jYl4!O zpI<3`yx~si!)BWwx5>9#@j1XJlFv@y%xAnMQ|V7v+}C3}6i+rw+6a4rQ!m}GddbZX z_5-IL_?=hYmjP$Jy-43L?Bx8_z}vBC)1`9j`23ylkAgFF9(0N3^W)0jZEmsqO8*C??^$K#XRG3^Fr3Kek98KmK=GA|U$69?s+f9#Ge7Z; zPNm-uygeucEna!AS3Xy+vHTxV`nM|Hp!W9175{+pPxgP>fO~+~1yGh>w|Y{^gU={^ zvbWQQJS_C(a()+dw( zWUI7g^e)Ady}%a#km9}`yB9e7U7go|zXqJ;U8(y2jhfFNDj$E->{CkbUY6!I(@sH# zS)a+iddp~z;=car0M2&#XRlq>0%v~STx;v+X3ftIrT@G~f0@#|cXtjb{a&U2x<@}O zI4b-8tQ;N$&iuzan3d0~mA~7y?)cxP^zjn~N`G8&zaBoLc(S42M)->2z8&}oaMpuw zPyQY_+cEF8W94+4|9Gpq=4Uo=(zkf@>wuHLd$8hzO1}|!J7xn9AF%b0v=P3hfuKQ~Gx)y{~6J zrg;2lgVKLq(;Zd);KrjLD!xJI=`T|Hr<9LBAIZ(I`FHONU8?l$z**k-NfgC9f!E1? z@-{{6&qk&9}0wY<)Ld%NN* z)qY#6^v9J?{49XtpI7?4&Lf=t^Y4o9_2x}KRzC3q6w2qn6px=oP`nbm-C3W>^FTIW zy5jM}8A`ug@%Rx8#ZL#$^164ZZc@BY@xwaqcPM@>aQ2rbufMzrcsph}=Xw3&PUZ8_ zdMp1JrsZ=VaOOXLHbU`#Ros`)?*OMh{Jy8JegK^FuiHI)BZmQn{C)jARq^K>&IxJibB*%%?Z7tzZx1ShE41F)G|tjjdr1(RM|F`z*)r$WVczaMC-0!9PwDM0Lva%7X;4opk z99B8spnSR%_vc@WRc}9{b~s#X@;P7W-NQiz#(yPDQYjw{*_0+T-x#*28BJl?JMomCX+SuTVG&@?iApRoAUkT_2~r z-_$$j(bn#|-P*gq`;aoV$o}JBwD%vrvroDA)>}L4$L)iy-TT}9?05FIb`Sd5+xOl* zc*1~dYeKBT1QJyv;=^;58c|h{Gi`GF;#lSL&QJ zz!3lmkOWWyECHAREdVV5EdVV5EdVV5EdVV5EdVV5Z346j&?Z2e0Br)a3D71$n*ePB zv3bZNEra+qlZ3?t0(566}0&NDg8PH}xn*nVGv>DK5K$`(=2DBN_=0KYR zZ4R_K(B?p!18okpInd@nn*(hDv<1)>KwAK90kj3s7C>77Z2`0e(3U`30&NMjCD4{Y zTLNtfv?b7%KwAQB1+*2=RzO<;Z3VOy&{jZO0c{1e70_f1I2i*^#sHKt5M>NV83R+s z0F^ONWeivu6K+K-gv-Rj%)->d+`{C-?85Xy{31j!LJT8BF+v<8L^47wBSbSoJR?Lj zLQEq>H9}k?L^eWfBSbesd?Q3SLX0CsIYOKxL^?vOBSbqwydy+BLd+vXJwn_gL_R|7 zBSb$!{3Ap_LJTBCK|&lPL_$I=Bt%0(JS0R!LQEt?MM7L8L`FhvBt%C-d?Z9jLX0Ft zNkW_?L`p)eBt%O>yd*?SLd+yYO+wrxL{38NBt%a_{3JwBLJTEDQ9>LgL{dU5B}7v~ zJS9X_LQEw@RYF`PL{>s6^O3_ z@l_zc3dC1|_$m-z1>&nfd=-eV0`XNKz6!)wf%qyAUj^c;KztR5uLAK^AifI3SAqB{ z5MKr2t3Z4eh_3?iRUp1Pxl%d*^a!8|;Yf{4@+N;&anWn_$51K3&DHtl__9@@7!^0P z$B6V-A11VL%t#Lc?Q=cY#J~BNWu#+C?J)iw?SCof9!x+I^g#9^)s;x{H;V@SwxStH9$ zB2Lg(Iz5FZlcrrGNt2a!k_mI0AWr*qZ>3K}MQnU3w^pxLU9wt&sx-p&leGS#n^Yu{ zG&5=(Wo@LSd}J-DD>KcrT~kG>6=+@mNZTA0e;^{1rGq-vXl@iuH`%2=NY)i9ia}Z; z3k7wm(Of7;_3Lppp{!2SFOam?peEF*K8km>X_g*uHpj12Dqi*bI3qpCwrOf}nK(mJ zMt<0JmlEy5o=)nXt`Df+s?fj5i$(p_ESv|4wT`O!ptN5{KUC`~;%2VdmQ+1mgj3bp zu%s0G@F?llSu>Il|A4)S%L+?J>rM65Rfe2FH7AOlnq!6Zd`J3v;+43rwm4ST5hK_7 zi=M3{J==~PJqr-Jrgdyr&-{Sf8bvvi#<$Jt5J%$OvsYPzGKpem2Lx|gM}b$XtIt4O zl7CR4w4-in0?pZyps(AmRolpQ^k-Qm6eFF-g@ujdRQxD<3sfz{+{*wYIvLNHH34g1 z0}UwCIV0AxnX${`bc4!jZ+b+L{I>n+fy%WXZaqG1qdIV00Rz*kudzR<^RCmbr|56o zdUzB?DQ#roK~l!Dbl{L0y@sUzglWRinEEQKXCxdIVh`0an^{USPTJHF>xVn38*=AI z1w^vB(6;cfu*6~=5k+5Fu#)8{@r|Q>?YOf(x*ru7-@8a_*wx5w6!fBICM?zmCg<#H z>V&>reDdg#eG{qQWTJJ+ASDkY3`+D0qE!&QB8b{I%F}8h0S%I#` za=dmapGAuh46xh#=;#~W#s&_JU046sdLjz#N35PiYnd*QIEo8FY`M$UT3-x7RYJGu z8O=81ury+WfrFCDxxccwvrY4Q`q>#5kyD-mn%|M8=aSmj>TnWuYk9iyL~PaGs(qmn z^XyWFDU86F9%ez_!U~+Ch*xBpqmMYUEP41+Q8Wkv=1F~h;kPq5{+rK%WuQp== zy}4-l3mVwafZi*+7Y_tfgy(z z;HfZcG&9RLWW@ra*kV+@=%!toS#Bb-D1KQXe$x3i$3JrK^{#|=!Rm_n=lJNppm^MC zU3)JZ0&*29ClzlyeUW-Y$RJ7MBHy^wbpBiuV`b+t?|XNY&eh2b{d(rRbR}mq0yTrF zT~IPINwcS0SsiQ^$+u#<&ZcBsSd~Cfxky^p|FRL&YB4FCMa?I!Kex8`pFBK_)2O-; zGLGaCiZ@2;suxealCt(`VH3ajQ4Nti>yF3TAx7*gDc%?NTpJUdFUD=x@ztPoX&z*_ zuHOBN%Zq6`DR@TZ8Kmn;J3Z-Q>w}w?>R909QSu2_CP-w_}f zSX;``SdnVer|um*A2Kws&Kv4r8I+Eip`qia*AdFN`IlaH{sc1Yk!V_*YGViqXccjiVqs`T*L(s7V zA1kBKJ5pal>RQ$0vNM^bLhd@6{02@VN5oY*e0~jBlv58u+S=Ra|CH zGqV5o9-UuYov7DDxqK<+*~v%e`gOwdD^DMvs2#`0<&%nZpPy-HDyWjuXP(yK@uX#& z5Oy;Adn-S%`SASWgKJfa{(ro5yO8dpXmls9ztTPw-Lw;5UvGJSde7M<^DRy3 zE|?~7_i6lhOn>@WD)N)`R{q|}DS!Wwel~oMFTXF%8GGR zSE+>WNA&WJ>!0^K@xHI7`StDM?RO)LU-m=aGX6K6c;7!hzGeLHJMq5X?A|ToZ66Z1 z|5@JO^DM{T)#Lo?_MiPOf#YB2_}90L|BeQ8{F@yA=9ckqb>hFt@!#C?{MVg$-^cp* zTgE@rc#DDsBD*45aOO-LvjsM*Z@pq0>$)qELI=b<1Ziv5^gl?P5A0XCJ z-S{ta{J1XGeEr*0^3S?olwTh2?|-}@{$&!jZGKq>Hr3*B{{EL6;{WzlDq;M}FOT#0 zzvg%@W9fhA_|KzGAdY&R=h){mcRW+yU;ZJLyfaOix;?phs#(5%ofp5S`JGdY0k8j+ e;=lZUiub=M*FV{w!{PWJemAx1ADw{C$L7D1RRNFy literal 132136 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%0Axdl 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 umK**}0fqx{;RvO}b~UH|{o}dHKY1sncJregs); +void Coroutine::resume(Coroutine& next) { + toc_switch(®s, &next.regs); } diff --git a/thread/coroutine.h b/thread/coroutine.h index 03b1461..d257d8f 100644 --- a/thread/coroutine.h +++ b/thread/coroutine.h @@ -29,7 +29,7 @@ class Coroutine { Coroutine(void* tos); virtual void action() = 0; void go(); - void resume(Coroutine* next); + void resume(Coroutine& next); }; #endif diff --git a/thread/dispatch.cc b/thread/dispatch.cc index 86d71d7..833b1b5 100644 --- a/thread/dispatch.cc +++ b/thread/dispatch.cc @@ -22,7 +22,7 @@ void Dispatcher::go(Coroutine& first) { void Dispatcher::dispatch(Coroutine& next) { Coroutine* previous = life; life = &next; - previous->resume(&next); + previous->resume(next); } Coroutine* Dispatcher::active() { diff --git a/thread/scheduler.cc b/thread/scheduler.cc index 4dca848..0b96592 100644 --- a/thread/scheduler.cc +++ b/thread/scheduler.cc @@ -13,15 +13,11 @@ extern CPU cpu; -void Scheduler::schedule(Entrant* item) { - ready_queue.enqueue(item); +void Scheduler::ready(Entrant& that) { + ready_queue.enqueue(&that); } -void Scheduler::remove(Entrant* item) { - ready_queue.remove(item); -} - -void Scheduler::yield() { +void Scheduler::schedule() { Entrant* next = (Entrant*)ready_queue.dequeue(); if (next) { Entrant* current = (Entrant*)active(); @@ -44,11 +40,11 @@ void Scheduler::exit() { } } -void Scheduler::kill(Entrant* item) { - if (active() == item) { +void Scheduler::kill(Entrant& that) { + if (active() == &that) { exit(); } else { - remove(item); + ready_queue.remove(&that); } } diff --git a/thread/scheduler.h b/thread/scheduler.h index b5b74f1..9a7381c 100644 --- a/thread/scheduler.h +++ b/thread/scheduler.h @@ -24,11 +24,10 @@ class Scheduler : public Dispatcher { Scheduler() {} - void schedule(Entrant* item); - void remove(Entrant* item); - void yield(); + void ready(Entrant& that); + void schedule(); void exit(); - void kill(Entrant* item); + void kill(Entrant& that); void resume(); }; diff --git a/user/appl.cc b/user/appl.cc index 49c0132..45312bb 100644 --- a/user/appl.cc +++ b/user/appl.cc @@ -12,16 +12,12 @@ #include "device/cgastr.h" #include "machine/cpu.h" #include "guard/secure.h" -#include "user/loop.h" #include "thread/scheduler.h" extern CPU cpu; extern CGA_Stream kout; extern Scheduler scheduler; -Loop loop1('A', 0, 20); -Loop loop2('B', 40, 20); - void Application::action() { kout << "Helix OS 2.0.0 - Task 4" << endl; @@ -48,9 +44,6 @@ void Application::action() kout << "smiley: " << static_cast(1) << endl; kout.flush(); - scheduler.schedule(&loop1); - scheduler.schedule(&loop2); - int counter = 0; while (true) { { @@ -62,6 +55,6 @@ void Application::action() kout.flush(); kout.setpos(x, y); } - scheduler.yield(); + scheduler.schedule(); } } diff --git a/user/appl.h b/user/appl.h index d0bdfe9..3b4d6c0 100644 --- a/user/appl.h +++ b/user/appl.h @@ -15,12 +15,10 @@ class Application : public Entrant { -private: - char stack[4096]; public: Application (const Application ©) = delete; // prevent copying Application& operator=(const Application&) = delete; // prevent assignment - Application() : Entrant(&stack[4096]) {} + Application(void* tos) : Entrant(tos) {} void action (); }; diff --git a/user/loop.cc b/user/loop.cc index 36b0e5b..0be2690 100644 --- a/user/loop.cc +++ b/user/loop.cc @@ -13,17 +13,26 @@ #include "user/loop.h" #include "device/cgastr.h" #include "thread/scheduler.h" +#include "guard/secure.h" +#include extern CGA_Stream kout; extern Scheduler scheduler; -Loop::Loop(char id, int pos_x, int pos_y) : Entrant(&stack[4096]), pos_x(pos_x), pos_y(pos_y), id(id) {} +Loop::Loop(char id, int pos_x, int pos_y) + : Entrant(&stack[4096]), pos_x(pos_x), pos_y(pos_y), id(id) {} void Loop::action() { - for (int i = 0; i < 1000; i++) { - kout.setpos(pos_x, pos_y); - kout << id << ": " << i << " "; - kout.flush(); - scheduler.yield(); - } + for (int i = 0; i < INT64_MAX; i++) { + { + Secure secure; + int x, y; + kout.getpos(x, y); + kout.setpos(pos_x, pos_y); + kout << id << ": " << i << " "; + kout.flush(); + kout.setpos(x, y); + } + scheduler.schedule(); + } } From 878841b80c2205bb256996fa588f1231a339e268 Mon Sep 17 00:00:00 2001 From: studi Date: Tue, 30 Jun 2026 01:50:16 +0200 Subject: [PATCH 22/22] feat: task 5 should be done --- Makefile | 2 +- device/watch.cc | 23 +++++++++++++++++++++++ isofiles/boot/system | Bin 134608 -> 148616 bytes machine/pit.cc | 15 ++++++++++++++- machine/pit.h | 4 +++- syscall/guarded_scheduler.cc | 26 ++++++++++++++++++++++++++ syscall/guarded_scheduler.h | 9 +++++++-- syscall/thread.h | 7 ++++--- user/appl.cc | 4 ++-- 9 files changed, 80 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 8db3a38..98e148d 100644 --- a/Makefile +++ b/Makefile @@ -48,7 +48,7 @@ OBJDIR = ./build DEPDIR = ./dep # ATTENTION: using the wrong device name here will destroy data on the specified # device! Do not run with root privileges! -DRIVE_HD = /dev/sda +DRIVE_HD = /dev/sdb DELETE = rm ASM = nasm QEMU ?= qemu-system-x86_64 diff --git a/device/watch.cc b/device/watch.cc index f9c5891..018da45 100644 --- a/device/watch.cc +++ b/device/watch.cc @@ -14,4 +14,27 @@ /* Add your code here */ /* Add your code here */ +#include "watch.h" +#include "machine/plugbox.h" +#include "machine/pic.h" +#include "syscall/guarded_scheduler.h" +extern Plugbox plugbox; +extern PIC pic; +extern Guarded_Scheduler scheduler; + +void Watch::windup() +{ + plugbox.assign(Plugbox::timer, *this); + pic.allow(PIC::timer); +} + +bool Watch::prologue() +{ + return true; +} + +void Watch::epilogue() +{ + scheduler.resume(); +} diff --git a/isofiles/boot/system b/isofiles/boot/system index ce920a0154ed8c184f0a75d8517372fcd6c94a85..cb1c7a4e7db8b6a2f72b77b9ad651c7619b83450 100755 GIT binary patch literal 148616 zcmeEvcYGC9`u>@@HTB-~gamSdP^9;wh#*FzB18d2M5Px+KnTT^rm+x16s)LGv8;U+ zR~J!Pssg$e)`}}?RCF_jRdz*1LGpW^b7s!HcT(8>{`vcO`OMt+eV_Mz&wKirGv|io z#lufG4MR8|Qw$d5`iQU;4Y7fhC!01U#1Jt+cyKQe`BFDPM5)IRO0adlGJE_9I}KZp zoL52WzCJDf+rc8Xf&F#v*JV@u4)$Ms+h+fT=I<)Mm%#5O@OugTUIM?D!0#pSdkOqr z0>78Q?!DYxQb#{h#tZ$l{Ta=k5P*a(eXFkdY-$3yY1pP``Qa z&0BA-xw-b{J)8E;PZOa?P5JIfs7+061mH_6gxDJDmBM|3P>)b#YYK!bLT$Ewdki}U z@F2FPiSpf{hXtPhclo^bF2F{yhvL9X&=%MHLhG^?72da~z03QS7hnANxa%-<(PtZP z1oH|dj)5>mSso4Gr=s93FTQ+2L`3;}(EofRQwz1(yQ5^w*7<6OU}r#-)bA>}rvC9K z(!_#)*A^xVQCrR1MYw(PRZ02&gSDTL&+m)d51@WMG^V8D>(ceY+La`Pq7Ca6O`F!U zn)X-^YuanwrD>m4scFBpT+;z-zNUlLbWJB%7il`t8mZ|dYnY~!t^S%$u{vuy)hg6< z$jZ=k*a~Pm%{r3kCV;;O?Ro!gIux`|JPwQ$; z_p;__y0aFPkRtHTFwDL85q7~BgNtQ>`gRGx}PC1-x z)oFUL^|_``vEI}45NnsFhgz>_`c&&#O%Jmk*7RxCU79YoDm8t&wOrF@So1YqVolfd znbt*`KFb=Z>9eh2njUWT*Yr77XHAc=3N<~_%FuMF70~p#))DMxs=j=l^}VJ?Szl>- zwDpmu$5?;U^!e5nOwWVtXnjFkyWng@zx?uUu<2j=}W9jHGQcy zO4AdpGc-NXI!V)$tnQkgY_-+&6e~y5Q>`RTPqXT=v#Rnw-TFb(Gpv7VdZzV>rZ2PJ z(e&lk4o%OpUexpz)>E3EZ9SmrIo55Oo@?Ex=_{?PH9gOoqv`q9WKEY@7ifBcb+)D# zTBm4wk=0w%i>(ftzRJqi^dGE{rmwaGYlHGQKsU(+kC>6)&vF4FW()<{iPTEjHG%IdG_ zDyy@mZ?+0GeT$W$>D5+1(`&3F*p*j#zt#F))3;e)Y5I2SBTe67{Y}$%T3a-Im-W1+ z*IJKh`flr9P2XePqUn3Ba!prTi!^dEMNR+7dP>vJ zSPy9WS?e}UueWa0^mEqLn*OsjN7K(+lQsQ5WzgO}}Ju zrKj@vvK7+wE0#yoo2;Mlu1D$o)vD9n=^dW>so>r?p(uyR7+|-fd0S^y}6|ntsC?sp-F2!!-S-)nC(ZS)DcgwpFOFul1OwKeq1G^gpay zH2sNHuIYW&B29m4U9RcRtV=chxiw1DHP#uL{=zy*(_dQMHT{*l00XYrUiCI%|if4_Gg1`d`*ln*PpuK-1q_w`uyIb)%;L zUAIgH@SnN`iuj>!mLd+-O;*H@b>kHAQ{B0W__?k`5r^weQN%BG{S@(QT~|dMsVh>% z(Yky^{8pE)h+}mLim0y>N6$U)g7b%#4n241c|%8)v}1{sRP3tl-Wm@Y7Y!XZ^unQI zFS&Hwg<~%+d8cIK$%cA(D5=;{Qn9^c+qaRDZFS)@Urxlc5kD`{eA-aMoHjIVoPTKA zdBHQww}(sWUtjud$S7!+I65qLtWTWw^823eYPVALXkuE5v&$TzKP7m?`r&4abGNq8ZdO2UL>JP8jZqd99lst56|SI^1zl3{Ye~hy?=IdEWu|?vxdWP-_OFX~lvEZDubdtn zUO6W`ymC?Q@XF%MbJ@saRTDQn8?>q+-n8l8STolvEbil$6&TEU73y4Ek_MRVlyslvJ3K zEw2ri?2Jv1S%^EwnHw zg&0Uhoo^$asf5m(_P7~CjqFVq*4NiJlHz7sv$qXw0>@M>@w_H*hD7^cj>Y<)i?V$j z6}_%vO!cnfqtFp0RlW&moT%x83yP49$2a$|&1b+|3KrXf3m~W)3Qg0cIoQ#h zWNUV%W)3ui3)13zW>T|!={m7sbe#O?Z!lO~SzKK*c{hM{FT;^2`T5_V50)5vLL0)B z#Yd}3jEZxPq5+Kdt#3rNqIjKhy|J!<&MU_pEt&joXv65N^`Xu0R(!}JxgF`yQ)zw0 zn4{Nk4c)Qzx~&V|)pZonoq?S|c7Su(_-kKg-Ir9nO&?FI+}3KVXsdRIl4!=VJuJ%)CoV{x zR=)I*xGJ!bZ4fP##eCh?G7J>Ohc|bXdE8Yy2eE{<6d(F|ud0p1FS8-r$vp#4b!;f; z#Jg(WhAJaMhkcP12cayZm5t|H^+OuoAq^|zaxzLA#pfhybt$Zvjg&@nA-kr|#S=$Z z)s1Juf}grJP9_pmEEos2#bn_%NXfd&6+P&nW4H%NRA4wc$Ck*fR~_GOE$n1%puHY! zSQ|a*U+3eCUu7HzOHdsuz}V_2WKLQ;0iDuVKt~}|8HpWbWj>hvg7ySCu3>OxcSASB zJa90yL4-DMt=L&o@lox?b_|fAzkJYyx5_b2$<#-?lx)T{*sL1SuG;_D1ymA0X2&_z zgC*O_Co1)5CyGPwYZl$oEV@mjaV^fS;brE+?O*K@8uHWv(1MIQJo6 z96HLE9u{T2nJqOn)v8%f;@59okP1Jb+ zPAWdUAWu2mRXZJXL)}E_RI4BkQG)p?#SsrIu350pVF0k<)#!N?83h*&Nm(yQwi^nv z6PJHg(N6DhiVE!sHF!6|jm~rpa->!o$lRD3RlW#sY^+F5(#CpkUF`=CYnR;044c4cF@${#vODZDzm zGR_4`-R@&OP-_SQV?_mOx#FCf;T6SuhpXik;zH#yI>e3D3Z~)eiw(rIt9G}_Yowcgv-(x>oQ6R&rWHnXE3|WQ2?tfwZLp*(t?V&B+Cax33tUIT|vf-$?h~8xXZziHFnRL|OPUN62fqU2&YeaB&)2HhYviS-+!7$`5ozb?x0*{5?DKUW~4TYWSp~$S)S;Dv~W_@5)j` z&eqnCSRUFc*KG||e95MuEXr$^%WUplDJ?jFZ`fLXctF`8+(NfJ3eEDv{mOE13*E9- zaxKfol^^aDy8b5H3-V=d1}z)o&2~0EI)ig=*D-kf~nYAQk8i+XrW2WVJp1pdg$&44;_UAw(%wO; z#+pvrY>fWasG)-fa>;4;^V%<=9E*Pw!Rx~fdnnrMJOum$8@AR5ECOc2;!1XCOg`dk0HRFe4uh= zvgt^+PPSX7mu>r}ceaGkhT`u_Dld*M0Wfl6d_^Z_r|G-kBt^(7W5dPi!f( zeOL;er=wvIT92x>B@w3kC?Z8ZPjK8}wbRl`<@ANjzD#h`BKHbw*QG4fpL@HUec7VvJnsiqcNQaT z#M7VLp4K+w=^lFG@+p2*K+kq#=wn;&9O82tNpSNNyYau2r&~_)<_Wg&5nK2&c%jFV zo9*79q-YSbXD*JDI{kH0oRn_ZEL*`SCenypjZ_u?MC@jyS$83xzRPPOnEu(BIFBY1 z8%^xwSjnl7RB+O+m9v>#qU=0eUyt4?7YLyjOU-E&V}1#37~)-7e58(RS3NEJXk2_$ zre!#f`Pbty^(Q<|!=(5yOyukmdJ!&Oe0Lg{k_7BCj5!k8@NUVrFT>dMtQYl=May00 zX5&1Jywi4xK2H2W#(#TmG(l_@E%?fbX7e$-WJW;4T{0C5_E(IlQTstvzOm=3<;~H6 z5G#x89q~|Gd^W_K8FeNj@F=&Y)Go$;8%y5&gPr6jIWCLuASkb4fp8JDKwB^e@4A(@ zNo8cloIcERLVqIoMw*GF+9x-K>VvBPiUa_=BlyTIkMN{!57Vo!PRjIFz z>lsK(eTZcL&wE;{=2q&9E9RFl7d2YU|FVm@3<_};H%g1fi}`Z5^0>y_SCw+XEd$oi z;3;m)NHfWJfi+URKaNnvI}vRd#Vemxs(hc=(y!S>)wXl(7g!fxtVbL!Q)^Xgt=N59 z#rBoO`zrRVEZ&Q@P_buQjcMTKt=L{!yx-VkY(>wLZLyM@b{IL0?FePxN=}Vf3k$U` zS5m&+P{`hurV~r~0olh?N>oP+!&9cBYAQ;T8%xkhu6%3m=8#<{HJNhItHsz`fFShL zyW5ddIn`Ev-VrM0ZHJ>%^;$qN?J!raI-I9EjKGyLxP$6Zvr^SsML5QS&w&`b7SvRX z*;la}MP_fkS_hFhi)Zp4l?uo6+R7oxRi)SjFRn!q z)QyEs$^t&bJ34j6p$$v-y1j)q@0P|Ys>->t7>8EK$DSg44->l@+OsNVyR?Ud2X0@& zZB!=>=_)pkSl>f3q0NPo9HxirursmIN-4rFFFtA@!jp>kg;sgdxMIyqWYTKq@KF5o zEL+}Q=7h1J;z=87OLv|wJfyIZGytuky+lL3)@R6nch;-)G z&-$c`l9xZ}v*Dv_Kg%Ch^7EG^6?;my)uv-IJ62MKtu?;5;voJO4g^AQX!8(Tut^CH zZ|-Lcc0qu7@EDihP*fxLpKal^ZMDJBi!s360HX2fHTUM$wzrGv9>s@g+`IWfTUeru zoYjicqsy1>4=f+dyfMM9l*2xKY#Sc+YXJ)*h+qGZxu!rrlWg<*LRUgh@V$F|ngm=vz0qblEK8@dw?>c-nfwI%Sb zmTo6fq?T_8G0ariRQ1kbqBKF0dgoE@8&=h_pnVf;?*rgHrfsOwuJR4F;kR(kxbAd1 z*7awJ(N-4S;Sw0F+>N*@eF(SYTbL2 z)JN8~Foi1LGq$T6z&b-?m2Z<>MW-_#ab3!3KNU+4lrKHdp=>~miF#o8Zgb`8t>EHQa>fdDsUvKu z0j$GHs<2g!DMrQl%2lccK2V-&D;=M;l`EK(%*>s((zUiyXu}GorIx@|zC||t+?Onz z?a2M>?U@zXpdw#OAyxs3fB7p%>9MHNk^K->`MTMTa`8$EndNB8vdpo?9wu++Qst?(! z6B?*iE7d+)b&;*w7r^FDc0YfYg%Ov;6lLercBj~OzoAGr54G)PVTB)W*G1WV+)kBg zl`ml1y~d)9OTtj9|In)Ya8`>Ie-D#D3XuIa4h*yb=8#sG`k}BUr+Sx6(vvZW{ zW6{#9pnE6hdzk~-3>HS+=QVIYM!COGyYFGU|4x;rJw+1sm9gDe3jsnwoa9A zgq>irO0XiDU`cF(ch$iCuI({7JV7ToE1KZW1}()@37)GH{B(iJ;k{CIC%OjW-c|c5 z6Oi%ujk;UZz}@qdRQWn-cQ@Pah7*AOMmof2x!us5F&$NL6Q{z)1PW>1-^~34m zo!WaDm28^V*cPbjeV@q;g>1`TJaN;*;dv@|`|%SIXL=YU1ND7+ih>rQW30CN)vKvN zZKJY*A+VQi>qn)v?J*Co6xgmHYdpd$~Ta6WXVmU@=~eu+FM{ z7umoL1tiN&LjtGTz>^B-ZL^&*mdWOCA2Y1-<=M#dD!?bNbX-SlU^sx6upc5+zT`ww z<=bwf*Zo{yuh5RHol{k=ud_GerU7-I>DA+~Fo&!DOpne`Y=3iP(e(Jf zmJc|!SP5|jnTZ!t@>w=yq1mimIjktO;r*4P+TqDOykdX-%3(ZML&YLGUx}*3(v2%< zEgOImg^Vw(wCsS=%a4^UgKW^K1@3oFT&$@;;D0QGi1Cx#h@Xg(#rbLct(p_{ci42s zTV@`UvyZaa+4%r~+EuIaeLhE(-@o?C?z6{c*-V_Os`8DqrP~pM(-P1mT`eK5%iL(2 z%=gPGscD5T+1O{>K$lODVBC;2gOV!WIkrN7RhhpIQ~}-t)^08K*5{$w3R&1}R47+G z(JY?9@5&*lLad{!<^^9u8Q@{OHjU4jfOf?nXRY$>w7q}RtoPb4-fPf8Yu{}s<8w6w zz>&e&9Y)!r9gL6t6(6EG+}qGz8Vg|e07Koy_adS@QNaA-s3N~jU4eE_m1lE_$tMAZ zVXuKz6bJ1m4T+ZWam3jLisCD908t%5!hXD2zS~e|pCnU*U7syrVi}H2^ZWnBG7@X~`Tt@$B-V1v|6;i!)^d46OF8nYhA_lL zV~TDvIrY|10|%xtl0<8^p+@ky8hCSf93MlP)7V-YaHa2VX(~?~mQTb$aulzr)R^<@ zWoo3@_@R5uIYdd7?~cAop)ViZWoK&8{-JeSf2CD{q0iNOfG)7nAHR!5bvfz7c=Dts zb^zo7yx1OCd)qsWTB2vWQ&d^y6*;#$-19w&vR92ttqcU-peX=ypyN(ub z@v%kJ>Xsw3CCNpI5~&5N1;jDK7F;18<@wdPv`WUJdvoL!9TLy$n$J;{0bdc zWqs324S+a0=qfFYuh>eFX;+oZ(0c}0NS=m$hnN^5T#?ArXFT`ExS@~kL;9dxUcXcO ztTKtMH)%obXq5d`OqVqllP)W}MYy7s=^|TiyUOcnY!b!9s=Z(|!&}&<`c=%@D$YXJ zQLI#r1?sJ_t7aG#$4xm}gkyVY{K^V}Ka9ZfVikO4QD!pxaS?AzMoa! zx4t6^MUDN7F8L=sZ;rZ17Dyq6&vo%dF20A0ALQaoT>NMkKf%S%a`B5@{BS7yqV<-|OP{yZD1H{-}!&^2dTP<(cW?BQCy+iyz?PPjm65E`Gd=pW))m zT>J_bzskk0b@7k5`1LM+lZ)T&;@@}iH7@>ui$Cn*y=HuQhFyGti|^>-`?&ZaE`GR+ zAM4_$xcIp)eu;};>Eds9@#|dt(=L9ai+|O{?{V?_TzsvIKjh*CcmHGBXR?dWb@4?m zzK4q+MrS|E7!I>*Dvj_=7I~sEZGJ zQlOI`eU7eB+rm$~>AE`F7ZU+dx@aq;V2{3aK_+r_`{;%i*| z0T+MR#e046jV}IG z7r)2F?{o3BF8+{<7d$)>+y7mBu8S{n@jYDpAQxZa;zzsq2`+w?i(l;GuXFLMU3|5R zf852t;NrKs_%~hrUKhXL#UFI>M_qg{5MRETEKtE;y1bY-7fxp7hmJz54iZlF5VlAFVC=xFL3c4U3?!GKg7ikckyFg z{1g{I*TpY!@he^Y?Jjyhw;I&tw;$>*9-Cd=D2t z$isf)bu z@f%(IHW&Yfi?0tjf3_yN2SBQ4uikz7_Uk`jV2>|41jUt$rp_z-!-AP}=3dh|QB0ga zW!m%^mt8*V_UkSYZLeB9dEunlS9IytRdf=OcrQY9g`l%7925h#Zj)8iu6_58C!BoB z1R>77p!mGed^(#U_xSFpFfaqdb~-! zd+4&8IBD{fsndXO#~G2_-T&J)D8@Aw;qwM zkXgCa4^!vOIZ^8hqCLcvsgq}3F>#hHm%={1#H5+C zC(gUdQC6yxdiLNyF=uj_)<^!No4&oojH!zqeWanpi+fEJ3uewP>(}Sfvd9$^p&;cw z2lVOFuYaFDJ^J_V-(z6kzCHW(>?`8bl-|Hzy?XcV->XOOegpdU>EFNafFAv$YBOge zIq9xzL%jiF{+uhOMr@yUvR!qvjW%Evj~)uNhL}4C#w>36v9r^2(!?o~Cr+C>ZR*sX zQ>IRwBIaK)bJo;oISre$Kp6?A;!B5)ICI#EkukHKYG6!L=gnI%x2$z!)K&A#rd|=5 zF>w~^r<-gkJdVMS@rUz-u{dnxCkKM74T1lYNL~3G>g%UaVQ6aj26I@7-@J4uRK)S@ zN?_M9)^4&ilYR$5UJCrYSlm44zw&z->;}Zz&5!qcZ4-W(pYga}03M08zbID?h1O*Ts#kKLp`g;D)R{;g`G7^yfzHHvwM>yebwqS8Drx zz<&bHLlrvyc~SeLz*AqsZhkCoR%-hKQ;222N5tW0YJ3pzr-9=q*irxEqW;GNe+qb0 z<+}v6$~N;ql^~ixZDh$4PHwe7sYd!C6kFNEdGo zqvbd&YQF^HNx;{{;^r!;PyksquJ?h@jl(b3_$J7U@P>MP9Daeu_dz}Z_{cc?EQud4 z-|If9ug{OQJ71dValRTjj@U-?rKS&wGalME)!&u?zaMz}So?`l|J9H`(v1Bk;12a5bi<-f!fe&s5-voSYGx$E> z^MJQTK6U>cA1&Xbz{{G!3oxE7Yz7|$d~q}Qc;J6%244bv3Glqw_(rSvB9K)BKaBb0 zM7(y^@fVkSJUu)+ci404R_LT|s;@tSZ>{6`$)uM8h-x7Jc5{9G6QDJ2J|Yt#j{l%h zlx?Z6e=82(t?>x(He2iK&yK@S*Z2_NBY<~BS!(~Dj&jbAKr{jP_-*y|m&D;0N}Mi_ z*Z&rxeepNT+PCVqy8m6Wy}lkl<&NU#%FuNG8x1@u7FVGkH{Dl1YPw$!g1;dAUKZ=u zR1*iwbUd!}fZrE~uhnI?1oAz=n;H+Rfqw}c2Zy8i@|>vGQJWw(U#+h{fNxzc=0BzX zk*@pdL2?|G%`u)v#;sdEjy2a<{~pm#4|F zbo+k+ctLF3YFd=|63EvBZz}F;;Ew|Tzr;QI{pQyT&!B%@6dRYRCRWBe9@n?Po2&2I zW^l&+E9(2?SpSQo<+2I#T;vM}$D;k`iYUGh;!ePuvOfyEqzU`u^}i8_yQ%qp5d4k? zE`2!l8MDqB54`r>rtu}f_ceo80}sM~Q}w+GcsBZ3Q}wbB_-DW`!FP1rQ4bIW5FN!; z0RQ~;iN;4o%a#2g6L?eWl|eS%RD9!sC&Ip|_Pzx8mpkg~e~V4uJS+oXeAU3WqFp=} zhd-_HO~B7Zy*8EpKHz5n|G)HyB{(YDRJ{&DJZ!Ixt#6Olp4y{6nwuY4pQp#=cc{+q zc*q9<=Z>qcuNl$$S_1J|z?*a2>24l|3 z15ZZ!ePZqBMBC#g$Rog8#Nuiimh;&@$iMr0)8p$=;J+gMrp6Dprerya(`%SbRhj9}jsE@W$H1@!EN- zx0)_5ru!4>J3ltvnCD-n`yb$q?SB*iTY`)2w5jp58u(|xTjN`|mzd|XO%T72Bic>j z`+$Gg41N^&x+eTbfU&+G0v@+thv%y+HQ~So%z#l>EO^w%^fM+7UrpCp6z{jI}7vNi$ucp9?!l^t=m!^eO( zR(8khzXEYL)jtQp_W`ua#?}=~cRa2^D3_+j+af$Cb46Q8_b{f-T_B1A_rv`F5ez2$1;jJB5_!8^_=16s zsCl2^=YNHjbQ^?5*zbqWFZa_^rK;3u_9na?VdkZd_!bn)_Epef(N(WxP+0Ij$zbnkvSY+-5@c~O$zZVKX@v>f@bnu z8Rk+D=ngF3lC1gfC49R#Lx93R^GV$9r{4)6$+|1T#TQ>WhK8(!(O6;0Sm zL?`qi*7j}C4a?dd3k`nWwL|GHI~aNvWNF11$xMIXM9@KRpevel${yVK--m7j^d}EyfZ&+m`vr~7EXQ=n4Kib z6Sm@(OZht>JS2qoEZn{W+sAe#cc&mTs@cU%4iFmvqhtcpE-w>zbz#>u*Gv!zPXh9? z%XWq0H<>Du5#aeTs@VZ!&Hd-X@a8VkE6jsI-^0-GvP;hfalY+fwKS&#cF;Hn-^0Om z?WAAnKu(fgcKK(a+RAnyA7^9)Y-J4`EbAuy!a<%Iki8rd4nlQxhROn`5`K*8By_F@ z4$6w8UyP+*juoAtGtRb@D|Bhep5MT7PFIc?9EF3X?>waFV~D5_P#CAg#=z0V%YpS0NUIy@^1m?F@k(6|wl_h#q=D{T z4Rl*WcLSv38|ZR;jq{tp**A&emK>fBfJn5h&eM_q;#ln_fyi5Nu+GHn@67W9v~H~T zz$B4X$Z?ykMO+CRt`@FAL8Zvm0@ok>nAxhn2HN%Y1}Y;V6-_T_h93r=NZQQkj{7-a zxyX!`RVJ=NTrnD6Y2VV^0u?TSSr`%)-VXHKCh#i~KL=7iz}SZHEK&;zw@u)GdCYtm zR{~$;=!nn*go^@?;>%d+h)tPe;eQbZ0n!0deg^DePCaD9(n}xz`w-l2*U@8;^J7#W zgEYuF;b9Pb-pE7>ee&rHj~i)|7t9kzKUuPDGU+nvApbwvLAI+4q$9dI3DQ_s8FXc| z)5e*yF!KBtLQgjqZ5?AdLk5vopn{m7)*@_l{Qs#FWuv>twi}eA8r{`4{~$`&uO7Di z_M+hij3q%cGmwf5CLe(ZGdqQ2rAQ%S=9>IpyA4iz3vn42upA~5PnAtFFSRA`X%HB< zK*)q+bUe~WzL@}>X8^t6z#=q#jxbvW&Y|<&kiO?2CjVz!;dzUZvG0G)bSI9{?|0vR%zg5+C4KV+A17C?TC>IWe8vB_|Mn5`mH<}KU54g54) zoxb=ns_Wv_$0o41X18ZH(ZaI$^ls$H8lkUjS%PVPj+9R2%JXc}S8TEg&%rV+qWnw{ zVhF|?Hj?X5Fv+r!yu$$S*=Waft71g~0!WG75inzR1k9Kn0nmC!0CXQ`M*y_m5rD1U z5inzR1kBhSfz)8g*%1h{nOyE_q_Q^Gd$I$Y0J0~h&qXfe-?%n19)--4o5CSDn8|AQ zv@p-am+>nke1P%r3BY&{H<86Q>&Z_^2fmlmR=AyjD@G@qK8!-+ZI(O>>P(GS!&>Bg z0l?ELR7)Js!HmgZ2bksPiCnZQqpe@IsuhslppiT_N27zE&C$5a5gUvJZH=y4JP(>z zz9_I4Y+Jy!ln>7wX1&x3Fi$}iMUbp-Dq=494_HIr)CPx-b8kNXCu@m_R@@=+X8Joo z%n`|`2H*6J$q3(VxaEv3_|Bwu0t@3YC>P|av56JOk5Rn?(nR*0 zx1oa89${B7I<#f!$Q3wC_)FkN?G_tdyMOO86|GsTzdlI#3zoYW1~)s*wL}wSk5QxieGnwUoZC1tDqiV84f34;ahR2`NaN_*l4Csg zvpB6Qvxn%}%OT#QhImdWtlStlmqWZq4e^ZAxW>WJNH)Pfo&9vZH@gb*3Mk~Y3<}X5 zm+>ql92^X3_Ysm2EjVCUq>PkDnYcY*1nI=vg5$;4usG;gnTM$>Gw)Ty1!E54%3v&X ztW>%I@jQPM|xiD-+qN{k(aYu!mHVTvz%tQnBtx<+{>utDC7@ zSNd}jGaw9_LF)PCx^fn57cq@oAZAP4RFwYwgcVR~1HmnT?}=BD3roLRSUv-YTW!*V zT3Gtk!jhX6?>UGm<1XOB(ytbl6c`6^`;Vg|lDV+-tA(YBq*YYXQY7|-nxC|vl!ux0 zkV;C&tDoFJIv61nn}A86+AE5)NeZzcsoLCR6B^%YL&DZYr~ZoRoEd2STs} z@Qv{*Ug;pu91W-U0^+JpdJx_#m`;9R8@~Pm=~f3Z2h+EAKH-AE3iy5>&_5hlcpo9s zGQhve`5mN(qDUH%RslX11>qzEmkL+9l&v&S82B1+TL(f9?EnXU-aIS?kEDiyO8*p! z8-r&Z-vy-#CYYHt6!9?WJ8-RwS4ox*vd#5S zS+6145k(?XZ~1*Ld}gG}=qT_ohE{5xE#yeSF(M-T-{GsZoN_+{<>C0!hBGI2>^O6} zhkK(sa39jlWKx(h0@+~NC}u+72{1hrGd9o>%wWZo2JVKd;fg59B+2YDiozi8)C4gqe!v&mlylT>6pvE!>M+Izzy*9>v|4o5HnvFp+bHPfj{t!s1_!mH8EQW$t}y z(qYU#Tw%sS$4bQ`9jHmC2-5BvW*vz_PCCBmq{Cp1;m|qH(UYa*Q_nq9A-r4zNt|_j zYSy{hk*cy2K05Nt8_UAWYV}HrvJ^S%_`~@ay6oK4qhnvcwU(Gt5 zAowTX|HP|!=*+KX9WK9;aY+v%Z3vO<1iHhl?M^VXPrPsGKQZt&N=~G z-Av=G6Ua$SgV5g12*_FIGT1I)8reY1eB4x&0X6GHAmE1m+ISTY6AGwV=V?HHc3=#6 zMAWRa6Vkss2wu{`cZ9P}K+QT77~kS{(9sb|oOJ?f))7crMI|kTuRGNIr2VA4%%qo8 zikx+V=^bI4&RP*6&N{)&AkknV;h>y#E`Z4-y6p;8vp;Ssvq3fM41(YffUl2N@kj@1 z*0~$d0}d=aoOOa~)_ES%%?@G?rEd>souHa^-UYPRfrW>&PEgG{2O#}V6ydBBRI`pB zPSS9xaHUJxN`q?FY3)F0w|w6tU;6l%H7|?8OPTj{P?>V-Nl0U3-2y(Hgh*$LS)WKO zK~6mj0Ik4fY(!5m|EjxWf|`1m{#slQ$Ezes2WskhUPH1w3LjH%J*;$$FpR9gZSWYD zOpaNK2Z^r%*3p8`grbc^a?Ke)uvdr01TG1g4-uE6gOL|l1pF}w+T!XKui`1DZGP%+ zD8f?#l{m2Qj3?46wHv<1LpmvnWDsec`Z;VCLb^mFNhc5~O8pMVDlHYhR}r$GHy`8n zGFM)*Z71VZznPjWac11hvMy3nY&(vN91+_K|Ht_1Ag9>ZY0J?xs~ytH$hradv}9I! z?@Uxnq=kC68j0-lV^nu%W$}@&7j&>ICs(3Jz826Z?)R(;9fuhKLJrQ+l zJ6=QhU=&Wl!pG)H~$YIg&J~yj?OW0ae{8A8fy~i zM8=fF@Dr)g;_Rtc36GgN02R`H;{3_NObed^S_FE+o0%>dBk*^`WoAgm%%_Rj{&M7G z2ukU6T*m1%@$aD434x1%ltRGu$P|rwpM}`$63Bwz#gNLCh_v%|W>Vb)pQH4-1$m!i zW6DUp#V9(nN8l&G&jH#L5BsHc&u~9Dp+5J$|KX?zzclU@KF3D6n{-&C-VrEJvu|K6 zLQ6*XV;7WpF&V$`PG*J%2KZk(bOyxZ6|peSUYREcu7H!X0F80MJLvq>z+{9!6Hu88 zei->N&j?IFWZY}w7DcS{zcbgv10A5nhlxMC;Fl1Sd2Zk)SnKCtmZlx~G8Xojz;}j8v|Rz@hA1ktJTb5kc_Mm05WYdQZDo!p1^DO2h;9P1J&MW< zPYw*XWBvz_8ja@RFDeLgN+1PgO54Lgj%n0?Cu?GApsj7oB~t+|m2QVctcdC6H;9T0 z4Wp-qM6x;&ldRsUCUJu{kwutnm=C}zSv@u6{sPBgZyIN)bau4JjkpEnh!EV&MiP7( z)fG`-`?UnGhxsuj=*hJ5Ux&-ClLtqA9bbf%#n21Eo%W)G0 z@~I;;#{;#w5b(Ii;dqt66Y%8CwtM{PaOBOgd;Iq(6K}4cSuz8&m{MMV+4luHBUW!g zm_tY~kdLsuEhUqjayz{B{Sfd1B$x6DpnlK5jpUA?CHDUqH_6=u@qp{$RdVlw8~8QU z$(`^9{SOJWhcnjIBbdpa#3gekIz7OMPYWD{(q>3GD=Wk+i{ni5Bskj(DW7u{;-5;J zbNwG8J?7^pAV)RoEoSD%1jfQHjP$c{*&f?5bC(7l!B;0pPjnDDq^ohg^G%F)QlK75 z7-wq*mXzv=BJmQ?NxUVpZbEDYA+i}9tyX~RB3hK5ISiW-e(qy*4S3l`aD>o!9AIz+ zQWwExE#O~tqnj{)&Q zOF9tVTOsnL25v!mxsbMX5PJf9oNy>G8cFvDbZR{8{}FOuIB+X!n6)+z@YHyfz+ch6 zd>L{^5`isrmnj*qNMtc2@fKncgh+LtJ99GLJ0+8rMYSGCOWwwcWc5^@%H>%4I*1ZH zkx6y($|nNwy$N7byl)cTh>E% z+sw36VH(p8dde9(y9MiXtOJQwY%&9ks~}k0R{7+l$d6I|45S{;IMbknMPK2psZ&Hp z*>cv5E}S!4^kPBcomu8#ll(Q;~m&v)<${ls=fM90kK{qXQH6HbJ1X~ z869~V4dX<`D7X1hw_)~)dVhO3Xl1)STZYPDPj$J?Tm-jcXrqPURzc9y)`}~K%KG{-f9zj|2V^kYRKc4buhymZ$?@7H zSqEhwP}Om%@NpIz51sc;}63YM{%xJQ=-wcmv%$NaOu-;V=NwP7QRqu!`5^Ui=hD4-Qi0 zFi_`hxl1?UUJSNla#aaV5k4+%?uX8X29_^1W_fOww&bd5FLahPu>7Gh%i-DDlFKo! zQci7P*%i{*oXKd<$kCQu=M9HWuz}_D#w<^brpX254bXY}BzFlt*qG(XQA_rLt
    zf#oNSSq_Yr5LdguLT6k9%PjP}2Knrpq4UXgcpvDTXj>NQ`W)f1%)zPd9<4a`@z9Wu zOZzLJQeYcKPhH;VHk^osf4*bbn#0)bP`MwM?Dp&nq7SVS(CxS3`zQNRuDuS1>xDF0 zv4gc)2e}1iudNqN`zJ_cc7KG5)SUz(3oY>lTek>2KSp&=NMm(#7EYWcjCNr)bWXwM z2h;{b={#IA(mDwGP83F)RO*O+^w1Yg@Jf8Iwf)N@AS z=Y?-UjY0*4Z z#lqVObV`tSFN5|mPd>7#a@)lt=>*Td`Du{h5%WxR9OwU#K<;SQ_mnLXTayy2VvONQ95Lqewu>n8M zsW;Mmd7o0?^YwxE-n| zL%bpvuDbvTgFY$R>fx`|zzQy9K)EW>RU`1lbjwH#~172u@PI34qi*AW5NOKJ{nZg#(J{{9e#8&JHDL+Q_KuBXkn&Dk6 z%=WEV|0p*v_r%&OW~@kOv&-Sz@N3(toZY9qz|GC^ZpPA0PRknLSfSHRPLX0tef+sp zen4@vL<(DZ+A}cEwVhrDBYtqMvk|9h`8B|7r)g~zQ|jd&UniAgRdQ)3*(E2_OAjc; zS)%16nDdQL!}(Db!@mKen!WbisLZC|BsWTgqvnfQm}KOrxyr7Ii|lV0iawHANegU8Wpjuy=HhlWiKtHKH-Mgu%|CX;rZg2Ej-PV+@-TUs zg8*e2YD~?vCxpNY$a9uGBS=#p5w%g=3mE<{Xe33(-WCA z8k2uNxD1=a&kaoZGl_f_5|5%cY>8D)QoEId1iLk=w5EuHLdf~j-Fz0emK^prL()nv z)u<#2>4HnOxAEO@sg@{>*UU(K1h704zZrdv?R#&Ivnt@ZMSgCyze(>#CUqm&2Z8gt z;0vO$%Yw1sC*v||aWfShvn*Hy>9vIa6NO`z1$RRFU_6X@U%xJ(JL6^CwmLcj%|yR1 zknjf@QY|_sW?A56P(jA;W%{{tr^@3Gd~INCAmg#Oqgp}0w{;TzI%6hz6x9l0gtiQSU&I9pQQqevn_?e7Lj%O8HEFxx2-Qd_(&xl85ANv5b3 zUm=(tUxKH`Ual6}oo6V4FQ6iC0)O)t^^@J=0*HAjX@c5CPAx^lasGQWv`YCgs#Ced z{ic(eOtQ5&k-3gM4JWH?Y@Eh+K`KvB{{$WMt)$-Y9LbY$;4v+c<(c_UDE;RI<@RoE z%1!+k)3MStGh3OC4h8JAPP7e*pzePS)sZc;vt~A42-_;fwu*#hj?Fc5urgpZ2dBVp zw4Hc#g51_v;=wE@@tL;4AlvhUPU49=@yBeHGh!1@RWK57eGU>gea5@66#H;X%Rwoy zltddQej3WD9^b8OH+^k4Ms*NfKbdA+-lRVWIZs|SeAev4A%aeShKkgk3}O_d4M(s! zF5R~F2&VEoMHHO|)1^={*We~Y{TC$ddE>P6@wm@7U0B|K+ZE6w~rwG5|=!HZa&DY$Vfa% z1|HnlLl~DA-!U3qX`W@yg9;z9Ietl4Byr0LhAfiAz4x52kq+6`UN4FSk39Q; zbB3Pa*qKj(GI?Z5WG`fBdBKaJBhOHAqP{Lp5x-5LPC-zfAQHY8VJ3grh{i;l zOu;2Fljl+u_7`BSAm@r)Vf^u`T62xCb1@j$nHrb2@;5VUkSKF`39y+Om-a1^kS-4z z2_rclZoKJf4}-(YFvz``o}VGR116kfWwIi_m}*(!&2U-`Rr!kqW@ZyqwrjP58>yBZ zUdjxcVMD$Y{v7bvTE&}5m7L(i`1%D>FTJryO!^fqCEOxd1Xw1-Uj(Zdgpcl8QMWIy zLf%dh0sD7G#6s`G%2OC-two+g`v~Rbqf50+JqN0-hvH_06B0b4467M@+NcS&ZIHGe zR$39Og$2`2_;1BmdwFo=T2KKsv2hv zHd-LlM>y3ym@Eg6YQ%scDR?b>w@1 z{W7kei*XaZ$Y$CBcC@v76XIJ49KFLN#F6dpmZ%3gvi*RB`T48;O}Y-PuZ=ue>Qg66 z6Jt)6CdQmB1+7n(g6`v-ECsDkmcmw_EKQ6#S(+Govb1fm=s6_(B(8S6T`oeZIfc|a zVn0!J&fOpGjZoz|cXi@$A0WA7GyrmwOJNb`6*!aiSA6++^D<#CsU)6f4F)nZP;>If6@l!OEHo?i0$8UBTbWeCz<`33M$Fy5iV2 ze?a#yK!@XD`2)IuI_SzkxfGMBqL|Krs`|xMFgq9WFz_7boa;acPNOodjQayfDwoGx zZ$)=Yd6YS}54p-;Rs`iC*DIjUzf&M>%)hW>%A5z)Ay>w`8n7JH=vJx7L#{z}$d%6` za>qu(YvDlT@sMj!9db3pf`NX3>l0iu9a%m&BFG99Co}dnvwt`?4;Je~g;c48noL@qD@|1AO238lU=-oG(nNKx)C(seTq<1YQZ|i5b*_{p zsoY_Q8V-ECd07fxNu2^JO&%#tN@L@AAAB+ik<1}sea;??nswOInFU}GF5@Y*eAQ*- zFCCKPanqZC@TUwCHP`FTk))2BGOR!0+8D2rz=V_3ans!zk{v_%8Cg;yCc50@w7;OO zCo^800EQ$vs}vC(g8~N><7M2;S8-Dnm7JYbi=cTPvo)?RxMEa1(m{^thle46PIq8c zQOUW1vtc|A(y0z2e-@>xBRMbdAPlbpwA_J(ht-kXBJdOpd4lwQ2T_KyI+F7PR|4kW zJdnX)g!&lq`*`y+177CQOV;}ysI=Fiy)h-ssyH2`l+5A~K}u7yBDf!gQUHMQAPU=j zRF`;4cH)hQkiXvQ1a7VNImX$T!tk|{?E9j6=ggJ`3cVJ ztu-jhteDqZUjek}@J;}tQ|#NVV-P1mDj{4Yc}bFR1y(m!YMSa@zC(k{>$Ut=M?L?ht`plo&xECR9&(s>#Y{tbvCq}Hxo zi1{e+GgdFN0zvPC)q`RYO%Mmh|%cmW=aNx5}I6aMZ81_&%te$lq zgZ`gz8Pb1OKI??lv(7T+1oJ*U8gJwFzE;cQvrbq&>)=s`8sFpkQ7d@(C=*ssIthp- z6PHZEq*tU(SUu@b(9wa>@p`dXBB{(+(mf~$!;`fXu!l5WfS-u3i@;B$2?3FCH<5hv zV;ElPNYx}Dd?!KRr&NuEnbdeK8|Bv&N5!E$a=J631p=8 zP=a}sn6oPyFmgVK|>X*7lao@`=GWejN@oEYdRT{~*U3d@8= z2VC-e!nF`&XCuddL?L26fc!(4oQ3bjgH=(r()k?)X@ut7x@vU>OecW3443vL3aNAi zE~@Z7u7Qg?A&t_WRRzUue>rAktaT$Na&3qC!`!`bR zmt4<+pM`4?t{4^hToq8iG=*~%DA%&8HZYMQ^40uWsZtSeSoN1aLfHH8I&}{J0qz3 zNc%{63Hg~(KUw>zbW6FuM?Gb8sSs4Fi4?T@5247HrbaqDRSs?)Kcv63+Yg3-7P1M#R| zE8%a%$X_dQFN<$RC1fTMmnCniUn_CYS_Sy7con&-Fx9V>o&xlo1FKbqseY~W8l-=V zB3xCN>eoto6H5k^%2kD_ey#MQ))(F`pnbe~spe<4{AAm5Re=|vq!Z<;!jrWh8ey&~ zJUQWm%!OQ4c+{$51O%gT89x${3lWc8RZIsz&jCzshpXIs)T+XZ#(NWlcf_m6RfR{b zDxLuJtOKi6g-5L__=me**GPz~3XfVJpITMuM?Lx$sa#d~)T-i7j=uRWA>rlUA@lL(rLLcG`=yM3uFy-Rc5;1z zOR$%SIY4cEa7rZfdT>lqNq$bqj8$4z$J4u*LbT<@U?qVr5rl!W}w(jOu$Jl_wx} zKnE*{uG|3icMP(`IW^_;kw1fvayQvaiQkkdY(I>*ozX3m1(K1cY$u5HnXu*WrvHU2 zgUb~rBD&M=36=*JR;Q?lI%}_akY>_~$!D=@20*gJ){Ew<7*ZMeM|P-Ltl%k-j<k$$2yQF7E?q)Zj9> z5Hh)jP!E3IO!+d8C36@u558kmJko)BnU@1du7>DAr0SP>d|MGo)i3kNw)XI4o>#rh z8wtUsxRhHiw9NImi4b4rdDY823KrqI7FSeHB=KFIw;*_}EN{8qQEMP(POgjWlLUUc zm4EUwOOEjP#SF(R+J)r^pUn||Iy$m2k~qTq($f~BFx3d}QxB1cVQ~zXI(nGH5#FaB zBCmuhM|k=)3gNUJE~S>s5#ASlVJ1~h1ze(4!anI$0wrF`GN{ zwN&`|Cv<(h`5CvD+47QA>wJF(U(6?SosZWoe?;KIOy)WteDiE;tC2J=NCRp?%9cJ=Bf|d#B1ll%ToGbE z3cSpbmy}wI1~Uht3x_EXNnDEtvx6+5V314Ipj?Y?hRN%6Je1QmAN>CxZ*Kx;M^)vI zSJivB-rD_MzuuRm`(@uc=}tNuCJ+b#NdiO>4Tvej2O*9q|Z&u6+nRj=xvbI;w* zJ@=e*m(t>7RTt%6!XE(qvp9aoir{+mGG@Rnwl(|oE>U(5D2^11p3l!5YSmSZ^0G+VT@EATXj+L>E!n)@^SdR_kI zfeLkiWbx7>`Zyd%FJ%IS6<38 zwVUmemkycR%~s{5PbPP>v*cxg%6|IQ`k`C-86&uBE(PWA`Wq zW@(mCJyFIjbE>_Oi)!3vSxNH*V86uWp3Q2ZQ66m0(D8R00=SmB8CL{F91*ULzw-g= zw_vA><1ai5B!}@g`+5BMyk!}ZVe%Qi1~&OD+T=e+pxER&waMQG74ww{djl@_op|wX z$1OlvT6!O9ohY{h%#l=4q%D++n(aj4DpF49D#`<-(oV}hx3I)x;E3|W5X@>qMakmX zeD`gD=eTw@-|Gu)SvHy1#j~{Q=izei#?4bO*W2ZF_3Rl4-9+%;)xcafnb+mBmmzdl z9K4Ln^74Ah0?E0|9#tqI;S6xuWL}S15b)bWkdtNg4F=053G^A@Gye^;o1#!zhK`h@ z%~NRY<|+#(e*_a=86s!%N1Z~uJQj1@QBmlSmvW9fDhi$Q(vstjib7X`lsj_WC~2Wv zUV3E1MnQK}45DVaaK+t(G`!7BNH+QubVJ3(2%xz?97mD;6oo$7PjL{SqZaJQeu{$b zr{H>(_gje6xZc=k-dZLl`zZ>#pMvMif3Y6hNpU|#LHAR95Aa`vI4@$Bd2?hxMM3vd zq!7@7OG|Vaaad`ZV2S%F3c8CJVk$h|BOR}k?FaI{+d@_Vf zo_T}jL(f!dPBY2tkz&P`JJDrxzsIfE*6?8nM5pofxMTj6=UDm(Z^GqrX3(Qysf}9H zr51E(F9difjv`Afin`R|`2byH!OjdUwJ7RRixC9wvjCksm8BL%U25?ffc`WNZs(a| zMO|vaoQg}38AG-I3raMThk4!I(Dq?OyA#24>{5$=KmaX#m$6)_in&~B@d8wA?oLE+ z2$otjl0rjp>Md}K#AhULf^8uD+@NbMIM+J|7r$8&L0K*obghNE2{30{h;TdJ9686b zAzW?2yj}y0ms>2Uq6S@U@md7FF$9!23^wR$3pxTcRhe^kvZUklmSuK*R)?J7oslO3 z^enH&<~vcuE^3C2ft>cbs2Mi4=RXWc)@$U(i^eXGN0S?b(C&Bd#?9k#f?5ZS>HHE`|U)!-5@IbWzep7Z)M)G7Is(i6=)EU0`DH zHAs@je(`KCp{uj}m>A>{k~iUca}B~-{*o@bxC4*JEksEQhm>^D1ziA2&dGiXN%*{F zSPdC@`Zk_s%AyOeiR{4{)e0Z*MQ7aZo?{nXFViex0`QCDC?%nwt1fnjpxco!Sddv;A%e+NfukKs+x*iHp6KR=0Txky~*E z5ZY^Lb(=3l=&}$}qP><@xA|FNsFP&|eBQFmx0FgUwUSnfX)Y4fAXbWL<-Bf=R*Gpa zbAnE-6r)zk+Y$X%65c>aBcs4W%-MLJy>Y*Vc$*29;u|$nE=IsV0nE+%5?N8iOo6|c zX3DPt`Y#JsGsUQx(ul}1xhtu*(@ZgHrVIfh^ST0YvezJf;5VO5n9qPLff<%7!`BA! zo0nS*w4w?FoE&YHa$C?T3C5}uPRDcRmeaXz9=Ki!H!W0Ijg=MzdW|X{t1_71fi{q@I*3fx8QrEA&^vVht?;W^Y0-O@3<9(fuUtmL3JUISIP|gx9{bJ}dv)XwS2<#Ca`j{Soax%Ar zM|Bm0Z`oW3oCO^mmeUS^i#v`G7<}dDQUI5BtcB!GF9UF}^DiZ)e#B-gfJ2>^LhPsc zk;v7Zw1CpXz*{$iX{P4^Vf{=dmTt%6nKLDoHvr+RnM@^pB_21-6!LR{aCR@rr`zy& zPOs3t2?!f|h3@z8cz%!2{U{!vKSL;d3Xd1)<19RG*2nMSamx&$dp91p&J+p{;PFCz ztm5$^eS8{Ozob)${RWRO?h@P_5MHXGSv+1Lp{oy0!2>?z7S1i92d+31nKeV(cwf1L z_f369&u~eY`(!G4Jc|A@t1qc|Yr6-Zy-m_j8UAx^V~Zn_kV3^LVkpZ|W|H?Jae%h|kd-OBrgFX8>-?-II=Cm)y>{F?U{{*m_=-AL%A`*C-Acvx_z zrNV({%^DQu;c`nQ!@;H-<3)w?-kHbnBe;&DWUs~L@|YD*HuDHgxp)3PAc?_tZ+ZSCo*UTSpDeE(+vT*hWvFpKSWYpeOq*N556{;6eMnHu z3C2*P?hG!B&2;+z07Q1lZA5HAI+8VTI0Jm%vdruAR1Dld;WCvyc=9l5;^?+X}6 zGeMy~_4_Q}{Re@3Hg(iL;`#RN!uA!-TF0T;T1^Cc`t5~O{Un3=F7A-v3VA;g*zEz5!-hTpPUZn?`7bz zhw%Go;10SP0RFkR{1~BSQiVgO{95_lRsJ*iy{h~U`Mttv?Eu$4%@=M1mZaArq=_q6 zIGgTtkPKI@ECIZJ<;qHgmL)#CORaxEQ8yyQyD&=3=^z%Dt{lK`{nC}A2rWxA&}imB z{dR=Z&quuvq0$^Y3Wr{*W-1_`LumbE(pN3+HlPSDZOUIF^qdXahRdazSW&GQAB65F zq?z}29&xH|VjJIlRp(KsI#ZvwJI%B{hlm}}=nrXJR!^g^HE3M6P5=#lPw}W6G2pn+yz~fioehxqI z_!YRJ15WXG18ohCdR@Sta1XA9yw&aKAhbv?A66dG~A#uX`%Iv$B~UI_jW-q0B0Rm^p#Ku^4ixn5sr zi&rtHUd2}<(i<7E1z4Vf=~c|BSMgSWK1gt94NR|MPQ8lv1N3klyog@KoO%^W&iw)4 zoYN8#&SH8MbLv$TFqiTu$nn`uOM*4i1R4ey=D#Rj#eC&2AOXaym~ZWVJD#1w5hvf4 zA#%2G6knf_NA)V^JLE;Ziuq1?QLkdYt3b-?Rm^wGOHYQ&6E zSFslX^x!41)iIY>ui{3)WiCr{doSKR-W>5N=GCjX2LadPQabk&N0OEV^Ykj_)vNd> zi-cjEUobT9ML@84y@%L_p=mZmTArk#nE7sc6$jBV+v!zwL$BgzfchjZo)GT3WKHoZ zy6RPg&~wVT1S0v?%;)J-`F^q6vEGfYvrfJQ>)ozI%w3G# z1c0+tAc5U}6v3~xAg`Nnkx9XFH_j*B0`U9eDADC^_W|^23wFeA50<f_l?N5Sczaw+N8egqxPLpx(4L1kmI6XK@tqrWMqi_8x#fXu;}DE2uXuJd;ys zi!_!m{S|87wC^M0lVRjMy{85Braf+PH)9VpwQLlegQY{i@0f_it4TS3IcZH;sT!tig+uE>aBPkK!0k% z>a8fMx8gR0azBYgbn^68z?06Y)xWc$-ap|9`7h(g@Rnwt)AIVScq)sxqM^*^ccUjX zd>+`@8T3|si@HC(6%CapwxW6~8q{0S1>8PduFxN#x1vG46|6IwMx^MT4V3dkw03$c z8bWUcF?Ikb3tWYccq)<5}6O6Y~r9($@>Pu!nln(CGsx_*bEf9AKe;?Oo=q=l*kxB6Bg`rVoIb@ zr$mk+@XZ$BeV3$VN~BSzMD75H=cp=K0arLB(x_7+%;|#`j1v79N>t`_#NDN~e?a)> z0iS87M0hyoZ;8xUS`jl209W|nP9$84?mjK)l*laL_7k6xykAp!mZFz*N`yJ0MY1i9 zBHK?(IwitWIwwN#?I56E0W5_RBFyO!p|7+M@Ar7pSpoPbUxT)|83BJ~ z!8$7d|0HJxK8(Y{snUX3P{&a=3(oHdRG8W6nV60t@lpgePr~if+bShk$b|ST|!< zbTj6Q5jtWa8c`agqMI>!N~fmg`0qr<3~yJPu)3RdBPO%^U0nYjN6C|Jvu?!vT?o1zv{BtmxPyK>)7-_JlyAlJ zy)BZ7yK0$WC^qZw!_NkUZo%c=gPZqB+_d^zT1xi-{AmR2#5Im9f|3#nt=^+RIR?<1 zL-6g)#~^)hrqzEfz#M4W2)@(eAfF5{y!lKv&8(#*j0H#=y!KMeQ?4y{%=huLLVRyu z!INP{rpe=J3dbS3-Mr=|Lq*o7ew=;@bs*kK>W*&SJ9@-fL+=Oeydhj3ADrfiom0+Q zt{&s-)>`&Pf{@N#A`1fX;W&d z=0POg!W#QB!d8ht6xu&(jDPMey|AOi0rK}if!nU{L#V}NVtV4xid8q!XNteSlRJiZ z`stPzI2^)FS3LsV2D!nS>nc`>=;KxJ=5thC0?KFM>Y`JSvu0iNla+w(%x0?elkLE7 zy`StFgwA1f`l4o?K-436;c=QFEoU~7=q7s~e(T+2A3^9G#v+LpYKULLOTC-yUlA(B zcOf4Im-_zi5L)jh^WpRn+&0vn;L=E%i_mlG++>?AuFsaZd2cJ-WMb^yd{rymWcs|_ zSxs|l6xj7{GD)izzppi@YQ*pB3G14&h_0v`mZ4t76~z@c{JSdnm1iuSFYBIZJqLjgY`>4B2IMu5*NXb;c|bDn;Z%2q^<=22kVz!iO@F?{8SAbS-*4(Lf;<;<2x|n z`X#33K8V{FERHibvVKXx-wHuadJxa^)YD-2Y?yUD2)0n+a`J4jbZHXLPDYk4kw`Wp zOPBaq%mz!B_yU~}4UDBrd}+xBOP5HwBO5GT;!BULjtZ78@oe4eaJgJ_S_a$5|XK-nNH3$IlBQ!JS z0_#S27<}FmaU*o$y$_fBC3XPWvTt|ItwhKM3-ajp(N+xH2;WA)c3iTynz0on>PFzn zQan9MiAUWCHzQO|7LjCA5jR43sE9yhFMhCV?$aS9C;dB=$?%pYn$J@Cd@bvOURjfw zO_hfsb7ZY%O1-sNyf@==`Ds&6&Nb5W#nfAS5TT24t%{?Fw>H=x!F71sEZAw?0D*-4 z5hUkeqv(&355rrUAwHA$`5JuixTzlpOx=dS+@+o9W<8me_<1|t-8ZvAoi6TaC^o$s zA&bNn-q4e!he$q`*)T(%@d8(P!%TV64`w#>%8Pz6v!PF3^plwlRe9-?Z)P^kk{A7G zX2WcG(XVDU%*o6`GHbA9tD8K?kC!buf?Qmqi`TM#3-m=N`+J1@Z4LCq=yEq4O2buc z!wA0`mrEav*G;fgtFICzuCdJkkDi$DOPTW!Fo?^QXg@+y&QjWN z|A+dzo4phF#*T&$p*GhjJzEs%&NY;~8a2fT-?FN~b z<8mw14|;IZiU>YcSw+B~0Q}ZCiumJ#PgQ;ZppRIv`s0F6Rq}9+FIk8uIT`3>M${k2 z0QX72e`ay?NTJ|Um2^O9t|TUQE+N41+3+dN4Erpq&sSN*){(7nuX`J7#K~R{7`|6Y zXjYcMW!0MH8Z>S?bC&_vTZ@|(Irw1ZnFwH1t~!gLL_b)`UGR5Uu$oB02P^4@deB0= zjiep@VC6Re5;qZ(R^uu7U?o3@_-h+cji=y)m06%t)@ojaq@FpY*6eHxLY2$|0mECG z^nKQa&sYEXc{Gi!r%spj%Ujt1?tx5`+3 z42hfSquzr*k#Jmkwww|UYYA3tffUYF8qx^Mr5=2{qBYTu;#d5nADZ?IEhZRDixG4& zF7Zc|WgI3ZzC%unYZMTdp`K=GXym{Fe7&=Qv2v*mK^B_0V&Yx|t>i2wl_dpSq(Tfdic9HB+V5)vHnUV#@bI};LZpy_lH zsfz4>0KXpya)E(g{@h#Whbl6bkRY2qfR}IJ5)!S*pEQYSZILGFV1xq5{U?5>0&+tk zxh$;lA}N4e@ge!W$|9(?xWkfC&;3s10mkJCcv`7jhJ5zo^ zmWtCpyd1_QWXBNTbP|~>1>S+*`jrCjMre_-Sm5VTouuQbejm}75n3fz+GBgyQ5WVy zsd{rz@OWMgXwEv~w31C=c+WcO^yuSNSYH$vgMYFD3?atg#YmfflK~eV&{yZ8YM@4D zz4ChzCJO*O*>QUzUbo|NKZu+65!}>C^b|dA%5(feXdJb9wG}oddxlpHsj)+CZXpPBd6?NWkWrQ==k?CY2MPzcA8JK z)k>WcZXn)?=8SA0{s0g^Mml>D?$Kh>0tFk0ClNqnkmrp=P@)@%e*(}iE!b%fHxSb% z>uV1;5c4&*fp``Img7>gwA#EIal_e@sOMkB;^`SjoQ$sTt@iMJ4M1JRg_)dEAt@#nt2MqLP;)bT`3|*1&Z2_`0Yh{C0T_3}4O;$Ja$AOwGL& zG2d%RIP>W0@pVy&fIks}9KVETBRA$5Vga9?%=lkM9n8<9$zC|<*!@p{s^om9N``kS zGB!GyJik1d2Wl%W_v^TM{MM%Su#BGc{~ZMIYvpTjMNsfD4iM0T{wbj{lFW4c^kMfi#~g>J3;xY72S3f2O_2a5b*6vy^6=tTUS-k9dY{JyV{uvdXMi zp3AbxtWTahWQ|!>o^^@YEO}laE6irg^MEWco0GX3S6fv!HYFhsS zpx;<9miJ9KIW?`bNVXZ5lHN(uVp`|aw4M*p@;G<~P3xSR*39U677Px*0U+7#b$7mv zC%bJ1yxGo-WO6jGW;M^4{B;OsTRS~8s`H^y&5V{nsFm4bI#NG4W|fnp3-G=)1Qah=*q13u=bXhEHjhG0i94CswRn1-&xQs?ZtXVoR1#J)5^E zXY=y7xWC5b(suH$#!bsw)Cplu?B4_M{c#jAp^G{p{8fOyX~B+62;*qhPa~b5BJ^ns z@uo;yOlY{?I3b)zKpB@LttK>Q8j{zhr5}34lG#Yg}_)7@jXG0?qr8ydPI+zBZfY2Pxcs9JHS-iA7Wsy>& zOb3_BYz5j~dDetZ2bbhn-a!Pe!{xpP_3XVatn8A`1~a$(nDTHOrAV@{?RhNkLY{ZmYq`2Vfoz%cf0)W;HL+mSr)ANo7?BV84!-4(BIyK z_-6y*{19mg*Cn}g{ST4~6gXnISA}55XMo|&XRgyMURuIf32D~2VU4HR75bSYjtV$# z^u74e<3``gC>&4*vaFXhwd6tOfTv4-E-=<=hhF{!p|b4$<#?b`xtvAf+~3^+E^;h? z?k#Nyjp43f?F=H+8i8kqxG_ALd*@tY|7yFeeGJ*+-^0N#pIc`^4Uy%_e)qrP-Ea~S zn&tNhjB1uI!TSze?vuFbm%5{xDbSiT_^XqHTky!3!Yi7A$Z zx?c}LaQ5LjIN@2oE}3J_+qaA!by99)KNP5rk%K!Ox2eqiSdJNlQs!3V#Wi0=Q@YLa z;&n2LJMS74c@^4~E7;u)jFSE=u@+`t3dm*zya4t z3W{O0-w4oGjB)MJn&!xE`jLD45^(g(AvzMkeOA0cxq!5%pE-L`pkY1*#OX% z1o*Qgeokg5vOf&a)d}!>P#*XE%vH!4ZPh*43Z9IE(^Bp$GS`7PTj~!0%clvn9i`YW%W(Z3p*`UIS-7;$ z(o*UxGhagK2t5Ok4K=6~dN@-Fpqxv*vIdnhUzO=Z#WC(-K(4PrrN|?h!zdG>Zw2J9 zYfvfijtrLr5PAkyiL8(U&D zGdqY|1V#myQf|JM4Y9}LCb$$r z0B^=66rBDIB;A%Ht^=Rnzu`5o=Cq}I31C;^ zx((PL!sXsfW|U#3;~FR3Ds4QcL=x%tRk%M4Bp%@{h~7Jat-O@(C~gM$b_DzsV3|N9 zEk#KQfllu>pyZKXR0@vI_f|SE(sP>lyi~o0*{00psDu*VvU2R;ZHV+CMjS@C$GJHz zR#uN4978}jmsmp)uVGe?9sB`e|Hx8sW`IfhNP8KdBPi*Th@f4=Ye5TRULaxYm zTTkI%BUo0n{|6<$G<~o26!MIIT0|~k-uu|v0;8w!YY6{N2;;XvoIXkwdJ380leqpn zgiBn3(^E)z1te!MNue$AmvIgJeWc_Xu7XchnqGhkQD0$7SHaWjz1T)`gh^7m3O-;G z7IPd3Qz6m-nIu&^`;Zv!%>e&Zh$7y?l&*sRFhW0WA==rSxe7j|tKgZ;qZW*6C$&MA z;YnP}c{>a1^yC1<9AQ3Tt#lb?d&_K;c5%7o{1ghhB9ms5-{0x0RK3SV(4?jmxUG~qmH4^EoVQi>2uJ@@s?o~Wcaj_ zezshDkg>Zuvy^0m+_@P~K#b8nf=Im(v?!7%rN z;6_Tfvr)lL0ID69PpwM6tNS)kp^4H+aY^;CZ;ev_zEZ)e)9d26+nq)V-FG1Lhk-d$ zGf{YcMT~Bl^7~^5y&sp9izzyDh}ez7Z~^;Ze>VjJ3^ZnOGt3s9L387E+MfK z0nR!iaT1X}=K4uQE~#!}EU8RtY$xz?PmmN$H2HIHc?hABV>wj~AGvF!?)M}@udBm- zDv6t?ep-PRvOU19hID%o8lj6?qo#W%LdSzICDd@Y)ZtQRz8axh>u|5F!=?63HFQ;7 z9;hh}ZzO^HWOjcP?G zPm2s7T*?%j8nq0eD?^B!@*A8QB}Yd}HXU<4D5rTd4DeYjpRd88&TX^>KY_sc9IrCE zNBu_D*8hjVci?j0fH&{WxarZC8Qr8#oV!Bs9RxcC@%m)DuO=yaeX_m2G_!bpvO1qg zYx`G>Nc+}PFqe*Jbw1G`w2aH;H*^9py*^o;Pn?6$WpVHV&L?JdK9S_y=i|mtLkJ0H zA?FjbI-e+DS-nf@s1ufakxt5|`J86f3$i~wSNRosTZZeGa;@D@v*&djaoR{C+i}!s z=R+~WW#hSy3|}xr@ugE zMG8VFr+d?1iGVlPW9zc6|70*AQnuaU^L;uz}0Q zbGkSECl(3K@ET+;?EyD9f4P&`X@>f21fNgAnaqaS7p_Y4sf}yL`9Z%fs!=9Xqn03O z8?G1Qa)-&C4J@qDJ?NaNl~BzaGZ?5^W==Ds$_LK;a*;h{$pPH_3O@Vr%Rud_(8Tb{ zlx~0UA?7Fvvn|#pc?iK@V*<00tctmAYm?A=`MHJRV`PXZFxn)4M0g(LB%a3u5uF}u zlkkfOy?`wW;SyKiv`Gj*3ox;;nXbm~r%m#FQgSo2NxVwaOuVU0;;Bt?7}2h`WSylH znx5JuR%o)E?z@1(z2lNQr;Anzj#zmm(uV0uj0XVxT!aichG{7s-7d} zsZGLw|FmE<5s9TKi%kj;p96`{*Wl#pPU5GDWLVH;Sw8w~2cJ(f*qAKxfKEydiq5+p z0n39UkY9?FM!*Ng18kmE;I<`iMw%xg7&sy}Hb;<4ueu zIi}vykC4^4gv5uLua!iiy3A97>eb~Y#$a@@B&lCrbQXG;=vQwM0f4o~5H|Mj{qxZ7 zRNPX228x)Il3uP(%`!*Ly{YV#$od_4Z01ALVKBtUA&!uQa}bxi8yR-5AkE^rn>OP7 zV*pnXP<;NT?M`tQ@cHT$FW&efr{T=tHC;UCf{UESY=E4d`AGm$rJmb@fU=wWA|6vs z1?K3g-cKO|*iNzw?a8#BMBvYu$N{8|t$l#DG$8yBc*~)wC08D!IxXh_*g6-$ZU7dC zz(a`XNxoZI&{W6yNRJhDu0?U$C~i|-m8Xz5=vC+7jo+Ub4H44E8M7zH8U{H~%L5JOs#>!Z`jz$Xm7WFUSYW z^f&-q1E-~LknGPkOMvqSgv!1s67;x4UB3{Ynp4__$TuJ$oW`i3_*9GZpdn&xL?!d9 zTUv>)ClSF=JD(V%fF1}jPNF9(hMplrjGF-EN@1l@L3dD$#ia(MMT`#u`nMqlC+8Jo zNr?yS5F=a#CprDI5Tn2J@c`pL@cY}4#`8czY3M;kq)|d@+zX}okmi=M=z&PY2+!k| zRNfY*qNgem;}XP|84SUASBRlHA~6mDgTuF`@?K)}u})K}Y7)ie2|Wt`AmL8x9NgMP znRL5ff+m;6X>PACnM@PlsxtX?#QZK}?**2!Y?{iXtIFg_fc~4{$r_l-q^rtg6GD4% zMZi@mlddY0OwA4TE0S<#QJHjAnG~>Wj1rKOx)Uh{D?C#K8V018Gs8l(i(2Vbehi+F zV~@Pn?*AZvP^~1ssFi%sBagg}3}5ufBkVxqiynF8brncjk390aEW()J9YUL+E=c{3=vxy_b zB*9Lqm7c1VKd?xs`fHJ#;a;e$&Ogl|wqaW?c#D~c-<$e3M*SBMb-rgQI}HNsOMMQZ)VTg&A>OZ;l5_;W z+C-hHaa=XtYkB?WR6^aS&W{rVWuLcY;7A0IdfJ{<*gtKn zaVkW74Z6pN@caCYNCtmv z+*ysn&#Q^P664QN{JuS?8PJwL_m%?Vf>43GsrVr}$8B&@*)yu%^9pMV7c_IZ8LZ$7 zU|Xe(lWIJp>MFqNKqo9Yg=&^CGsh_u&Mfex5x>cu+t^%4^>+6*xs^;A+Ha=WO=Sy( zGYX9A0zHd}Ae?jE3!3?!uOfwI2q`Re&+0@ff;qpF1U7VB*GZfrlFusOf@Y@PFvR=_ zrUo>&y7L7U(_Nr91l8SUeV&wH`uvt{Au{zj&w6gE(dK-Hdhh5OjXd$#L(4eZK zB%9*VwiYhzm?2Sjp?WK=L0dGVYMqv#J;Bjf|5HH2vX$Fxd$rs4>R9TY-@L0?+v$3# z{7$k7YoBe@m29+bjnF4-&|^_y)+}`go5ve1sq4^oGmSGS4IOLF8g1|+GnKB-f(Z&L zyjm@=U6xl}TeJB3M}m*x=_1QVI6GV8XSl}$CeO#n`l#9((SmYVF{t}U%F()MAUmy- zYHAd|iKbaXNIVzidWLLji*OZME#9QIh|Tff3z{vUB@SRPS~$qGFs5Y~v^F{hBmlI; zc%%zr&D~-7rnAN}n3Q1m?zZgGW7!3*Tw@pQ)-&Tl;Jv!e8+K4Mbxk_Ns^8RiHeXvL z6El7wOp5jL4t}@v0Y44?9&-96EzRSrON zVeP08v0X!ZS(7kJMEHRdh`F|4@w9rIYvM_TBsd^Rk)5r+)+5z{9u#5qbl4syTBClg z%Vf0bDdlx|$ko+OzP@$}ktPxGKyew7ppf{9JVmA6v~?Rck5=zAGEs$Pkcu>`NMPuQ zwXUk2ED;&H_jEN$PMW5Qwb5FWjnP(5f-8u%F)(_`co7|nMdoo}iwtE!rKrfssC1d8 zF~U~MF;UAUnz4MeAq!US7VF!nAvuyaYF97Wu3olXUFt7Ba^h19(UG$`*}Mti6dTl3 zMkU%QY+lr3OfZC_XhL*Fhdj0vhA+fRv@8Lg(-FjQW`$ih2g#nA#GAot&_NOcEt(f? zkKR_7Wc#EaM0#yi+d_v!OkC*b2Ads^LAEG?=fp?H8jnPEoUnmUFDB!uqADUAY zx_7xIa8$F=3ae&f(y9`XD%Fgta2UXnDr!rTu|@4Uh02pCb|5hVo*8eXVrU24t~k#_ z{fS0S@?%dN933ELL}kZWo$II|)%XwmrJ8gf8M9jB##wQSRvED}Cdxl?%;^QbwrPZE zP&_bHs%9)id8Vd$gAPnix#0NQnBjC<(TMKfzVNA3)HN@ znjuq{;#?(TEZU?d1ZqlMQyi5HScx!TbBzI8rs1;IrH-_<3g#xZ7^Vl=$0E6Dud(8# zc&4?~kz~bAm9bq`#&%m7dkS_DZJJ5PSrO+0M8$7!yuFjG*cS&!S+R=3#>_covRVy- z`@;sG9aU76Z|BtbcCO`He$oa`?NEv?D7fTRtmUj9tro?DrsHKRN!j415r_uyJuE2g=+c&P!Zyy*EUV)%_p2-_DNXKsy?=YctbnozIF{5nnw#)$=S zKupa6w~NdOOtG5b2A+=s?C`QU9&F8qB~^5ae(*zq7M$7-%SESNDiOjaizU9SzN-#I z>8mO;7^T1rvL2VS9<80C+RTci&O*GQc%b&Vl~GQE^D2oG>)=6#RH#D2MaC)X5YR!& zgnb9cccd^V*T%kxqsIzeI(lLN#8{1`qczVyZX^rQ0m@GbJ<${G z2p%!^xV2)M zqIR+#ty|_S=17^|9MJYSg`HT_r%27O)nTCdXTr9Mdrgx30>e=UpF+LVEGD~@n(tvv z$ExZX%=b7GQV~q}rt2tX>@om7QFz5D=I3eO)`_G$O*XQ$xsqjY;8Ms`Y}h6*ka;Y)we# zk84QNb^3^y(RPlGYBfI)TjUfi4!>wk3Q#wS4IkRMLtcpSdRJT?C&WTjO=33~A)uE5q@KrrqToXb| z3h+<$M>{1Z*XujMGAr%|3g}|2oWUWCr%}u4-qd?!YCQ_`451>4IZ##647v*R2ab}{c>N-dlX_2|tvVL8RO{6B-g)Mhb5>FJ zvUTePdY_oS3CEC5gNRieXgJe#l=v7Bu`Hryu~uN%(^cu{V7EijtN3s);)PvBJKcEW z)~YMLK(o)5t{((yum27R^fgOUU@XnktYCWd~M)-Z&XiK;abV)fryNq5t1 zb`A)1+u!Ee{x*-oL5GR?wJx^6_QHh#$HqYPk*L`m8v_?dJBJFtCE64FlN_3q5KGw^ zmeqRjK;UPSv5w+EE!2p7(>yQN5h|)q!A6am|Ie+H1zJ+AhlRZ^ZXzYi6CVZ8r=nRP zYvdzBSY0PkyRyDpMqNww;yv`UeJkp;m|92&aNYRqdsQNKuQrW(zp4(^CcsS}lw>;dJ z$KxVmmM#^ok^9x7$EeTMZ0PJpwXxOs%pi< zEb_aIVC+;hOLP(@9319GJ3w?Sn3v@E`O%stbBm5xGc7SUVZ|Py&qY6zMLgAt>Pzst zWt}ss%@kmT4&*sv--NuM)zL;4pV@9nMN3t$h<_qFR7_*lM8}GVED9#eqIDDKcVRmu zST`I;;FVO}BD7T!vt-e6K*a{e2sPJPZ^1aBI`nBrhSpL za<$Go=rmp}mAOH`4RuYJ*EE?zl{9R!`69)tEzi>_{WVx^y1;gnh1PenNcbK(sX!j7mc6e6=R$ zI;k9>ucvgt#(O&kpOutJ8{+irq{`WL++@Dai83PjW}}6w5S!kq5+@u{w<3$UY6`5% zm`prU(9c4qikgVl2n>Ps@+nR%lp0(eTdPy_M0$(uN?Vmi4UzFMp~QxLpEVP;7h^=U z^+K`4N`u-OWwelvtmYE7s%9yNOLU89U&Q=CO^;R4g43EQS|aO3Wh{-0mc)2kZvl2h zTU13$(rZ}j^jt`bEOEUCht)t%^r)Pek(3C*8l+Gn=qOuTBqAwS1AASBkaQe`R9D!^ z(_m^e(C}x+xlQX~juriL>qW-Aq{xuTeFz{c?iO0vkuVdjfMC<=^yW0OV@XYR^rJdr zW+xmirxXy+G{wngk9KEfB4JKO!SK|uZ?CBJ?V)7fUYX=L<*HRy{H~6(*K^Y&PGf>5 z`xlOmu>w|IG^cdtBr`01HtgZzv{y#NnpYk9r_+SP2-D2yX^{iYiZ0`-aW-Z%Yx2SN z&TxRJ?@WnVyojVr%;0d;Z;MD4wL7ah9gua_6`Jle`b0cXO`EQu4_D`~+h`}QEqk6u z8U^mnM9)Nj)db0J)EF?MS$bZzLkHx(q{&;g!hl_us|H0FRr_q$efCQjn4W6H({!?V zwN7Teq{+Sp@8~J}+M=Wc5Hl2q7ub$p=jqXLAI4`O&jOQJm5Z?PquN1ieL~!o4OeQ7 zgS2Iq+YuQ~)mmp@B@V@r8IKB)Pu9nyk~T%A2NVB-Z7zpC;#cYs2BG>|@qs zrDoU%`ydj%EpC29SX%Xt=zL$jvn`Mp(^~g|g&Zaq%D`~qq<$92E)Wg1`GiS=@u<#s zoSZ_bL#Urbv28KUEK0O5Xg{gib#1e1<2toW&N$7k357Y*iV-KnDI^ISMQxO6gv|Wu zRw*q|y#~IlWEVcAP>GLP@j<%Z_SibtvDMWv#wV3L*d(hMFfUC$W14 z9)Lg-5Bqg|6-KDBV-7Q!$3l(!6a6trGGt0@x3(%J)ax1@)$O9@etj=M&t!yP2#1QT zia>m^HH#MXKx^5B#fGCeB1>W$Ba{cDy|CuTP(_xrlvd@_KFj%+m^l&Eq{HlMY_3eK zSsH321f4GIxr&+SXVZ1XL{E$NRZLn+=Te&@=?e^|h6$G5ayU!Q8P|Fy3!$py z?4)`Cw?V!7GM$PZAH1#Njdi%SK5lzrl6&m}L{;9yvDpTz;vNRu!IK=3@Ic!!zdt_K zQ2Z}V%9mwvy&y68NBcYz8nl*%4*MXuVmev#T>S}g|N3exLDpCqvzA)H88xi{V|`7x z!zdqZ8Wk(+lY!4|@DHVdQK^9gw}Uy~`V~6KW{m6h(PcYUI8YUuW;QoYC{AWNbAa)`^c~nkMH=|qMm0-Td{T|WI0xvnL z#tKyNf+a?B?W8PZVjL$REN9)+RV|uMTGb8zq?j-vYEo!XO$tpnTO99)B0g%fXzBw9 zJHa~VmPd7V&L(5fk5`>aU5Jg^kg5F`7DKdsruWEcA3e<)r?5Nw zLBhH|UyPfY0vuVOSsU={y>GS`qYv8-RTQO4h}v~c+_1i{vybzv)Ail3fzg5ERT1y^ zP#L0~S){klIN5$1sO{m9r+pPpxoEv9UuzeyI!HoxR7%2{>-;!IzMz{&a#S_Jl*OOA zRae1@>4f?|8(r@d)g*NBaIoAs(B7>MBZa0stL+9%cHZeGp5q(0RWXoh0k$l49%%!N zQn96a1lqy|dV$SHt*0a=sV#uLD=|%NL2*4^1>D?vLttLKlgWHSt&=UNMbI*^zjJxq z!g>L;2tg4Ajl=sh>Ik8@sL7Fp%OEbrma-RPX$X7tK&?klqX$@qV-3YRvhp4`B#83G z!EY5_!kpuPHybzNc3*-7akvQncmfEHcxlv=LvWhLw10|!1sGfLw_~3V|E`-B8!8jR zJ!dnIViAn51^CN&TF5kiihl%kq4+ozQLxq`#p(VO|37#-s({zEEB-5{Lq?e5SAeAW z_XhYpop-uF#eXp>Tk$t{DE&>-AtP)nF3M@7Z-q&*Gnxc)vdJ{_({7FB9*J5(io*54cVqj{TMd{ymBJZv^jXplScs zA=GnzFktKZ={Z`SYJmOoAU;l)p7u}UA6{j<2@yU$sEv z-yWbmQ+wAa>C+YX@tilEVd>3WsPz6l;Kyg8m*k%$eeEAS`%(ElyIASpkwgsM_ep*h zoNMtv6ySe9fG7LIAAx6^+@79Kns7qjVI4(exXh8jY~8>4>spt@(bL_ zuSP#pfBj03zCFt+ncpV^_?4QRbM9H1J_SAht_a?3f4e?-xAguzcwemOb$8{r9#oIk z|K&@S{(%59S)L?;;|PHK-(llF8pNmE;a~FP&*X=^lZUFF6CCJ{4j_O3)9v{tQ1zUX zIPX=gBM{Y%w!*d>auf?}tjQH!Ie97@7d7yvtV*tqy2_!#4@J#YO z`Qe1*M;DSGY)IB`@-W=w8N10(SwyNr9+m$F{?^uqJ%AV$Du2&4z2sTI$^Me$pCFm= zXCIzC=Pmc!{MZBJth`Ce_vD#u$z$GpX?#CbhF8AHkqxac+6xD)$Wal`Rv~4r9k;G zqCa!O=Y!O~^a%0f#;-!Sn*1!3+v>il7T1_3Okv8H`*?TnVZ#L~qv#&KvNZ>Kk&L5h;3Zr`4ux(-xZNOcu5{8WvqNMFEs#Dq5)}juO-0}fq zo-!Q_o$^tS{vfNf;e;u!d&o5W4N=w)n9@_meZqeWr-^-(sG{ zGrm9R%J({-3tQhnW|rF<`9y;iGTCD$cgSQmqwj7rnfr}*mnk1I z*{MV9S%u5U1*O|f?jy+V*~b5k@up1XW=1UBX53Ws36o1rE;Z#3o7O2amo>88v`WR8 zhO13_%Cuj`egTrDzcFUYG+b^9NbB{|TdzgFp1D|m11u3x>G!Z4a=VvLpXJTWM{l*3 zWUB0%%u^99Fe_EivDWEWBQjd{&eZ5 z0SMC%1y=62#Fv}o;aS7RuDdmF%Lj%m8VLs zX=MdIVtTfkW%rp1+3X~4p8v2Jz;7Bd#@k}%fpwoU?S}~VA19pRD81bjd~h)&YR74# z7Y+ewrKv15MN)VYZ>?tT02{BwfX9u;9}GTQjQfCTT>^whDacQgB}1AzLgk?gv)0c! zRjtPdWq$>0nT#gCV#?IrcC!SGv}Dl0SeQxt_hq0 zVdh|bT6k*|Y8@4+Wv*EOX#epj)VeKFLoNoH7SqD&-HpZS_&H`4;>X)AZ{9IHr~P%t z^AAM{SU*Q<&2$7f%sc}D>ljI`QvywUH1!+IqRTYp8^V+iM^m;Ql+>ru6wLdxj%j@@ zsV@XEE8cb+gakDGbx zC=58v1lxO8o#h-RJ|y&4P7i zc`PmKhf4hrI5SU}#mCH=po64D^jk+?Y9)rBM~r_FN6AjG4D^~d{!CH#$zx3Q-%C*H zMhvi~@DY=`)s(zNZKeZ?R^u|0KV}9sRyw=Ybo85ac8h_)N*^3Q@z#9U1v%Uo5~}m@0gi;D;cWtFcg@shs})C z9_a7DN7+kTOvf?PgJu!j=3|t0ZmOMF*Fb{}u(q16V`gR&3k0jF10fcaQDjl-aI@C( z6b3ZO{w)4X;S?Omv(3`x(3DW@4G8cLvay??Gi{-q?Y-5MA2!X8n3iJ_2sIf6>WhcE zUooY{0d_3skM1`wK4F%EEDE=pKgZ1T@#BGGa@h;Bmt`-5*8WnAPM4)%Rr&WB?*VdR zYPV?u$6*+SEugV0H)?~QFoi9qFLeYI<`9C)&ZP>EQ>$3iVY~-T_jc3rGA%Hajc(%X zW?|gymQ)c92_vDH-DAA$Sz0-L+Eq@P@+T2^q3YFr8u6qy4BGC`jrW^+d^F~=ht(>{pJ`H%^T$l;pLzFwR8Rf6=BDYGDTC4%pH)_59HA?R z+Q73l(f4xDr|#v-lMK(+&7Ep zXnV~3Gfg2|y^S_U=5bSb9k_D~B*L}w+kVV6?WR!$UAh5MiuS}F-VyOUsMj!G(W{y- zGcCIzZH?J$a(ie1K-j|G!gJwK)4ths>^23cZ`mgZ$lY!lfr5Low_3{rqVoMPVrt@+E$vMF=MTg-Y`OPfs@(RNe4 znmuLKucIiUNu27pwl4*#cY}Qk%%|onO&4OXGewwN$RYGr2+Q53d&-T|+WY@i&jc%UgB9%5NUFg#jZc^bH=B9e&0_d) zvg>FeHN!k^r0R!Xn1}KMZ&J2dI*Bz@o-M=j14_!U^7Ox>DAQSHCv4hGBeWI@J}A2o zduIMt<2_;K?@|5wgek2z*~ci<-RwLwZxL)*;GQ&d*3(6kJ)K=1knCgTdHgwn!LZXGu%qgFhV7OC2il2yIlMHfm%%Vk&9-9V zg8|!IbSg1{EoW*S(>i?wb^cXcVk!F%um$8sv()=nzViE2sh{GO7M;mXKGDCI$FPGA zv`j3kRQ3Wjw2+%IGla5W6e;a7u*A^qTb?lPT^w-^FtcTw*`1(EnI@i&>C9;yae^h= zu&rp$GqcPz&HFIZmH$Sl+O_<;Nop={5+)Wd3zDX}ZD?*ACX}Y7ZBk5nDW2SOc-v3F z7RHqVUxFw9^hPf2Cp#6D>Tx*;qrYRkqB8DcXewgF%s*+o!01Vd)VGssl=_XRKeg%8 z3bZqAsje6>4U##}PUBH5=bobUqIabCNosLTc)9OiXzR8}@Q)}s+ZgCILX^A-rC~Mi zKq04f83<3<>Sa}j)tl#6+Qbv(ar{cj7i3sPE-T9ws4xpF&||fwrJQ!sgf)}>BwagD zJUsO?L%7g=VCQLAS~xowhwg(@yB&gM zVrmY2Q$9pCB>QRFm{IHmWNL}ak;uDEt)#RJ?shhk3_$l{>MqTnLhaln9es$Jx>2JV zsZ%>qDL^_$Tpzwm|D+P|;aSdkcJehxI>*tvH2Alh z%x_H@O!$N;p2_jFXuJJ=;1%-Y>Ah&=NAhCLi*|@CM>a&C!jt&UD5N}LNb#Zxe+p}! zp2sNn?L;ma(EA%L!tQI#j3-e;hqd0IB{yz0snlVp9B!)EC(UsI5@+`BLFT6IPI&;F zw*V_Dt*iw5D}+CY>l?U4?6$oDPf{33ofvsAB(8G=5uDjW7Sg6%wYs?Rk8P#D%^1MgD$bb{49=YHx-iB2I{ z6?h84nvo&R&d0OFXQ6A9Hk-4KOTmxpWDVvtM5aG%&S3Dv=A6e&>zNd>m_Dm~GJ7+; z0dt#G#q?%X#O9@?Cg$Qvbd##7JYft-x1&q5E>njePZc(MKGOIIbx*2Rp;W@JUi60o;~V@2r8ZOEc{CRGLOhNaxOk*D7pO-I%PKF z*Op4F?znUl527*(TOrhrgUX?RhSmhji;k>*59_6$cygMDG%6oVu0& zq$yl$O6-5d?2XbEq{n=E+3he)s;2Y=++usQXNt1L9>=e(vd3|q!Kr)P*MT(`7*>Sy z1E?RxJA0t?xbiym28TUPha?$|*kRJ_CL);AG9*b)5@dF}47*+CT=pb(%FJhROH(?V z({`-W>rAToOefT}8$2tau1bbo4a1RPo|XS*p_Tk9Pwf&Jj+{;OzUr`$5lMVn)h{b3 zb_or2v_`ARl&mI`gTpT8*=0Vdb|^|)q=}n;WXjN6p3L5e_O9T{VVdW%rKXU&db6p* z69nH~J0_Z7VPqc;+$OAFw)UIxJ8f%=i9y-QmY$7^@--$~o3^8QT)DB4J(|`j>K$S$ zq(zw0T1|BG-%!pK{b6Aw3a6c5M(VvKiw^7PGV2^=HXE^JQn5R%%aDw{sDN z#o%I;X^SB$yd5G~6c$4mwK&P-I1S|qkBXod1{46Z?{R8M>^+YK@%AIW=pi~&b-I}( z8LsV;q|^e}bbucq`qUK{_MNAheAWX3;SPaU`(ImQvqF zT_s)olIm$E90cRE(+z@Q7dxfChg4>qFtd)EMeEF}Aot9NUH+8%H(<^?kOvQyf zUD{JHNll8-N@fI;c`2>S;9HO!&Uyl!PP@Ndaiu1aL?$T=O^tr`VePvH?%bSb*PhY5 zhw5HXel*>flmDW(uo;;}$|u<$We7Z}E>pP5G@P;*ZhnQ~*{EaRUn*)(7A8S{iz)wB zz04>4|o9`JuGI&KDz zn^nin*~d-pF4IF6fvU7LyV=?+29fMSJXB;*joF|BrQzAld3IqQ>}v}TI|uDWyYP<{ z1tYlfxWUW;Qg`oyPat(2>gFdw-JE~XrF|O*SN9DLEnU8Jps#=bsv+FQC;BHxclBR4 zF+Qqq2M_XL>d^S;`aPrLqmyGh@j5cObMN{iYgY9$&Yr&h-Mc48M-NVojPDv7=PRh- zZRa)p2PP+`Mt4q4Od@dP;L-7&dnYHxCk`F#KQw;r*!ZsgsgWJ~Mh`j@JFW(nGc~bu z_~7W&)V@*Ynz5bNOzht6Opfk3=nP+e(ctn+rY1pr$D!T3M<+)v+4RCKmkiefHV!FZ z_r601_f88w>`WX00c2^tGko~K)a24AVP|;w@YIfd!w4UqI(lHVp2P}##(2|CM`~~J z;{VP1L#0mbog5w6b#P?&DC>7>Z0A9(>_Z1f`*$80=^vRIJu)_>VUtr+WBN3DWasFC zsj-Q1VxOiJF1g_HP0rNbv1uxNrBvvq!}ayCartziL!`Bd*jv_IJd7G19ofHT&*;?f zj*)|-8X*kdcM$b?cx2xpsqJX6v|uz~j1;2*S0@AZB?I;+1Ga71nGBKwN6Ah(BfEA@ zI{PNT&2l?5esFBh_~@>_vGFMfEIK>^cD;6TY-)7af*jQSRFd+x!_L9I6O&VY7E1^W zUp_QCzH8qL!z6_ytHufOcJ3XSbPh})z0pYl?;711vhKQdj;&0jxB{REEs|#Fj$k3>o%SsWX$PY7s|&852HL%xF}b!eI!${S$|!M<~`R4G6Ou(nUgt(E>isuD6ADtDN@a~SO`SNBfSY>ks3sD zJVD-yB?BRb2(h4Akyi&}(YC|j*5H3zjbuEU%@2pNJrg>jT{|W%BZEz?5t!N~JNJ(6 zI#C|=5Q$#Y29rW46ttxTXB6lRsfVe6=43#qTe+QH)a=lEr#4LW?& zEUkzp2g*Tng@srtDa1>@V&k?;hsJj83m8;h_m1o%eI&})!GY0nY9PZ9G6*Fu2EdUi zXXl~G$x#Thod*sLGfEg?5FIKKqZZv_XsK&Rk#MWBFlAd~NO(9PDVW-Z&zH?$1xMplWM%NwS!fS?ifN4=aX$jWfTGpR!J*$28$pBCOf`}W{Dn#S29ND*T zf;EGBl`&%4(hRQT02s;Grm-<+=g5JB$`}Xtj_sDFK4l9JE@#eb70l+al@Q6Ubd>3H zFvtpp@_@qcLX}C9wuM&ho|xP*M)nPAJtR$zm>k=)mwXKF3i)Bh*!T`m8K0QkKeCT) zF8U34U~Fty>KCKc?y)0-9JTPf+!-4`u)_)KbsGBG$5EqJyzPQX9WFPNDc{`Qfd^{q;-h`3pFy~$e|-UoP+yD4v&hQkV+0(;*`Z29H`Z;=v&hkesG9tWv$w4 zd0!iH*J&h-6!26Pi_wR&qDC?(A;d(jt4me0kzsc3(s~zmIc2%lhP=K>I-_Ojuo|T> zoAx?;MyB?v{wwm-c3eP^VFsZ;hb=caP^)f)3JoD|kyk3&!vR0qU<~6b52B=mOCwCL zBEfdn8s-`+*iT=>GKye)fL)-?f2sashYudwF?_)=M4D6w206{au$rnEW5=e(AhEB5;W{xs3}*r4$HA$|L!ze* z53nB`mvX;Y{J9T0Jfz*rb?6$LE{QWO@&5e8;Jih!%Abrq#9 z7(vSj2nt9Q92hCi-sk-HIs5LsC!OVE(cJgD`|N%0`Plc|`_9?NHLb<{EBluZx+g`} z9@WwKh?5MD4DnOr%KjdAJ9JLZb)9@O80vSA+07jTBYleoFOgEGdluhUDX$H)$(ObC z4)qTV_R%AlYj=*R>j|mRH{E#|e0l}+hDj8xW{up@dlOh?JEEh7?nUmtPmW?>kRDgn zIWg%*q>Je~6t{VhYKQ2%$08Pdwj{Q?qOOouTy=&aW<7FPP^NhK#x#_;Yv<=1Q-N+C>+=rR!tCrcU?1 zNsRT4(16nMHX45R4mZ*Wxp&wXO4>Y|&-N~+UW;cM8InT_CoCbAdnjpiN_^H<@!c#$fuLXolvO)P^yjHT*Z`0r<0vamw%jMHF$}Feh(G+ zhV=gKlJ`2Xm|gj_cKAl`T5f;$vSfs;xOcnmsHvfAg*#Z1$kKX7n!-D z{+#`B%IXINMf3svMzgVQK`|?PoJQ`2q_jT$L zJZO>9@53Sr{3^Q+M@?eUJ0de_FP8T(aYd4T#YtN$^&`7{L!Vz4|M1ATY6tUAv>Y(a_vc`>Q9(+O8!dfXSL4E6Uu;V zVl)V+(YdQXN$%?@|9e{gDy3jnyCJi4ajqb8zwXIphitXT_2zTpkuGCHBkr7(3Uye19^_N~gYE%^P80P1x>HLM8uaH9 z(X*h>zi8>{qX*|r&8gCwI9uwKz>)o5!}4!jJ3dV03~d^p==kILk@;%U4D}CUeG}y#H6_ z(E}QUct$_j4%hO1B7RM3N0t-oUsT)I(^E@7uXi;yOdIH5Hgd_dzGWk|X+v%QvYvqv zdfVs(@ujwB>Qp+HXQL8(p;~%1N$;Lk(9iTMrjZfOxBupDR{VA9)Skg*=lA!yD{+~m zyPKIJ@x*#*dstdB*yt*KZ%Bu^qbbM06ag{<@$imF(f-K(LC*df0K|q#HzVeZH z+46?N+?N)=I(X>GDD?X|I`WMgqA9D^z3LDmUvuZY!DkaaI-6=b^fp#_;6eQ5GI zonBUuY#m#WnVd%!WUbErr5Zs&mfRem?8v&Aa|^N@W@16sz8qGNbuI@KWKql1d{N8V zjG<^cS*)`uv-V#fQ;_*r`xIoJ>xl(fn=q{)v(d9%E{+auM<$7Xb^PC@GnaRn+Irg< zr85?Bsq2wxxeW!GdwZa&9+^)&HCeCoF0=W*GFJ6CnX7qFLFQ#nD9AL-0}3+hvUFdO z*^<=-nHAYwkm-)isvcz4Vq+l$e=EoqZ>d}a38mn%Lby-b6fqUtf!a&ol3Zkecc zuIe{3V{E7()4&=EGT}=isgjP8ADX9@?3V2Kt3A1w1I$?>erO{U`VhaIg6yi#LGGA% zUfj((W_g3%Qg7xoXE^uawVjS{yvM7=*77d@TG>gfv+-rA^25>p9g-u;TM44YWNE9y9{3qe!t;Y zgFj~Yjo@1h|2p_{hJPFUWy9|W-(mPB@STSL7<|t$`TF_=_yogW1g|!nLm_aVn`Zd` zfENv?N##zy)$qN*Pc?iZ_&J7u0=(aFULnQ#88N&Feud$)z^^mB9sFj)&ji22@Lury z3?Bl2#PELvf6DMLfNwMWdhizwzXkja!|w!t&+zYp?>;tP?~j1*YxrjHLk#~p_!Pr` z1>R`*Yv3~se;a(R;oi|!Bxe{t&N~Q^Bt`yb1g!!)JisW_TO; zJ%*nK{*d8|z@IdHDfrWdUjqJu;a7scX86B=zhgMh=;nS=v0J|0ZwKGY@O!~08U7#O zM;QJjcxw1o@M8`CCHNe}UjbiW_zv)H!`}yAYIwm-d9O%T8U8Wws|-H`{CdMDgWqa+ zJ@{RQ9|wNF;d8(rGrSXgi{V}1&l!FJ_{)ZmfbTH;a`2soUjx1;t$5I%FN04o{5J4v z!|w*4X86B@7Y+Xbc&p)Cz)v;&S@3fV{|$J*;ctSE82%pk6^8HT7Hd@`*BQPK_|1mX z_P(wk-C_6<;P)9`2mXlRM}t3Q_=(`#3_lh8MZ?bqf5Y%4;O`l}0(^Jcd`f>V2jAE5 zYrzjOd>!}{!*2&~G<+lY48tD=pKJJL@G}g52E5ns?cf&~{yO+&hQAAbwc)#c#Mkdl zhF5~$X86J2_ZU7I{2{{|z@IdHI{4Fuw}HQ4`03!U8NL|&9m9vfD`-C={kar;FT>Y> zPcr;Q@FNUg51tx+H~6uJKL|d@@F&0*7`_#}+wkYXmm2;m_$tHS2EWSi#H~H8NUk@0 zJov4KPXxcq@Wa9HH@pt~F~g4m-(vVl;LjP}3I4L-=Yj7qd;ol>;g^8#xktV|d>(v) z;cLOG4Zj6^n&BJ3i-vy>yw&hc;HMh?6Yz5ke-^yo@Rz_x41Wv!3d7$Azs~SI+&kBb zJHp4r>Uo`w|@HY%!0{))iE5LW(GhgqQgYRqj zwcv*sz7Bkf;kSb~8om*HhT#u`&oz8A_!)*j1Kw-+cJPY~e;xcX!`}tJ+VI`>g#S0Z z68tv94+g)-@X6p08QuW?q~X)SpEkS=`~|~L2Y=1*#o+H4J_KGdE?@7Lg70Pc8t_Sm z-w1w$;p@Ru!|w(^*6;_x=NSG3_yWVXf_EGKJor+>Uj<)f_}k!D8J>*u^?tqKyW%w0k_`f>+qkoV48n_!~Da&_(=W|Ir1%gjhvV8a`c$MKl z0-tR7Ht;&bw}ZDB{(Iu3%3((t{+BYmuy<)am1X$BW%!gb{Dm^Sp$tF13_p=LZ4{8m z{D}il9wXr6kMK3)+#{V^Q%27XW%$iyxY&K=Q(nK=T@SnOgNxmN`w%^Arsnm0A9}t9 zE_$|=(et}9T=H40$?N|U^tXeH{z?0kuJi$NA4>dV#P>k^ z6hFkxiFrebUM3_p^5xK{1AJVi*E7%Kq@TX-n~Y7SFYw&C zK{~gVzJ8qagc%r+zYRQ0#R9+I>EZi`*Tb!nKbz=lbuvB~0S8y{pL04|J91bAP?WDuBlY7bUx%^=K zAoug*NS@pId8U2NABcEdDADEmChLB>(&rpZ>wpD^9q%^?2<^xOWv z6Ff{lgnT9Kxy|i4O#cG^1bCP(3EoVc%lVc4z1>s5KSR8duQ&8lf8q?tTffmO9C~Og zX7^bM-hg^M4E#&rP3VtDfv*Q&1U?1)KH}BMN0ScYAN~{avgg}O$o~}ldGrfEPbf*= z1h@6R6Z~6Mz8vm?o&#yiaW0?Bu><=&@QgT@bC_TX-U=S3wt>$l&gHq`F5iBDlk=ee za~Ln(iW8p&mw9i;g5Lms!zX<{UkCpVxXiud9Y^`Ii8$N+iK)kJj#nfdrr(XBcFxx; zQ$}}sHOccN&(|B~g@XScde$2~e}sIP9}4;1CiwhpHu;%Iob`t}eULwjIOj*^ET`a~ zfgamF&xD>Z2^sPifLs6ekKl27uupIUaqjQQN?%{{Jh6^A`-hv%_1;39^ZEWi_1k~R~_hiJNP-^7eIa*9M%`1KTH~h{5s;*G-6t3uJ=2R@0nDZ z{`&y*SG9P%+o9*D;A^INejoUD;(T3k>Zw1mgLozVmu$`VueTu|r!k=JrA4qFq=5%GtAOP{?CM-CnkA4XMFg`pOdVUDL?i1ebxyb)rxZbyLUz7IvJCf)8hpGP1^8xg1#B%|; zP50T460&@pMeq4x;MN~bBhG$ltMLQJ6X$YXyPwbJbE4uY zw=Y7^6DVgHfBu;`mvfke4gKRL`Erxx3NoHKoH)yedH;~lz-{@=0*`a}eS&%5cKmrh zajq{rj=hvP*Y6Xie%C@zSp0$f+z$C?jr{kaU*^|;2l9^-uTJ((Hb9<=#eJT3eD`Fd z@ju(0etN%D=j##T$y>y^e8P$boEUqczphU7(;@JQ#97{s=QoSr!2Nv<A7H>dEfX)$cKds&_9M|!E-r>B|qSkh;w_J4*w?o zx&i!Jj2nxPZ-t()%mMr?$amtoM#fzif;gO{6e&R3zw`ty6i!_pbpeG=T}=V!z@ z|91TUGPtZ?`?QIu*N458pTcGF9;NL#P^S`+H)>H;`W8!i<@F>rZh5U)&3EtP81%58^ zYMLaq-L%6CiE}&IZraIp#JT*#;y&oP4f+@2d2=oJcfrrx&*!HR{Bh#d$zI7?bH8{7 z`ols-$p034&PTsE27EjX?D=}_bK({}*C#8`u24QxATR5-j)R`#iSu>Y@!rXh4~yj> z-wAo^w-8LMh=d{YTdw9jjP)+yprOEux88c6I;f-nCc`|p# z>0NVM=O%L(v~|uop}oDct7FFO)~*?Cb7r5SAc?fkJELpPDJQlodQ$6*S*`QB=FXTs zXXa>pV%v<_^GD;EC!IWhfi~F6S#T;iDi%fUTh>S63wt>P*2qxTP&dVu=%awA6x7j2 z$j)+Kx?C(fb-G@kuJ@-!Cr75Bh)X>bjAXcL5k<4Rc$il5Qt+_4aFm9lEF9H`qlR$Q z7>=64QFAzI2}i|nlqw_9N*c|i(GIO)maL`GQW{OA(N-FbrO{dzt!2?#7OiE`S{AKk z(OMR*Wzkv|t!2?#eY92|t<^_s_0d{=v{oOj)kkaf(OP}9Rv)c3L~9MvT0^wf5Un*t zYYov_L$uZqtu;hz4bfU-wAL7{HAZWV(OP4)))=idMr)1HT4S`<7_Bu$YfaHwQ?%9; ztu;k!P0?CYwAK`@HAQPp(OPq~)*P)hM{CW|T64749IZ7+Yt7MGbF|hRt+hmJEzw#_ zwAK=>wM1(z(OOHi))K9?L~AY4S}|HHMr*}rtr)EpqqSnRR*cq)(ONNDD@JQ+T{M^0 zMSE#oG?>;!i)mdnnbt*{XtNqCJatE!wwe=c2ufb}!1m zq{_jh%EP3}#iYu|q{_*p%FCq6&7{iDq{`8x%G0FE)uhVTq{`W(%G;#M-K5Ijq{`u> z%HyQU<)q5zq{``}%Il=c?WD@@q{{K6%JZbk^`y%8q{{iE%KN0s{iMqOq{;!M$^)g! z1*OUdrOFAV$_u5+4W-HtrOFYd$`hr^6{X4-rOFwl${VH19i_@2rOF|t$|I%9C8f$I zrOGL#$}6SHEv3pYrOGj-$}^?PHKocorOG*_$~&dXJ*CP&rOH92%0s2fMWxC|rOHXA z%1fonO{L0DrOHvI%2TDvRi(;TrOH{Q%3Gz%U8TxjWy)V=%3o#5UuDW)Wy)V=%3o#5 zUuDW)Wy)V=%3o#5Uu9|ZSDErxnetbe@>iMiSDErxnetbe@>iMiSDErxnetbe@>iMi zSDErxnetbe@>iMiSDErxnetbe@>iMiSDErxnetbe@>iMiSDErxnetbe@>iMiSDErx znetbe@>iMiSDErxnetbe@>iMiSDErxnetbe@>iMiSDErxnetbe@>iMiSBnNYNWOan zpxCqVsD|SN;VZ?p0K;s2$F2@-a|KL~W4PbU-iFU~RW z=X_vw_is&Gmh_QT`oD|(0%d^1^Y#o=U`BdEapCQ1XloG_uZg2O@zYg|;3Scu@{|K; zF&SQTNf+(uLl>9~r&&C#kB1HMurVAi8VZNY!{PZ9IUUM;z%B&g>QMo==r{!0(($xP zhRGsf72^t#t7xZ|lmZ*Oy>?uY{;dGUqhbznDC8LNDulOk;jBz}LJpTJv8yO2_AKJM zj*dh{vJP_4C6kDw;mzittQ549!spvqn4Ci5Pf3U;j#cP1o!M3-=4;*R4RNy&<%#s@ z=uRdVateXCMrYH9+lzspY>Jp?g1mg zUQ-j^kGI!x0TDwGJt8jVG4DQ+nr$pb?G{8P^C2}65z}lnL}DQnc}_E6U|&roJIzbbm98wa9|A{j z4Z&#bW=*7;YtC$op`-nWLZ69x(ZNt%Qyg(|J#%Fo+a3&zin;Ftko&-}xu~sN939?A zh{b&DZWkhyGhHG=eKBszFsjA4&9b_>PMA*{-*nEH*V*MlTf0tCqQ#BgYpdiAPt+1e z?d-+D!aEm+5Y=&eolw1@OiS%UMFn8utCp;0X^#0uiY?tx>M;zzD-8q`bxy(;MC&QD zd@<Cpi@b)e0B3b$*E4qK{&lE#;l{DyK?>%uuM4(H+l-`FJvGS>p#|9Gz< zE&~qjD#6MZsrQfzIy(5JCB5{Fx$_Z2QH?Pou7vHD{-w0|x0@&@Y=PivQe>&|p)XQX z%kN9G(%+|OG~puh#|rlQK)Kp)b0ZfjzEa!Q*c~jmBwS2&Zq{j?+N{7i?$BJEFA4jP zv2fUUg3F?msoYi-v1D?g%1b6Jxi1UK3wz7(h31=|YxzD}FV{|pdaGLlaoo!#e7Kf$ zeSXM=X4frGx5+Nr9{HHEk@g)AnJZd93vLDMx3`(D6UqVB}F1OuOPO?SDRwTiiKMLkj@sdZOX*bJ08etL@{CatBCo?sabN6 zjUMy6EyA+eNXn0;DK~K=Gp~pGV}sh0EhiBZ<#xvTf9=O7KASfXjLlM-+syU_r*yiO zl^cn1qtKP+MrN|lq3d5#{L)gmFHq0)o6VHErRaT%oc0(1TRNW`nCCa7BS~)#eJ!?s zO62dfCEa6ccIO&eI?&)QYVTQrtFvqej~9h8(V%dLNH%XsDpZ{A?)P>9AuOU$EM|v-EzS zEL19k((=M3Ht{P6x1|Ac?3#gl!N9v`5QMWrdz76#)UF_Wopc++HdtrUGjFM|DH@_gMupjl|S`#pwr7d^L3x|5;6}|?rXWzz5cC7<5Mw~0DDjo-gtCjD_Yd&$Q?8D;s% zrvDMr*X6~MipRX<`!sJF~sMAFIMm&>GI|Du3O-2q?5mI zB7IJXzC4Qbe{%6D<5@{3gujQjBar?+_==aDj0ux8Eju}fko14)7aaD;T%yym{UEP( YgSh}}pJzvwO26i4pZ)`rzq4^RmqWB>pF literal 134608 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 diff --git a/machine/pit.cc b/machine/pit.cc index ebb5faf..c22cc1f 100644 --- a/machine/pit.cc +++ b/machine/pit.cc @@ -8,4 +8,17 @@ /* Programmable Interval Timer. */ /*****************************************************************************/ -/* Add your code here */ +/* Add your code here */ +#include "pit.h" +#include "io_port.h" +void PIT::interval(int us){ + us_interval = us; + unsigned short divisor = (1193182UL * us)/1000000;// 1,193,182 Hz is PIT input clk freq + // int every 1 ms + IO_Port command(0x43);// PIT command reg + IO_Port data(0x40);// data reg for channel 0 aka system timer of PIT + + command.outb(0x36); // channel 0 LSB/MSB mode 3 + data.outb(divisor & 0xff); // LSB + data.outb(divisor >> 8); // MSB +} diff --git a/machine/pit.h b/machine/pit.h index f151428..8298a3f 100644 --- a/machine/pit.h +++ b/machine/pit.h @@ -15,13 +15,15 @@ class PIT { public: PIT(const PIT ©) = delete; // prevent copying PIT& operator=(const PIT&) = delete; // prevent assignment -/* Add your code here */ +/* Add your code here */ + int us_interval; public: PIT(int us) { interval (us); } int interval() { /* Add your code here */ + return us_interval; } void interval(int us); }; diff --git a/syscall/guarded_scheduler.cc b/syscall/guarded_scheduler.cc index ef0139b..5bc34e0 100644 --- a/syscall/guarded_scheduler.cc +++ b/syscall/guarded_scheduler.cc @@ -8,4 +8,30 @@ /* Implements the system-call interface to the Scheduler. */ /*****************************************************************************/ + /* Add your code here */ +#include "guarded_scheduler.h" +#include "thread/scheduler.h" +#include "thread.h" +#include "guard/secure.h" +void Guarded_Scheduler::ready(Thread &that){ + Secure secure; + Scheduler::ready(that); +} + +void Guarded_Scheduler::exit(){ + Secure secure; + Scheduler::exit(); +} + +void Guarded_Scheduler::kill(Thread& that) +{ + Secure guard; + Scheduler::kill(that); +} + +void Guarded_Scheduler::resume() +{ + Secure guard; + Scheduler::resume(); +} diff --git a/syscall/guarded_scheduler.h b/syscall/guarded_scheduler.h index 4582140..f464679 100644 --- a/syscall/guarded_scheduler.h +++ b/syscall/guarded_scheduler.h @@ -12,14 +12,19 @@ #define __guarded_scheduler_include__ /* Add your code here */ - -class Guarded_Scheduler +#include "thread.h" +#include "thread/scheduler.h" +class Guarded_Scheduler:public Scheduler /* Add your code here */ { public: Guarded_Scheduler(const Guarded_Scheduler ©) = delete; // prevent copying Guarded_Scheduler& operator=(const Guarded_Scheduler&) = delete; // prevent assignment Guarded_Scheduler () {} + void ready(Thread &that); + void exit(); + void kill(Thread &that); + void resume(); /* Add your code here */ }; diff --git a/syscall/thread.h b/syscall/thread.h index 91a41a3..1ed0a40 100644 --- a/syscall/thread.h +++ b/syscall/thread.h @@ -12,15 +12,16 @@ #define __thread_include__ /* Add your code here */ - -class Thread +#include "thread/entrant.h" +class Thread: public Entrant /* Add your code here */ { public: Thread(const Thread ©) = delete; // prevent copying Thread& operator=(const Thread&) = delete; // prevent assignment -/* Add your code here */ +/* Add your code here */ + Thread(void *tos): Entrant(tos){} }; diff --git a/user/appl.cc b/user/appl.cc index 45312bb..ce45a31 100644 --- a/user/appl.cc +++ b/user/appl.cc @@ -12,11 +12,11 @@ #include "device/cgastr.h" #include "machine/cpu.h" #include "guard/secure.h" -#include "thread/scheduler.h" +#include "syscall/guarded_scheduler.h" extern CPU cpu; extern CGA_Stream kout; -extern Scheduler scheduler; +extern Guarded_Scheduler scheduler; void Application::action() {