From d65ffe30cd43d03b0463a8d97ecb1fe2ccfa4c4b Mon Sep 17 00:00:00 2001 From: SleepiCaffeine Date: Tue, 20 Jun 2023 01:06:02 +0300 Subject: [PATCH] Updating/Removing older files --- .../{linkedList-doc.h => linkedList.h} | 762 +++++++++--------- Data Structures/node-doc.h | 142 ---- Data Structures/sleep.exe | Bin 140004 -> 0 bytes Data Structures/testDoubleNode.h | 113 --- 4 files changed, 381 insertions(+), 636 deletions(-) rename Data Structures/{linkedList-doc.h => linkedList.h} (95%) delete mode 100644 Data Structures/node-doc.h delete mode 100644 Data Structures/sleep.exe delete mode 100644 Data Structures/testDoubleNode.h diff --git a/Data Structures/linkedList-doc.h b/Data Structures/linkedList.h similarity index 95% rename from Data Structures/linkedList-doc.h rename to Data Structures/linkedList.h index 29bdbf4..b8738ea 100644 --- a/Data Structures/linkedList-doc.h +++ b/Data Structures/linkedList.h @@ -1,382 +1,382 @@ -/** - * @file linkedList-doc.h - * @author Vakaris Michejenko (sleepicaffeine@gmail.com) - * @brief A header that defines multiple dynamic LinkedList classes - * @version 0.2 - * @date 2023-06-19 - * @copyright Copyright (c) 2023 - * @link https://github.com/SleepiCaffeine - */ -#ifndef LINKED_LIST_H -#define LINKED_LIST_H - -#include "node.h" -#include - -#ifndef LL_DEF -#define LL_DEF -/*! - * @class LL - * @brief Base linked list class. - * - * @details A base linked_list class, which acts like a Singly-Linked List. Supports insertion, removal, and dynamic types. - * - * @fn get_head() - * @fn set_head(C* const nd) - * @fn get_tail() - * @fn set_tail(C* const nd) - * - * @fn push_front(C* const nd) - * @fn push_front(const T dt) - * @fn push_back(C* const nd) - * @fn push_back(const T dt) - * @fn insert_node(C* const nd) - * @fn insert_node(const T dt) - * - * @fn pop_front() - * @fn pop_back() - * - * @fn length() - * @fn size() - * @tparam T typename - */ -template -struct linked_list { - -private: - C* head; - C* tail; - unsigned int len; - -public: - /** - * Creates a new Singly linked-list with a head and tail that points to NULL, and has a length of 0 - * @brief Default constructor. - * @see linked_list(std::nullptr_t) - * @see linked_list(C* const nd) - * @see linked_list(C* const nd) - */ - linked_list() - : linked_list(nullptr) {} - - linked_list(std::nullptr_t) - : head{nullptr}, tail{nullptr}, len{0} { } - - linked_list(C* const nd) - : head{nd}, len{1} { - if (nd->get_next() == nullptr) { - tail = nd; - return; - } - - C* currNode = new C(*nd); - while(currNode->get_next() != nullptr) { - ++len; - currNode = currNode->get_next(); - } - tail = currNode; - } - - linked_list(C* const hnd, C* const tnd) - : head{hnd}, tail{tnd}, len{1} { - if (head == nullptr) { - tail = nullptr; - len = 0; - return; - } - - C* currNode = new C(*hnd); - while(currNode != tnd) { - ++len; - currNode = currNode->get_next(); - } - } - - // Deep-Copy constructor - linked_list(const linked_list& list); - - // Destructor - ~linked_list(); - - // Param: - C* push_back(T dt); - C* push_back(C* const nd); - - C* push_front(T dt); - C* push_front(C* const nd); - - C* pop_back(); - C* pop_front(); - - C* get_head() const; /* hehehe */ - void set_head(C* const nd); - void set_head(T dt); - - C* get_tail() const; - void set_tail(C* const nd); - void set_tail(T dt); - - /** - * @brief Inserts the Node into the index provided - * @param nd Node to be inserted - * @param idx Index where the Node will be inserted - * @return Pointer to the Node that is behind the inserted Node - */ - C* insert_node(C* const nd, unsigned int idx); - - /** - * @brief Inserts a value into the index provided - * @param dt Value to be inserted into the list - * @param idx Index where the Node will be inserted - * @return Pointer to the Node that is behind the inserted Node - */ - C* insert_node(T dt, unsigned int idx); - - /** - * @brief Returns the length of the linked list - * @return Length of LL - */ - unsigned int length() const {return len;} - - /** - * @brief Returns the length of the linked list - * @return Length of LL - */ - unsigned int size() const {return len;} -}; - -template -linked_list::~linked_list() { - while (head) - head = head->get_next(); - - delete head; -} - -template -linked_list::linked_list(const linked_list& list) { - len = list.length(); - - if (list.get_head() == nullptr) - return; - - // Recreate the head - C* newHead = new C(); - newHead->set_data(list.get_head()->get_data()); - head = newHead; - - // Deep-copy the remaining chain - C* currNode = head; - C* sourceNode = list.get_head()->get_next(); - - while(sourceNode->get_next() != nullptr) { - // Create a new Node in the list - currNode->set_next(new C()); - // Set its value to source value - currNode->get_next()->set_data(sourceNode->get_data()); - // Set the destination to null - currNode->get_next()->set_next(nullptr); - // Move over by one Node in the list - currNode = currNode->get_next(); - // Move over by one Node in the source - sourceNode = sourceNode->get_next(); - } - - currNode->set_next(tail); - tail = new C(*sourceNode); -}; - -template -C* linked_list::push_front(T dt) { - if (!len) { - C* newNode = new C(dt); - head = newNode; - tail = newNode; - ++len; - return head; - } - - head = new C(head, dt); - ++len; - return head; -} - - -template -C* linked_list::push_front(C* const nd) { - if (!len) { - head = nd; - tail = nd; - ++len; - return head; - } - - auto oldHead = head; - nd->set_next(oldHead); - head = nd; - ++len; - return nd; -} - -template -C* linked_list::push_back(T dt) { - // If the list is empty, set both the head and tail to be the inserted node - if (!len) { - C* newNode = new C(dt); - head = newNode; - tail = newNode; - ++len; - return tail; - } - - C* newTail = new C(dt); - C* oldTail = new C(tail->get_data()); - oldTail->set_next(newTail); - - C* currNode = head; - - // Traverse the list - while (currNode->get_next()->get_next() != nullptr) - currNode = currNode->get_next(); - - // Add the Node to the end - currNode->set_next(oldTail); - ++len; - - tail = new C(nullptr, dt); - return tail; -} - -template -C* linked_list::push_back(C* const nd) { - // If the list is empty, then set both the head and the tail to the parameter node - if (!len) { - head = nd; - tail = nd; - ++len; - return tail; - } - - C* currNode = head; - C* oldTail = new C(tail->get_data()); - oldTail->set_next(nd); - - // Traverse the list - while (currNode->get_next() != tail) - currNode->get_next(); - - // Add the Node to the end - currNode->set_next(oldTail); - tail = new C(nd->get_next(), nd->get_data()); - ++len; - // Return the tail - return tail; -} - -template -C* linked_list::pop_back() { - if (len == 1) { - --len; - delete head; - delete tail; - return nullptr; - } - - C* currNode = head; - - // Traversing until the second-to-last list Node - while (currNode->get_next()->get_next() != nullptr) - currNode = currNode->get_next(); - - // Set last list member to null - currNode->set_next(nullptr); - tail = currNode; - - --len; - - // Return the new last member - return tail; -} - -template -C* linked_list::pop_front() { - if (len == 1) { - --len; - delete head; - delete tail; - return nullptr; - } - - head = head->get_next(); - --len; - return head; -} - -template -C* linked_list::insert_node(C* const nd, unsigned int idx) { - C* currentNode = head; - unsigned int counter = 0; - while (counter < idx - 1) { - currentNode = currentNode->get_next(); - ++counter; - } - C* nextAfter = currentNode->get_next(); - currentNode->set_next(nd); - nd->set_next(nextAfter); - - ++len; - - return nd; -} - -template -C* linked_list::insert_node(const T dt, unsigned int idx) { - C* currentNode = head; - unsigned int counter = 0; - while (counter < idx - 1) { - currentNode = currentNode->get_next(); - ++counter; - } - - currentNode->set_next(new C(currentNode->get_next(), dt)); - ++len; - - return currentNode->get_next(); -} - -template -C* linked_list::get_head() const { - return head; -} - -template -void linked_list::set_head(C* const nd) { - this->head = nd; -} - -template -void linked_list::set_head(T dt) { - this->pop_front(); - this->push_front(dt); -} - -template -C* linked_list::get_tail() const { - return tail; -} - -template -void linked_list::set_tail(C* const nd) { - this->pop_back(); - this->push_back(nd); -} - -template -void linked_list::set_tail(T dt) { - this->pop_back(); - this->push_back(dt); -} - -#endif // LL_DEF - +/** + * @file linkedList-doc.h + * @author Vakaris Michejenko (sleepicaffeine@gmail.com) + * @brief A header that defines multiple dynamic LinkedList classes + * @version 0.2 + * @date 2023-06-19 + * @copyright Copyright (c) 2023 + * @link https://github.com/SleepiCaffeine + */ +#ifndef LINKED_LIST_H +#define LINKED_LIST_H + +#include "node.h" +#include + +#ifndef LL_DEF +#define LL_DEF +/*! + * @class LL + * @brief Base linked list class. + * + * @details A base linked_list class, which acts like a Singly-Linked List. Supports insertion, removal, and dynamic types. + * + * @fn get_head() + * @fn set_head(C* const nd) + * @fn get_tail() + * @fn set_tail(C* const nd) + * + * @fn push_front(C* const nd) + * @fn push_front(const T dt) + * @fn push_back(C* const nd) + * @fn push_back(const T dt) + * @fn insert_node(C* const nd) + * @fn insert_node(const T dt) + * + * @fn pop_front() + * @fn pop_back() + * + * @fn length() + * @fn size() + * @tparam T typename + */ +template +struct linked_list { + +private: + C* head; + C* tail; + unsigned int len; + +public: + /** + * Creates a new Singly linked-list with a head and tail that points to NULL, and has a length of 0 + * @brief Default constructor. + * @see linked_list(std::nullptr_t) + * @see linked_list(C* const nd) + * @see linked_list(C* const nd) + */ + linked_list() + : linked_list(nullptr) {} + + linked_list(std::nullptr_t) + : head{nullptr}, tail{nullptr}, len{0} { } + + linked_list(C* const nd) + : head{nd}, len{1} { + if (nd->get_next() == nullptr) { + tail = nd; + return; + } + + C* currNode = new C(*nd); + while(currNode->get_next() != nullptr) { + ++len; + currNode = currNode->get_next(); + } + tail = currNode; + } + + linked_list(C* const hnd, C* const tnd) + : head{hnd}, tail{tnd}, len{1} { + if (head == nullptr) { + tail = nullptr; + len = 0; + return; + } + + C* currNode = new C(*hnd); + while(currNode != tnd) { + ++len; + currNode = currNode->get_next(); + } + } + + // Deep-Copy constructor + linked_list(const linked_list& list); + + // Destructor + ~linked_list(); + + // Param: + C* push_back(T dt); + C* push_back(C* const nd); + + C* push_front(T dt); + C* push_front(C* const nd); + + C* pop_back(); + C* pop_front(); + + C* get_head() const; /* hehehe */ + void set_head(C* const nd); + void set_head(T dt); + + C* get_tail() const; + void set_tail(C* const nd); + void set_tail(T dt); + + /** + * @brief Inserts the Node into the index provided + * @param nd Node to be inserted + * @param idx Index where the Node will be inserted + * @return Pointer to the Node that is behind the inserted Node + */ + C* insert_node(C* const nd, unsigned int idx); + + /** + * @brief Inserts a value into the index provided + * @param dt Value to be inserted into the list + * @param idx Index where the Node will be inserted + * @return Pointer to the Node that is behind the inserted Node + */ + C* insert_node(T dt, unsigned int idx); + + /** + * @brief Returns the length of the linked list + * @return Length of LL + */ + unsigned int length() const {return len;} + + /** + * @brief Returns the length of the linked list + * @return Length of LL + */ + unsigned int size() const {return len;} +}; + +template +linked_list::~linked_list() { + while (head) + head = head->get_next(); + + delete head; +} + +template +linked_list::linked_list(const linked_list& list) { + len = list.length(); + + if (list.get_head() == nullptr) + return; + + // Recreate the head + C* newHead = new C(); + newHead->set_data(list.get_head()->get_data()); + head = newHead; + + // Deep-copy the remaining chain + C* currNode = head; + C* sourceNode = list.get_head()->get_next(); + + while(sourceNode->get_next() != nullptr) { + // Create a new Node in the list + currNode->set_next(new C()); + // Set its value to source value + currNode->get_next()->set_data(sourceNode->get_data()); + // Set the destination to null + currNode->get_next()->set_next(nullptr); + // Move over by one Node in the list + currNode = currNode->get_next(); + // Move over by one Node in the source + sourceNode = sourceNode->get_next(); + } + + currNode->set_next(tail); + tail = new C(*sourceNode); +}; + +template +C* linked_list::push_front(T dt) { + if (!len) { + C* newNode = new C(dt); + head = newNode; + tail = newNode; + ++len; + return head; + } + + head = new C(head, dt); + ++len; + return head; +} + + +template +C* linked_list::push_front(C* const nd) { + if (!len) { + head = nd; + tail = nd; + ++len; + return head; + } + + auto oldHead = head; + nd->set_next(oldHead); + head = nd; + ++len; + return nd; +} + +template +C* linked_list::push_back(T dt) { + // If the list is empty, set both the head and tail to be the inserted node + if (!len) { + C* newNode = new C(dt); + head = newNode; + tail = newNode; + ++len; + return tail; + } + + C* newTail = new C(dt); + C* oldTail = new C(tail->get_data()); + oldTail->set_next(newTail); + + C* currNode = head; + + // Traverse the list + while (currNode->get_next()->get_next() != nullptr) + currNode = currNode->get_next(); + + // Add the Node to the end + currNode->set_next(oldTail); + ++len; + + tail = new C(nullptr, dt); + return tail; +} + +template +C* linked_list::push_back(C* const nd) { + // If the list is empty, then set both the head and the tail to the parameter node + if (!len) { + head = nd; + tail = nd; + ++len; + return tail; + } + + C* currNode = head; + C* oldTail = new C(tail->get_data()); + oldTail->set_next(nd); + + // Traverse the list + while (currNode->get_next() != tail) + currNode->get_next(); + + // Add the Node to the end + currNode->set_next(oldTail); + tail = new C(nd->get_next(), nd->get_data()); + ++len; + // Return the tail + return tail; +} + +template +C* linked_list::pop_back() { + if (len == 1) { + --len; + delete head; + delete tail; + return nullptr; + } + + C* currNode = head; + + // Traversing until the second-to-last list Node + while (currNode->get_next()->get_next() != nullptr) + currNode = currNode->get_next(); + + // Set last list member to null + currNode->set_next(nullptr); + tail = currNode; + + --len; + + // Return the new last member + return tail; +} + +template +C* linked_list::pop_front() { + if (len == 1) { + --len; + delete head; + delete tail; + return nullptr; + } + + head = head->get_next(); + --len; + return head; +} + +template +C* linked_list::insert_node(C* const nd, unsigned int idx) { + C* currentNode = head; + unsigned int counter = 0; + while (counter < idx - 1) { + currentNode = currentNode->get_next(); + ++counter; + } + C* nextAfter = currentNode->get_next(); + currentNode->set_next(nd); + nd->set_next(nextAfter); + + ++len; + + return nd; +} + +template +C* linked_list::insert_node(const T dt, unsigned int idx) { + C* currentNode = head; + unsigned int counter = 0; + while (counter < idx - 1) { + currentNode = currentNode->get_next(); + ++counter; + } + + currentNode->set_next(new C(currentNode->get_next(), dt)); + ++len; + + return currentNode->get_next(); +} + +template +C* linked_list::get_head() const { + return head; +} + +template +void linked_list::set_head(C* const nd) { + this->head = nd; +} + +template +void linked_list::set_head(T dt) { + this->pop_front(); + this->push_front(dt); +} + +template +C* linked_list::get_tail() const { + return tail; +} + +template +void linked_list::set_tail(C* const nd) { + this->pop_back(); + this->push_back(nd); +} + +template +void linked_list::set_tail(T dt) { + this->pop_back(); + this->push_back(dt); +} + +#endif // LL_DEF + #endif // LINKED_LIST_H \ No newline at end of file diff --git a/Data Structures/node-doc.h b/Data Structures/node-doc.h deleted file mode 100644 index 0b1e4e6..0000000 --- a/Data Structures/node-doc.h +++ /dev/null @@ -1,142 +0,0 @@ -/** - * @file node-doc.h - * @author Vakaris Michejenko (sleepicaffeine@gmail.com) - * @brief A header that defines a dynamic Node struct - * @version 0.1 - * @date 2023-06-15 - * @copyright Copyright (c) 2023 - * @link https://github.com/SleepiCaffeine - */ - -#ifndef NODE_H -#define NODE_H -/*! - * @class node - * @brief node struct. - * - * @details A standard Node data structure that is used as a base unit in many other data structures. Supports insertion, removal, and dynamic types. - * - * @fn get_data() - * @fn set_data(T dt) - * @fn get_next() - * @fn set_next(node* nd) - * @fn forward() - * @tparam T typename - */ -template -class Node { -private: - Node* next; /**< Pointer to the next Node (Node*)*/ - T data; /**< Data which is stored in the node (T)*/ -public: - /** - * Creates a new node that points to NULL and has NULL data. - * @brief Default constructor. - * @see Node(const T dt) - * @see Node(Node* const nd, const T dt) - * @see Node(Node& const nd) - */ - Node() - : next{nullptr} { }; - - /** - * Creates a new node that points to NULL and has data. - * @brief Constructor. - * @param dt node data - * @see Node() - * @see Node(Node* const nd, const T dt) - * @see Node(Node& const nd) - */ - Node (const T dt) - : Node{nullptr, dt} { }; - - /** - * Creates a new node that points to a node, and has data. - * @brief Constructor. - * @param nd node to which it will point - * @param dt node data - * @see Node(const T dt) - * @see Node() - * @see Node(Node& const nd) - */ - Node(Node* const nd, const T dt) - : next{nd}, data{dt} { }; - -/** - * Construct a new node from another node object. - * @brief Copy constructor. - * @param nd node to which it will point - * @see Node(const T dt) - * @see Node() - * @see Node(Node* const nd, const T dt) - */ - Node(const Node& nd); - - /** - * @brief Get the node's data - * @return node data - * @see setData(const T dt) - */ - T get_data() const; - - /** - * @brief Set the current node's data - * @param dt new node data - * @see getData() - */ - void set_data(const T dt); - - /** - * @brief Get the pointer to the next node - * @return node object to which the current node object points to - * @see setNext(Node* const nd) - */ - Node* get_next() const; - - /** - * @brief Set the pointer to the next node - * @param *nd new node object to which the current node object will point to - * @see getNext() - */ - void set_next(Node* const nd); - - /** - * @brief Set current node to the next node - */ - void forward(); -}; - - -template -Node::Node(const Node& nd) { - this->next = new Node(); - this->next = nd.get_next(); - this->data = nd.get_data(); -} - -template -T Node::get_data() const { - return this->data; -} - -template -void Node::set_data(const T dt) { - this->data = dt; -} - -template -Node* Node::get_next() const { - return this->next; -} - -template -void Node::set_next(Node* const nd) { - this->next = nd; -} - -template -void Node::forward() { - data = next->get_data(); - next = next->get_next(); -} -#endif // NODE_H \ No newline at end of file diff --git a/Data Structures/sleep.exe b/Data Structures/sleep.exe deleted file mode 100644 index 48c5cabda48401202e7fbb78612cd10ff7b9045a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140004 zcmeFa3wV^(wKu-sxlc05Odx>-5*Q%CpagOukRWJo0}~y{mBl zzn)Xy)*i6?d%8FFcsuRQ-mb3hpuNdw@9FKbw|CjAYU=Er-7UUFNl6LWlC|5xSj%;( zY}vA1Ev!Rf-!w3Gg3V`%8ci-N#_C}-z)gj1Ym8HfU(>O@MX6!c7zK) zfhSOlg1#+5*!Se%j|8H$BOS57Mo6=$#T)bj2{DmY7)tg+n3!J~q+iq{2-_$vZWs&9 zBAA$888|HR3p$?0MtD-1m&3&T%7|`@pu3&&!Vg1q=fK4L%80Hh5Fk_^rL~V-r~dj# zzIMTn=QSmUH-oY7LXO}T&{~Ni^kp34{j1?R{ z$fzIyJ^?TS9F7Gt0km!}S#xo()!FP`;Z#Pqmr$P`Y(=nccn&1(>1Hg%b`A$CAEv?$ zUpWJR?_?0;v@DQ@rVQ9r_-_co;b+Y};=xMB`b(6cyI|Pa|9I|!T@RB);YDC^{85tE z`j9)lb^C{jO3*=;ruT;aeLFysY`yO4v9Ynxu9E-?4)1*0dh5usc3`Zt`+z~*Nh63W z{E`jcg12=x5dB+%2wDchs!(5;hjr{6roanQMt)wHc zLTo^PFM%O_0cfg1Cg-638-y6B%C?7nNH%ypUUERnQC{D0;kr6-wL3#uHzBpoP+k}k z7L56vAzcnNN@vJ#IzC;MyYva`j*ZBKhr?Qo*uQfQoIK&Q{;1hCF}x|6ZNs}*PSm~-THt#jam z@KJcWLODN#hjZW;J72VZc@@Rj|E8(n#p;kHGyFUVoP&PFIq+8a$8c8R!YdN=k=wKtB!tI}clTJOM7DG)BMyXu--Yi%1LYzzdFMAkfQoj#_SnsEMfiuWCLa2o z9S9c_eWXo-=V8I~N3aeW6pFV7VU8^$HoKey2ao*?u7Q#8MZi-1r1tx6nc85(Uq=z` zqB@t0I)_NO|L?dzc(L$Rr}&58N2l&Y4ayki!FI*`Q08cv?AWusDV4DUF@EH1a1Oji zwRvET4Hf^JXM@qeehBpJx#SuN->c(x$YC4UA2#Ya0K)BpFgyrvlGT3c0p2dQzi~TK z>>Ru|yN_i3CIUQ+ion7y&gTFx7w5nW;de0pIS1}Ef%;);G~u&i2?iagr8|!TkDM56 z7;_FfMym%#(R8Qsh)2TpC{V(Zv|#rd)wY26r5xSM-~Iio1IAmmXCZ23OqBWL|MC)fX>gg~nBudWatk5b%G9+#vt_9((o zo(+*qPok|2968p=MSP-c$5=4w5r_#cFNC`}5`E!FIEeX^bKnVtLKPhe_rm8mI#)uV zYNP(nM2bb|d>OhR8hWV=O*L;MToMx)Rdggg{nWtka3(zJ4={xjF`+_@gg=Cj8a1y! zFJLf^i~7N6=tp_z1CXQDtT!X!)>EUb zu#sgmy!;=BEE>P@JNk91pOIhv~x`>wH^x33cRE7E>i+WV#bJ!yYk z+Fz3PRnop(+80avJZUeN_L51`H-LrfK8d~SgeA+32ianKBm^q(9HmhL)emUygt?O7TQyjw42+!D zzhXbe*x}w2$L|yPkpA~R40yvq14bLfe^CDfVB|VGb|skYDj1GrJs&w}JnH{Y8=Q^- zcf_M1P4UXgJ814E-N!f>ZlHRDx?G#2YR&l&! zOU0LyRr-(MAGuu4kd`Jo8ssBp7nI(=jSHyefA}K|cjJ7<&zIxV!{yszO$la~SyQgb zc2`+bsEQKV^x@$369y_Ye>jtw%v7&ps%4#dOziqW`O~>Dr zHfQKclbAJYt=t#f(AggWm#e_#ZHgloRlR!PEx3c2VQv83E~|~=w;}$5VQ_>5$ki># z5Xz5g#B=<%XuNk2d|ec72Yf6b$9K>lCb&5Y-%M~F)r`TcSINDa3ReDJe06;J^86@q z4m{}`tjb=`lj0nx&tC7sbhyzq;L2{JiE(Z?JDIWaedveSBfJs}CcOgI)o8?DhmSK9 z%+3}0@KF-Lf#35qp9tRv&#)VRyQKVLGVOLY7eClcgir2#&-&%*V2S2(4=|2`!_NNU z^ho`3VUAdOpl7Nx6G`6D4@+PFMX>QebWnJ8>%AaTc|hI9e<&k z8qzmVB!ig`I!9jBIu%fDu^)sFgqnwqm(Ycl@_oEJ9<-n+^=EME`fR&%z?GgpmNvZ? zp^4iU5F%8ST{Y{*xMK$OR6e`s|YO zePsx^4-*qsWvv=^YO{U;a_7MLrs{zgoC9^Xv9x=G)Eavq982qg3r$*!Y#rDiZo!<9 z+Izu!$L3H`hV)-T(9nfgt|Z;FgeKBe>FMEfKt-87m=pvqycpoFaSKM)P<~0FD<{U96hh-Cl2b9DP@p6TuMv5+ns~D zKA2yi`l1UsdLn!aGSC&udlK?uY4j|tgZh`f@Fju;k5hfZc%**@C>O@H1xGMrHGXkd z2p!nTMC(mj@D6E_xjWl6a8>Hac^NtDOz0=9J8yv-ZQtT5J#Ot^hdgkFiq|5R@}I*! zcHAfA?Ek=I-SIr4?Ek=K-RVXc>qE=7zcLI=E2`GOuMmxM`%|=e>Rj-IOL=PN)4fxi z+dpA_V`JC&;Gj*_ZI{q8$cu?~>%g)|oWBK+kQU;EuGYDf6V?ZR=?a-#%KQBv*sVJ( z;JfMC{twEmJ71(ILdynzDM?<59C&zo%5atyKke%9z(97-iM@^JKx(HtbP>Y zkc?w4^UD!AGhL;hSZ{ihV%-O?ZRGF7YWd4A5eoVLr;o5qT6XLjfYCmjJPyIb37;k+ zl!a*BLF=nyRrnKfOMLK-<3Hy6BoVql5Z&u49j{F$$c);=P!^$pE_60hgo1rfdk!sd zFD5b00bS3l$DTs4fnTE7eqDfK8~qUR4<-$e`*FCbOU3xO9*y(e%TV8}sn5`um4lIC zM|K~w0NtnEIY@u#Qgf{-_1XCt1*)>k#ztuowVuYmfux5K_LvThjQGi|hLn&7edEB$ z_CFz)?At%6tXz#sN7Lt(w_*2l^Xio$Sev|hj05NPpEO&q{|fvt>f8(AV#Y33@btqb z_=GLgi20_&IlNw?u_@#T=`Tj~Bz7;lPzYt;;2b*|&Ht5p#ADsD2Rt@4uLP^%;KG$z zuzDW{YwFp;KLl2={td|hR^R0wW22}SRMca~XGZ$-_bPN~+sg>~XWqXJ^ElCU?m%E9 z4=uRQy0e7{s6SQZcd3!=EQ1#xgG9oL;Bowp2!GJij(Rv#(g)Av9e64NagVW4zRMJ$ z=S+aCk8tI||9~xvW6_v+Iu8?$c9~*ge*n1fJttAarosc|7u_#%4d$GCDfNAS8cX|f z7iD#p6|i&Xi@~MXMEX8Qt-J;nkrn z_?r|6qyJlDX~#QBM12P^fSm(bP25$9F)9qN<3#FZ>|=P-8> z?QpQTTCf;PyPdO4${-jM+A|8CKAz}AbAkXfF+T_?rAM5ha$E0lCnlG(oC6iMu!GA8 zae@dN!x=K^f4c!<{9)YiR>pXH!Q|4q<3}j=&H3PjJ*N9XO5^s=fIFz)4G48TGEKB^ zi0&U@Zrl5MNdE;MAoz#y3bgp+&qeEhNZ-W0dRs&K^>CpH^*)56tb&`0GF_dQq4A)c z!aLAjsIcBdM^Q#J2lZ*N=!gA1=^9Jx#eUMU4pf=&74MCWsqL=KI za53%cZJ-eOqLNWZA%B?fZ!ZrO`)`lKU!$6gxZzu=Z zi1nfJ)GGWLFib1yt<=#MmJd47y;%lagRVolYJ02-m04T^Bd*f@JtnOa6Y*d6B+{hI zReGrRRZOnc&C!9U!aqbSK|f&Hd^MIccjeKr(z<;)WV^`OToK)Q?me${`xZ#lTYF!6dR=?t(}1skK}P^=7&Cp|Vuxg5OpTRSk_b^BG6rzflrRZziJP{C?M!7fxqcMjH% zqF{Nwc(3dXd(ceH@~2K(W}--)rTcrsDAJe~hVdz+f8i{||8zutC)FQW&CJe$QPJ*2 zEpu9{MhO+oALRcX6#n1Ne`Gy!-DyBMxKpbK>ur>X!@=jv2g`ZgK>qI^m;V*0pTi>m zE0F&qJr-yGe$>xj^7e8osUx64D9mYAAa^!ddY*7}es8%{O%3fp0Z9&6$e&^wBuT_PdmNm)?6hLkL zv@bHFjb;vNd%eKzTuJBCH0?<5$#8Bz#-V;QbLMdu_uc%ubHRuc$n_V+@FK1#@9HxV zJS2CH0WXMyUs%T&L>BeaIdI5%z5WS8aiMsBJn&>V8+nB;aWJ*oIr54QD`_#zL*A!1 zlDtv-_Y(eB_FpC4|BS7sZ!Bkuj8`M=w_An$uSol8Y44ZzkEH!=Y2PC4Yq{M(8PrCr zutw*=8oM*(u+vW1?+nzpIZhsQyn~Em$Aj2&{|53<>{TwyCD%yU`Zt;gkAxiWV1?Ku z01#dy2*W4dfOn_?%M8abk^5;`xCX@lqJDCkqg52ofmm{$U|i|9;>`!WHA#PQcIRJV@dQc}|rL$=e_P z=U*p~jiemMkEEd35$ofp2_Wh7)%+pJLuEE}O$9s=B0Hl_ktR?Kx)s6>(Bcu%gxK-3 zrGx4@ucnk4i25Q-xuOg>d3^YElxRNBW+_jZDo<6UyjX1eNd?1`#QYL1)j7vWs^2KL z{;*Q&c&F!2s`pCa9p=?S204t{4H!5f-@_c{$sU&|5~?h=?0No*3DFj6;eH5-jB6+X zr+krV#pDF@5>XkXlV=)H2>$sZ)8JWVI>s9@55&_U4z>Os<}FB^u5nMW73-|2!#jq1 zpF!{wD$#BP7cyNOD-#`q@Klb3zbASdq;jVVkhV6ho0j3^njl;GKDCg)_!`wdYC=5oHWL^UM3k8~0Y084d@+)R#AwzI zETTlg$@Y*gS`cS(4d*xlZ#(GI=`V1Kry`vp}o7;nJxYbR5?OhuYc4Kdcw+FYseR-YU z7N5NfH@ySPab(7SP2NCzvnLSj0qt^ob9Wb*FcJdxgJA+8uoY zE*bh4;UuH-o{hboBv?y#rx$nJeLX$hJ@(wHnlNn7_SSaXt#9_( zbKS0*x;oCOzB_nYs`>~O%C8OA@qK~b4&-jY9_;S62RgmT`d~M|sP9AZ1&|zHi#@kt zZIvoTL)R5u-J50VxZIvjZ?FxC%|+ql1n72uP9QgD<3fAR#szkJZjUdBQd|iD72wF> zv9TLrvSIFpc?{-PFuP&aAYV4;ZC<*B9ti~7JAL+6Z+k~?k5AT|@|G4z6tL&`?QLGF z9`^Q5??zu}Tsv;SsnjNFgHsQFShOLYl5zifOvD2s!Ser3FWU)*>CF5||vwhiN9 zcN~1wJ>GxcE#u*E9DE`U?&}**-xdeA#KDbm@NgVl76&`yU^X;9K3g1|9tY>f!T!GS z;q7JP;k|MGC+3Xzch8K2a*7`OrU1+c9ZAY_j+G<}@cTrs-z0hTs29pi<3D`-gxO)b-4R$t63*7mzSHN_@T?V@x#t*j} z_Sa!5P39?x76Eeh+gat_mH6eclY<;daCBh8cp}4?6&J7uWLW%uE{ARX?#u^}&%8}>9Dq-}v4 zYjAco%r!(0I|S1QH`d>E!cFf>D`46X)(txVlL~hq?4-qv{RD0s>~F&i6MxuW zEP(t(1N(d_Vb;Ta z6!x?tS5u$%~Dr2w1 zP(=yh7ft(dfWQz5y4k8x*AHSV0MO;n1QE??WI@smG8 zzc4nYv}EBRFHirro}B|nr~W$zc8&fP1G`%R_^hHoYGAJ@`cVT5X@Gb{qyMIn9oFav zjqEn9{v{*3TdRN4$bO~O~Ro&L)vcAHNBp^-hUyFmeJ(C`b*cv-kywJ|crx~1$H z7JacrYpm7gYZ_x@O*nsPzrt=;43K_&`jQO2Nm|n@k<^K_&G$j%?TY>#4IcjLU)8V= zC{Z_S^n0}I2O9lXwd^J>?tDvLv2yeX`7#o9zC^8Iza}422%gC+P^UNRf1t3(i5bG` zWZuWw88P`U!wQ*yB-5_a$IzX^Ya+iG9OQFAzH4LTv&_R7;Fx|n+lE|<)Dwf287e^4 z2pq}G<(73c-fx_7l>6R@#4&w#xlI2`AqwFten6rnF0>eV(*0lXi!+H%a?iY2PUA+ok<&X@5`J zKauuh(tbkPPf7cTv|o|-8`6GH+6>oi>6ajF0b!0I;Y+05ChefKACtE3Ya&Fww1=eq zhO}4QF8uqXeMs7-I|RN;+AY%dOZ#4Fr=qOsXP0)av;`J&#^wL#y`^uM)f1*n#e-lY6i$6$f^Vd*ab7s9Eg`y1ap)gEqw( zyGmQ#g^<|Yzv>ho&uLvg@1|4GtXp5_3pRAMdAnLVd@YVG%|1Wvy{^Jemam6x)7N$Q ze17(AeSJp&k*%ZMPxf2A+!L02yNo@fV)!mGW|qw3sq_T=zGm7>_XzHguoigitkO0(=1%yf~&iebm3t3%sj2ab%DYoL&7@Q6&g=>7bl*j^EP$k@y=o$vYhKA zS)mhL+`3jj&QpS|>_S~@j}N?Bbgi3FIBmSj!qA}9mo$I zj$b-_U5q_PuCC@zKl?zpNo9w!uGV=jUVDCBaGA%`yk$#4K|x{c2~Kr$U9g~_xy{?- z3HEr~gMsR1N1Ydcj%A)T9@6aM*u>biM)0WX?g%*AS%1WRIjc<}{C}BsK|b+r5BR$S zK4Q-rJ|&+5@M-q?z0Ej`aUfqV{FHnOJ>`_ep0@TD)cyj8ySeuKx*`wreoB5tkc$o% zIwCp9SkwOpUQ|C($Qy%gluE{YpPE-4s;hsihYCD^WV+99u3P3|cYHd2kt*Uw?cDe2 zc$88R;X~rQATRn|vI|9|GHXuhWa7Ch-b)!}Kyq(p}^&UrEv4^u^wQAVYw!R5C z)O+gl!DE@H_WaYgIphFhsW0$29LUREGdvf!bhtNBzTO6R*XFJ4@fqkDw`}qFan#j~ zJ_Jn%{a;%?NDu&f1no^5n{mKP$h?9@Egk4(Qi1<>%=wPmwGLNNp$LUN0EGMRG@XG> z%{@U8+X}?>SsLU+AlTA;)>(N=)#UIj`rrPC{k}3j)CR73Xg0j9iRZITz>4bM3w^ zT&%!Fg_Uy~>R08J%(VxCnAUqcFwtE(cdIWj_uO+5R(JyeUuRRtRy)FX1y;`O?de(` zz^$ZCZy>L;y}745(A^r$!|ZvvH_*9gQ^8z&rx!P3a4l(_xP>7iJ147}bW0tBMRcV#c4@U^&m+Bda#_%`|is$ZNM8>sHu)P04oXYOJ((2B*U<+x&TZ0su*M-o9{S0Lej+&*b)rxEyHCuMGm>q8mwA{1FM=povo31HFDfmLvR%&4nQ8-WqONy7}6%;R7nzy8=xj4^T-0I8A&o625`Fuq!MXmW? zh{>K$FUzt?X7(w6)d?=milowp3sz)xQ^1^JUoQsT>RUFIz)%xh|G zDni-#O7c)r#d%9gT3d?qy#>YIQeHMfk`;?%Y9((Pi^o-VbR~<`zT}()wOjh!j?V#f z>K5Q`*n__^%-6|($UW3JAgIgmX1m zrXl-K$xs=f&wu}a=fFY;fFm#bO#B}O#OL$bF=MdVVyYdEzQ^g|hf{x`8iF>V~O zga1hcll)`+$SM3kEIggRi0}F$)!#4I8`?NNDk%7widA|QuiAp&EfIfp{c=Dhh_eO1 zi&mbFpYVV6wEiN#%g$B9tM~Oz#>Jz8g8r)&5&BG#zmuo;tV)$$<)hky-%lg{xc|V* zm-KE-^b_=^4Jtp}h2ZqAiHLy{>Hp`YDt$be;J5QK)nC28_|u6Nn+PoETd^}K>I?2! z@c5fVC5>k<<1fWl#bots|7rb2e79VshQ~b(9^ZSX$#9Y0mYY=ic!2~z%`Vj+cQH7> z#CSpp3;K5>^ti9_Z_xi8CvPIXxYNPuaouIYpWvTRFOGX;=d6kPDQcQ}0Hj~-B&G1j4%kZ8c)6H8*C&(s~ z5lh02c=CY1-Yz<`z?FWSbHGO*^&vz;FaG^OoI)_&`8;sKW^pRPbWQ26f!VxK;;1nO z+Gx=-o|{h3nd$^na_dPP{YMl;XN)5jLXAf%rU=ZFqpw4^mh5q?uXMQUt83PJY8{m| zwN>o)4T-7$gqIRIz^bIPpGy*xQm7w}qE~fzaqM)d!0R;MM3~DG=d6WgiW12;5zLdA zG=ShXWo>U~ldlI)MZBFjp6dzV3kIBVdNd5Jg6Uie3qIyeOew&O*v^)l@<=MZ8J+7Q zPi4*8ddK>DHmb83bKb}Jueb}G-8lM7F(z&0V!8`CJVn4J#a+bVsRFhs?j;;f6>z%Z zF6MBWfbEKVDTk*CI9I9c#<}5^ph)y|VU{)9ehg& ztO~Fh0$fg@Bfw?~a0P*@0xVO2=McC$z_J8bMqpil%@SaR;t&zf7BN*RRXzF4E@X28 zC}490;0930<_cgvfFd?e0F3~avTOmg0a(Uz1mIU{y<6CP0c=rfo42qt1kk6{wrpX! z0=Pk`ZQ8;X2w;~|8}PF;1#mlj{Ol|N48fd(&&u1 z0&iQI+v>Y1qFUjzH`ZqrUWt)ko$%Wy{37j11gsaH!*QN!*aqQ!NXHT?E~VLw8)JF9;&Ug*NCsYY&Fe{f@olb|>Szh!Ed8mCWj5q}8=x*XCtKJT52zi6O0hU;w z%)1Q5Ap0ub7nn49(dqDxs=-yWcD2V{U&{;yi>Q|q@hn}!4Es53aIdSWu40-*C576g zf#{iLfs(3GA%S^E$+-`~4VsJ$EsKdxDTpYwUIe&_4;^`dR0j%{a<`|c6|O~|^=sC6>dMzSJms~H@**r?G#?qJ zd<_FB@77T7FYLzS$&U@Z-(pG~uPYq)Pl3}Y_1=vf@rfaUazUryu7$5>ldq+KjR}-q z;ddu${PZLZ*~gg~B(k*?C%jA%-516Ox@A#^8yeIonMTlBB0LM3R-lpjh!4l>Wpq+!IY?T1>Ify=awSdb6T)>dqmwkr>L@_eXpSi5h>9No zYZEMHgPya`+lWS9u2Lj3LrmWxCOev@L?g|E#&s*wt0i&vCWO@! zgV=eJyQUhGkJ>tB+nSjAQ+V>J&sB*T8{if#3KNA|Uo*9-s}pS`qA51+2m{SEiN>qp ztEaylM+(ErD`PEvTxnHGelY=f;<|~g7Qi?mY8|Vq>*{OEV`px*s+3d;HUDK2Wd3qE zO_(sl%BfCiB6d!GHK~W4my$_6Y=(N7=zIaQoJ&$}B)V1Yn4?k4W0$6ws0YrF2NvwI z6ce8YCVST6w7$B6m0XxIFWZ82M}{{SMp(8!Wf6(O`;z7>D!c(7yC{WE0Zr7sG+*Ir z@5DW$iv`Z6)b%#iZNN8oHVAC`d=lEOl=tAdX^*#OYXf>5H@*KxOKKD}xtJ(* zwBj1ebP^(;=}CTrlugr=V&t$}MKq_Rod-Jo0{j)8S5x7ssW{J3S?^ivsP`Z<9eiS0 zTjTPqa+R;HW7N@VzBF~poFvQ?CL?#OEw6Anm@+BRn)3CYit@Ep7gkr*JDFxu+N!!r zx2L{*HPcN>wyxY&T_uGzqJmVfDPQgI;NxW;r=uKCqFLELW~OdRMmhNK3K~~E*gG>V zG&v@yenW0!G89hfOG`)bTqT~1#IBH-k!FW9(GcoOh9$w>KVVd^?|@85YD?r z;64;M3vht|`$#~^1o_#=0jA_#+0!rn+Y)nAY0Clu_Nhp@dlaLNf z_ol9HrU-ZjV7$L(noJ9&IFr16op_zE75>>0fz<`m3DkTMq>$+|E!QDTE?`8`<=e~* znU>p;Pb=6o$}aNc-HcYix2dq18BWP_jWN?mHOAnc$SdPXgw>P3T3oBDT@JOpQkybU z@3f+L)zRW&}PD31E?C1%Q15 z$k&_=)(;DyQ1cOd9ucgUXr{vFQ2~@_YT@&k09I&du=uF}$`A`B5T*V{0f~5Y7>qF(PiM$a1bgvm@P~0SK<1#PxfLd zSsB!~>Xf+NZA#W`sx9deDaNtaOwF3P4b1gg{HbzADVSz%)*Oml^{RK(c`D0Yu8Q)? z^O>g3K4S!)^ZtW4Jb}Ob7x5>SwKS6w%UbT#j`PSIjOQ zI#^6TnJHyD@kww^N;D;h*i{9+8!Itst*);quX8Y?j;1x{Ta*21nAJo*JZl0?N{q8EmP|l(0kd%mI8ub8kWCSeC2T4uDPgGsQNq$V0&J%V z3|!O6#rHST$%X8wL%y&K0%%WU207}=S2@aSYs)WUGYPB|?o4tw)H!Oa9ILRUQN^+d z;c`u`t8vNf?5 z7sX~o0$gRLEgCc*XnBItqF#SHO$sen>z9FS6`gmAMq=4vyAK$x$J5(IZ!5%mkQR=K zz_=xb79gTk2{ddqaj{&d--z&e#02|s=$hI$VFE1TBpc5kEH|7*pNTuw8`tZvV3vW5 zkKn6k8MwQa;Bl{8wGQvt)1ScV4Nx^fY18@6lLCrryxx$nPFQa8cM`S%H-kUrr-j67YIAWR=aX$l7M8UVTd%R33&OQW$ z0Iy=oQVvd|G<_T)Y$n2G*>6e0W)BEURIp`hmj`#%`KuJXnCR$e!XlF?E9O3i9uR!7 zR@t~Y`UFNfhl?^DNp5Ck+-=t8_KDLU!fs*}DcfeCpVZnVR=)$Feg|TojyE=bRw@0{ zrT=*dg*?MbSg@v-IRvkg+-)j%TmnRnwct(=TP^)8svi_bd7AmAm{WS0R4-m_ctx#F zqv~wd>ZDgBdEFgQLe}gLMz#`_^Kz!5mtUf$-``Btmeo=TAZ0@$y)oW?GzAdUQO=vS zCP`rQtf^kR`a<+mb@dq8(B)P%toE!auXm!aW=aDW^$ax<;?NNcv_R#Q2PZkrK9;6X zML2~3MJD{GP3Rx!?Uw%2x&QfU1ZefW9at&`Jal(osaFhC70p^E^CMS%k7T@FlSccs zRX7UQk%Ohn2S&ESDYSLHkvzzu%cZe+2PmL2LA*Dzl}#bIk4UJsuw3~}$v8v9_r1SP zK0L@=`B*BY((dB#os2sa`@`hT`G!o4l`Qp0?PpkQ(+eQlz*SsHS<&}kNE!kp`Fe z_yDAwnM{%iq7&GzCw>jOe|l_Z{H|gpge_GxM|4>Hr|h1K zh2>iQh)=0eW>TBPvWK5m&&rU*3s9ZRO0D)gN-bkGExqEdtk2{3qZ*^n3ozvzB}o|o zr>Wj%0_Ia(Q@xwWy@c>K?|jph8v%tlI{P)k*@d?HCC_cmXat zH(!A)=bafPkts72-cS{02O~eWq2$C{$yCzzVq~!S-3}F%rKIgZN^SnN^#X#%8=L0%~!8j1?>K0E@QK4{Pgg* zhR-EZ6Q^Z2@N9M~?QUXU=y{HI0p%og7r!*kj_`rf2h0YTGyOS?eMv^3L9*HNvmdwP z^=0M!C|(B|rpY>^dgi6T4gv_loJAK3QagdU1CFo3;CJQ=pdFU{l(T_(A^l@Js`p~h zeFxyTU}k0kxF3#tVV0TzusW&=>!yf=vQ@x91AzXCIUshy=Mf+tgqc|e;E!;;2y+&Z zrLG6&Z8-i;fDeEfd7;3h`T@}A)$?KMuLeMi^1XB5a}5AGeWR}~Cl1J1sjp1ARRYv2 zegmYadYT}<{C=OrUkzc+%6h`FS#2@IMA!=?Yq$|P&^cA4L{S}7zVuVxOZo(CXFd+1 z^@yE53%&Fwl)ouzu2JtX9R*3XJ^^2rUN=uhvqT`3e6wyz6OAV2e2IJ;N$M3WFqEioi4xt?`!#qc9+Cic;)#Ek0Cn^!6B<0~4q7yMhqY}RdL~L1H)qjAh{s~C|?)<0hK5rhXGEF-k zG7ieu}aHOBITa%625R|o^dU}*ybh?G&iq5i7Y-Vk`9LUX@&GzUt2R#6fNJMiv z32c+aGz&7(Pucw^Ls~R`~ zIApk#N4L;}S&O%2W8liobUL?6t9%7QP^UFj9x`izqrF`lwIKqCfL$!7jUG=EDW+`i z@<;^wtxF9^2Ck)Dt4Ha7w%5{r2|;KVH~!{wsSf2Nucc{Ddj(Ase+5m4>t`+Pt*yAP zpkF_aMkURJx6L%-wizsbae*#{XyWde0Y3H4nm0%2qCn`mP1n`k08B{Xq2 zB`!nKEt;4+4dfPg8Vr-2#)-qb*C>5Byj!h7J)ewRJ-nNgDDLoXQrhU@-K1pW5ATxV zcj-ue?XAh%Nc>55=?v;F9ntHsOJ_zsRItS&cj?F}cIn7PyL8;fE*;slOUG^O(ve+> zT{^PGE*-hVE*-~3cIgO`yL6m{@6wSgvP(xmWS5SB$SxfLv`fb+XqQenuuCT#*rnqn z*rgK)?9y=r?a~Ph?b4A;?9!1dvP(w*-=!l*%q|^)>Mk9*$L-P)LhjNDr`V+bE?o>1*`*^~>@J;-1|ARk7^WoJE<)Q) zrmC0&LpyjLir(YGtp$&VS!MtWTvZG%iEyUKwwkYn6K*oE>_&~)dhxe{!@1U7-UnSoRKdQ2w-LpHWcOcI1lZ%1epD(d>wLmBwQ9c z_Jl5^C&1>u3+(R^)3Y!M?Q9;wZ^Qj}nAAMU`*QG3qnVA`U&qDN!edHReV0dK+JKl$ zel{(Y9GHBT$$7q>GLU_OKN?_0i0ZQ)U>-o{@;Xc-qWBa8%BLPa3||A{eV;?cu6 z*>E664-!zp=#fp`?_}ivJ4O$4{OG|m_}1i0Nc>4g52HGI5WNCmJYt}mZM7OWs07SCQtSyrWHh_3&1lUXq zyw7$7ctQ(BvoH@LPEG7Fn_}1RM6_6$OF6Y-RlvT0A&-RF17S3utuPx=YPZA0znnY) z;S{;vQBJ$wQR3G-%7m*MMWh2(WObv&t!@CHy1G%~S2v2fx`Al1s~aVDb)!U9H_G_c zjS{o2A-7o9Xd^q#N{TX!{EyEHWjDJ{)`mZR_O)RaGFlI_3R4YDaXQh!7VGK zS``jJ0;&p0xR5*Lv#kn0hZJ;2KmO5cA0+z}RY4nleWf{n;Wnh^->w`cI$Zj6HDszu z%ilgQZF<&+;G(^-dTj+QmbBZFXacJhKtG?&YQ<{~?I0(OR4%PcytdHZkzz;7o2;&h z$oTq4SFnf@sS{!GP=mtioVb08YpVYt!RWgTJj>vDa=OZD;`7{zt8Ch2vm-H?GV1;c zVf2_zy@2l7JXrvBIyEU#++uuE+UR0@QnK-jah<%nIqohGuJU{c@hy}F(-{7yrK021 ze~bFVHS|X=HeFs(qM(t>jyT51)i>BvpGN=#KfI8)9cx-^y_@-6!FBc&+IGZ6@vfFr zJTDZUCPT!hn!Y#1)(gBXim$}ccLk2V1MDKH3Z?WVtEqp zjNs{Z08af{*y5Qf5DAf7Ac7=;RSQ_1OOl$kZW%(LuVQ5aytm0hcTCP+x!%-W=6B@xL;;uiKji7$)d#ifN)&(rVIi-mDpUnJ4vNh2rg z_e;u_(@;jw*nc1?8zp6ix+RTj&>Xo>kzu3LA`3cUQq(Q$eG6O+O83-!pmi=&ZorXZ zwEtcV68b5-zkt9A%aAqc#DOlhnqd;w;O|VTm^6c%Ntg=!olU$8;K+kX-Xj;bEh6X=1k6(2UJN%|f|G>f9yE2Y~m;zm-9&j3yPkLSV|{{WyHj*SGo z4&ZBW+yrBL3xMqt{LLmlM_}F9{&7N8orCCWW{j zhl3XQDa4)ntdC$=a*oU=o{^CW#XES9^BGSszlLZJ!`ueBHPHiebwc5nl}(*cY)0YH zgko+2%J8$DP|%aC%V9=gKE(v$-<~dfx|xDb^qGn&-AGwrO2WUv_yJWdxJ=!=22c+| zx1|!2fx{`;P^9$(eHBX-=-e1IU74~7G#iJ$iX{oOO`=&L+6-lVKeGNa-er0LS#HD> zFS_6+W6Q#`GBrO&jv+&3K{odjwZ za4=KhT5^fA_DqhkBY1BsR2(qvSsanA;L3%+l_x^Gkn_xC3AEeIw2L#o0of8&Ma207M|xRKz-ajq?v&>wnmT+f9YL4W z%E1Ho7Xm$Oy3MUSGy;j?0oH>43wX)7;!K<9i&!s1D>6I#$D$fXdO>d ztBF&qbBJ0^^p=>}5Kn+5;+LgZ4}A7wEyo~nC5#;g9a8+gN|XLeh}*2~>yw!&cMVog z7a8>`Bs$}>?b-iI(xBIBjMEo%G4KXlChO{L_H6Qc=u5Cnlb%I+lWU5ekG18Mn@xGk4O6Dxzd`qXVp$|0C57SM$5{mcInLmgA-^`|T_U+pknn>#-5n_b0agll_w)=jJ@YL5 zorR2#-9jNVlTYY@@PFfNj88A&bJ?!LHEcn&#cLm-QgIB*;@LpOH6|+r)ODjR# zk?-!RZeb_WEJHx1YUmMtcNc%k_hDKxO{vp0SODYV`$r<2U86GkSRk@B_4JW~e+np< zSx=jQPtuH33Rd?d6m!0SB$|nA8r9cZ08Qtum!(bkT9#B$Xks4AQYr|cK9(g|Lok0V zOOTEr`B;`<1NV(QmL-%4D0GxqMd2$4cq~h}1j5BUmL;48IPqAPpk#vhV_AZ1fYisb z1Wy4h9?KGx%6;jvEJ4!%MIXx&CLI{{u`Ize0L#a+l;TYCRv*iff3`%($FhW)FM{yL zvhN{GF5u{6*~?L~cq~hVPJsaZ=;9kyjzt_6RlS<@b9 zX8l>_*@(lWiFufa<}F>;gcHU<5L?h*9Uv`;%nLY}iJ*AjP75OQnH*zBaIqjVpT!Z``sjklypZ$E zWd^<=GB3`c7J=srwGC_O$)3ku=V+*^L0VlkmFmrxf~314YR~-&Yl7 zP*<8^TG4|^wBFm&LK~yXN&)0s9GhRbVHuPNU1fp9j zd2<+4HIldd9z7JeP0D=}f?S|I0mh5hVWi1bzGvGK=*{d~XCricD=@g9#UKQKRz3X`tK6Rb9-?9HGt#Ln_5 zI^~DjYQ#1bU#-Xa9Mm5Cc*@Iw&Dz`LD#uL1OvP{>(a!J_3spa}_N$U&20r-|{k~LU z{!ALwQsO@Tl(0GrpJ8N$skLnzjXThF$FMFi?y2po9_o`p9&Ym8ox7OzH~ZK zoC{;3;f8jX#Y!_Ocx87l+PQK!&*-8_9w)t~DEMS<8L_z(^FaD3yT62+yGu6XwVl`j zeqEU+%4?S_ui{SR4{Fab#Yi6aA>j96=1{m_NN$=ouzFX~E&*=lx9IN&^ha;Wmy%b) zA-H~lP!GT)yZ~SkO6U^;jsb9BoFW_xhdU7yP-}XblBJE#dLMEoj=dWq(|)= zC9y_zpoQ_@@07Fg)<}ClXr2StXJNG82Jk01{z$;B08YU1cbF-$taS0LjEchfdu z6qNYrQPH$yh)*gUQ(zLir8w^c3E9PqkvYV@&@K|8xdq}qtyrE?rJIFtnZ$^=E`Z|< z0*EW^_%4N678_ni;T2V+3V4?hJq2C^$N24Z@dOMPROO&m9V#nT z(5FF3TkM?AAK-YA0OIoo9DjvLG)XDO<>=gOklcyvI|+#r768DfZrM99B}D-4fltB` zI8w3uHH8cnYL}WY)uCovK+*A3%>rd643}mB9A^+f(v-ll6lNSBZ9E?}RTZEtqoBN= zz;QkS#OD$?E`~|m6ql-?s0&HEB%Ye%bTo9{B-hI($rA63@#bE3)eA~)A4LRiS*+^? zKc;-BXs-dEgqPvjhL~GmmcI@_d-J{95^s{^Y3QqU*uv~Zu+-~iheiD|PZ8WtgR?gsVzNK8O6cJ#dag`q0vt>%sKf%s|c|{AU3R|X3S7FRE zS| zoOX7cj}tkVkkEXDy&>izE1`M#3YDIVz|}A*4=MPfJ0Fs0^NoJWZmJ>kxkL}mrqO=~ z3U&+3)F$Zkp`9A-&3m_HwXsL|)MOYwKY__=XOHrz-vV$P=A6A*g0ovNW-q3J3RxMM zC_SIl3-$@v9yP%v{aMmemH829soDfkYyK|r4EV&4B@h`^PRiYKFvypF*MaaKoIx#T zaH+)83?*s11ZZ+In-5JFPUjo>7`RHpt#t% z^s3?6+Y-7V3?<_%TGzNjEd0aBx!&ypU939kh)B&P5OB>Gik!5oez*(nEt z$nL|^mu6Y4Tz(ugx=k$+kmxN`P&#vX6!U=3_@r(Hn#z?hL$X(L$*lW5qK&!97JE|n zzwtia_^sZA@rQH?H=y!s_(_pGq|@;8tvxB^Vbbt3I(bA#Kp~SSbQ*a=H|~Hgv9$qO z3GtM>4LVJkVxInOFwy-d{w#EU^&lL2`eQn}IAI6`W62W+fx~lwKG9%tKo<8hU30(f zByk|7I31I7;CQ0@Oh;vTq0i$#Ww#rZMBBl>2p1t5*;t8tsk7oSJP z!b$xitmgYBwHllgVXH;HG0PlEnga~ah0*fdvlLS9T?+Uj!g&jr<=oAn>IQTL#}qQl zd4%Z)v<)VuC(wcUdy0 zm>bZZaIhwx^c(bjh|#RwE6YZ`q3{O~ksKdEj*QRt9P0pN_#Vs&nf9L|FX*=)QR-xq z)1CIvNf&?Uq?_=FNhgk&U`39YbaAIkfKR>ss*68e;Ku_Coo2n z{9%AGn&b(L(Iih`j3#*kV>HPVSQgbJPhhMjd5S5bNuFejXp$!&qDh{Bh$eXgBAVn0 zh-i{0z^`hOCm^Cpo`618lRNmF5YZ%0z>um*o`8rZc>?xIP4eVcHOZ5E z7>eMzCV2uPn&b%>g%8&xPe4SIJOM{lP4WapG|3ZiLXn!}2{@T~4=Rq0Df&}2$-f96 zrj;t@Rh9A3Bv0Xnbe4Ec@`S!eXPH2gJo)U6^-;CKLz6uD?Gt`@8!bL99?>LEp2KmT zYFKEJCvRwyH}d0KZ7Aa;C^*X^g6Mpvbxw)Sz}a9yu55I zm@LJM(*684u_kxN!>ANg7NMV->0s>J)|Q6z~*<>ePxSP^eC{aSGK56|Yd8LZ7No zohVZy0&#`vgo;t9PT}GesuM2LaH>M}J;-Rg0qV!cDO9K88M3H}<_guRgoYHBHi1HQ zQdd1|NGMdl9nH-k)yP1hI)S){5K*WeiH<8&rICL<5M2`#suNr$V6IS| zV7Gv|LUn>01KpMbeSb%J*(qKZ=&#jCu+W;3Bso%*KfQHAPMM*&6^ zsuRL~HU4aZ1+5@CiwtIpC{%|&^}}ew)95*>1yeUpkjzY{=u?L}b$(wl_A3oSojSCs z(_}G`g2&DhBFfOAO?@Z)_`nZk>N#+W)-+C;I*DhBjW`k>y40&E0{Tn;*Vj0n0ejL8 zuo+uMn#su32MLoB#XU%vls5VxVN$a34-yiuft+(nk^dn$l7}dFjFaj9)Td0Rq!}kw z5UQV&L+s|pp9oXt7;a6rU?r%T#~fE+O=!UU?S2gp56 z^#CEH>H*;tst3resvaPBMD+jxQPl$kMO652y;StB24a>6JY|QC&DpMf^qf^x)?w$1m)O&0&$<G1WiM-oW*w}F0zyr69z!PuiF;$8`<7r;O}4e6C@_4l&JjKlCCb$*nj1lL@#mq2?= zk3w>~>{^2Btx7)2-6Z`;DLe37XI#R6#sqjn23R5jr2JI+jj4E+V38j=B>ppzgc$w_ zIWd0AV*LtO!ipHbI_Y<|jHXulwW@fQvQeV8s%%)o)iE4yRVj%BxZf1x_e1H&69K>P z#Q6PMWhcTdxJUXuMK7FjCh!U$TH%69-aIkl`i^(F$-0D zGG#!zajOc-0i(KZc#(kU3r6B(6}KuJYwPhn0o#?DDMx`+Rzbnl6|6^-K@e0Jaxfr3 z%pL9p*2wjch;TuTo=`Cl5yr0pCRQOaW3oAe`s(p@#80mtKf-24;$#8TNyel^ag&Tm zX`_>jNy)}fGOV83dKaFzRo7QTfw@P$L&mkevizs#rTzm)*9yO#`OG}aVxGH|cnpuj z5qff1k1s>`#Jj|2g||kj#DjRc%qK4!u;0zgxf#m@?4tB^H{*JS3kt*n{EIQq&71NX zINB5kzQndw9PU3qFKGpEcJcMSF6sz{#}VO?jk2bzDK7{Rdn*%3!$0};dm+(6rH-_V z@k;xmKrKQwnkd~Y_iyu3Nmzw1;OVP`?CqP#iJg6TI>gfIT|_K+qv zfj=Se7Nur0bVqNjZzIKH?5%mpck)ycgF0WQ*N=}q`q ziE`cOo=8NYh?l)IZ{8!6sZ`C36Vb7E<{3}V1-@C7PF;M-GsE}oKPL~D`&6&{=Db94 z{vY<<1ip^4`Wv6QbLZZhrAgYPd!b2ppiPs~4JeRwfo_!01=5P%rpav^$YyfW1rY*e zDXS4#Dpnd$O?2RPj>#?s zJT|b28!C-Gnn(pk>{k9ES>niV0w#{-vn*@B65uG`RGsXyktABQvY`!dxqMyLSaZ}0 z0B53CY73S}yA6n<@fh)Gz~+{zzF(RkdLeijxr^}KpfvvGp6HV@R66K=&BwAAuj^n%y$-4-}u>tdtW5YrN1xa-N#M<8CB$iSVYh`=C z`@CQ@a$7uJ8u2g401tC#6MAD=8|ODPEEH`QfFV;+qutC6ci}4xdp$- z{VF9jH{fULW*%1 zis%Bs#`0Pw_^UU85&4a}rH2d{pf+lz{Zm95=W%CDs}l}S&%~?cTGPB2JcbArB!vHt zAA;B6?FpkXkD6mg8n3lyPIt>oE8cEng?a7YMkTB0&T-OimoNzqb7vhImRUeDDksr2 z_dtnXqGqv{&= zlLs@^RRCRrU*4IDC=0{;Qed;3O~HjmUZZ-(%y1VvCF_9gY2=SF5>232=%!qYBj!;0 z&u(!0GJX?x;^uAD$Q-S3ZUgn9U&Mp^fbn(wBJU~;PV1$iGs#liwdV4kS5GPC z14_&b(J9dSQfl_Py>U4hvq}3p-pwE8cW3Mw{1(6G&{_^TU&iO!^ffHpRv|r4zdU=rm9e>j30m* z6+0XG8GU&B3ajycu>!y1luh1GBFi3M0@^Ac#h*p?^j_8IO7In{o%({%PWyt;mM;kL z$9X|$r@SDVE!I9^$HCU`AF}1g zWmf0FCZrH8PV9Ii#$K=-3M(&U*!zaU_P(LW_Vp#G0?9@$kn+UD+mPPhyYRh)kUG=5 zxZ3_sf$e!Qz-#$pU=Z8H#b|{UGI38E@+H}d=6iOvAD?JI0H8lH;=Q{cAMd>T@$o)o zKR$v|_v0fhbw57B-2M1?=kCYHJMVscym$BGV~#P1hsk$?2&TDSPM@{D^TJ@%)*piI}CuE*c-<0|cJGAkc zC1gBvy_h`kbFE+bwU*nKt`jTiVCy!iVEK5Jck3R3fbHC*qATS$0%xuleNOR_mx1lw z_^`m_caMr8c6lSL$aE*vW3RU#0)!r$oC{dlfI-8?1ZJdT<2ND~n^IC|HM;>rlXi1i*i5l`~(`m zrvAjU0MQJQMt$Nr6+B`h!r{A4lF=bmf4zzCItj+yoiyKd@=1~BiRa@?eAmgRnB$|< zdB4uYcb$AX%5@D-Qhe7*$1QdqdQ;-NPCgtXVmrR&B$;uJB2)5?Z#nrgFqfJfabfY0 zZ{lVwD+T-0#W5k?nXUC3__gtA^{s8ml^feJ8hTMNpE%Ka(HT`|Vil|T3szuY2d@#A z8%3WgE=DhW+$Er9h+3?pSjZ7J@rBT4Y`lg+g^k>#=u!zs{l)KVx5>L)_>jZwG6^ft z{vPCZd2y6tYgY*(Tv1$B195UG(|F$=W7)%5*^k8THchpdg?@HETb5r0T9JFY4Im?z zjdkL2E_cNs!XD9RT#G~uGR65-E~m3|=5Ry(I&L$K1w$KAm>(p)s$*mi=2=q2VeXuT z4%@(b!}ESLw2EurKQQb08hH#Kp#B(D8LckhC~;P z9~p(-#3_sT>y-2c_g>96B{HuCvPI-GKzk8>7888}7w6)~WB3^W+^7hc`eLzsXnZfP z;FEZM9*{TU7haDW>(e-K>*ZGbtnIkjfr}e>^EuqyhYM~3gaMKGqPAttO`MR=+3<^+ z)HV~c>bQerP2H2E-mg;p@WB?64s21|N!&4>s(u7niR5Oakf&7)J081_LHl0fMDZz|pAZV5H+EwX)K;$3z36DFUXxSR@}BUy~~3OSR$nxhfrxyRrBQl}^RQ6y8v!C*XoF+Ne?tPI^E1 zyM+qsP`qX;7Faz8*g{>O7wQsTqOrpBk>m?mGXK0zm;X+k|CK<{`RBEp|I@%@E`B2a z=ip)$e&QGqKdrv0u4;j5GcDMXs5Q3I`3*(2O(B{)$D{8%FtM!J*gA?OHvtkg_zBrR zw3Vy?z5=lF_DYmTvFAp0dM)4WcX>47@a zCwMZ=Yd6!kfbi$=6PezPi!b9R4ky&4e!94U5u|&fbo5yY+uZqE!3ZCS z*mg2NC*UUv;>U2oK^jpI6S%0w4@ZiR&)q7j$rGuiE;W|J&)j&JJ1M}x7Kt&I_01L# zX~IuvYL4pwCkqF-6Hji(Px$#M!q2~s+j|M3pPwrH{2|;vfS=Ikw-wLO&%yAt!QdzL z$=eit4ri6|jKX&=hEh@-O1G|Bp9YI3@e>ZiY56bUhhxGw6p7oBpD7?YR1OPI9HBIQ z0pNtS;d~YbjECZ*nb~}^;|mVPII4^y9mUFZ+)xIzNeJ(TIc^Fgd+Z8;CkVZWYILH| zM~r%yB=i7^=%LhO!bL*VEMg&>eAX`SYpVGpN%d&YR&@gh^HX0zdyt@gbPINiR*mDr z5u4DAHIAWFdSGs{$TW?4Q4#!%_3_W3h@Vn3tdjqLi{IfF@>k8rXg%}gSH3CInecXg zR}dl0RrE-JhvFv`JqZ^R@WXK|y{AgisS+THQNX%*I#93=mvJ0xX?!`)s`+%>&%;l+ z?|NL+@rLzC3oaV)GmKmD*>daKK&dHM>caE5xlv!)(!g+@|^o9PJLdd zvVT)^2E_8p5X%m2%Pp)l*@Rb&^;lG+rWL&)yh(QErG;-Cu>%ZjzT(Y)6sK^?i7T9k zzk-ut)9&f#&GcdG71H6XnR^h)|9`N;T0!dUS;~*uv%jSH8D`HqTdxqGvuDr82+;qo zr}Y2ydP>|~#XEcUquF|8pq_ea+GF`;c$U?o-f#}$?TzruFfR@xj?-o4l^q^Ybb7>MyujU{Iarf^8zlu zhaUzJGwq-m!WNp0=GHi*$yNgz$BP>|=w896hCPkvH3&4UDNjN@W*^=*+jcZ*pTuvE z%A}scFdD3MtLR940B-U9Y5!Kzb{0zxm1J`T;*eMzY<$j3pokl;4K^XG8`rUrTpDbm zcvOHdf4NlhB=Kw*?zk}6G2(6%lBspUjun7nB$dm89VhO`VV?rMO!8zwZjuoei-Luw zvP&M0uTNd!$jti=9$4KtMfsM2zu2pk(W2DYp-wg;{p%u``Gx$R8_Vme(vc0k=5=wg zDt&0}a8k)hWfl7PP{LDfXzt9#U<^LGHnS#?@w;%#-{LpmQDy9ZA<_R$hdIEoVkee_ zPO?wPSyVV1E%Xo|c|M3W2{@zhC~O;x(8ROzjhvDguOdU3I!7jk((x4vZ*xfN)Zuf` z%8ZROa&k_|u@E@27Gb5}i_pu+R;dIUbh{ASA6*P;xjtF8nkm71px*IAx8d{Nn-9&+Sv9n}#9Wq>4){KA$o}2w5sDY%@0=D^C@^qy3c+4Wo?NVajq>?3pcqcqSzAih?P1z0~hcSDFYKc1Q0P9}MK1vjrQn>P-{wje9FWe3@^sKdSVl-rHK(-l zKv|y*a-PEDv@Ei?6|!!))Ev(0p@@oB*MoIk(u?|JR>IyI$)0YUUU*`OO&E0%k>Mtq zUZF8J+bpVC>GGNlV4#5H_zOrb%Q#EQ0G1R38`0?~K(ZlKGDM9iO9m#XYHu)1_d4Vz z)ZxQ&{7k6NEh~q_$8`cxms3-g-x;NELXo08qgf!W8IeI)fmxA6J+)oTX**j1?&&J3c3-=IR#|(9XoO&|MZ#$O!;eLnK&4Ljs7NwYpA2o3GbjG zQrZeStQ}p7V5Lhk+6+AetV3`FUyQ^+{Jw6S0IPB2u|n{7*JKV!FA8)rvf= zM$rOw-QCjVJnZ<5b~DEgsDQJn!{{v0Zt#>?T|%;?Hb`~*&TA7bb;w_?HLHU!)w-auWsinU#BJ+i=9AM7 z4Qo}~srJyVe31$0*)>m07Wpj4IH)@uf;l>Kx!P@@G!X*j1KKQ4x5)EFY|*lz#t_Ox zP*7`=?F1c`Hf&zQY6Z@_Q|2zCuNxy)hHyEJ(=O6 zRV1s{EG8S_w~uV|ik3azyQPtY;K`JBKk8C0lo5;K8a&4F*xy7fJ@p zsx+#@K!!N#3BAIwZ0k7ve$>-$_cA4prbbawmc3cc_q6fcMxzf6wYe|QLOFw&>fqy| zEM4BA4;?ApYRA>F42#~LCp&7YwWElLF$=bM{0hORIW&esLMu{7y=*rU<~T9bKMW#< zKy+Nnlkqm++s&6%jE+^x(xQ%`Uk%dXj?87aD@4Bi13X0nDYdIT*eA8@YP(}0uJYWj z_OSF}49=_@yR%z2fDe%PB*v2b-*#{0?}Ai z{6)l*&Fyhcs1eS_R@`_epa_s|#Z5>Bd;NE!&oyOWnWTK0<~T-IL#oxIThBcWUALK8m{9b=G|CRic&8 zjHP%X3gtlQA!@XY8PxqeS%(IORtjZDtjN)?FT4+yE%_mC#1d@@jLA6-j$uJR!=yjD z*9e~%fG$NIseN#i%8fH_ag^T~WX*oGA4m@w?H5%>H^h8;1Ub0%G$HPg!5DuXqsGO? z$_i+lwyk?A zdU|>2!?LSoc?^Q_VuEZph(=@{1AYtcq6;WWBm$&YL2~3UIBe`oqv9UB*|MpmYn~pQ z%^5#t4rE-+mvPaPB{V`E=aQ99N|+s_TaJY~LKn#h4Q~w=zafEKm57GqP+jE?bCoJH zG2BTZ97tr@@@?^-**O9ou7pLLMv^)lH zKv$W9${yra?}geXMWqgscQ79BbG+fywF?Ok@wyxd5A_!}F~sYA$)hSH8I*maakQ+2lmLvj`63E(_=IJz^&f%$!r$(MQ*(2P+s~dRwJWpTZ=_@?l&(jk) z;aha>WM81Btp3t4BW7gi-)w7%js0&-)3%BV3kwI^qavoAdx1U5x}emyA{*?HxVIwT zQ-7Z?v~Wgv$8EdFwhHm(d?Apm#!GF>dffa=p*;i`)?zyv`FWw8jq7OSc{?v+ z#=tgWJq^CrW1ggdeZzc2A$AcF6s?yoih=zSdoXTux7vea3n0vub}paBz8Xl_-O0d7Y)-s9y_%_KleOzF-#dY?NG$}!l#mezS6`NxZXvVXT>wJeIH`un7eVgY#Hq{=E1RyCj5{+yNTh`AVO;^7HRl_A7 zg|4$BYasu6;b1W5*|Ej&wBbL2m>Z<@5$k8hBa}#Z)7hioeT}sa+g*IX>m_#3LE$| zVmN*k_??TNP*vngT$wlU_Ew(m=4lU3)^~6+XDX_tJy8t}L|i`>KS3>Y7Ou>5dD8Oq zobsDMd)`U;XD0e5Pr@=SBa~$ZL2Dx1g)ErAcX_HXR#uOnl&2F{<`;Mx)T~+Lf8&1>~>76V+p8|#aWghM`aj?z;G1 z@pJ>~5f*J!6JbOOhF1%vo%W5Q^f7v4xVk!GZFmLI9aC(?BMXir>JIv7QK6j!wCp)3 zm#dN5w2z4#D<2CFjG*`oM=`Y8VvFfP13)b+b{p_46lVa2n0?geuaL`sGN-JGLt`+b z(VW6l@0QpGw4M0Llut9!4|sY+`P7`Ae99`uB(4+iTZ^Aa9lj7(<~E+LChW633DsAP zRDO~pH6L4DWQ`6TV@6_^vQSmW*7MJt$Zu(a*m_hjHPo4viz+i38EA*vBiA@rR!*mL z?Ly-kCd%2$UQ5KA5boa;P-tvi7KG+E?b5HS)ILF07EHmD896>=_Q|ua29Z1PlXRaa z$=7+h5Pr*&-`1l(Pr$cW%kkTapGcj56RylVdHNP%kMi^^Pe11A4W8cQ>CZg~wiku@URRmX~@ zX;zEdH|NN^E0N3^xmOTrFDxvw2NF&_HOtFNJNr$T?mf}sK>;{(wLL3o=ghH7fEbEg zC$Z4%x*1rg!L7(PReo+_nMp3Tix|6?s3x0i!j+RrwT;+c%BwniIR7lRW1HmF*+{WQ z)CUnhSdZIV#O-m5Wr~yS7{z zmf&)rJ^EyE$w(j?6=;D(Sm_knp@f~?Zil9H+S%5*j1ShJq_r6(`7fZ47OUPH)9MOA z)3GH*gMlMLi)j_GEorsJ)^~|u!Bz>HtEG$4#(D0d*dROKdc=Ii9{EK(mw7@J9cdp7 z<#)5OhyXJ{*kD6p;V`8?Ysh-L05V0UkS;1EMyzp6dz(Fyf2eG0@TDRpS~s}K?L@1C z{;*UsF=4gOp;b30`3j2SatIoUO|p-o#AqdFq1_RSd=`y7ME&THLU6O{O~^SUNd=(+ z#@Lt>S&r5jnyj6jh@I8|M$7wz%(huzTO+KYmx4Kn?19_Nu)cLM8ncuRjpNVR6Cy+H zfmT+jeXP|w$1bR}hg(_rYi*fh7g-muMOIljBGL(Qtiksp=ahmL%C4~UkM#-hloSG( zt0S>Tkeknd(L|}q=*iG=_PvWq2F=M}{)RgFt7HB~rqADc<_~QW)B3h2fA)-s^$!E; zwXV2$al{&0Epz)dk=qA!ZcR!Oc~h2#i1ix~h(=zQw=H&bTI71siWqVmD-l*ZqWFAQ zl^&58RR`pM7<6R@%9MeYK)1P02AY|Hg1tW7Xak{0xRt$8HXIm>tbx^is%KV0qDD$3>aQDdW$xnXD%FBo)nh(C z02Wo--Ud%G`57I~6wSH=pvMT%f#hoNH?Jqt$;YinS zAlR~debC%UqYxsj`n;0*sbFI@z2f0FkdQ|%uKo?^KLeKwTW5&tX}nyI%Sd4;8)i(R z55r17-lH*MSj3_PzlHb-W8~D~%536k3t^Y?bUja8=_Ay|)7N-sJuUy7N8ZaH8XkR%|r35k(2HogMMjtZX7>4A9lUS|Y+s9!DnDu&KLPcDGS}LC4BL zJ2i4Llz9%-{OyaApaOp_vPa;;thHf_T#mrxm$J^bT8r&5Aj^79SLz=_zaPH6)GqiW zpi_%(5aR&WW_#d?9AsHiv_X1>)m|$4QU!Aaiw$U52p;R~$TTn*!EqX^{*}mW>?E^o zZACWOsD^SQt7zo>#f9jzwV4t2dQTB~!V1OX%I)mafh}^2%zjLa59LIbqD?;Rvn+K< zK&`fF(bzx^kB!M3uC}9Z*++v*Hkzc7%Y-QG&{@_nIvg@&)u3k&#v`F2Yca$@_nHDn z)_0<^K@HtpDz=JEO*SX8h7AwXo*;rb1bGx5h|z+`lGPHHXXktZ9mwIW$ide{ zvYg1S$h{yl1o9819QRh=%U(pnj3n2K=5O!KelAk72tOG#yQD{7zY1tvTH$;63BJ+aFySA0dSAfsX-sGUPy7}?G@2*j*LooUD_^!- zG02CePp)j`z+hY9cWkE5gCf0SdFC)U$VIAC{*A~d@EAQSwpY*6n5T$AqVY@Y(dVEr ztVY!ljl>2EBW5S<39Ie!92jI38aWsg#As1=ByO8iBNGHEG<^~FC;%eVJX^Fn>Gt(( z9xtNVg`ga5%(bQ@QBSVmSW6G`BH?91RyOjiDQ1xnZS-QwC5F)Q7GDZke&fgzMY#iM z(HKQb(Oib6metY;-UX$dk+=|12w)?^YFf9a3j3-Mc6TOW zFGaf7rLem%Mh6kCUZF;GbueNCk<2Bfk-L;i6rbx;`MfLm+^F~>hw3L(1YTNf;LESMWv0l5oGBX2PC%=>$yjpcEhD=c=m7#dY1gO<0NJa%^s~V`QNRXIekgER+dX`=Wu*dl!47 zf$-iNscLJK=t(su2P4}gi&m|bU462w=TMKLv_z#N9?MA2Hpyn;8!=SAWk`~bA)vW) z`Z&t46`}D4hDXu*djwbJ^E|CV@MVLew5K2(nuOITD)Eyk>v3gn;z`8W7WG*oI}UPq zpR(c=!O23d-l@L?Qtvv{i||&}9LtlSu2-Pwf%+~bJI8L)4k3p>15&&3+lSv@@e_H7 z4aCQ@<`kY5;S@RtC##01^LT3Ii5uDD6$pCbojQm4B8R9vBi5$BK>cX4Au_J$E8r2dDqRZ`5EVo;4d+=0cvT2@_K2??e$^1ZxgG z4z%;8+9RlMghc+i4Qj6zY{B&-Iv~06Ar6dnZ7I%;#=7{@4F}=kP_Nz;*qE%r3eNSe zc+Af$3*DNX7n_?CT7y5Qp${dFQR*+&&8Z;jB6UAMuOc)*FJ?5T`wsQI3Jqu;bMp$W z4OQk1yTYo>E51BjnK$V&yE3nATV#G-m34)gomW=*bl#-O@8%U(K9e`B^4YwCxi99$ z7UzVTdw8@&N~Gn1M+te3lI$pdHN-LW^8>v+FDR1fwVsgvOs4NipQKv_1?X2BC%Syw znQppzzF)oiI8QyV%qzHzde~-BV-?xR>(hA!$aid^$PoFFZj~DA)*qAiBnRQI0^b?P zSA2THABX2L*hG(|PgVHH?{e6Aan3SIZx~Az-X0~#B?`|cf5IdFyqu)xj&z)yF)8IC z-wHjDtmyS5=NvrW1AIO3{DH#v^6xaOZpq#e`+OvHMfPj2{?uhSH>XFt2|4h}#Tg*( zMGop~Ht_YxYke9yssN+B#M`F^p4Y)9JRtAowD)E7`)%R*c`X?Gg_A!GX}=4@Ka&@m zPs5*!AJglB#*gEg2hv{=nwvN5GuGU^;_Jh6^Cn$q&&?~lHd2{4`|@aIUd3gx%Djc! zvgYS?nhSCxRcB>CUHRS0XXd^*_xp2yF!zU*&tm4{>0r>4p6SQK@H!}U7xVdfYqx6u z=kxt))C5Bh;^>LqbUfV%d_BJKn5&0v2oPnVPiG_7Pv^zX$O)}imy0sUM?ZWB^mNC# zMY7KrPeQBHM-wKcok&k_1<|bN1?*I@D#c8dqI}L*={wb)6KTr@N|NLJr{#pax5C(< zK|KjM)E+2*ape$tYEimD1iW5d3ITf3JK_7$fzutW$%>war!Ij;y%N7mEsds^+Y9O; zbWw^T7UnGSJ1|*kK6+`w4gzs#xL%2o6)z7B*Go*YV&Kd75AbzE zL)QbakMNIbS&D$=Kin073 zd%LA(phbC+v9i7~0ar=DHL&1x%d(ZQG!$mc!KRk#PHk(go!ZD9%BEoJEB9(jZEJF>`X#m`N^6aIC!Tx8xpU72 z{<-Vg>l^B(h&3m%TD^x*j}J0%Fy@~)wPtD~_D|6K@wdLIwxPW)k?GmgmbSX{v2GS6 z>oq5u9&#je<6La6Z)!@GZZzt#Phx%3l={Y&2Hc^{C4hn}NDh>`#Clw>!yXpNwmMw3 zCF`)fIW7{dtzsc7Xt1WG9)Q~BMxx1^&B?7Ti8excfxqCAXvJFc0#UHgQ3#O6n&d|O zN!Fqy;4ju%2UT3O$ju!I+S-JNg3lc4Iyt4j>6E_YpO)NETib{g=l@%#blJOCTKPRF z%`t+b?mn2BSw(;s!TrCL*FK1;J<=m;W^H&}$CIWHoT!k^D6qBIb>K)U#KXgL*+&8E z8X9U^H*7kR^0_SBtG)!a46$o!94py1HrL7c=tQA@g+UJ~&*h;Cm~3ckYi|*1Jv8w$ zMQMkLbJ1J;bX`3)2=>umwlpDTK=Vh^VLUuMmwgnlwjRyZBV2QOcz7=RC}1P1t|O_v zOb(-X>p!yILy)g;MkUur`R8HBmGv#IW zz3-z!TiO!sbWNiF>L~F@R`f%C1SAA_7 zNIkJH0I8W0nqf zsG3E`7#sQ>2E}G_K!=HQ(O36#;{T!Kvk_b9$uSk|PwUnL{SQDS$RUXhn>_?m?+;nx zxU<>DA(}^s>!aqoIXr^Oj=-UI!CX;YdO}$DwhyIM7`(@|+>cbT6|!e22JTQ<1|*D4 z^{`h3#LoOI{m7XUsCCVkzDnzZRz-tts&DP?Bc)2gD$}r|kt#;&y`X?9>;LxSyLjKq z`9t~$cgA+a%;n)7u{&eoJIv*~4D~|R2w!d8V};6gh3~PRu*|CPUh7rt)Ma3DDgUbET6|Ja|PUeZ_h$Y_0;ry%AEnH}ZZ2w>L*0kD9BnJt|n-VOg;< zObjx^ciU;wn$Xun8l51kW!NqO|5;_MIt~0+(LSHt&Vv27+0Y7Ig?7MaY z=oY3L-x!BSZqNQk zwz(Q~bmvy+7*5v>jgqz$ofH6j+*TYIwI!tbg? z+aUZ-_}{P#%z)gkg8q@qRpGx!u0gR5UlYAG8u>In10A(1d~0-9G$yXc=I(-lkh4`V z5SXkAcVu6co!1uDnYhRpvnza6_O*ar=!0FGeS5Z&2|-gHV1GNq-0k)ww$+y072cEm zST;Oa9G09KgohAo1-QNz#h=%rzl;jhUs8${QVLK&Rv9Qc4N;Ub`8WJ$`-VuUVizp< z>xdP@1O$SJvTLs>V^58b{p%he!DL(Q9I?UayHg6GOG@J;E(7 zu(o)?e2XFUEpw+OYmuGS-4@_?TTdy#Q`V0y>D4-H8R3`AU$cVywfRg4h3NaCofiHu z3I04~{fJGJA2AtC&Lh0}7L#(^V(v8&2+2bh?eM#yZI)Rrkx(@*4;R*hSrY)>${<{^ z1do<1b?ZpbG$sHxVRoq12+uyneG)ciqqY+er}oS@Ys2}cMDDQeD%`AV)Y)boum~#x z>|@BBm!ptKiIopN`P-8h+c82ap10(!m=$HKSR_Jg1^RLj=R9mNY8~@yC-G@IY460IKCE@*HSD0oh^a}I) zLb2b+Us0rgin@&tJ}`e3;@@9|-U^8aZ-w3$fcHcHl7N4OuAvda*I1qS00YsW)7m8f zyR17U;7;o?0u0NoqL>xCipi?hqlh~EUAAutF8>PMDQF22D9Xb18{%1TLHSm-zDI?;pY_Kx$sX3_-Xi8 z65#SnxsvS9((KVt670{?>;Vw$&(iDx5bV#=>;Vw$&(iDxcrN@#81DFnWbbKgrEoVS z`)bV|?JvQ;TC)d0u&>ta0TAq~HG2RA`)bV|0KvXmvqzhZ2Lj2v)`xJ@@Q2nmD(5m# zl0oQ0>neFA#S8B@uMPp>>d;FepuZIQNl5DbC-hx5?HLooouMva^{&uvV($)pHDsP8 z;vLC^Z^2`Ly9llde>L>NIa9{8sb-0IqQL zACcxPq!Gwacc*!i33cCO-e;n^zR!Hr47J42uz#Jz@ceaBk-?EP!nXqhG7$m!d)@pw z?|x1s5tB>m#9ttuT7d@@=OXQUsM)=)9NrUoDGC8!ivA6MSY(ax?;_Vl(UiUppuA7b zxiK6o9v3T~@F}z|`1FP7U)`<;?hi!J6{|vr=9y@L4|^=K^-S~yK70YB0uPx5Bm6zI z^T6zt$nWrn#^sf@WtgZy-V?M9ELviO-_ue(o<=HR$ZgS^qfp{IcD}BoQY58=oV=uL%=k5T?ZlzaRdP-n-4d8H`DXS5_-BF4*k1p5x=^!Y|=69G>R@5L1W@3CAg`=Xf*?}wvtF@8H-I^iz4524 zeFOoKSE73;Sd&FpsGDxy9ePp~nI}W95%5~5O9nF{@kZ!}G?@Te3H=CvNRwAuE3bui z5mA`&wa~AL`0LOgLV2Hboa>Xyxqd;+Dw^yyR4h7cQmk-?c|FV0_2!i!6pt%IS1H-9 z3VnfqFND4*0nG2C=8sSqDCINee^?%%tw+(5k|e|TijqS)@5hys_png_1_hI)3kZ3A z5G6>Kz#1k!XSl-Vvv9#Mq#r(68g%$%*PLau@L*Plj0%EGc-EN!o!Mayy2D&P*3krR zWI0=Ku`mvXHD*;q>Tq@P#1c8MXde=#3>!HRGUsT7m!n53ThpmEsc_Mna5tL|ofvlDc+Y38@U0ky z>FIKZb*m)?XHd>DrV{SP7>N6743M@hG!%CCsENoK{(3#dlouIw*$W;`|@njRy7K}WcQ&O4tIz5g^lOD;H+Wc z;^Pbi-<@XoHaGf2wGa1u+{^ve zTUPjYD3;;vD2hh-&+g^^@LS>V?+^mQ+wJW(#C9*c?7QvoJ3VATt*&@gdah~ z4DUyjM8S0~k&}<=C>2{W8b%Em{^vu(*kIy4mz=QT6X6ndXBx$5g!vvhH($b40e%8U zK<~wQKib`>r;v)hHaDs6JpTmH1HIt<8#r*KjC96>^x9tNQ~(FAl9A3@;N*fG0|wV^9y!0G4(hl^a6^}_ub;B@yw=jWt@pR4EJ<8EJuREefdEzHR<{A9j3&5n>_ zFQk@`Ne+Z}9A|>a9&O|T!u8uS*>oasI(!nI07!8!sXhUmvR-hwa3KB2wa)c`pgd-j z=i9*9(+lOF0jHoB91f*)W#Gk`wXKPyCNXp1IS}I9jJpE@Qj9toIAU%so1ieXlgcon(2s;* zdjFRCB(y3ZA{8J2h=VwmIS$V%6-53it-}{23PS19MVr!fZEZS{(6gz(U(!(QHnYVg z1ciW31I}18&2yBtxHu35IBbv)_F%}%yO2wI9e=5DOe22-IK{o-JPaHjSXKvgZkb>h zjFA508HIy2UVw8cMGqV=DI8XX76vjm#j1Dpae7M3HBygUG%)#Rr;Ouw2_qZSeAk!5c)--5df(|w1 z9=b+r1xVFsTQ~6KI6r1sm)M{&D?x|Rm{Am?ooSD=@w`Ig7^TX4Wh!!Ke*H-g#(QZK z>AgYb+I#7<(tGK9{zH2&eHKDO9v$EPc+_eE7}4048PuxQ*cXu%sWJJ5K#Qm|Tw0B! zGhXJ{GWC~j^0_wo4GvDvTIC9(`^RWH{9;eJA+9u?R~;PC5iI@=NELp=~_7{Q!v>iR7Vq*;yJ#r)mJC!{K!u(8*OEI@Qk{9Gz-DLUw_}>jt31 zFzV2$zU|=XRK;-5ecVtTn3nk?oEdZFp;LX%!O^MM@WYqLDitm~hfY=M;OJCm15)f* zIeodfz`@a}b`UaN^YX`3&1)!xmN+_9Cm0|z zC5}$j0!Wv`3pbuaOSsp;(WyqD3R>&%It^)pI&5)pbgFJZx_jYuEQ*1|(W$NnWRJt^ zjI_Ld<>2U4WvGz%;8T04jcbw0ZMW!rUFYEFRBrqMkB>fgL@Kx5h%gSjZb{0^K}Ps8gS22ZkZ?~B0uFLd4k&hB35jKq#klY60a9&qmOh0epkncWMWQBX;DFLW*j z&U}Z?7+~W@9onWZ0_R1*da^0ehhwXgjSijkzR>`jS9_uJ1aOiLol}4vlxGS8)tkN0 z`2ujbpG79S=b)xK&ZH1806ObgIy1VHwOs=N{lJb?Btemod%|<58LDoCBO{hfex@Jq4U= zdy!|#c(g7YI_c%P6gWG2q4QJVG&pqN1Zn(m#stH-vllw-{Z&L{EtGUWcWacC^RTM-~js+-l?J8fY88opEGMzr}gUl=r zP%a2i=6X54R5Lz6p!{lpvJs#>KR~%GAahxOGRG=?5>97* z;e*Vik12@K^XvfS$pOlH1C&{#`6=&3DDYFR2vFv>3%*n{x&xHo4p8n0P+l0IJT5@_ zp#bIm0m^d%l&b=i*+cfryeB~U)d1ypk;Jc!>Hy_Y0m{1rl=lTFcLgY~4Nx8ypxhOp zyf;93Wq|U=0Og_p;HDlerDYBX0T7$A;(*Ak#f*pA57Nv3IP?2Qx4keNj#DEdLZSgyrnJH;!@h8 z7*|2TX^XY6yR^mGzzOo=`zF3+qSwf`9=J$3XfM9^mG&AKWCVQLs|zwithDyhws^;} zg=bA0#qVHjQH(Uw7GRumXj@bPE^U#5pl)f4e@xT1xDHU3M*l%uY(^N6wkY*KRClyR z2d;aw#RHBlP6T#PZtD42(2{!olA`YaLp|^7gPx;Mj`VqVaUM-6j#alfYeD*a`q&$^ z1q4eubh%(mkhVxcz-?b_q2uA5AVLdR>0+jOzx*=%hnhy~Vl%j!jv!z!L5Y!KC@qZj!^jyC7 zA$4!%>of=>V_nbX%Z3QOm9Mf4w$OTB;piEw56Bgvd-CusMlf#bKu z!Ib5-NDWmZUj;b(4_%gbLtJu5SEuN<&3@>Go|CR^Q;Ma6##Jw!UxDW$rzvyZ05%lP zyxEy>)VqoOz>!*Ah^v&m3tscrI66#Mze}7-NAo@6EL}qmuFSac97^WOGQfJoflG~B zvt|vSv&EPCeuv~rfy2K%dcxr|mcbjGGWZ-kdnUoYgJp04n8`Zst+d|C_Tj(rM79ry z;wp&7n0Ww{dyAPJa2{Dshk!`1eaJS+EclOXlVI>S&B3_(Wv49vISqzvldR29mYIlc zNRHdklkv_DXL`1K=<>b+II=$VEM2D1bor_hC6095^!n;x%2x{#$@0b05j<$q)hG8J zSKotU^ww@EhOE8C)tjNi-s0*l5V*Iv+L^%?TF=`YJ$qJQQz|&zdhP&Sspp`MWjUR< zhJMjwITbNsUL{j!##yvxQtvpG>;?8jhdgNaUpsdH6f8$<|G~0626c+GdyW60x??%5 z=!4z&^}+63p}RM`clW{WcQ|%ei`aQ2*Gsd=@|C&0>XyL|K*1kd4yFutAa#$vq3RUs z5UNCZ=M^&PIdnbPjePZ14~BumlAfte`-xL^d7lZEY*G0S+I^d2ckGms=3opj!cWHV zYk=Xe2bqMvvDWd8GC&|)%E5kRHe64}gvaqT=!cBYuQ|TaokBt0vfXf z?W@Rz^cG}0<~KjPt_c zb%Gv6Pxw4=dW#apz@dgS^?+hPke(3qOzjCTJDwodancJ$GF!R^St~q&ya@Fl{j+J% zUZl#1ecU{4iyHt5>W8-YwquJ@zcA{Kw&-?jQ4DBMaF)tq)cC#C)F%Q*+G0;yUM!VW z8Em2T%;F$RoOd-dtRtk3l8J~Us>G$!GttU`vrprQbf*DwBd$d3HL%1N1}kdYb~q3s zEeB2oTvzsP2x$PM6MtnYLN)`^f}B7|SQ**zXbcV_j@`iN$bb{{mXl$=2`aVxb1>fG zNSLnQr0SFo2q$Ic$Lsz>*C}rRM@9*j0{@|-1m{a2YsmXJoY_P0AN0(}=4sDdf|*Bm z`4MnO&-}IHnS3i5JXojf!cW#I9A!o&lycB}_dDK8nY9I6M9!Z-7q^@xVwvZ-4?I`& z@HLKycYqhM{RjIFXM?=#I|TDhY(}KtJEdTGK+nWsDd@;h3W&qHX*T38z_n%W$C>`; z9=fEI07sS-|9YVs^C$4bE(qLH-9)^1h=aebhyNXr{W_Hs*(4pxvlQ51>^Tm`SG$l- z@JiRuRkc+v$ioQWg(94CXg{oQ{BRgB{Q6-M`eE#2+7JHDCo~cV-S{yZ|w+CsY-Tks?smHHp5JKBQ2A#G6%Xi#vL_w6u5Z#7yLh)7#}DJ?JBVt)o(Xg#0f z=-I#0tR`A83GG!~;)3EjWze++_uzt~c#eZ9gWX8iTNxY%nPnM722&0_FLyt1@E^W` z45Y+oT~0Y)ix$t+s=WLY+U~!ENiexD<)GdF>Dc`uPz)X{r=N4mX*`VRxF7-`tP8mN8o9_7 z1^n69KK5x4k!2YJcxowOFTsg0(H;ab)&=RxDREDy86m0g4Uu>iAp3FULTUjiMksaL zNF9K@?Zf#TAe}y(Z!r~Sd&^Whwn%xHuXV`O7{O7W4#uDNYwqSko!t4W+cw3}kMw8S z-G69bt%DR$HRK@~g8Ix!z3?W>=K+>WoRRhu=U_Ko5p!WGl{YS1@mHUFXC4_0V@PMa&)PB>w!w&_(M zlD^(~9p2kpz0>X3s~B{G3~7t!V03AVp5GIg=o*xY|0)+9os}Fkqm7`~8^=cozpE3Fge=bftABo6+1WuL45vl(TNS6;X=orJO zKrwe??^Hm#eUQ@u;UWSq&Kf{Ee30{)$_Kd;kScsl;g8R58T=b^m?fmrCtU_B0O-v( zIG0AYH*{+Eua3`E;2`7kWcQ)E(((C5Fk(rU--+Wxij;#sb_3p7vc|T|AHxG)NWqZt zdA8$YSEqGW#^=XCM8@Y2a2Gu2hb(}-#pmaNCgXEZ7E)zQILYzVB~U>Q!M=m-jb=zH z+Z!u=&-4vrcm)El^yjxV*!P$Iybop+qNj-)L}q(qKcsMDI4Qb^6E{Z42Eltp8Fs(*-udrH7mGGQ#Pl$Y}M6a^E$-~do07}=`8_PM*nyf2MGZ} z&9i~rlje2AW;v5JqkpY<64jbNIGM@Vf9QzalA%;G1xr)iXLM;|O_aW7dtJHyN51=(}3sk4R>1sg}M)R$6o8OWY50wbKvX&9b`XXQ?GAGI>hPO zH`ap2;qZ+P2-BNyaO4eQXY`G~I==CDV5awtTG&*^gr0qa^7Q5#M?=ptCiLtZ+Yk_B zO!x-m2_E!~&OZ1C-#GW?8!H{(AfHQ)P387a*u7KvM!GshY(a`Wbe*y+2#f|Dol5%T zDS&ioIs#{%2ZFVIRQ)AW(Ozr~rTDWNooi7~98MafYk z=|2b#qRr>0#X9AWpVhJDSfz144r9wJj{hY50aKx}h4yX41ld9x4`>jL@n;Wyz4_RM zj*r~|I>FH%#-C|mBz^4cAS0xrk9B9m4!BO&BLi5DAr5zz9Dfa4`(|0#n$ys2cGm6TRM=mx7IsXr;@RyXWw8OK>CKTh|Z4l zm%cIV^V&DK(ijw)a?m$Uf~(8e@`IG8@|M2A`a=4~n6x;e7YV%Hd}B0t$@sGwbb_&t zzOfyxcj+6irsYN7IM4^**yH#{1?Z%dQ&ryg3A@wJv;`52r3IZC(T=^GuS9PIcgpUz z%sGqF2bsPP&wY@Ye}mi#qPV}>FYY@6+&S;U$7?z@=Y!15gFE@T@9!7)odNC-1-S1I za6kGmaqkLn?+$Q(JHY+e0Qa~1mG?UX-1i2!9|&-t9pHYTU)*;GxbF*a{~*A9ae(^= z{o;OafIH{F_I^AiE?1|k4s=fRaY&c60hp0Pi`Jr>~J5a1r`7x()E+}{px zF9>kobeOn56ySa!zFzO z;y%dC9Rcpc`o;ab0q&gFcFrI>5anz?~f#e~D}97k9SjeOjHd zHo$#*fP1#fU46+u3EGf-z4bNcC(z9B92=Wz8VPb+=IfIi+ndhEx?ygOrs772&INd; z9)X@hIvh0)K#ld-*OTAlPn!e=BJX^~#_G*;sC8+Ay@?qfnN{8|%#e58hy4iiHN8{Y zE8WaAnfDnRwUv9unf0Fbjg<9Qsir`_4yqs5p(*R0-HaWsCrAmWcY}-1GiUxb(2v`$ zz2%^|Ul`!d`3XK=(;o_Oe>uRtvtQh|1h{VxaNiT){%nBzj(%}Z2Do}jw zt6$t(0^GL*xOWA(cLlib?icrl0QZ&v_ZC^^1F5 zfcx42_w51h=LWcU_lx`50Qc$u_l^Mf`2p^G`^Ej-0Qaf@_bmbLlU?pA&R?A&&g(kP zrK9UO4=+9TrE`(4{!(Mz^aKcrF;ARQ4*lMbV925lLq#x`418}yByc37E z2=d~%aWP&CvW1oIor0c)TL3(P13aud0?PbWQ9_hWr}2rertZt!jA?TMsainRM`!vD z2=0fp1X3;39;JP3*23)6RI^iYW-wnq%Cnd+1!-+-t!1WgfE03z6%1@X?tIh#p;$ILiRhEfOI)H@mje%i6J6nv69Csg-zjgAAYDM90>?t z-MWzJgy3LbMsi;ah8uhs#hz5nfUsn{bglu!pVKb_qT{^MMx9|)AeF0)hk?V| zft-PZ3EAAOh0k5B{(^LT)_D(*4pkROna!zkKOmQKAt2qpRFeSN?Pv@vjCMd?1p(I+ zt^mZJi<<%I^3nM^AUs?N9|lCO&`6CnCK_v7;F?uFTf7gP4j=a@7*)#ZH4P2TwT7|K;U4GbxM!>s`I34jul-1+`xjD&?*gLZ zn1qDNiRtB40La_ETr2}b_gH1BdO$Yj=u*J+*OE?w*IVucWG&EL%|8f8r%xL%kdBZ0 zZvdI(<9+~;eLnqUA%d^?#D?9%K@nZj_WP+0BP~b^9exoJ4BhP4Uhsy!kTr> ztx3=r=I9wW#*L)oljm_jTwd`w)`E)1iRvjkKLCy&@@qhJOIULM0FVkG@lHYpACH_m z@-Y24K#G0brvvhVPh)cd@!O&r5VqnZHht^>|KM;mc9 z7m0XoNx2O;#o`@VvC75Q0O?eDl5`#cq|D)kN5*r2RN$fOt8W0(F zA3%zb+D$bKYryDwS*9ulqyt)&5~9ASXT3ZLsa(%I5jX{aFojID9FSo?oOOUO97Ak{ zvkefrE~w7wj{qt5;rs~@y#}(RoI6vl8tuwF5fHiVrKVF3NCWstncM0&G}Yj?+GoKz zz**?v;KEn|2oIUBwq$ElZDWhE(U&R#oDN^~YbG7l{*e-HCyr0^w*b=V^Z5sv%4fmv z0`jU4@)jTme5qoyq*mP;Z6qKSKAb6l=ysiyCke<}AI^3_s(id|0%W!iayuYpzMQ@R z$R3|{{s{<;>B^Hg8@BM#sRl&%@ufUl0GZ^Yd=nsYHiEX`9f0f+nimYf<}pBq`6%xt z#7AfH3DBw!(g?^}U#bfM(d#Wsd9DEj>ha{F3y@+!To3;SAUs^J+Y87;AmBn?1!SL( z*RT^|9UsmFK=wNj(fUGZq900LaW*Yf>?J=b;qged#Ysi@DnR!5c-;dC3zsX;gMfJ2 zqAa;JsipE6;K`73bt`BLScM2rHDR>uQUk`NpAZ|Qd0311IKucH!$aWvEb%4lO4H~BnkPe@(UIs|9Pd_&R!W_7{ zxC4;2fPlEt`~!e=`cj!_esub{4dx6v9;E>LD04einV?Q8o`zZej zkiCMAwuO!Lf!v&u&O|_}d=j=3;^TE0A;5J@%8h`~nPo3vlWHWj_+H5}0 z0{6yjAI^io=>SyPYcK9f>k{kQH^ggNYnnDB+VpLG)B0w8U9)aoYhshWYp8EZ=G5#H~$z!fR`9 z?g?*EW6g%d+?uu?S=F?(#FJZF64+_438;0r4@f0rZ>p@Sg&M#z%7qJ-FAv~0)?j&-R;4>gl2&_7iOnMTi!Dy2u~XDm*Q{3p#-K%# zD|MsGxB?5*CfkF#iDL!l`c1UCcpgV@^ZbBdsYpOZ$lF-c7O$;MHp5v`B#76+R_y&V z2XXd6*43mTyP>H)p4d{GXi3&LH^uc7@c=RDXw40Ez->wPj91^-5|0a(*i$$tlNcro z5C^m-4KADRL0mQq&Z%!YBSocZzuC=Ve@3saaXqejUS*|PSaT7tWTDMaN>fT)O7V6I zpd#cg)ZTLIlw)a{3obx@Bx_mp<8dq@A8$=;K7jK@G?HuG?uMMmY3IVtZ9uWTWji*ZHsCb%tRF5kleVSYDq1q z^omekR=Y7#dwxqZI-B(YBSDJkwax8_IvhoZ(96op<~O&mYe+0ZlL_T8IV&Eo-Lj>; zynNcanzs5{Mmt2ZMYTb}R@6W`9P`T;Fn@=Ok|Ws(FanBzkS3!_`iAJxJ@`D9Pm5P_ zpeeqw9@f|SJuGw_smjaYtLG=`;;cXx9lBLk%#1IXr!8}&Xgks$ye{UIFIsVYd;#5h z`4U`7-#%FH3s7++I&=*}dn;xLxegmGSGpr$krP_l+cw5ol`N=QF-r>m5wJO;c`7dx znOfi4+>|_`xe78mviT~nZ)!`lCgV*AyCP%fi4b}O>{XtImCjpvd0l;5OGC}prH3!* zY^w5yvX$|bW$^{b-ABkw=WkihRl~HzCl@SVQmZ0QpYR;2s0(Mr+53%)@#7ja@=z7d zpC;?U3{N!$R^ta7>QD)tA)6Mh?X}58h?@%*Y+4y#F*}ZyMH#vXn`>I@;^=I*Ql5CS zX2XJIGvlYX1BysiwPHFW!hebJe<|Oprv8XCEx76&e7M-_%ZLot%(s=MmwjzmK7@)TS5xMM0uUKN~SB_Hz#~-`{BM!CR@Em%F zZd_T?P|+d&I|Oyc$0O?Ka==jFYRwVgoro0LolZEOrne2i@9h0glL?q?8 zO*M2|90-yWt_{X6?1wb zsqju~Zmq1V!$yVlL^+AfeK@Zfc21$RU`qn*fm5}>!+TNNvgRi3GK-q#wYRn=nvw#+ zp_^!GZ;WI986B>neqC!#>sHK}Ys9QfcbVm&FNg_iayp?v>uC-lDPz)7bEBB}Cv(Dg zGivT-9LAKBFP*t@@yw4U3BKXTKqB+w9uv}nao+--hJQL)TuvF}^sG`f>rjoTy0@Zs zb8kiPD4jWD#_=P=oW@zVK+o$ut-b+o?2R~I z$GB`7+ct4asJg^@G5xZ)nZc5c`j}1ejH68G!XqY|3TF~ASCdPb+bXB69)jLa-~Y*s)ucb{?BW+TBhhp;bG+xS&5BVOXrWP7T z@T{+G6BcSi6&i0|Po}l!i@1SVxNh}=DAL}L;JXtLpiIr{;_KU+SZ@6(xyNfOLbym; za~|egw6(8m+lmRJjqy#1);7-C6&^uT;_GN_0IA{mi3UsvpNG1(9)@#bxAgkV!Nr{_ z?rk5OU5^>eH4SIACt6v0UMEa&KR0>w>K=)y!c~ z)v1Ar+5MBDj4`dgt);mwfp-`y8`@C1&=P1z&8|a7Te7YeDxazR7E5u|V^*-9jShZ2*9EeT=N20X+Tty5^gUmYaO~xqqc5vtHZlF*L&!{t&q17o zO6ksr3c6*ZQoA2NsM1n}&nwWxbzHS2MP*A9HJj2D(lnY#6(L}E7om5J$->*BzTp#@ zKzM0x^Td?}c-h+;2p^fhr_h04e8A_(<8%*XERgF{z-p>Hfad0grbe{sL@-lz20|mh zoIt~(rmY#1cK9^|8r{TrzByeDLTTu&L!;Cze*PPOf=Po0We zW>*x69%r|wX(Y(`jF@1%d`ZuFK{P@`Vr4ldIJ@yef146t)wCHc_W1HdTf1nQizbAO zk;cr9o<1H=t3iBSLDM#ehP*QNmFLV}<6gEWD|V8!z5&5k^x4@+b?NzIr1L3QN-GNuA2*HjDTrpYY{|h7 zYCBDBeo>^ui>G%ebdT0GzeJRL8pV{^{#EpH$Y1kG|9uo%z4d6m`JOB|N9?O5Z zzuuKuSmcbv1mbTdYvFSiPa(}fL?}(Rpk(i*NAV6vc`2Ur1 zMY{>ZFz}o9EqmKbg(ktKQmqp3z~ArA7rRa%MGDUaJBefa&aFL>cB#<_$;+^DmApJH zuitclEnqcXR767oeq~6}R1K}z?vAokIIyH?nviy}%hAS_gPwc>`K)(+n1uue_q84k z$t=ypEqNpjNKl5iSo1(Su*9x8X>?Wl3ff}$E3+0wwCfhp5`#f}%SfK0E7aMl3HSFx zj1JVNo@^FhSJ_-UCrz#YF=XA32BS-P3-Z3+3~@la%oCm|c_t0(G7E5j0A~xXZ!a!a z09R&9JaaEQB+p8EC<0;D291Ozoc>FGU37A{{AJH?f|USGe+M+VO~>=$B))vS;oHLG z&n9l9E)zU0R#+Ucl1W9eJ&fo5FR2BS`j6z+4@<*kA~;afh!aoupnQ?*j?=3pyd)YUTkOWNSh+^-(V8ql;2nca RB0>7=!!r%IbAO4L_YXlJ`hfrd diff --git a/Data Structures/testDoubleNode.h b/Data Structures/testDoubleNode.h deleted file mode 100644 index b87e0eb..0000000 --- a/Data Structures/testDoubleNode.h +++ /dev/null @@ -1,113 +0,0 @@ -#include "node.h" - -template -class DoubleNode { -private: - DoubleNode* next; /**< Pointer to the next DoubleNode (DoubleNode*) */ - DoubleNode* prev; /**< Pointer to the previous DoubleNode (DoubleNode*) */ - T data; /**< Data which is stored in the (T)*/ - -public: - /** - * Creates a new DoubleNode that points to NULL and has NULL data. - * @brief Default constructor. - */ - DoubleNode() - : next{nullptr}, prev{nullptr} {} - - /** - * Creates a new DoubleNode that points to NULL and has data. - * @brief Constructor. - * @param dt DoubleNode data. - */ - DoubleNode(const T dt) - : next{nullptr}, prev{nullptr}, data{dt} {} - - DoubleNode(DoubleNode* nd, const T dt) - : next{nd}, prev{nullptr}, data{dt} { } - - /** - * Creates a new DoubleNode that points to a node, is pointed to by a DoubleNode and has data. - * @brief Constructor. - * @param prv previous DoubleNode to which it will point. - * @param nd Node to which it will point. - * @param dt DoubleNode data. - */ - DoubleNode(DoubleNode* const nnd, DoubleNode* const prv, const T dt) - : next{nnd}, prev{prv}, data{dt} {} - - /** - * Construct a new DoubleNode from another DoubleNode object. - * @brief Copy constructor. - * @param nd DoubleNode to copy from. - */ - DoubleNode(const DoubleNode& nd) - : next{nd.next}, prev{nd.prev}, data{nd.data} {} - - /** - * @brief Get the DoubleNode's data. - * @return DoubleNode data. - */ - T get_data() const { - return this->data; - } - - /** - * @brief Set the current DoubleNode's data. - * @param dt new DoubleNode data. - */ - void set_data(const T dt) { - this->data = dt; - } - - /** - * @brief Get the pointer to the next DoubleNode. - * @return DoubleNode object to which the current DoubleNode object points to next. - */ - DoubleNode* get_next() const { - return this->next; - } - - /** - * @brief Set the pointer to the next DoubleNode. - * @param nd new DoubleNode object to which the current DoubleNode object will point to next. - */ - void set_next(DoubleNode* const nd) { - this->next = nd; - } - - /** - * @brief Get the pointer to the previous DoubleNode. - * @return DoubleNode object to which the current DoubleNode object points to. - */ - DoubleNode* get_behind() const { - return prev; - } - - /** - * @brief Set the pointer to the previous DoubleNode. - * @param prv new DoubleNode object to which the current DoubleNode object will point to. - * @tparam U Type of the object being set as behind (can be either Node or DoubleNode). - */ - template - void set_behind(U* const prv) { - prev = dynamic_cast*>(prv); - if (!prev) { - // prv is not a DoubleNode, so try casting to Node - Node* node = dynamic_cast*>(prv); - if (node) - prev = new DoubleNode(node, node->get_data()); - } - } - - /** - * @brief Move the current node to the previous node. - */ - void backward() { - if (this->prev) { - this->next = prev->get_next(); - this->data = prev->get_data(); - this->prev = prev->get_behind(); - } - } -}; \ No newline at end of file