From 9c6eed0c4cae0b5332edf6327d79c45c1d8f955f Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Thu, 5 Nov 2020 14:26:17 +0530 Subject: [PATCH 01/14] Initial draft of NoSQL DB --- courses/databases_nosql/further_reading.md | 25 ++ courses/databases_nosql/intro.md | 220 +++++++++++++++ courses/databases_nosql/key_concepts.md | 296 +++++++++++++++++++++ 3 files changed, 541 insertions(+) create mode 100644 courses/databases_nosql/further_reading.md create mode 100644 courses/databases_nosql/intro.md create mode 100644 courses/databases_nosql/key_concepts.md diff --git a/courses/databases_nosql/further_reading.md b/courses/databases_nosql/further_reading.md new file mode 100644 index 0000000..fa3255c --- /dev/null +++ b/courses/databases_nosql/further_reading.md @@ -0,0 +1,25 @@ +# Further reading: + +NoSQL: + +https://hostingdata.co.uk/nosql-database/ + +https://www.mongodb.com/nosql-explained + +https://www.mongodb.com/nosql-explained/nosql-vs-sql + +Cap Theorem + +http://www.julianbrowne.com/article/brewers-cap-theorem + +Scalability + +http://www.slideshare.net/jboner/scalability-availability-stability-patterns + +Eventual Consistency + +https://www.allthingsdistributed.com/2008/12/eventually_consistent.html + +https://www.toptal.com/big-data/consistent-hashing + +https://web.stanford.edu/class/cs244/papers/chord_TON_2003.pdf diff --git a/courses/databases_nosql/intro.md b/courses/databases_nosql/intro.md new file mode 100644 index 0000000..a821455 --- /dev/null +++ b/courses/databases_nosql/intro.md @@ -0,0 +1,220 @@ +# School of SRE : DATABASES - NoSQL + + +## Target Audience + +This Module is meant to be an introduction to NoSQL Databases. We will be touching upon the key concepts and trade-offs in a distributed data system. + + +## What to expect from this training + +At the end of training, you will have an understanding of what a NoSQL database is, what kind of advantages or disadvantages it has over traditional RDBMS, learn about different types of NoSQL databases and understand some of the underlying concepts & trade offs w.r.t to NoSQL. + + +## What is not covered under this training + +We will not be deep diving into any specific NoSQL Database. + +## Agenda + +* Introduction to NoSQL +* CAP Theorem +* Data versioning +* Partitioning +* Hashing +* Quorum + + +## Introduction + +When people use the term “NoSQL database”, they typically use it to refer to any non-relational database. Some say the term “NoSQL” stands for “non SQL” while others say it stands for “not only SQL.” Either way, most agree that NoSQL databases are databases that store data in a format other than relational tables. + +A common misconception is that NoSQL databases or non-relational databases don’t store relationship data well. NoSQL databases can store relationship data—they just store it differently than relational databases do. In fact, when compared with SQL databases, many find modeling relationship data in NoSQL databases to be _easier_, because related data doesn’t have to be split between tables. + +Such databases have existed since the late 1960s, but the name "NoSQL" was only coined in the early 21st century. NASA used a NoSQL database to track inventory for the Apollo mission. NoSQL databases emerged in the late 2000s as the cost of storage dramatically decreased. Gone were the days of needing to create a complex, difficult-to-manage data model simply for the purposes of reducing data duplication. Developers (rather than storage) were becoming the primary cost of software development, so NoSQL databases optimized for developer productivity. With the rise of Agile development methodology, NoSQL databases were developed with a focus on scaling, fast performance and at the same time allowed for frequent application changes and made programming easier. + + +### Types of NoSQL databases: + +Over time due to the way these NoSQL databases were developed to suit requirements at different companies, we ended up with quite a few types of them. However, they can be broadly classified into 4 types. Some of the databases can overlap between different types. They are + + + +1. **Document databases: **They store data in documents similar to JSON (JavaScript Object Notation) objects. Each document contains pairs of fields and values. The values can typically be a variety of types including things like strings, numbers, booleans, arrays, or objects, and their structures typically align with objects developers are working with in code. The advantages include intuitive data model & flexible schemas. Because of their variety of field value types and powerful query languages, document databases are great for a wide variety of use cases and can be used as a general purpose database. They can horizontally scale-out to accomodate large data volumes. Ex: MongoDB, Couchbase +2. **Key-Value databases:** These are a simpler type of databases where each item contains keys and values. A value can typically only be retrieved by referencing its value, so learning how to query for a specific key-value pair is typically simple. Key-value databases are great for use cases where you need to store large amounts of data but you don’t need to perform complex queries to retrieve it. Common use cases include storing user preferences or caching. Ex: Redis, DynamoDB, Voldemort/Venice (Linkedin), +3. **Wide-Column stores:** They store data in tables, rows, and dynamic columns. Wide-column stores provide a lot of flexibility over relational databases because each row is not required to have the same columns. Many consider wide-column stores to be two-dimensional key-value databases. Wide-column stores are great for when you need to store large amounts of data and you can predict what your query patterns will be. Wide-column stores are commonly used for storing Internet of Things data and user profile data. Cassandra and HBase are two of the most popular wide-column stores. +4. Graph Databases: These databases store data in nodes and edges. Nodes typically store information about people, places, and things while edges store information about the relationships between the nodes. The underlying storage mechanism of graph databases can vary. Some depend on a relational engine and “store” the graph data in a table (although a table is a logical element, therefore this approach imposes another level of abstraction between the graph database, the graph database management system and the physical devices where the data is actually stored). Others use a key-value store or document-oriented database for storage, making them inherently NoSQL structures. Graph databases excel in use cases where you need to traverse relationships to look for patterns such as social networks, fraud detection, and recommendation engines. Ex: Neo4j + + +### **Comparison** + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Performance + Scalability + Flexibility + Complexity + Functionality +
Key Value + high + high + high + none + Variable +
Document stores + high + Variable (high) + high + low + Variable (low) +
Column DB + high + high + moderate + low + minimal +
Graph + Variable + Variable + high + high + Graph theory +
+ + + +### Differences between SQL and NoSQL + +The table below summarizes the main differences between SQL and NoSQL databases. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ SQL Databases + NoSQL Databases +
Data Storage Model + Tables with fixed rows and columns + Document: JSON documents, Key-value: key-value pairs, Wide-column: tables with rows and dynamic columns, Graph: nodes and edges +
Primary Purpose + General purpose + Document: general purpose, Key-value: large amounts of data with simple lookup queries, Wide-column: large amounts of data with predictable query patterns, Graph: analyzing and traversing relationships between connected data +
Schemas + Rigid + Flexible +
Scaling + Vertical (scale-up with a larger server) + Horizontal (scale-out across commodity servers) +
Multi-Record ACID Transactions + Supported + Most do not support multi-record ACID transactions. However, some—like MongoDB—do. +
Joins + Typically required + Typically not required +
Data to Object Mapping + Requires ORM (object-relational mapping) + Many do not require ORMs. Document DB documents map directly to data structures in most popular programming languages. +
+ + + +### Advantages + + + +* Flexible Data Models + + Most NoSQL systems feature flexible schemas. A flexible schema means you can easily modify your database schema to add or remove fields to support for evolving application requirements. This facilitates with continuous application development of new features without database operation overhead. + +* Horizontal Scaling + + Most NoSQL systems allow you to scale horizontally, which means you can add in cheaper & commodity hardware, whenever you want to scale a system. On the other hand SQL systems generally scale Vertically (a more powerful server). NoSQL systems can also host huge data sets when compared to traditional SQL systems. + +* Fast Queries + + NoSQL can generally be a lot faster than traditional SQL systems due to data denormalization and horizontal scaling. Most NoSQL systems also tend to store similar data together facilitating faster query responses. + +* Developer productivity + + NoSQL systems tend to map data based on the programming data structures. As a result developers need to perform fewer data transformations leading to increased productivity & fewer bugs. + diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md new file mode 100644 index 0000000..1d6dd14 --- /dev/null +++ b/courses/databases_nosql/key_concepts.md @@ -0,0 +1,296 @@ +# Key Concepts - NoSQL + +Lets looks at some of the key concepts when we talk about NoSQL or distributed systems + + +## CAP Theorem + + + +In a keynote titled “Towards Robust Distributed Systems” at ACM’s PODC symposium in 2000 Eric Brewer came up with the so-called CAP-theorem which is widely adopted today by large web companies as well as in the NoSQL community. The CAP acronym stands for **C**onsistency, **A**vailability & **P**artition Tolerance. + + + +* **Consistency** + + It refers to how consistent a system is after an execution. A distributed system is called consistent when a write made by a source is available for all readers of that shared data. Different NoSQL systems support different levels of consistency. + +* **Availability** + + It refers to how a system responds to loss of functionality of different systems due to hardware and software failures. A high availability implies that a system is still available to handle operations (reads and writes) when a certain part of the system is down due to a failure or upgrade. + +* **Partition Tolerance** + + It is the ability of the system to continue operations in the event of a network partition. A network partition occurs when a failure causes two or more islands of networks where the systems can’t talk to each other across the islands temporarily or permanently. + + +Brewer alleges that one can at most choose two of these three characteristics in a shared-data system. The CAP-theorem states that a choice can only be made for two options out of consistency, availability and partition tolerance. A growing no of use cases in large scale applications tend to value reliability implying that Availability & Redundancy are more valuable than Consistency. As a result these systems struggle to meet ACID properties. They attain this by loosening on the consistency requirement i.e Eventual Consistency. + +**Eventual Consistency **means that all readers will see writes, as time goes on: “In a steady state, the system will eventually return the last written value”. Clients therefore may face an inconsistent state of data as updates are in progress. For instance, in a replicated database updates may go to one node which replicates the latest version to all other nodes that contain a replica of the modified dataset so that the replica nodes eventually will have the latest version. + +Different NoSQL systems support different levels of eventual consistency models. For ex: + + + +* Read Your Own Writes Consistency + + A client will see his updates immediately after they are written. The reads can hit nodes other than the one where it was written. However he might not see updates by other clients immediately. + +* Session Consistency: + + A client will see the updates to his data within a session scope. This generally indicates that reads & writes occur on the same server. Other clients using the same nodes will receive the same updates. + +* Casual Consistency + + A system provides causal consistency if the following condition holds: write operations that are related by potential causality are seen by each process of the system in order. Different processes may observe concurrent writes in different orders + + + + +Eventual consistency is useful if concurrent updates of the same partitions of data are unlikely and if clients do not immediately depend on reading updates issued by themselves or by other clients. + +Depending on what consistency model was chosen for the system (or parts of it), determines where the requests are routed, ex: replicas. + +CAP alternatives illustration + + + + + + + + + + + + + + + + + + + + + + + +
Choice + Traits + Examples +
Consistency + Availability +

+(Forfeit Partitions) +

2-phase commits +

+Cache invalidation protocols +

Single-site databases Cluster databases +

+LDAP +

+xFS file system +

Consistency + Partition tolerance +

+ (Forfeit Availability) +

Pessimistic locking +

+Make minority partitions unavailable +

Distributed databases Distributed locking Majority protocols +
Availability + Partition tolerance (Forfeit Consistency) + expirations/leases +

+conflict resolution optimistic +

DNS +

+Web Caching +

+ + + +## Versioning of Data in distributed systems + +When data is distributed across nodes, it can be modified on different nodes at the same time (assuming Strict consistency is enforced). Questions arise on conflict resolution for concurrent updates. Some of the popular conflict resolution mechanism are + + + +* **Timestamps** + + This is the most obvious solution. You sort updates based on chronological order and choose the latest update. However this relies on Clock synchronization across different parts of the infrastructure. This gets even more complicated when parts of systems are spread across different geographic locations. + +* **Optimistic Locking** + + You associate a unique value like a clock or counter with every data update. When a client wants to update data, it has to specify which version of data needs to be updated. This would mean you need to keep track of history of the data versions. + +* **Vector Clocks** + + A vector clock is defined as a tuple of clock values from each node. In a distributed environment, each node maintains a tuple of such clock values which represent the state of the nodes itself and its peers/replicas. A clock value may be real timestamps derived from local clock or version no. + + + + +

>>>>> gd2md-html alert: inline image link here (to images/image1.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image1.png "image_tooltip") + + +** Vector clocks illustration ** + +Vector clocks have the following advantages over other conflict resolution mechanism + + + +1. No dependency on synchronized clocks +2. No total ordering of revision nos required for casual reasoning + +No need to store and maintain multiple versions of the data on different nodes.** ** + + +## Partitioning + +When the amount of data crosses the capacity of a single node, we need to think of splitting data, creating replicas for load balancing & disaster recovery. Depending on how dynamic the infrastructure is, we have a few approaches that we can take. + + + +1. **Memory cached** + + These are partitioned in-memory databases that are primarily used for transient data. These databases are generally used as a front for traditional RDBMS. Most frequently used data is replicated from a rdbms into a memory database to facilitate fast queries and to take the load off from backend DB’s. A very common example is memcached. + +2. **Clustering** + + Traditional cluster mechanisms abstract away the cluster topology from clients. A client need not know where the actual data is residing and which node it is talking to. Clustering is very commonly used in traditional RDBMS where it can help scaling the persistent layer to a certain extent. + +3. **Separating reads from writes** + + In this method, you will have multiple replicas hosting the same data. The incoming writes are typically sent to a single node (Leader) or multiple nodes (multi-Leader), while the rest of the replicas (Follower) handle reads requests. The leader replicates writes asynchronously to all followers. However the write lag can’t be completely avoided. Sometimes a leader can crash before it replicates all the data to a follower. When this happens, a follower with the most consistent data can be turned into a leader. As you can realize now, it is hard to enforce full consistency in this model. You also need to consider the ratio of read vs write traffic. This model won’t make sense when writes are higher than reads. The replication methods can also vary widely. Some systems do a complete transfer of state periodically, while others use a delta state transfer approach. You could also transfer the state by transferring the operations in order. The followers can then apply the same operations as the leader to catch up. + +4. **Sharding** + + Sharing refers to dividing data in such a way that data is distributed evenly (both in terms of storage & processing power) across a cluster of nodes. It can also imply data locality, which means similar & related data is stored together to facilitate faster access. A shard in turn can be further replicated to meet load balancing or disaster recovery requirements. A single shard replica might take in all writes (single leader) or multiple replicas can take writes (multi-leader). Reads can be distributed across multiple replicas. Since data is now distributed across multiple nodes, clients should be able to consistently figure out where data is hosted. We will look at some of the common techniques below. The downside of sharding is that joins between shards is not possible. So a upstream/downstream application has to aggregate the results from multiple shards. + + + + +

>>>>> gd2md-html alert: inline image link here (to images/image2.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image2.png "image_tooltip") + + +** Sharding example** + + +## Hashing + +A hash function is a function that maps one piece of data—typically describing some kind of object, often of arbitrary size—to another piece of data, typically an integer, known as _hash code_, or simply _hash_. In a partitioned database, it is important to consistently map a key to a server/replica. + +For ex: you can use a very simple hash as a modulo function. + + + _p = k mod n_ + +Where + + + p -> partition, + + + k -> primary key + + + n -> no of nodes + +The downside of this simple hash is that, whenever the cluster topology changes, the data distribution also changes. When you are dealing with memory caches, it will be easy to distribute partitions around. Whenever a node joins/leaves a topology, partitions can reorder themselves, a cache miss can be re-populated from backend DB. However when you look at persistent data, it is not possible as the new node doesn’t have the data needed to serve it. This brings us to consistent hashing. + + +### Consistent hashing + +Consistent Hashing is a distributed hashing scheme that operates independently of the number of servers or objects in a distributed _hash table_ by assigning them a position on an abstract circle, or _hash ring_. This allows servers and objects to scale without affecting the overall system. + +Say that our hash function h() generates a 32-bit integer. Then, to determine to which server we will send a key k, we find the server s whose hash h(s) is the smallest integer that is larger than h(k). To make the process simpler, we assume the table is circular, which means that if we cannot find a server with a hash larger than h(k), we wrap around and start looking from the beginning of the array. + + + +

>>>>> gd2md-html alert: inline image link here (to images/image3.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image3.png "image_tooltip") + + +Consistent hashing illustration + +In consistent hashing when a server is removed or added then only the keys from that server are relocated. For example, if server S3 is removed then, all keys from server S3 will be moved to server S4 but keys stored on server S4 and S2 are not relocated. But there is one problem, when server S3 is removed then keys from S3 are not equally distributed among remaining servers S4 and S2. They are only assigned to server S4 which increases the load on server S4. + +To evenly distribute the load among servers when a server is added or removed, it creates a fixed number of replicas ( known as virtual nodes) of each server and distributes it along the circle. So instead of server labels S1, S2 and S3, we will have S10 S11…S19, S20 S21…S29 and S30 S31…S39. The factor for a number of replicas is also known as _weight_, depending on the situation. + + + + +All keys which are mapped to replicas Sij are stored on server Si. To find a key we do the same thing, find the position of the key on the circle and then move forward until you find a server replica. If the server replica is Sij then the key is stored in server Si. + +Suppose server S3 is removed, then all S3 replicas with labels S30 S31 … S39 must be removed. Now the objects keys adjacent to S3X labels will be automatically re-assigned to S1X, S2X and S4X. All keys originally assigned to S1, S2 & S4 will not be moved. + +Similar things happen if we add a server. Suppose we want to add a server S5 as a replacement of S3 then we need to add labels S50 S51 … S59. In the ideal case, one-fourth of keys from S1, S2 and S4 will be reassigned to S5. + +When applied to persistent storages, further issues arise: if a node has left the scene, data stored on this node becomes unavailable, unless it has been replicated to other nodes before; in the opposite case of a new node joining the others, adjacent nodes are no longer responsible for some pieces of data which they still store but not get asked for anymore as the corresponding objects are no longer hashed to them by requesting clients. In order to address this issue, a replication factor (r) can be introduced. + +Introducing replicas in a partitioning scheme—besides reliability benefits—also makes it possible to spread workload for read requests that can go to any physical node responsible for a requested piece of data. Scalability doesn’t work if the clients have to decide between multiple versions of the dataset, because they need to read from a quorum of servers which in turn reduces the efficiency of load balancing. + + + + +## Quorum + +Quorum is the minimum number of nodes in a cluster that must be online and be able to communicate with each other. If any additional node failure occurs beyond this threshold, the cluster will stop running. + + + + + +To attain a quorum, you need a majority of the nodes. Commonly it is (N/2 + 1), where N is the total no of nodes in the system. For ex, + +In a 3 node cluster, you need 2 nodes for a majority, + +In a 5 node cluster, you need 3 nodes for a majority, + +In a 6 node cluster, you need 4 nodes for a majority. + + + +

>>>>> gd2md-html alert: inline image link here (to images/image4.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image4.png "image_tooltip") + + + + +

>>>>> gd2md-html alert: inline image link here (to images/image5.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image5.png "image_tooltip") + + + + +

>>>>> gd2md-html alert: inline image link here (to images/image6.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image6.png "image_tooltip") + + +Network problems can cause communication failures among cluster nodes. One set of nodes might be able to communicate together across a functioning part of a network but not be able to communicate with a different set of nodes in another part of the network. This is known as split brain in cluster or cluster partitioning. + +Now the partition which has quorum is allowed to continue running the application. The other partitions are removed from the cluster. + +Eg: In a 5 node cluster, consider what happens if nodes 1, 2, and 3 can communicate with each other but not with nodes 4 and 5. Nodes 1, 2, and 3 constitute a majority, and they continue running as a cluster. Nodes 4 and 5, being a minority, stop running as a cluster. If node 3 loses communication with other nodes, all nodes stop running as a cluster. However, all functioning nodes will continue to listen for communication, so that when the network begins working again, the cluster can form and begin to run. + +Below diagram demonstrates Quorum selection on a cluster partitioned into two sets. + + + +

>>>>> gd2md-html alert: inline image link here (to images/image7.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images/image7.png "image_tooltip") + From df38966f7162b3be6a9867a04190dfd375c84523 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:27:19 +0530 Subject: [PATCH 02/14] Updated Links & adding images --- courses/databases_nosql/images/Quorum.png | Bin 0 -> 30658 bytes .../images/consistent_hashing.png | Bin 0 -> 74356 bytes .../images/database_sharding.png | Bin 0 -> 21004 bytes .../databases_nosql/images/vector_clocks.png | Bin 0 -> 50946 bytes courses/databases_nosql/intro.md | 20 +- courses/databases_nosql/key_concepts.md | 174 ++++-------------- 6 files changed, 46 insertions(+), 148 deletions(-) create mode 100644 courses/databases_nosql/images/Quorum.png create mode 100644 courses/databases_nosql/images/consistent_hashing.png create mode 100644 courses/databases_nosql/images/database_sharding.png create mode 100644 courses/databases_nosql/images/vector_clocks.png diff --git a/courses/databases_nosql/images/Quorum.png b/courses/databases_nosql/images/Quorum.png new file mode 100644 index 0000000000000000000000000000000000000000..8e79ec59159e38353365c52f9a5c766ebcf1f129 GIT binary patch literal 30658 zcmdqJc{JNw7e5?B2U^wE?L^UDT5Yw}Qd44R>y}mxZM8~`tr{aJVveEJYHtlyRg_S5 zOVtnrK}66Y#)Kk4jMorEM3Dp$-f!r=&mErMyPox~cdd7=*B{o($@!k|K6~$T&i?HE zIeB)?#6V0`QWOLNiCww;%MB1ns1^hgY}>jSXtDD@PznP1KfChFg_{Ar)BScItSJa3 zuXv5z%W3wzskbDKJpF9)%apL{gI_PdV!zO+llSm?dike&-ii9ZovwJh<&$dXx$NZM zx1FB2a82*ht}mPP#BN&~J-Bdb)4m1!4{x)dzI!Md)bL1lVQ7o);@!fUj-}kI&B3IM zET2)ISe=Yk@yV7Rw6hZ_Uxf~VGPJRN0)SBeFZ{WGl(oyVJO2LF4a4K_JNJH+eeUM2 zzlc2cN5jd($zqA7=0~AWXo7Qkp#G1Z1M`MDDVv7up1HdRfQZkxgFyC*mvwf9?+ORx z64)mjy79@B^@C@h>NJ#Ju@S)bvi#2tNw|!%PKgJfYSRb$a zxlx1;V!2dWU~4VEFL7Mn;@`s*tq<%jSF>5% z$i6Q5&TxT0Ubf5bk?{I^0FU8|2*|i?{k3W@9m4HGmmL2yslG~|gt9W#9}U1re+NwQG3JTuTFuRddt4Nv)NW_2*`Fuuqd|V z%e$<68>^GOtX884w(8}7w3pJQNmq(q?GE1rI1M1xB?C+TJOGgZNj2UyrHS|_u8)m#_UxUEZQBeYV@P+`;!lVcA>)S6WTDtA2Ol;cbS&UXY02q8OemLJovW) zaPyF2tM?g)0V7%PSBHZCD^t6?GAR5W5lm_&_cV+x9(70C%mu_w9P>%V&}pw-DENU| zYJW6-kEeB>17)fX%Bsz`!Drhr&(Vm;)avD_Ji*zcF@a>wJsDaQOSjpq(1AXzU+CacWwp>=adD7u z>;nN~pcO0G)!EU(SegFU0*f47R&Jwb^%}3^kaZGoWcX78WPnrCC_aO?1AOEH;2pLl zSs?*zri!AUn~L`LK6k_4sXiXGZ|*qCKH(vMCweLUG};=uY0(CK{ADoz-8OM8s|fEe zppar$if2JvA&pnyLS;d&YCUQ8nc+6}Fo~`dh^y$r(mZX`kk!ucFxo(H&YH|>AI)4e zZ!KiBVf4L$ObYp0Kp}XoBg2HUgpbn!FOeJw;~w*}p^KlS$Ts5-Lg*bC=_X+_N`u_^ zI3qS*FvskvII)*ic|>sb{rIQcj}TPXypZfoX$HBOp{3PUND?olb6;!4 za+=D5e260ulnwJYll%nx{x=|N!srg;$1^1>HbBDdN`Y1Uuf87{xfe)ps=d zGdW08U;S>`pp(AmJk~EYr9N%s6=lAAcZ2Rqgt*bC;vaiuwY9<0T)s*mq4ws44hXL) zb=MfDwXJgB8zS?0Yn8#9_^~|nt`R+Bg9_;@H9mXqkw_kEWj!Q+r3dfQLw~sf(#Nhc z+kzjc*#y|BzoBj!!Z^|UG@+kvJ5vh8i+Ux-w9jIvCwm4TJ@4OQ!`NcxPZVVKSVFXQ zxu9tx+yr0KyTS{!;_ppEEa9QZcHys~CwyhYCERq^isOuhn06r}QXO!W-D$aBEm2~1 zOJS$44jH=;)oRe5gDm{EveqzO4=MYudLn357Qgt#S9Jb1XFBBxZ6&OS@QUj_XEpfd z$)r~L8t0MhR=|1rXO5!qP@{X*UEMuZ; z-w$!Z+c^g2EWKqMS>N0!QsMLS8DTs+^Nnc#mZ8Yzm6e<=;x*9V6hox_3R8D&>D)2e zFE=amW%m$ENBvU6=Ejsv!-$=<%c{$!*-`5$ZuEFY zXjTsmg7_XB{O%O26eB!#GR}`$9qe~6wOOdlS?!)Yu+c*)^li1wmh5AgB$hx$?`Ydu zyeTO(X~f?S$y*z(4I)(e*(elCx>2~!Wz%!yX-`vK$pRbZ)|$Tv0@r`FY2zp# z8xxwnZ_l?Wr`7E`fxD!s@GnJKW;$%Pc@a0MZ=OfIOJ+%hnc)X~bGT5}%n z^EidwS4!`{s*|pW#vAxg&(7un=Qc(I#Nqc%b8sWD4Y0WAaW=KEsdLgVRnxNT9cP85 zRU>Js^S#wm^bcci9$I%O*|d)9p;ak!0dDNI+e!P6e@t+&k;zr$A7*|CGl7Z>zICF; zg}+I(vTY?(PV|?r`8g3D`Sh}s2_U?V)TJ69d0!}HYb||8E#u~dk@k#`moy!6?&BRQ zH_tPS8w4Vjf7SmLnwqj3xl`+$ptUOV!Tl!qM||~+p3I{^)>;tABj+N=*}X7!{@O8w ziyso>B-d!k?1^CQfKx;4$&J!)%z1rfL6_Dw;|T^~%rZItF#Ha?00;YExH1+z+|^By z(Ee6N*Fz71eM>&l40gmNZ%;euNh<8B*=vj)cy0C;A@(g;BAgmO09NsN+$Q=tY>mgn z)4{6RV1g?kl0UK zox4x|=3$SO1&onIT>v)=@=3P|+ zqdcon1g9xrF6d+P+CH_pSLLii(Rc~4Ja|Z^wRkhbe{Hp&Q=^Vs5!d1NRL02>md0zG zsBp`AU;WoANXT95KTZ-mzQ&o7nmt_+J>WPZ7|+EPahLOjf;rRCC<7-tgI>Nw1ms<9 z*F(d|J+`t3HP6O@rje#tTW$V)xaDg`D&UZ6C@KlN6X(45p=?I0XpeSkV>^ca$rv)T zW?rpHJ6m1)xl#Z)V}JvpdY3>2k5@PY35NdaD>yD2`u%x_Yr9C9rjU=+MIWT~>p{m( zbpcGQ(hSDZEKlOC&&zxxyh$6eN>8EBO;G?sHQq{u-9M*+Nu@i3%hBgI;x&>Tu?38B zkZ#AM?(o1@E7K35TI;8t#plK*Ia4iCV@~715S_(|+NY%FXt-M{iFs$xAEBcub!%^U zC6dbeqM4OPFz8*aEVRjywvpC6+x6WEmy}9HZjWBn>4nV~9FhH0UG)K2V1lzHiLNao z*?Ju*REaB&$j~5f8+GRxorOkIlN^0<3^(Y07NK@Ae}XOKVW@Lz((^*B?^>~B%wf5i^&qNS({H~twzGXsG5 z7nufz8~!`KX0CujmKR+A9on4&;!Q)~jq8!-*4%BL4(vrBGmE=6rbj7x?jqx^`|rI~M>?1VI|k)+U{{0kGgd(GuTie>3?H z^zb)0lp@H0zW5j3gQO?e|IndTi+1o#?&j>y*B|1TOBMb#slLqgVBG6h04^Q0CwZ=B zQ{MI7V5M^UM%JOuW{|M`pMd_pB0_BUApoKRNsGTC_F6%!N$3mEdh)`)LqlZmA;7Rg zAi*<#Bn`sX%`XI^UXB&03Hbi*M`GbWfS*64`xXV0wB%|Q*~(9NV*m)X2Ejd=q-0kv z2MiA6JAkagdin!^`@;6Xhj7Lr;B;FWPyOSGA7X_AFz*bA{(v>r)d)r5)B;Ch)Q@`N zdF9ge+4HKG*TpJ&*dsMm4-Q(Ghz)FER?ibh7bZKTs#;Z?iAH|R0R$rKh;Urs@Z){i z3QA2u{(TP!qr*|M>DE=gu2=nH)9hWLK0lHg78f4EtT_GtgA2yrXNNzjTZc|{=1R{e z%OV!qUA?+5i)+o+o&(_*e}A5E+cwZqvLs4tZDqcL$8C^{Gt%>^pB=yjEBFs0IHOI8 zihLhgpM77``Ra~Gq~6}%CtHTxm8eLCj(5x|dSPSTqb;6W8)&4AjG1|bjF20ER{+`& zwh!lkLC#IHK(5QP;-nq^WwTuvk0o`Q(D4gwl++Gqi{{^HyLhEDT*jp5~HHG0`gNy+Od+G!Ln$hed~s+r6QI`9o|Zpiju ztFBp@YwpNE>zbr%Y2uL6N$j!*iU7D?Py2L7fG-^RH+C_YND>Nx1BXoK4{lzOD5DXf~L`)(Y*3ii3`;=cQ2%g6@S$wHl`VC$Z4>X z*Q(Q8wG_s7WV>?rt9aW`uZ{(NL=4Q3geRiyX_d{dnA1`D^POg<{a(5fbI{-|I}TQ? zhA8>;!Evi@VKnwsDCTf^_9W#2Wl8-)Q5ex%H_BE?Z<%7q9X4L829!4h_QmtD=$Pn}=I8U;i&s)-UpD)+Olyfy5CKgS z_v(#-7^1yIK;t!15Ha0dOs^}Iv6BglO)xnFeKe|U_BMD4bQlv)NaCSgUX=)XJ#^eO zYn>x#$A;UO6ZSaUl~GU$9;~~nS#w7SM{XyhcqxQ8G|j9&c)mCLO1&pn%W3WAWu?Fx ziC@s9udy+)?pflUmb$VZM(3id$^|qM#jks(s(!SkkLxA9+%-0h?&Abv@NS^Oown2# zMyFADAVz52GXI?xn^>mIKO)R@xeDO|w{UdQ5jUYSaJ#cq7 zug9gLic-?yDle0{+CRA|cGC1BSeu8Y<0K!nme1Y2h>!a!=*2zwi@p=JS@E)yY>YNO zFn#y8-EJyDJ$ct`xGEP^bTJWCqe2luGSDy%6OmGw#?@3Bb(Yr>D7VWg@6nlANu$D! zxF`(KYQz!UFX-Eib?rPs#2R`|ALR;h+*p0^@*jCmwZov>ZMp5Azz@vyf0h7GdD>jO z8(KKBTf*DtTh3usQ7yGQ<`)X3m*}4!2zEFL4`~%<79FU>!;jJckk)$;9 zL48qqqAsk1oj*-xj^snD;N`bu%@@p)<>WpvR$I2hZBQsJ{F2Q>Xp9bxrj_mvA=RCb zduOT6ImJD~#b>)x;7tV&lVmc|G@V7frQ&)wR#sI7s65|r=`AJDO%q|?GpeC z-_pM%;XQ{rC0852>$7OsQds>BsheLP4!=_|xjmHEK4vRrs0IebJP1N)|#G~w$s()<|lE#$x@`?)tq;rH1WO5;zxVEQpK&urBkg?BRc0PV+auO zWO%3>rzPL~`AJb&EMeZhWz4iOpNW4N0+m+ZIq;*95vzb$6ICag-(cg6sB+Pl9x zn?MvqwzGrMDp7$RG-S8f##XK`P?6onmiqu#o5*Z$jsEqB){(xOiw9GKAU_#;E5Far z*qPvUeGt=|9FbTZZ;tEswO_j3nqhqVUtaRdZ6A|$&`hF(c z=(Fl32sc-sx{pCudrM(WRT4*<@Gy|{wpx)w7T6^N-Pv|?*%oIzcc+!*gRLCooy9L{ z#^GyHt7hoRgX-HicCuX}CL(tn>JkwPSsB66*s+oDD(P=yXU}! zlk7KTIHco=M8#b9Yt5_PGN0OX3JKk&8HLow)rOi>e@KsbrIMu*HJ3VNx22L1z3gOn zKO-83j^!B#wBYsZGS10kkSw(4Tu?43o!aO_4c&jn^UZ_w=Rrhe$-dY-N-xFtm&lgr zPO;)?7#wc7R*suxOX;CtmIJI2KgvaFU9IV?;H(zNvxEPP@c6;YdN5aKa&qH4pq#@G z20;L}<`=08lZY@SK8{=ElUZOwDEwVmUR4QARns4*)NdFeVVTc+-&nCIf-Mf8I=^ zLPna-YwirzbG9l@XL(|Q<5{yb?rS%;)EPj_>Q-v)KNNuY~`Appx@1>Nm?`P@9ad%K(PZMn}h~!-wISCgs3M$ahs|F zR+ng=CqNk*5AI3s-)*bb6fb9RG-`)*)v8Z@xBlbS5kj0P20mQ>xX#P^uGg_P1s55u z0I%gWVWQSdbnSrKQurax*mMuNgAjivgdpvozi{{$oofwh-nd9yl5LRd96yXoN3eSu zfk;!ke~VJ}Z2c*~D_KkSznfS4n}c+`hH4ksy+KpCIfY>rF9yXC*M8op_SNnctDXED zx2dLqDKV-R?8|g=A9aB~o)qR}Ub~r93tN0XjlYyNiK*|(yPd-sDJIBZLwj<~a!?jRr1g{jJU3+jwag&2kQZak>Oi>4vUavU*Di1@@f7vhru8yl6)0`j zK=hp0Cd@&-JDDEG`bN9IMQY1U4PFJ3!v?63B;Uw62*-L8UF?M5uLJq~s z6I3W})61E&R$GX;zzr&(xbxC@uVJG)Vm9h1PUN(kL(iZdYTw2Q`wWz3!qpSkKBpm8 zm5p^e0h0~yup}{e?^U^&b}bn`=L0#R=DXdi-hkY^^R|+!3EdZo-4Bv|BZ{XdY92XA$vEKS#m>+F2z2lb+dIpky&TiI_A< z_rcRO`Y%a`SCIm%MKVQD@!aG=+M|e=L`(0rP3)vM$?W z>?!9~BZu;-8K0rYKs42qHB4gsq`NNZdip&3(eqn^UWnQ2aZ0jk^0l-%H#60#{+dFG zULUHS?92k{?uN||72Ut%r7Kny>uMZ@6<42JP^c)o3(rRnMl}i}B^zN!x{m~u4F^sO z+cXOgiRLmMpi(3uzAH1`HIq3Ua}a989a?%i;^W|q1!zX-1}yJ1irXD4OrDRY+MVO6 zMtn5+c2h2QzJB0^JN=!wIc zSq+oE3cjt|YL^hfn`!1qiw|Ny>B;eB7XBh>c`{CSbQ3kziSViDN z_Aiw0b&S%^Vo+N9r_5T*y5m`IRfAG@)%E#3{H9Dmj8`^%xIYtIm@xEeEysIsPV2}) zB_LWhHU?%=VH?c4Yrqbi8EiW{!ehIU&p&kVz!bRSkzbM2d>XU|ltyudDVfoLWu971 zCg^Bb9073%a1Nk9Mk~xoUr%sNKcs8l`eD<@1~TEBk!NmXy#UsEmdBpX8zPpI6AI@@ z+iF$C;FmW&x+V0b+w!eMfW#r?_vZwZI~=(QRxwwG8onpRAL`va$$sD{tU{d@8nFP$ zEbq(=ORL0JGT~a#nDNs=gCA6GVic^K))b9spCSVZHLta1rZJZ?Az59juq7u!uX>M} z;NTFCi+1&1urQb4J>Fsq8;>vTqc@B}#sfBm6 zo$Db`GLZ3hZJV^l+^w)v&w6I5F8v)$pR;hri`R-YImp$*`)K-`h7KlFL)nS?ESA1r zhhtRd_ayky=~a#1UV|QwhgO1gpoh+V@`OWJ^g>%`BbevkK^95%Ypr3s#e<;>)wvyI zo^+wde1Eo3{*4%FL-<5~y41#Y`&z4w$6Czz@hpE3S`(k&s@+SZGv$Z1PymO;(O8R7lLR17acK^1! zLS;GSZEw`4v+(V{4;gI_lHvFAMOAoDhk}H>^jGGz7BIIt&I7>)^)BQq8Vn9BJ!z#d z8%{El^^&iMd7S^I+!_^84C))SMP_2_U1XfIl{th@Y=XY{rXg?^r!7iS`|ydc03Yi)=R;>XOF+)l2`+#SFB)f~t1*!I(+wVHQ3+kB~^{Zk(> z3ay3)`1*U0Um<>bCnD1&E1U6q26{&nlf-J_^?AYxIz_iE8hw9XzJqie1NZE6aQ=np z@Bwvf%F`bwQ1Q^?;Y~=1zL}6rq?SvNVhohBx(NO@LE1zClJ=w+zaxu*>ix<$y ztTH)AuCb*X^{e{)%qgzP3IeQ=U5Zig&O_-p`Al*F`V5c|t6#sjf&twXiRD5(ztMpiHB_Yn+sDYfRjI%FcXD(mhtWBv}V-mQXGhD6ozPLy>P%{H--{d zi3c*~yL+jPV{qB|J1x+xjH&eI*V?NPR7Nqyb`9JT#DJ=E6uHOZ`My2RquOJleKT1oE0H`hyWdr zG;L0wc17O@e9YkhqV-(6)hSufec{s`_f!~^?=Lq(ZFhF+gm2SSfjPl)JfN{aS#rk) zcHHr55Hj7$ex&&NiULN|4`BX&OIyl1ld|yrPeg8 zv)*3an8Fo~N(dyk&KjWiz2+0)fOc5fvRr&j>()B_kA~b+H|v#v*ZlwHuhu&>q#$&I z==bV|)rZiNABztR`@j346sw|0d$pT7mMQrK1;*)t;|G593?eBm-QOD?cBG_uSU^Kb z83YP1IJEQ&KY{yS)V_Cv5cnUO-?}3R{DT3wbG?r97tY`h8}jK#6(YA$w*2B!Q|!i5 z_RiRlrMdfqH3&c94QBz;`hcx^&kz^Oz^Jiy>|4iR~7_9Y2 z1CZt4=ntr1{fsOZ0;qz2t30d=A9A%HzqaaTZwPx<<++BSeiXB*@Ve{Gp6-FcGdN+Z z^R`g8t6i&HCS{~+Ceberz@gPk*)h%cdJLP(D5HMf%L|i@?O6sG8|)g&ZuLg)DKlz8 zzbAzgj8c8y&o6NS*wvlS#eDA@3H&P!<`=j?ygZ&I! z{_Obry#yNgd2Y{TAU*&8SR{ys&v?t|?_d6_=0o_f9!MViA13!-=F4wd_Z47T!bAK* zQ-*GstpVTQ4BP)0+&O~$PaOj62cQW{`N#9?MZx9OV;&t83Yq+NMEWk^o`8}5bkDR+cmDahy+C1>@2!76A7a-03|hv#qpj(T zRB)!dk9yyiDDN4hsR{(-8S@#XR#~glP`lJ=UIUQL(B)LN!$X(eD;ZNX0iu~lH-oIE zK3BZL@W(?m`6YIpm@QXa3)SrsOWH(XOxOw(tLB-J zo(!`B4ctf*hSEE~qe8}lu%mu9ng{y2)G(JTen34*zqX42JQ(gI$-@xS6R-wRDdFg z(ODUGC2$6Ty@#H}qZK=J>`dD+M~~CamW%e&-5IXp20r&QR$9=j*MBCAS~G8>i z2ka66I~7!I4GMj?MBjnK;M(btl{7$gAU}j@`uDrYlEeqh0f*KA=6gKn9V|gc9nLMv#Z}DgqX`VGq*ix z0Lid@mp+yW$Q``O$00L5hxS%{t9 zV!lSlgat2S-r==6^3|7jZu_xY`g?VqL>1_9eP4GDkt zL@akaGRuq-^oqq^-GbJSl{i1YmJvFjYD5m~NaNed>&ggdAba z9BT@xq3OxKiEUz2jV=?*y#rU(e(QI}(zQeJ`r$O`!F*uH<&)XfHxCInJV%H3n({es zW0u$Y2Zf2zoieEfoDlSk9@>889(rKd>5aG42lPOurAy&#h>M?9l6i==;2CiJ)lEab z2Rkeo0P_mKv?`WL(!IjNl68$PMr5eLy$%uMsPb5qmLQSFt{EsU`e#R+@JJQ1FDi1* zx+Z;OY3loZw^G36d0rr5gZo40i*8azT#z+=jH&13do#F@^{tQ^-(&rHSHJKGo2iFw zT}h=He<(a4Ux}1Vv2`5R*E!$p;8QL_TsA-1YWX}u%*Q-m1b93W?8ZfeDC2fZ@9+wuV znWc0)hM=p`U{5(kl&KVwnZ&%Xv z4$RHhnTFgu2U^P*}xp%@B5ETXSeP!&ReY~=!Sk$Tbq4um$up$R+|Wu zcM*p<p?mL` zig)&-T{{J5%QFOdWGm0ft)6wDv?;zdDnbWM0`ot5rNs|V-4ur>L(hE(B_4x;izZ)i z5{s&vj(O;RP+S>kS#XuU>yZTNE1zE{QOa>S07WwD29NEHTsaNXf$6T1it)Ul6zOjs zDzeFr!T}%pbHr%=%{tkUW*i2UX`-hN{0>Q}a^}&AVyGDGfs?{m%x43O6E%S*IV}#fc^%s-;@0 zR-Blg2}WUjf(47(@*N-NJ~YB-uSgFk3VLlYF#8|a5>yn*8z<-%1{L}br)ZJn!Aj0R zYS2lMYIq3}8SqUJI95Ydgf{xK{NM6E7VC6pi)AxtYfCya#dz_u*66uH&VF9>qSMqu z+ii_oTS*RWK!^eaz(ZX^UXVROcKgg_J+n1A&2>E!->K-G)zG1qwuJGPwlXaZNKY44 zh$E*!3AzBpY4AvO2*8d*s+{QbyQ5f57Aab$%O7+;cbx8wGeS;N=mrV9Kl=0ywY~ac zlq54{#IZxaq8dj9eb74z%Ia6zQ44D;Xzy|3XlC9DCEh;7qPWHln@X8j9b7gn16SUH zsnE7`tIpwSmmn$&dkh$qjIk;`+LjL}T`BO&MIdJ5%dl_DklzVkfHJrZy^C5l9uDG2AGFO^NSkNh_i-9xFb__LmZ2DT7y!EX(K*#KQ3J5VQOyN^K#9F{o`HLgdDjR26?8# zujBMM;9qc>l!z#=O;fN;>wuD2wP7BI3qXnK?ZPX z>33rw*#CRj`C3{w95W(S5nJ?a7jQ4-FQNMX0#XPd`c?oF$u-o&rokV=|fi zzi4IygZ%@O)Sj*V2gdy0#Br3u9k%5|e*Ru!!P4GvzNCzOMx~>kQ_a8Zm z2&yv3uF~7l8}RnWtnpOO-nwmks^Hx3&y`GULzl)HQNSgNN_q{CO-)cA2yh5O7EBai z2Hxl}D>IBr1vWUA5d}`#1Q3&oK@D_{o7b~U))|cRBwc(a)o2zs5(_D0qULF&xI%!w zM>3fKSc`P}06-mFCl+31WQDwV$sLE5tx`>(8(Q?TYI1R`H|fd(E(9SGf`QtwN5x7R z#g=+DZi!E4+`Ja!3y|nsKN#D$e3K8W~g z7`R0^{G{32=suZr%$p7X^^Ruhh?Poj;L756*QWt1-w8P#Wl4$con|>E#<9{6HC!m3 z(HnZ2DH|3_98*1*qBn=$H1F$=izM@l;z1cc)B^`Rb5ba5G|t_BKy6-Q?jTY- zm~De^W=XWratX=D`%pE@Q!MVQ<6U}$obeJZPfLYFLOOj%KS~Q@sle5s%51CcVe&}^ zEI8V;BrYiBn+=BvWLYd+fAuF9Pz+CGjq}cS0lW&&o+L{JPOglVwlgcJk!kL_FQq1( zYmGsU@Bs(zG(B`&r;MY*IhDjB85gQ7*k;g*Z6Se$bBo@1Xc$eWHT918h8`1zKcq?* zOKqz?fb7EsbHvPoefpr}et>i-M%P&yP3VA29Q;{&F(1R{D=v)WXJp6%h3~rAPQ$lA zZFfsH-FfsJrSay7J6>$SA>x!SZ4RtyA!AVQRG7g_3|BeI(WQ?r160H00XCm4fGkW4 zzma*4em{86JsQmCGJ_!e_L8jEeH=k1*gZ&A8D7OUuJ@PnP(gw@svJ5%ZhSLmXxQ9=~fkKb1AN78>RhMj2_jxpYT?;%c`~B%Kv9Rzsdgii__>bbBq%4%4|1 zOgyX;nj@A}d6G_EXEmY`#FDTQ6SkhMiU|ApXkaUxGt&=26pZ^pWibL8b>|2k6vk*- zJR*UbTa*z-rPw|m&rjN*uj=$QIEoPBX)1BLTreg9VMC$odTm^C76^DG1P}q$ev#jK zGpAZiVX{a;>lZSK*^%O@cSCv`_SjF35D|3-W4wI#$K7h)d+9*ki;?4)eg5`~ylXci z&fb;hm45FU6S40>0qP*)pKXxJ&oG6JWb0_7)nwx#vINQywz{6 zf5)d^3l9q@q?NIq*@0|-L073#iLbr1vvp^5X?iczy2(uQ7`1PhuqPFR3Bu%XLO zUGyAczKJ1DUDGG;{`U1|a?`PUsE2S~Yu^OOS`My9U>$vWKUKtvE>_zU`p_t5+R^Uh zn}IuV#j?i>xn|s-J6z^{Vs2ngxO8n1?OEfUZG@dE9k`3^@zMf3c% zIReG$pE6OOo91uH<%qmr3QLc&jhQB|x|4RKGcdP0UeN>dk2f6PwXo(^x-RpSOFSOl zx4l~Fsk*6Byf#p~e7Chvpa&iww`U^iBDC?`c)p7K;c`K*n46faamJQQFpEN3{zZ7U zA5CX;_5RxZ1#ngkZ_8c>R8Ff#gw&5hw5PY8Kt(-F&@kJ{e2Y$2ZP#(rW0M9YUmxD> zCj-UhZ6UC&A7P%pph9{K&v?dQ!s95&fbFac=QsgWi%^)s^C*3DF2RnAz6e{D&RcGi zlQkLre*cxv?RlGTfykEBab)};c(cYW!p++O3?Z+u8y~AkOD~+Jb%+ohtjtLFe1BAL zW*t!tUMWEwF#R{68=Pq==47vyBGxkEf-~q&2IY=#!-; zw_^{+fq%<36-U--Oa(M%=2kn%!GJQW;<0i}`BbFkeD)#d`=v4l5XYMAE+Czv>V}`Fm^;hb zA64_IQd*$Um8ci@UcZYPKd!~DR&yKG;L3B)!j70V`(O_om=VJ8c~)C%K|b#6pC&FF zXiKxBSIy59fXo%Pxfzs9{q_rD;%Y-f>7Y@3`o8oj_g0)}KRn;@@u$`8m8vDZPriav z=YO_T$a=>6;J9gC?I0jMb;N;CKX}c>MioRkN6S29fiWXU(Uw}a{KRuG>W12FQC-&k zsZFI-Gftc2nq5HCi(7rL{c*Rg?Y2PUXl=@Kpny*D_P~c}1s<#naq0EG@>V)XtgCaX z3KuyaNzt0IMHc00Ke%K2$WoUSEai(PDI2Djcbb;%+bG-GN3?2*nCGI-P3gf9M~uR% zJ&~1a7fOiMY4HSbcBz=C-jv30A4)RiD#%#F*elP$Nzr;dpfkGu2fExsTGPODydi2~_$!angAQ)dRn(|cOR^gG7i7io* zto=U7<)F+U=}~`?oF1ksOP!kEJ`O%?F>@7h$xND)N-KECsYd<$QRN;6h3hl-z{uW` zmZ~hIc+Qw|dq2?J2cA`wgxZ=_;=oSobP7eI40Bs{`o1v6HYrehOl|Iti$T2NiZi}c z*6^HklRx6TJfDFE1ao`0)*jI8Q{~!{%{QfGCg>m8FR#(Xn)AH)U3oAm^~J3SRZ1>H z-i0$YfpR)*5yiE&OMC?@=V)KRh9;f28Ct=O2F40 zclN-gX1Lk>#ZY~2iAi=9`N40N_%+Gw>70D@L|&9z#{GVGbpfY|Urc(4ZN<2G_FaJI zHnWWCPuZ6qC396@%4ex!>`k^@Otdi&DDKvFiolc)(fZ$3` z9=29mGcO{}_v$d0)~YE%+_W(`rm48OCxdmTpnYbVkV$QJEK?dcwj%{qk{AtMY{%13 zd|qHX{dm%;`8VtIy$ER~f-7-b;Xi_D{@r7s7dY1^!c^Tdy7i zKku>r<0TcB%r!S_(2tzVc~V0u9}T_=#jznqNr}vS8#cr~DUn+;#o3DbnS+s;w`iq0 z>&46NP zb?&7Vv(;VF>nl*>oLUY7iYQh~egLA%mg|r@&Ka9%&r*+E$jJx|`c$65wTcVOH;oFIAn=|9~K!U?7X|^~FWW1WjZM&H@)k z6bxby_Ox-+ukrePNH%Lr-9R;fi-{LloWU~FpL7)8fse9*N*r>4De4VeX#n!o);e<`+Cz*Ulgl`ZJyXZ4`EjO zR1GSp{wyogd2BI4XiGL{WVA6s-CBX0#XGZk!z_)w*=o|8EHYD7^MxUVzGDv1gG6)JcOrj&)VL}kAjp95}SSr3NB5Xa_L(%Q)@ zx^h9d=&3RP`Pjp@svw%5^2IycVIVwDuAXaBWQxXB_KW@su)Pi|%0!aW z-p0GOq!6+B(*)tZK!Q81*zr{*c~Z!0O@m8ABhppiz{ajW8)dsCFjfVUdC_SN+(bXi zQNTAhz}XjM@6gp$3Lx~cKuL&grPJ>FcjjL>XCVB*sfVcrFlXL0X7wyBu-TDiJ^p}A z*hO)FSiM)}G2RxU*MURhsf@7)?&A+;*YQu09FTKMlzy`r!N00>>|OzN^H5|W`1HAm ziJ`hj9kZ|6N7bG#0DRBnu@cc8l^!0t6qt~SN1mXKaUGF0^?>}r>Y=Ir*c4|;Q$Pct zzHHadzBKHY2;3MDm^*wSdkd{5doExZPkSCKVDi?`qII=dM>Aw`cIeeepf|2p9r)D* zZXy>GEu8NstCS~R>mXOo3L%deZ*BDf?)zA76?x6lB7>KPvSJCX(Dz6~JF~L+Wq^@+ zH4`B=ro%#Ih8#PSooz)6b?oK56W5-Cr*ZpDJV}>>(h1XRZc?fR)x2v*DUFVmp{uPm zE%eje-+1=&)YkG6+g?{0)AEcABujcd)DQ@Gtd915D{*w$wQbK+Wl;+7TLO<((!BZ% zuQiVy=#d8ac}--$Ss(14CntWnX>YjI=xrhTC=eKn-90jV;(|ivyIT=1?Snm+2p|mi zxWK6kzlo_WAp|WiHUsyX#EmAkpn z@e2%$+HX5xsMAm;G=08$rWavB@@HT1P?9T}*Y8BfL{74QvkSzHv!6IgY{%_I+xFgI zhXo@;j+x!X!=x%h0rHliv#k6XXDK+Z6kWZe7ac@dZJFM_o;Rp~4ZbBygiGvSK667s z+t6h~$g41+R_&*w%l3VnhujsVxtZ6$MwVHtM>t$RWc5?HoSC7IB?MWDXn77?S#}O5 z>d8C|tD<6U7 z*o(uIWVenA{kr<#$RQ`$PC81^OaJcecyWZXUbKGe%yILGY8@l~g=lU(WArAp%7 zG{S41#jq~du{9O+1G885Mz3&l1nI1+T=1lo~CNnAmK*Wn4c!FEe47yzqieslgyAG z^0Uu#N_c+Q6wB*!Tua~wFDl)05FF)owB1(%>N9y%IBP*jXA5XZGlkzzy;7(+QbB%D z=O7T!e$0WKhhj_$b$k@iP`;7;B9UvA<<^`A4@`6jSGi+BC^VmF;pK`8y%ww8(>b;lRSZh$4Y?g+t6C{r+8`gQ{ZS3m^K;Wy2LMSOi(~^ZT~}*Uj>M zm${RvaKVB%g;l!%k5bQ6m-82S*&J#|FA=C9O7_LIjThf~VWkG5J#fZzxbNA#>iC-J zj#c?9jQL{dD75ga&Y6bqD7_A-L=%1bld4$2Nf3o{GjVl4O?a+)$MRbXZYfzxw3gN1 zg}6p4FKJy4cT5BwO!@NSnx^0Q^g-u-X7g&9MMqjx_KdTy1{FoHR;ZiO{bef0Fb7xW zTzfh&-48azu>%4O;7E%NQ-KP3J=A-6NwxyGLuGfN!*9+f#M9Ujxi4Jt7x`D__RUYt zk=3~~q!R)a`bW?nYtkPrQ8H$_Cj!v|6@pHJmYeFevL!bebu}=6i(WfzvO>!WgsUTe zkE905QTCjkAHL+FL?QV}MAIWJL~Qqb7|#_~pR0EKO_^jMcxT2AVRI|^|7!2Mqngax zeE~s5M?o3eFoK1mAfO`BL4gsGCek!C6#)S$5+H<-fNih=14xrLNK+{hAqgcRI3g`b zM1%k#2}+3&lF*U}A<2CM`jvCOZ=H4SS$EyF?z;IWYwf(*?=H`N_EUcQw?86*N#FCA zu8axK{In4!xBY_|b@}DXyY+w_Pa8pm7NgzO30)hcIZrDY{tsdI+DF{%&8zvCAc-Du zI=M&ql3bDAI-!?Io7g?V-92hFX#kvY=wQ#EzQA?eYw@ArY_+*%tZ6ckYOE4kJ}c5K zFMmIdt}R@JBm!{$Q6n2y^QzZ!EmM{5gYU0j9&j}1sOyfL2I#xs63KTTRTjP+3#fHa zY;>1x+2IKo?K)^VJ(R$&DgyB5Tke)EZzV~8F;Z%@_y7!mz_qU|IEYa_L^`FltTf8i zOc?G0KcS!C>+y8VF`q-uB4|o9id#X2@G%K45o-R&^%O>x0vJUMU>3(Bf+*4X%Nox? zNLIWQ6#mMIufa1^e)Yt4UHJH1Qof7{asu(GK`Gw&y~)9eezWcV41`(-`XHmGidIlS z^4kmfm);yrDW)WHz@l%*Z-dBPLa)i}iD>0(E@r1I&27WcP3JClA#AU|M@P&|e*n8& z3Huu5l5&uE)3mLqJ(ur^yfZ@mP*WS_Gu;%&CouE|mDTg3$n?vXqPX-M`t5J&wB>Uz zilV@Z4FYa-1hnAJ@CHktJp<^Z8CnhcLo*8i<{$a68j5%&<7XB9)yf=m4sOoErk{NS zyE5~3|Ek8noZET!#+jGL1-k7}YLKD!$##u^uCE_t?*hi+>aKmV6718i=l^iFDpNsW zf(xD*$09kmc<0QrJ7r(3f=3fVwA-sEvpaax2Jc3i1Bq+#^na!Y0Ls2o28aXitCr$F zMCogF*Ub(O4=?^!_8mRRj#4e$*mC1{^QX91-;07O`jr8`#4{U(89y+lMcWaQ|Igq_ zfsSM@j0JNvzXL^wEjYeT0D=~;@T1_is&sA9d}kK`j|`db)+PR6nS^wUK=~NdxYhoV7e;#&m82>-a%s=Kze*E-c z3&fAa%bKtFFJ2GS@~_^vYA65gr&X`+??UpocLRd+pI(OLz=cA7#jV3A)#-&oK_#Tw z9xVbFE`XeeaX&zoG{kE;AtMX#5=3zEPQT7O*JQn#gcI|Tz${&;^1Wi1UNmwI*%EfY zOYwj>DJ3oy1JP!-I6*C~#Q*qFA6YAzUD|}+SSz`}gI1|tp zC0rP+Sw$)Oo0Q$)uQ0Z6?M6nr7*?ty{|@M+~t<| zl?~=|59}%B=Jg`sR7eaUmC9kfh2gU(e$r2sxpSCto#wfu&M^45xBZe&<8JU+oyy7v zuZrGy0a5|65KI6%wg&!rOj$WZnS;4jyCp_Wae883*vklRG#Al795=8}Hd zCm%SUYHg1h3kp^eO)^gzbtrOJj`L@*5^r9D5WL1fP zdZ*Si8R(4NDhR^w*N& zCy_QLmkgaswXTEJ@wFvHi<^D2*N+y-rL_GOgiE0}2J*zrU_Ut&_blmu6uzbw#w`*0 z(5C43D|y`9=)$P1K;8>;{xGQw)9X{f695R+=e$)YUf6v?{Be)sascmDl zL#d@N*BIm=2AdBH`%(}m1SKcK&|)6Wsn{jMunU5d3+peo&z4#i#Dj4)ho8dBO`HoE zt?uIfeTgnixX5e@3jhKt@ruX0(xM9wCk6%piIKfYol(<}Kwcob!P{s=U}hh1l4+vs zUHX19%nHcPGT?C{JdS^_zshKrp7*Wm5eBmAjs zhibb{M`&nh$nUVPKD|#vextP18+&;bjN$2hXMw`|o2-8O{*k##G4WYWtJ$!?9{}Z| zt~etc=l$8Jft9uuKEl@wypltS!xShz?}T;mVKVjc^v@*fj^(p%uzD{Yu4!Koz4?^UJR`QqPP3Kz6r6}v_ zwhi)gKB-NGP~f}{pcB55)d;OD-g4Bg(GoQOb_s-;+OOgQL)IuIxKo$qaW>Ox?DFo0 z#EUYG*h1KyuI4E-&YzX+0_Y(g&*)$sR=s6ki$?1Pl@`IuGG0KQqJ!=bWoJk71{#~P z++{u`MP^*me`f6%$tTxst@6FiAL(EZGhaTOM=K1=U+&=N%FZrJ1ijDkN+?fkbHaQP zE$N6Ny858FkJ_z_K^!MLdSN7qG5qj^9DdoX{)Dl>$u1?`jL#cf)?`lzykx`8MfhFb z-|XDK3JU%#*iTpM%#)?Z?mHR9aq8iox}jCe{=HbcH^fqIZ2MR)%bD!mZMg)xJz*-j ze&ef6a|7wl-O|UMZCFyCs?M5oPS8$Pq-kCkI+syQ`nk$4`t8#?v?*+Hu|Y9Fs?y>K zPwq?t$)r#`*eT=QPm>yUQrgy6)0C}s>yS_oLU{tN|Cc~e#&@as*uidC+Bj~yaTeFm z0J%qH%TB^Zzvh3|9ca!gr2cAcxoh(C(36~3ndR0{pB~=%8AL3?&M|Y(CRMiV(NhVo z_w{#}rF`INZkhE&*7s z*}vg1ScSJRDQMut6)deA7Z1)X$t8iro9W*XyKD5?qUYw>`ypQ20v?~&FDJb}VyfUb z(vR2%OdnZxmMVTEM}>WTlC+2Bk<}F_89GCYl55`10^KnqHg~IlINL9^s}TTMW5~p? zH{mb?J-ik(yDNKXWZoISMN#pkAv*s`*AaJufIpOoF6O5fZ}2+!nNGcVYauE%<1t2XB0u6eKLH-|rekvX&){h;YR9*aM?O@A`De14u1(4}RLekE zo85YuZ$^G99#-#r!js-DUa^XsXNPyh(nO7hJuu0D1Gza%QOpBF_Cd&lQ(+Vr$KQsx zu)X~$B^qIE>s@nD-BDGiq<7B?S<*4^eVn8_yjwk%HG1q|J@19)fj{>cUu@>(%tITU z*px$rB|+0Q9dJruPUFvXt|Rr1L_C+>w`2Jbn_hI$(1<2Eu`s-FU@p(?^E^VWlpJu& zn|8RF4!3|GX45~fEUE?Wtqqao^pX#+$|0~w3!Ym{tId5>=+nT1wSIFgq1f?Sc_YEr zFT1x-W-`k34p*lcY1A?Ua~NG%?Ux;4eAeY12bx2n@h|Sx{c5xv`c)T&wM+Kyss;Ih zs&6(<2r7Bc_4Kzj+vM=gJU3|pD~LCF33@Xya~uRsnQty+bh;*UUp2B5!G0^WcoEMz zB_*O^Cl$=w6Jo7vLo4Yn=099Q9FDyX$u}Utq<)eI#O?fk3+iU598~9fqn)11?`Pk` zX7MaKfF}Um@w3IfL+pEh@aDZYLLC!M11sF(x%>o9e%_n9c|RcLfHrd42#D=23n~G& zUtEi%+x|^OfX)GGfa=^`)3a9lUG9r(&;jb+u=dD~1LL?qcz^ILsB3%4y-nNZy#d7z z6W1!%Bo_C8=f_ROPp!_pRgp#H!6X028Ygb;|Fm^8Acgo9XzRiP-nF*1kTR85MmLmi`u3u{z^JKP!O`R<2f!L4mcb&nZq_#eJ3byXnQEu_yOPNG?Jvu6> z)*>D?pmRQ(kT~ve`4_&pk)M8vBT21Pg~1t%Y=REnEe2%z(i_gp-{9k4PZjeW;Vec-1sw&@ymS`Y{0*8Cz>pD_dn8Uj^WI;E64lq zP2yFpTw(!PR@2TEr<|laRe71ge7>jFsAgf@d}qI681^Oy=$WYQy}%~yZJG(^ zzSpN=V*vt42d(K4X9gcggR(DGZ;;gD5qyO6by}v8*>faRn&=DQAH@O;i4J~?7~sg4 zsExjW<58Pp0X`tdLP2i|B2t5QHi2IMKGulG$Yv#9AvdS&W!FY#4;(o&G( zaC@?E`;Ij^8MQ6yd~xRd!CoUCded-rj0J*nQ{rfXALbJ^1*%n*N21UNf~(@UJAM zh{8rdKw(J_msB#<5=n455$XKz?i%F_QT+DT~De(`kY^tGU@8sW*;dVbs{ zv#cjoS`DaVwa89ZWie6pqh?4L-aP1*(&XpURqr$(gy9{(kbH;OWxv&N&M=s~it&^u zJie{2A*51)eiv*Csbw-6f^)pO_;z2YuXTeV7d#ov^9+Gq&;UvoD_myqJgsZvQBp`b z%~*q8sLXfCwRo}PWY8cCFb9fpGFw$gV5CxeX8LhAIs-6e0TkE=~ z{9&K70H)j_no6Iwc$6c51Fq^ak2aSdw0WIAnmUxxh1?Nonz@&c>n>iXQED$f_UY~8 z3965MKbrK>m|o4i(EuukY+rF5po6mE(|Ia2s9%unrbR3)i;w9uLN@t-S2wIY3=P3| znNrhz@TJwIEolfFESbD&WTGAx@PzYGf1c+ zkJWD-0ackk*jph{n7bb)9rv6N(f&-pc=Ovlx#s0#rDvaNba{~uXx5_ow+8U z)K@jS$%*c9C%ysA^==vgB=T>YZ2Ech?3v)hRjxNP`qi4JAyLZIz#G%UrbbQ`kE32! zMgd0rIP>f>$dR9uFkm!{U?UlOj+q37G_ztJfACRn>9xGoXvaqG4r($|%bKo%a{8LP zA2aefs&r=91uSN#BWV%^TdbQs=`^U(s9OuxYU7t&`G?jVA!N0o94hFKMPgw9*_J<= z8&-u#qvJIX?yuytyCbk&UU=JI6=5F1!SiU_s1rgA&E4TI&+Zr+S1(PFY=0r^gnDyT zeDb?q70_F|vVJS44ChY|O_8Uc=9KBkezBYHN2ATF%xgk&H3IxEnYDMb@;aiAX!v?7 zpsK^vWNd}TziW|eg7!X`GjirWp7Tm^w$r&)%$ojN8v&Zeugjopb%?s`RjJ}XNo!__t8L`u5%E%3~^Am6Ys=JNdV+s}TF*X(8PsI>dx;{JAVLvKcUZ6OvP$^B^(M z&vdxJ%$;%dW}wtdkcR>(vmy^+=I%c+QqtYlg|_n9-far8*4E^JCr z!!Qoj!Kw3p#f70E@2ILFw(LLP=ewIiblwT8hZxzs<(^}Cg*vzZ9s(l(c01hiI~~N_ z6hDfcNWBNJ;IRv)OP-08z0?=9X=J68#2oHI7Jg--UlWOq80GHL@$R{y{eFu!>)>9FDrjA_#Z^H(;wB#$#_yA#VekN`xX=@os8=@uO6(MBmZ}ylA z=TaOgIM~JW!JipOJi-w&lv^jEo(h<6j*e9#rQM$MNOL}JtlTvq#cRz96rM)nu}JZY6VSQq9^8z zncBUNdioj$_`-okqeAPt=J~QQT|Z1*dkBp_FtqMIx=O$prnJK#M;@8!6VS>qZL14Z zBT$*|NA$qeEo;g@)G0?*o6@2jb;n^cjd&?Kqh|a@Ye_CYv?pNZ8pS#h{!{q&^Sk;$ z`3eQC*Ff0{6-80@4DbcF3f~C%;0ki8g!*Pdp66a>pV+K?)INDqD(^f-C&bd%ik#RL zCa~!Wr|ce0w&j0g0w$-+nRY*J@UABC{F~%&IOLul6%a%#t=(%Gd4`kU2wU?Dn|Wqb{NJ=VLdgMj+ZA&CF?0R%3(D_R&51 zG`4Y8C)4vSV<~&&xobmklOS8*g`^~Vk!dLMvFF{%9)$> zo5F3Q+qzvZ`nDBSdtHY}7HE@T!SjzzL*NxhRk!G_W7pZSC=Mx&r__(h63=PDv`9a7 zl4QdpoEofal*$KEzXDixjQK&9{*KX-urPRKH`n}dqpWF6_S|rl=z=D%=U28M&+L$7 zbt$HhWYaiVUqxp=$8PHum<;${(E>}?FC2XqL$RCe+Y)O=;*dFbfTe4ObQRjiq0k3{ zpK&1es$;>SGwoR4qlU*#cP|@$_JaLvS54u3i(Rt?g)Etv)^O(f{GZhiP$Jn(Y=&WnpJ}JA@`dvDhJ{z6^YfkGO>Hvprxoj zGxgtrK3of(PH@c&ou7Wu(_1GTc&{Jmt$bYNFOvPRUOOKh^?|-)6b;+KfybwGkyWAB zmD9VG$||Ky%xO=?k8dj|kY!lj!@(92S`O8}%7RU$m&qM54XM}I$gJsDkjGzy@}7Y9 z8yTZ~sMek}`_Kmlm|lvDku=XNN~zkO>y^P*f%vVr7AZ-PDnU#VG_V^=)H)5emytJx zTjZax3y%EqD!RDYAt6k6y+KiRZiL*Hw2Ub!xT2(k6j_9tI40TH*%W8ZHTGc!Xe}~f zd@?#JZh7gWm8&e7dhgrmP2sPNZV#bVSzf!EE-Pj5lJK~+7ru4Y?bQP!*93D%+|z4n z1*pH=+_Y*cUa?7Ee%fLXJNnAe<)m+0iqiGUiA?Uo{=L*FM1 zZ;1unE#DEmYZO$uy)zXR`X#u5S+gj5w%M=$=pMJ+X*Fs$qd!r+zFl3$9f)%k+ygr zNhMi8iwtd~QtyoBNf7JF#o6BLFxy7arBR--wAt~~^sgf*1L)0GM341w${>LmLweV= zP#fLb+{sz9_Y%5pD2$>MBai1@o*^XP?Y>Ar;L(xxgnmOwrTvD#1Pli>6&2cKvn&!w zH_K#WpT(r}cvP2!0Bpd8;}!;Xwxc1^F}q&-uXFJ9U|q1CMRX^E@Yb0?G_iC~dTgNA zLQv_R0GP96=nY;e^Xm$)#ZNk{?Y43T$ucRoI~15HR#A`LzUbsYRUZNw`EKfAvya>{ z->d){cW$m?#`~8P%G-y@wsHW|r{t=4-=ZaBkX9wVZ^iNtwBBn)$FlW517jKC_UJ1>ZMzlWEa~7zZWGjZ*Wf=LzeJi+QkwaQ za(JjWW}}lDj=7N@${f2u&+C3n>Kg_ud1RZ>(}q~@QawHy;X2U#eql*ys@|e&^U3UO z6!}#&3?H)VYaq&;^wLP-T9pEXN&13yo4NiBm9sk}nQ0O}*aRoW%x;@#{G==^vio(z znto+jCZrRkui_8WWMZzB#Veo>9Ig-jX;#AkwTMo>wlDCkaCzl%Fg8ho$gRs~Xl5Un z%7+_0t(;!iIE#g0a^TkE!{yN5h^3jmUJ2HDX-#T2)Ae;X$f={=K@A13(@Md6NslSAj}`EL}oFwr<%l7zapGqsu7hvGLvMAQ@sw%itfi*nGu z^gE5tt2qiuF()^iRpG~_Wx7yGHh~#-mJw88ZUA+x?u^K4e`gdZ7{XnD`dB3(K-S zPUqkYipS@sNn@R0cMjB`uE&LHRBkKyrE08k&-?GfNNYWC`l3henP0d=egQ*X1wny! zZfVaB2l#MD4BCa>6<&qrzkr8nn)K(ItlpCjo4-&?quZR-?(3Hle@*&qVom;tu+#L8 zG#Tz$YG8V#5LU2kAAAWvMISv`Nw0$&G;U2y4kkAv%cFdjSDq?Pv^02LB!MYQKfKHX zsLRwc4yXFXz3KsDE)#$SJ$1W~g!($CcfVqj})kM6H_ zJLvXvTZ)l#iKhzw{S(*=zQ(Ly@0}b@e*1rl!mWA+KosuZM%(@#-UBQ?;Ir{)c#4Gh z>WuP7b{qHKmABZqzj>y^apO@XY0(m9v+egXCG&TjJaQH-c>$A&q9wvp^m8BzNLji z(H%gc_7)%55C5{wR`(W#I*U@db^ZR+gt?J}l|5!Vbbka-bgA-42iV?gV|=eUIQKGN z(CoqC6T(qv$edc*yNxdP z%~rNoO^tf_;>eT+$&O9$cJk-7`4WOJD_j0m-!=H(H9#`M|DJ>Yu?AXAO@C8nb9}aTmJ*@bC(Q)sD`eaM<+RY_TdfI_!kHS$ z9HQ1gUwzWaQL1}+#Eddu5+=JoEIe3ghk5`QQfc+1Cdv<2KMYB@wO~SSZt4pTHk*?)6*AvMz}hN)Qx-7nZ|{G zD~?y(rAZr$j8?`EmywqVVm7^ec~xtJ{dOfI2}~%xeKhA#e1Q|_Vz=oZ=cHU`(g&b$ zF&1L0w|L6k=2^r?T(r|mcx?LeSh5m(c|s+=di>0JP*opjF;;(O>6gDhF)H5V)fH`v z#+e*!lDv9eap9y!X98eK{;*NP|K}5lS72W8d~3eRJ;S%lf#;zE|yu zYeCKxg&{mTJc4AOjyO^2ys~nQ;iuZT7-27a5&L0@q^D!A`(3)#6NOM4Nq)yrzR#I@ zY}J#`-budv)0P&6qHp-~yDrU#vL<=)vkAt(bbgI!hG!QSC{mVpnck3CjqrNh8q*}n zc1QS|ZOMq+jt`CIpBoAXP?xfhXVjFE+u0z>1gn;hnn&{!le{!u$BFh`Sxu9+8~iM> zQ#xe!BPBn->2mz|fN7T~icty{D#Fi#7b+>~ws1lEldF+}+7cVTZf4=7X8F99oX}cA zN>ieXp{-l1_%OMA~mUsf>D9de03l4aNvt+E=c0sd;>+Lj^Q*9iTBi_;(9b zmA4XV2P~5lvC^)iHW@GdRR)a*?FW6M1s*2opy=a}OFaJfB?@~z0~y#;-R3_n4bI|t z1x$T6C+0SO`8VY^oMOEd$#W?Bn*8-B7XXOB(Lma@P-_f>Zu3ez|@1=A<_U&XjfafWDSQ>ALaA^6K-g zHFl1+_=m^$ZiVsfsL(TFE59mNS1E^`TUu^O8xwpWb4GgZPvAC1?R{~4aq{p}Vo3W{ z6m1LgkjMY^kR3m>wbP8NJcS%a#g`i6qm@R=dx96e`oAnmp7pLa>Ff8Ua5l%H*&=Uz z+oce9I`2iHrBiK<`*jH>UXIhlq;n+#sV7ukrzXEO?9R(ahk36 z@HS*6`?4URok_zj@n28mndG%l79;EBHdk)wzgb(;5PNNtEV2BGm6+ns+HjDokZ&iK zk;T~Am9Rl(!X*gaxkKB&;#IL&ttdlX8B(iUlydzvLA^~0Ups`Ne+S3?)Z4gR4SA}| z{ZECSY##T?C)krjZp+SmA95;KjWIK1Bf8=>4UtlW67oZ5LeUTJ*+-zx5<*4fHe zu`p=*0jGv@pZ*{p=C#1_<)+oL-{)<76B~s`t7#Q-DpF`s0ZI^ahkhUt%l&W>x9eMt%Pq;P zsHaqsGOImKMbUB0Ro1)iV`fJ6=Bz(#a_$;Gqc+^GYuMA&m!=%%2FrXK@}S?-6>$}N*3Ya79} zclUR9EQKw7i~0#FX4t|^N_N&TD{)ssbZxlcQ8l$&!?OO>@sm#9^iC+kQqTSlx9Or#DXB5i?)KhWq^u?Q zWFwvv!$!o1g}pw>H92%yBT0tPhd#2}u(?gfo?<;AhA#Io@>zW(xjppBByqFXX*d6F zq5-~VOa#$U(cfuX1<9^GpLEj9@Sz?uG0mwY zsenY%EaUUcmiPBR-M=C>{G_hmwxI2Cx4L*+-|B2%SZ?tkk4cwZ4%R-B3)RdCNjZnD zO&3{B)6Oo5=@EBA$nUy9{P%Yk%zl2n=OO9Oc)*vsI%X-ULJZ|E8NL=Kq%|Gc$c+B{ zu936Irmvllh3z)aEjqHo?(8=nKWajvw!9W`@>fj6p`LPhPJamSO$t?%(j~ob4AaiM(`1q*WU(bjo25we zcuVTxsY~p^{Kfs}0|N{ls$AiD#PUbnh8h^8=iY`fp(2>zDVRbna**Qkmh;Mg&;cPusdsNRf27WKB4W(oI|el;4a za=s?$5eGAG8$M!M`pDQmqDr(4HUZ7*J>&x$#o#m@;YSj3OMUJ=F^#RMy4}`D`>g}~* z=Z*=_`YR&pimfgKu6+-gw>;vCE(Zjn`QmE_MXJ@KAJx5_a5TjEQkN(2T~CW0iH!}> zm(}CO^Z8K`mtkei?-sZ=A<4_{JbGK?$**sxMXWTdE0-EsgW05Yu*R}D3ytU%mTLGO zbAuh5?o4%tvvk$hq%Ny($;|xJUpdStA7%0QjN9l&rAS?lzhHX-_D<}!N9A@iC7;|L zf2yN#c_znftW((}n0c#;`KV04M|MM7A+?Ybjp_2uy^Utg_KOu@mvV`5P*cq4zyHc- zD$#u`w`8b`BGR9gwo^-`GaiOi^6hYJP=1^e_)Aot&wb&mJf* ztg*2!7DI32^?X)UH@h+BqE8hvk*W}USZXcJ%kZLb_`wP%vfC0aRtgTn9FjPCo9Ogbz#)A4U_{19nZCFVx*hhV!Tcms0K z!v^m%T(`Q-o^DP=JEtUAU}D7`jF&Ea(#lZf@Xz@2WU*>J6p{=-kIuCZY$yVh@Go~n z4At%y=oB!aP(kUW?PQ;|fo&FfT7O8}d^`FEs=ue?cRhR)6O0A3G@t0ihg_gd1$^T5 zxonbU$)&?N^KWnQY|-F4nuEU7$ty_C+qm48n{WqyH$;85Rx0g{==V`pNa20vg6}PQ zZg-PQ(A}3!y7a6QU3>K>!hY&oCNhZ+Ke;Jl_2s%ucaGY9Z1oyFVe-ux6UD%_zWV9T z@HFSCb`MHUxqgAggiyb8hitSU7PsS>M9sQwATP&sPusM=+K2K{zhIIFa|gBY%KIlb;oEAFoxiWoRLw5DPZ&f^fv|{m)eTCIXxvOttMW3-3(?8td&vQf? zRn(Z~%5A7mf7NtH+4M$bI5@bmdDQ0$J^2+=IeeWZnDNH3iWGErrXrGwBybLdY9a59 zKVyX3v~42Q1P2`T@h){e?Bx;GsOXXXrnImhns*9ZAI0VJ1|o-@NuM5N;=R${^_J4ORYM3{YK3hoBBJCtminJ`} zt;#QtrG?1_0a%s79esPFPOy3-b>pLLQID?UHyXO}Z&%w^9=~Mv(+TrCmhufUlu9*W)AYWaFq!4sGE4O*m!M-{T6DZu`u;|ZZmvNC?C(bEBgF{gsjNMwJXyV1 z-1T8M%2GZtG(+53EiQKAr}n~YA+yUP3JM1_O+^ebQf<9ok^W4<<1PJ*EB|bDV0Oas_p|$> zK0~$hnE!K=LGq$W@qh*ERL%=6iJ01~`^`oL%PgH`x@TcX2c*Ys?m-QeBq)G@lC9Qp=Hxtox*u}YnW-?JqWg5s|5-T7^Q?vw$IF4LYH zetS{|%C|)fTaF^ILN^n#(75^O9qJ+mPYjbcHqupVC=}^drQdf{ZsS+KRa!_ww0VRv z(S3eU)V`dQ$#$zJ@1f{jX`c>>u2+`a58oaLe1|n%s1X|JZa|SbNKLh`uGQalF5wy^{+REjr%-Oo2f3?Im} z^)9O;VLq`m>b2Mauq+XOA00>eXSL@+M?o%|$N0N4Z`}$vJN#4H+3qY2z0FySMvXgghz32|edpdyuOhqSbIZ z@L1Bv3)zpZ)h}wjVq|!@~`0@JK&CH8lYZ#m=m zs5`-D35%ifHiojt@5=FS{s}hO1`r7xOZ%b;O0yXF6{c4fHk%m(295|IW6XnwQDmW% z7+Sj8YZx3HrIVu@QpX_8cNapr-z-eF^(sxq#j5#X9A>wa+%8Rgr_9l0Hoj5)(PI#u z)u6(aI4*nG@7l$)`?#k>3?DUgLPF46%_ylxaB(RBJ+fzyqISpb_LO|bImI|nxquhn zg2HQS3PqZMPCDgJceH&-MJt@3_fvNy&n!&!VPX#g%phw4wc7QZSNomI^JRFpa> z)sx!A5;+!MMyQ`EkPFKe&T6bjCpXfC%e}fsRBjyNtYr6Bu3{m|vzmBg(8B{z(IkMq zA|iwuB+wSzebWFq{}FrRay8}9#XAZRdfXjdU5CTucb+orr>xFKuZvWbCGDvxXqV!R z7I?NiThwP946z`91O;33B{X#hVHX*src)xTS8np$%cQF8YQ)NTI91!ViT1wnVJQir z#&aHXLw_$^V9O+C02iGr`eB`x3k?pdy?yJYeCsCP<{=H zc##4X`j#%KC4gjxAC6vTx`{2H`NYPM`SvQhD+SF~vcBZ_Pfl9u-4Lb+5eXtbS~7pe zsE&)|_4@cU!uOI4py$|p$?=5o^O6c^SenoOz|!QSi>)C{%mv$G-Wu;B^pTM3%+E^s ziuq#01OO_I(;osSZ=BS0%%~+|cF4)wgiT&-<$F$L$fc=(Gd6K#CZRMH1M5^EM1>yJ zzNq|s3!gmCij!O^>2#vV>TWr*UHy#No|ngjWSMyJV3K?57khIJjXn3L6atvnJ<+DC zS7i0~CU^-kLT1bH<7nGRi$^LGp9^(eJhgF(!Kc~}e15K_u(6KYl?51@Z&ZG_pezBX z&`lg=Yjsv|eJ_W!n{9$q^A!(|m;Xe+tY{R?atWIpn$w!3Blo=XPi>i>YD_u4m%NT1 z2n60)ws_cSQ!NDrb&csx0h6vB0>Mzo2VvF(&)$=>PnzFTAtafoVJ!$TpTN`^5-ij2B{zk>g)6 z=5mBh;;KN!+}FxRC(lDRKxYLDcgP5L7=1Y(q^GbM9n_CNKqF`@mk^#N&;y#OSMuAx zkLI@sTw-NyOOlli>+bToNGBqH)t<7-ey_rF-iflorIE~*MR;N@BQ(9V?X$IO>Pg6U znrJq!c2Hsmo=V2}CP41GS7fcD%=}%gY#5fNEIl^L z4_fA@q>Sjv*!WXi)Q54M+3t&@9@I75_6*json|U3C%Al~ccYRhz z`)u6r<&gLF-a#X*v1Tb{p`v4b2;jQD%Ur(@2moxW);+<>0^TBSBW_EN9(#!Xsd_N> zmY1Q~44ddScx6{!nCS}2mmUCvQPa$^21V9P&{G(T43|Dy*|^!! z|JAzz9O-|d4yd`M4)W^ zJsf1N<@qb8?+}uo)E>0pL`A8@1xzedEQZSOZgwC%*kr|Rvz$W4`j7Y09#h)fUX4b} z#^d#wMqXr}Or>Vnne{6#Dy1ofq+)h=fPOl%`^4`AB%1A8ak<}?5nxa2cSGEwHAZHB z3l7U-40J^TM#e6kijFhcS@ip#X}x=1i-ZMTK(hC;N_9)F_@LAlH3RcAw`?Zj6qkB3 zqnC02H6@>GJRQSb1(q7SoV2R90G!^4%T+*k|LgmOA@obPms`m3YosDg=yIHYU&|%f zUp{53I1Ne7c=?e(3+t_2Ts51aU1<-GdxA1XO3GlzqD017&0z0N`D`99ofqwd9@|UQ zzr6qv?hv0D0Kj!c0Cbw_MEB}0Ac-Sf(kHRkW^u5{Cc%Bw<6f1g>lCNnIS!wd&dNNm z3DwB7#bk=kcXL)%9{$B2TkoqLuZb6sw-!l`d--1b9WxaYF?<$@;4rc&3IxaVHO`Vv0$!b6Cy_dJOKi@13+7}@R=Z&G)m@qQKLU}XioDBy~N?^mX zPsXqX&deD@dws{~Pbgg(I9tF7Kl_T%`Jb&JF-7C=k<@4Y!BN**Y_3APv(_&9r8dKL zl(II@iUcM{)keOa9rPcY{z;=VyA4cq_;9S;aiF=}eYa7;z&mavS@3G={yi_II@cc8 zzmfppN{qEkY6|1F!5)#Ftyu_%S;hG1T+zA_r0%RK zt-EpT89)MgBos^~c}@161(Khq$Sk?ob-+Bj0m@~3H2St;OHN)n4^Hyo0jz`H@*^NC z^5=_(CYRS`r>MN4qvV+9(!wR{)%@+HzYDi_e**&Oc%%32{J{gyo@WlwM~MDSczQs> zt~Sq}UY{EfuHM<2JwX^Uu*qeDtoD8OY>7>ueeBK3mEJDuI)M|(N4__!A#H8W1`CvP z2fjz~b~iAauwgb^Oj0M-yz0phDmCBI26zzKgJpdyybiMnT@|SOQ|m2*It59t`Gp0q zpM?!P{5L0$iO2_I3C``WYy9b^D)h}lddx~r9eErUWvEQN9IxcRpY>Jq)6+yF==_aA^HpfoPw~tRJCOU=O7b>?)+Tui8h-o8k6!h%bEPcIpIm+DWtELJ& zJHPyowwvVuL)+X$t6L6RrbyjdB?b#tzhcI+9pf(^sxsB6ZK*Q}(q%4wgY>paVI1tP zv%UNf3=v#=ZkT33w%U01Hz)H2|F;CmLHzl*r^?k~bNq+=@d0++JpT1b%XqCT+*HeUr_+1P&OP-p|Hg{Yz>A-seq7U`66ok1nwP=Adzk`~(fF_yZ?TYn5C%fcnvSwR2TBcr;99-=n%RDbI!Uc2| zJEzaez0ZKzCQPw@%OGBU)`a36oH-yR4{1WL9H?$(2r%c{dbpkajzjZ!e5ka&k+rft zP&AG+SJvxegu?`JjFgrDLob?E$f{-0Mz6c?KKtN!~4p|=McHRX5I|j`| zaN}xxy-i=`?-$HE1r2^)p7&P?_A>7fz_Bj=f-rCDl+K+gyZnH2MsNbNHl9(NR4>lWH9Hqhw{Rx%U| zddVvOM#*sDKF<(o)f2nn-TOwXs>9H0^C!^Uh9xmIP)%gp9vjW|2 zzL@n(OTSunktBa6GHBdEeW5wFi?~5*@r{IS~b9``0$P zqvN+JkIBw#we|xmiI{YX#t@pY5Qo?ls_lSp4n^Q>XCYeKazD2_&|UAMBT0V>LNiV= zWD0foMz`T)+K%&wzFEz|CgV8d?4Qc)F1WWSzDba{7Fs#;XPZp%^}@U^S!#G-a;u{+ zsU1_1`qQYyVy?T?4uSu2ce4_lf-v6{CQrUl$c7-+yVlm*&<&vzfIvHgLaXDj=Sngo zg^+C8x%T$r`!hfrItUlC3iRMx(Zd6#(pr5b$R(l->e;v$E&Tmc?~vtl(=4D zIMc0{J1wW`oDezu=jWcFQFJ^}eU2Mh=zp_Nz54ZH9#nJ)L%e>yMP{owh^7~&#)<+3h<9+Tcb>` zm+bJ)p%zE17QGWg!#fVqDDH!`R%z>Hb*L2Ld636gGV11y(4(r7rT?-OKqfXYw)s&g zuHeyAVA)Y=$sXs%7b$xux0_SLD?BbYd019R!zP?1i_|q0G_`C;vdoT*+m3iEXh;0j z!oZibmN_k_`@&6qaLUUEG|HBF$$fs28322Qp8omu@nMCv3+byyEZchFNFnup?ObFldJKp85I#JQSPsF#>5jHnf4GJ;j&_g8Aipx~-Q*Bl>Lk+fu3Rn*0h+_=OM z5rNVi8<57is|TpL8$`!w{%d}G{G`&KIXZ&C)9o^8upc>lcAshhL~s{Ga3VzT_OHo! zhjx=>H-nr_3(HMVx4@IL;a$be=__%`6olAQlcVr-? zfFxoVeHU<4wJVp+CaH!L&!aWUL8*KU;HR(ngw76B%92l!fEhr`O7_f$&U5Gb_S z@jVl&iuT2BkePVR{}{meUGCvpUK(^8vU{*0Mw24rxllIscx`T=(Xd2|86{@W*#PHuo$@efPqEmNu*?lBHnVYKi|AsP+{}e z$rs<8AUkoNY3qFtU76pj4>toRXA|8<|H)Rqz;s0r3+%KNj@MqVU}syM?ZN(;s<6-X z+?3+?qB#aGk%;|mx_)pi{xeW6Up+??7JQD7X;#v{gwynAL%#FTjZnRv@b9=~eZgCCa2 zw$)yHR9gsGo8t6HxSBKmq1%8N;^R5QB+i_HI4F9dEs(sfP_{e~Z8ABMUGCPSHI#e7 zfc=bep~N*zVy^{Za%KP0cfUX)V78B6xNuejuTqJ$5VTS87Q6~gR>e_oAZTy3#t2<7 zd5}}Q_BgEZkl>r|1)sM!gG>a(AXRo~`NhnAspE9|*q^x?DY;^J-_iMA&{~=m4%Hlt z@b9wO#u@*#j7Hqzut{|Ga=abG=F#)p@sBy3Zhy)X;HO&q;3$EHz$gCS>-^D}S|MI8 z5A1dWN5~8z&`sD-0v{8*bdx~I9)(nyS>5h#)r<6zRZVDu?wPT&V3n%byZa=DEbFkU#6=zJE7K=Gdn1Lt^J{68pOR6Kfz+u@g(Zft+{sXO1U} z%~y=w1$3Rro??`(HBphe5p5FfTXQv}+t7Kzo+ryH?u;F^UsDPhys2BP^|>WUr=bCM+(FOw4mIEw zq%UBPV#be)3lz52Js-tjw5l_%`|odO(9HXc+gVp*^sXL@;{K>zaCbYcdsS#Ts?)It zTh2t-A*TG9cqAA-i#e@`&zgQp1E~3b#Nu0d>s>O_m&5sx zK~gZR;?!Y!!-s`lE1p#k%Bc8zF5bO{*zrr=rahPc-}6=o{hJA{AM;ZyOo@JLVPmRE z@<1hJfrd=|Y;`Ic%si=l3v0AY^Y|n$0XC665gCX@!@;M1<2bLKU{@(GZGeLt#-@6L zW3A%z%`$ceCiY~c&)uv>P5A#O!qNr|Aa9|LA<*@sQJK?WZ*!MBafQ>*C&DtGPuP`k zM)&z@nB|<;$?+{2t{by(x>8{;Dpw7-YVvxJY7M*<8o% z8d`)wsPymmS?6EABXC86kHlpKs4|9=H3ogRd1i!T*1cA z`fA43AHEM*mb5%GiFV#ibWpj}R`^fd5?5hs4KVdar(I_gqOslUq_u^SFfeWXEy#(| z?rs)-PFavyJfcTWQ$1tn4d@Sc$j^y45ROu;nhH!J1H_ea?@9*KRl=Q0925qi5dV)= zsO|=!Y}NZ2X`Y1h$|eUOEJ#jc={doDcDwnE2Qo!RIKk`CP?9+$^i3zS15nMh)uC;!59|rE0t-)p6OyFw=+kq zd{c)gO$=)XxQ`;h3;IGm&?^6yk3~eAbcD8ZayH(6j(M@NV0u8;H;9qv)WawX=)^oK z&=gRlLJIaosF8N>DYg)RH{Z@HGLG6hOiCG&B1nb)@XRi5U}SUaRmtPjW9%C&K@WACGiwI+#biA48o0m zHQqE3_)V%Iut%p7_Z@?xPzW2xmuN8y7;4YA?XHbX%Z{YYV#Fith#xf`(>ILLDc>zj zEUW^{7asa#cS~CCzBK}7SI;a&GT%bKiuuB+pn&u+U)tQNFlL=+cV>LTR`N(;`OFhg>fnI_kLh_E8 zkw{B`@g3LLoGqO6YGF5simzM!;YUZDl{A?;VIg%F^%ougdpZAhB8!Lu7%k`kLa-jV zkPzwXHE&+&dBmU^Z(oi+%pxKtJ@@xug zR<(LbThvaot=Ktx`j<}P9^li_YMccbPyW2ZZGYXMw1nbhuvBB?;nCURN-iJ)QZabM z2mLR+A^GpF=oOfh6kDSBoh3>Dlq&D;P>G1EL>`O>^J5v&#?2GoK|)s!WEdd^@g^BB zJhs@P;I=17-WZZ^H#G}RFU@_%Kn_nUU`3=y*{Dh@KC@-!gR|vDzNZ6?o;>L5pMFs; z$?fgY-$Dk>R3^$^P2R?7p+Bt?`00$^6UizB3zw z?19kiCxxj=$)V(n2TMpJ-hSp0ak+tTSJ1a-FH%!_Hc-~$Soq} z`m~T2C#$Pzv8-^aQvv8goJ(BW<2r$YeUI2ZTBbjm)MlI?+^JTV z*>xjqj4b*xW45}Jqiia^eS$pBSHQTFQ8NqnS?2;#pXXSh#~R$DeSLpDqicM7?&jmR zW}916?Ow{!0+f2G+55(mc9|A7>kA!?N5o|~oh>@r+IkUFml(m@nd`*ItN$PFs7+&Z z^{27AT`#BF_1^+V+(UB320uyg-D&GBX{==OS32B!r2jn0y@JhY^hC)LasTY|pxUMj z25e`TIea^B$eXw)e!9d_*tp)->lVEb9-j-`(>sk9do`aR&Sss|h01+`MGs$(U)PM4XVBA20Wx<$?1)oS_B#JgC<=C$p%ZnOc8^`ogEE~-&k zQ@#K`F;5+!|KcrTI0X(9g>w|>E))A+#(`&>&9VNtBPUEgvEztcUD+$CS&rs}~;`%un}fmY_^Uiv?f6bpV4DTNmbeH7=qr;toFr0M~6Pj*hk#}<~Jjwlwt|u%kJe?KJ@9XXL?|C9C4(9@3_aYU2=+X>l_U?6N#E* z7Akpp=I6(gi^Es>khY_St-nKVm#=v7=T#GeQwzU`8&=?9d3~h^c?`Dlue38^D)?*} z5PC!m^aP~8LQTrm3~_Xa)a>U<#+y7hM?Izz>93(OJ_94X1ZNHZfuA9m4nuiT!!~+h zXRBqSqa~~!G3F86)yzI~GVgQ%2r(Mfm|#r#0{r?3B-w-B0csOBAE|A?ggW!!uQLYJ z7FNW~NJ9uOq~M&f7VmcV|Us=NO@Pws+cvNCHhM1cYJnR9`A* z?+c9r4|ccyM;@`kh|OgIzRO69hCUkL-+5>>m^A*iSbv~1Y6R(u1L0MZ&P{;xAQZ%w zo&h?&>xfn(vGU_)no~w|=c1sX64}m8-~8xm&IP&#W9Fiu0YYp0MEFW6Gh$8c2ge7w z)fnuvCNl6D;Flx6j=HA2d0IlN_jzR!A<5$FYM_1JUcv|Xqj-b8$KvZ^grBvIw$f|i}MJ7DSp^MxO2JeLAz%KG})O{DyNj_5e^DAth!FnV>caV-o z_p{0N7<1W1(v1Rt0r|6yciAdbIhKxc`NVLVcqWjR1bCo5Bj5GhQR%oz+T@lM%$VXz zxw^UU+?U&MT6m)^X5rY<=tbU%7vskrl(zbj(hs;a4OpW5HnAZIJc{=^4;!qw&=%-G zL$-zLD-~Zc#$%6kgwR{*{j;^Qk3m5s&xy!-tr^Yy`~Zs|RBSiY2nFYKTfBG}6cI(} zh^Wpl_JBfk>V4czI<_YYD~kkq@u05Y7ltcmV2&WwOsHkn&n= zuG^JOL~Vw%Ub(o>bV6m(HAARDda?54kVEm!mCbJFdnFbl^qBpZ?<5|Z7qnxolk*g3 z5w(sWwD6K*t_1jB(PR_0xFcdWC=&gk*97;Zx1J6H9GRYI4z-xAh2KAZ2XlWyT@ARr z#~phLI^UO&h=cHZV1!)KEb{}!R2F~p+W-wdm9=v2*@|~$QVEzFu-h{GKX1XJ0ISZmD>APR%xz5$+5y#km!&Y1 z^av(5PC?#&6@?q%H)faocq8fEPumf4ZIt9V)KHP9)a>rjizJULvho>I*@a?{JV#YK zz=buMUgWGDdrAFKAM`5QnX_MI)@i;xMhvi6hos(HyPoZRoturqV}EcQrw}(pncSGR z#hur6dE1H!7`%s&`=ky(o%kzCAHHQM zX?Fe+6%FXh(miZU(;OHpY}xoBkRvYZr;$xt(O8@|Hl%wn+4x-hUC-AZ^Wh`J)CymK zYS{x@$-CQ@Wpr5d+c>!;Imm+B==z^KBVc|~wZqYvdZcTVW=&N>;t^*Nw@*mUQYD5M zqIBPgC`nF4Xg`MI;z3=%jvb{4&J#ySc6g#pRNYAOMZRMWY$o3eJskm@@1$ z!T5}3n-ofj*w1*YeKyJ6&Z~*upZnLmA@?VL+sC@t4P-)Kxs9aO<;_)-PE12mYd!aS z`EK@JRK~enQc`m?DSUyXP0scvsq6SHI{?@BSKz+Nhc2UXIQFPu!YmBMVbYLOW~OJ_ ziBcv6o{8o4>=#a8x~m6ASy^pyY_kAqlP@B8^%*>}IjKbu_XZ4%jR49{!wgPGx3R<5rpxUI6=V;hx^(u%9t5<_{P_3HoXb7w4K6KU(qx^u zB}~8hA>}6Vke|-?&-w++yHkr$qNl-7+8QgIwNYbNxzpI`9se-3^OSUh7^~gM_`U&| zUaYb7CyOYpdz;L-Y?~>oVahH244M~8z5hGT;vD0hh+=h5j zw`U&Uf?ay)ln%wx-EaJW} z4CM96<*co4rz42w^b@_@%| zp_;Pb5gUkrt)1j53M%@O)H>bvJzB+YxAV_&^8}@SJihOcE+6L7<)u&g6H1-jm+A8_ zb{aW6ejMD#;uXRon%R#PeN4y5RBxpn^3!%5B- zYe_|+1%0Cghg=^ZF_b{gZZ_@k+tNJyg6Hf2{f`ZmV%6e3Kc2iieC9;7k&{YNev-h6 zEb}~?j{?}rWmOr7ul3yhrP{PVe`Uz>Sy>S357 z)}I1;m7|;+aEn_^-4=*45YW0Z8Y;8=y>w$NxCL}>e0t!%0PPK{@r#BuZ*3!OX;UN+TLRK{E+1Y+ zI#7_H&+;Eq&?$r1HiLU?=Z(ssjAaqeYsNAj_;5TNK4PE(7qdm{MENsFapPtHP9$4? zf=j95!Dk>Rp@psyI?fZl=bVVv`&`t0=_XxN(52kQuh6tln5o9aCRu!h|Evbz8`;uT zgoo0~MR>pGBOm>X9|z!@zde9^`-lZYhaA|~<11ZO1$~!-C8#UiMORR_#(NC@a%vSp zNRtQLM}~gNbM9j|E?fXb#DojFf``bY3c^2fYJa~N0DnQJ%F>)YPbbuUF@Ukv2uPa8 zPzw(KqOr3mzO(Gi-Ah93T-{68*u}e-PNGgtfTsd2z>s;h2{tZQ;s8qRZD=^@ zX>4db`tomRfO5-H_P|pHs5SL2g1J}nL-_mLl3}M{a|e{^@vi^-UAXnC#Rf2Ph%%u} zoOd>-rYL<#hwcbCIo^>0CHgir8dxSvIp0ho%;F^F45YNe69vGg`o+NyQx(J#EwR>b zMs6h|aw#%OF;9yU{aN9@SW3!_PX!**5g_#xkw>!{j>B_UIfZ%n@r4`h=2329XOJ;b z*nKy6(R)gI@F2<>4T3RZCz~Xap3!l{gkcpttPyp@H`^g)Iep(<1D1KDfdz)5r->K! zQ%fq!cfEqpR&cAUD~)vPl;4bq$MQImxX3=%n2kElM$X+0Wz0d8=27{r&amYr5n7RC zkI7i@l7&ycxMsHh-2Jm~+CIv|kM{!wmU!@0CkFfP-GBHMq-LWEl!7dXHs;7o;RJCO zx;mQfQO5q0Q%n3kV!AnFu z{@KvtoP(N=;%X$Voyoq3Crbn%Bufp++NCPmSwrl`K9Sh>kdj;Mj8)NR1QKtjw zuK^Y@V!PASi^QjZ@g9Za=|mC|&EDQfe?tU=SLbJx&e^t8GBY33maD9~?>IGFM{!rX zc&pq5E5+U^ga_-S`cmDdG#WzTN^1dEo4EgwfV340{yz-o_8P46EY_B4^IC zhdncIIedfL3=++cKkz9QtcbQZ7(koUROMkjD8EyQm1KvqQb3#&EAvC*kn0L6wG5;L z_O`r)3pM_|5S(9;y9hJG2A+z|stigS4_v2C4NqthsNi#O|MRP62?(5NT0N!KvoEe) zg7|NV`iED6_)e|`X0lEqIxHJBzldRK_905|B{E7}3cL8Y?uhuCtRzn!lfASo$b-Fv z>zNKfq*=*?N{qcSVngUR;`2iSKMGJ^-eeFRr3A8w&Qf>x9?^Jqtoe>=vF|R05T+rw zd6CQTsMPe?hx<@1-~UDuo>W>1>o!FcK}Aj=UN@1}%5KmKkmf~`3P zZvbAwfJ`01DPP3( z3GW0ssuX@%-Gwva)tMJx4kMX#;vH!1CQyi&=)lm-68+FEHffI^y)#6n5*YTzpp6NF zvaGRw{U9tx%d3BQQTN4~bp4i>yVL|5!0N%_JlXnMnZx5E=q$Xl`%p~Nuep+5(d^xS z3*LjV9Av|4U;4rR#fhu_$D)ue`)CVWHem*K2FD-Q=^7AVC_Bmo%kPvyd@7ZcMf8-a z&LYZadRrW;y#@#e72*#|@3GN?^<{!%ZEXuy5g{;10kX?TqVc1T3VLp6o3HqWRa^iW zr14Im3xephGDV{EDTFhh7cx~Q+%9o}nHFgbV9Tubos!8za=6gr`U4~MikS)rj?6`9 z-+c`%gBX_~1|}1%d{G~tke()m&H@N>w578$MaJhjcm4#zyDKWa^CIQKX#5&KJfVuP zPwkTBcZE6EpN-|$bBm-z*p67l+oi(9qsIU%Y|{^kbaRKUWpPsdD%8{vn3SE>_uKyj z*rG85q~V)dMw9Z6Lejv*{k`8t8Wdv(;FQ0!jbXd1Cc7Dcd2}wauXiuWhwSar zN+TWrC@p;8!wV!qOF?WzG$ObM=8`c<56~U}DN>=%7_gu|eNT{dPSr@369Vo`0%Dr@ z;^f^QR83_lb?2|tEF)=*;CyxDmiWkpy{L~I$g%y~oFL-_fiIz(%Uh?J`3+O%K_Oy; z+=RyK8+%Zn9>l%sEO8(p9ZMyEZN&42Iig7i#rOmq6lW*LtCtKf>7!D%(uo)rI^?{E z9YTFfMyO9Y0IJ?5?r^j}8l#J%L^zO&zPy3@$O@0M4<5%4G9PywQp)o?8K`|MaT*IaXRiAaoi zap_2m99>R`9|w1P0c;``eiO1Bd$96#kn`c*hr<_$DuZCu3eID{Pavy@)>8+V+o&9Y zI*5BDgE=++hM9~cFZ9>*R#j*}#EO#l{ zlWcC3Wqo2wjd`0Jf0Ts-e>F5XYwEhLfMX@BMoa~a!4?Kp56wHL(DYS6Q$$;lh31K) z?>!2H)HLWbVP!WTJp_fTb|LJ8LM8Z%HpE3VmDYG8q@90+td;QkI|i`X@jS4H!dX~Z zqvq*C4Yiqxa4_yLG_;^P)D{_I|1=rQ`}8%i1n&sIH{5cDCkIPCv;z5P)BYVH5ZNNZI|SQh#0Pa5iL&}L zw{PI6alwWRK>K(LHu6Rp;wTgGj|QPA9cb`vZAp@+Sr22K8kZeWz!k`l4ee+`Raljz zC-L-oI=Obq8K@48fN2SY23h&5I9Q=Qgh`_|pXsB`Pr->W*D0ckr$j``+(D#A1a3NN^O&oleiFgZP7*IrIIKIxp`MoI`fjh*vOt@A4^X>ko&bh_QDe z2!8;|wlA{C!-4KQiMJ1@BRnF^_bCvxeIPWEw*uh}ZEDq>8QuM_BZNPrVZ&(z!-jh) znMeB0eyZjNDvHFp?>Q3PS()w2?~gu=F+PdVabn8pZqGAlMD>p)e)8Y$|NA>+WQgvk zY~w<_iq!_!k(#)m_V8LO_ifENd;*TA#HMI{7>_il#A~3X&V}ZNiPmZ^U#Bo-mBnHZ z7Hfun58i#JdB|I+z(V(w{I-JK%!+n%GI(O8jQzcZ{Q#8X0LqP)>8NP+PYgHJN=bW-9n$ntq1qp;qVN_2!gZ3 z^p*MQx4=ndgL&a9;o6fJ39`;U0^!pzTDivH2h87kQJ6cVY6o39fsjlR=)u4L40|gP zut5%!_Dk!osp;@cUj#F-NTX*iL-!$1bt2fVYhWYQ3?W87gYu$57d;o8t}lew)efWi zr-E1b*Fv-8eP~h)Y>5@D2LU1!iENR0Io36HgPKmZmzxqx9#&!XX zZ46=uW0n>uGD>WYLI<=8dewNl!zcvWjUyqbAw<9{{Q=A;*kX*40S1;VJ)tb@wDR13 zu77Mhy$B3T9DK`nr2F-w%+43KR2}LHRkiXog(Ts>ekTZ7nEw3tQk&6N;*e@#2KwHl zD$tD2cOg)*-Qh^OKdb|G@JZnL!%UY(8#b4jB`4Hk1?<`(cJBi|f|M<&2rRS!b0$(X z?5U|9JRb!=jN)iqWdJfSDKy}nvkgLr++M(bmI7ry)Hz8u1WKo`9{V+fcK1U_Ka`@N zdmTApXych$1gV2Mn1RHThdlC@>&{w@Dvts6=`8fya@lyL!%KFek(q3P%_Q{*WaUPa zU#<6>v4gXZH&3?t`WTwVge)aT$ls9}5Zm2!=Le+Qm9Q35$ z_NOF8rJNq`j@4f&GR;|U7nfCu&_?$L!+NK$EvFKdDp6*C z^aN$-=?f-PXEBe55#d#m(mzqvC>L6}rrF~&ksuz*nrkm-WS)XN#U9iFuHzlT46It|0>X6>jK{`F#reHjPv_xVzOZjyFe>Lmu=Jfb(f)EdD;US>xpbbT1C@>XO>H=FnDn zOJW=6)1Y)%E==hH*i0>LXpQCouipzJM8@xB2N08m0whNwxw1X$nh39_Lw=6QH^A&a z3}ItO80sR_wQ5n?3XMdOA~@LP7SvYEXNa0;RdpQc5Keg7B(&*#k|_)i3%ip?%E$}+ zoz~iqKzFDjv*{QU%u=$&skiM-$^VL|nHGi52Y7A*h4ntkzux zQSRhmrE>+;OHd?@nvhliXIn&-&q;7Vwoq1rg4S(0q%26BWzwLzmV4(5MLPb;L3-=qTfTM!s| zs9%@Z<6)FxH5=o|MF%9eLF%SVM<)z8c4~~dD}?&CBG@+~ z?mIRpzovHE_=P%-hatdeZlsih0y_dijIN|6-xBwu_zTM7zEC(5F0-9_`wR9;(NBs= zhyVi-J*PTWNs7tO6Y1JOVcich<O8Hp8?+m|$X2Oac5oro0LIqt=t z#JDI`we6Ithh||cHW0c@s>Qb)l(yjLfIQ~>i&oM7iaPduKrd<`W+oG-vbhOdzAFbi z4D)z-H;&^Q!ona=PvRgZz2zBn`yg7o4W^63pNgL|fPefog|L&YTNj`+x2yMl=z~y) z|6sKJi}@ddx6ADt#RrPAz+S0C52_J|+fFEjpy7R?wT&5$ho3iI^Dbl<1azdcqK?Rw znI1XVmIlof&rM;!-U^wg)fdVt zCYmFxmHT@ukb|_@^d$#=#-nL^4#eH@)@Z1p3qpr;ax3PMr;yGeFVHI06YKBE_!!?y z=~5aI7EgHw_fRblBrr%l%dpYYmTxr)}~ z-JixoRd#K~Tz1nir1BMl5ge#jQJddUWYhU^m#;vGnjFF#QN7gKzAKc-c zOClseUT3-27?@}`Q|3byPVaqc?Z-r(izmyGQ|(7M^TQ8$JToLbtlOjHEI+RhrT_DT z=Vp!C*3YVm!Gv3tSHhEeq;sNm{>YV*WB1fKj^aomAghtQPT}`YIbJH2b^?7#r(Hy+ zgk~XE?9bzjj?x;)q(k<4yG~3j4TTR|>kBlXP~%&^z)$bAdfD>#J;^ujd$GN)#mo9F zF^(WdBsbd14?n+0cz6hW_P;-8N^%vAsR`7s17kp>kxUcvIU`6I1JCI}6FKtSlhkDq0Fg zXcZ9Yhtia|wKya3HGD>TVBoLqX~fi&7)$zjGKz!M3QrQiJWL-D9uEDAgdj6A^Q1ry z>brw|Q$t(nqk$ZYsQ|&c&w5XD0%^|W8GuHCi0-y}+4*iG-;Skf2xEEM5=LGwf-=o-f-2K`^qz|v8xj4`_F!?M`@S9dc7>Ap z9Ra(Y@gnFl;wYN!5vF#ZU9HdspIuxnfW=>$7C8FSJx(`y_-BrLem(EYr&C6dtQd*Z zZ?)(|*OpEY>Q2v`!M$tA!XecsnHB&AdqIFmD7SaxTY2r-wMnF31gw<251j<~zn;dK zbw4R+Pp!X4bZ>F^Li8`Z?e*rrg;d4TSS$#Y25i3709e{8+}hl#OR0a}*aeZicHR{I zFkHMbd6$VeRoRXV1JW`=s>{<$Tv$FRuv7D+=E}~A_xNqtei#2w*rJ7 z`cR54)QAcN(VP@<$f(_u{m(eg;3kuj$O=tawV92u0c?inqQ4p*aBiSQ*S@j{7M=k% zsr_{Dw3@{-! z(+VRK(g?^an2Y+;2TqAT!l!M93}NOm7XQFh@Te49$oRUjP%z1(`v7D46bW-Ae6pkhGQ3Q(5XaD-P_C z{ZU>wq1Is6Bm9cSeW`Ni?H4 ze_nL`?L}APp7GCipTF=f9bb5|-lj%^Y%OgkLtj~mjr^95MV&YS=g}v11`t+n?q-(U z&!DTy2^87lYL$|0HDT6(i5{^1cVle!a*B}V3;rM90~(7LkVHFyp+X&o1Ik$Fw_b=vogy} zw|6$aKRRtzC_Y6-Bq`9Up~08%p2m9@2V?Z^_w(%ED|g`4uWNTN&PJ<+51S+^MF9Ur zfTG-XpoT8VS#DF8JFl;BZ>?(@rBySdS@bHqq&dS$l+FZuSPKOgL#+iSS0gs6s#dc| zhrchcweE|U|6X-exhF$n`75Y%R0!BTtxNjQa=x2<2%}SkkII`e)EwAP{@Z>u|| zaOLRR7>FZ5o)w`Pe_r~D`uQIb6(mfUm}{pYVJMaLz5R_gT1{X*X@%herbu{` z|L*yu*-oymyFEAS73E}}qdjInRE zN0d=T{QCxA+Ae2^ZuQP^4@#Bs6|MEpjeLLf3{WdS_1T5p5gPV!O}?boq&LEY_AN>Dcky1vRgDU(r-q?KAjC_N|xjplVG8YT_=6ptNAz^*iQF< ze$e4|8~D#*GeHkWLY41cjp#3pMtS4olh@y8TEDn6!W}qPAN9s4c@9)w55%P7m8Ln5 zN-0b-v6jA>&lPgnXuQ=Y2%Fyj?@ix-NdTQ@^FrlfplqEm-6={2PxK6O|Il{u6eLIj zvMF}^)_2>H5bi;RU&CrF<8EG4Pt-M@74S@`n{1niw(ljOT^Lpt;5j@boqck;AI%K<5Ulv>n`)atkt( zLX<39{aR|I@sGSpE<95LXSaH>^2mbt>+sXs-xTHiTlbYamNQYyF=#Q+9zY~fex76# zlZkkBkJqNdo+=zkQ!ClEH)`FNnz-NaWJt3l-WYa@X|^gOueVY?5Y@sJN$UxJq}_IY zEvuos)hEc`w%9p&y4oi2<6jqtzO1+Qnxsathky&4EkuhfuK^~yR-x`1L5eE*ogy-p zX*az(v2T2+vmL>3D5Q;Xo);bdeEM9qDH2 z`gdOhJn4`tze=?Ct9$cCB|Qoio(LWEo&@A0Xmh4!~h;Ivz8Rz3|z|%ld1|ZR_A&QHg_)2lC3KIX&EVtdQ zF(v4adNfk+qZ`pdc7oPo;`gWQ#sOilwb~T87-cAgYo=2*oxl`6W0skFyXs!yf=EPd zXWCWiye^Xt!R!pKV8bs%0+f(bSTzg*5 zWYbX14Uq3YQI@i!a`~pbta#4EF=yr2!D|nlpw*^03z-Gcr2^wVmS=>0BF|0?r0FDh zkqGcDRJeb>MJ`MNO(2aQpF;hP6*!aWa)9MP7!2vav47Hm6ME1OXM@UqbP-yorcPb+ zA+i|$O>^@3?%Kcwfyb7bBf`*mJO#H;B#z`s)4Vt-^7=0z5;aHzFLkZ2EnS(}^*9z9 zrr_@xjLu;T2xx$vh{B;Iz41@nd_(f;bGR9R5)s`8@8=uJKzue2Y{Z${3o_+5p_K~m zV;Iw~CDp8Dh--S8rYH);lGM+=9H&PX>vaJnt*fta)E%8zgL8l|6`|9VSbPlWBf?Jb zR$6(|cm$TrW}Da}?aw`>t& z?-&vAuZ5(ZfZ$aJiK5PkwiVR6W}%S|Nw-jlxH!Z>P1XiL_j3`~ZjoQJ?bthnAT@nm&COe7|9N*wPht=OTdC|s| z4M24;v`38915T{rjA5N0fk+iX;ANr(NjSe*`r~&>-Ve;A9-xKml%?(4f_}bH8&WZa zlKM1fC^&V>=us&j)45iva6aiiLZdq6q>7%MR=sx!s2~sa0-+46kPnZ&1{bX?hXBPh zYm?CoHaH8QYaUxrFe3x4OqyDNd&5ovm)Nf8WfNkN#n}Cto7;H!z2I>P)!8Us_tF$?)&Wh8!qCo zQ>2hn&+>kl^7nsbB!WmY-ue);D;tK%KlWY>#i1R$0~3d4U7iZUnU4r?tBx@`1fK(F z*U~Z^CUsWHKKRHB=p#vd9xw;p0rDQAT0wEq9}q#))0l@7k_w|%bp>3|G3Lma#D71N z#X6u6cxk35LA0FFFC)h6ZZ^rWG(JF4v04DAKI0szk>TmP32Q)dO;1ai!suElghB^k zJW0d@=6JYqL0-$-rVGq!A&Y?|JbL6aDTbI}o;BVX0Enr&YQk@C=xL1!`96fztG#<3 zN531y&o#8$me zLWcTk{`2>=e(Drf*HDahaFj`a-=b8EicHn+83pimRXrEw|N93ZAjeU?52~#1`=fEN z_;>gt88r?BC`2cP2my=dx}=%lM9QYNI@{Nwdk7Qzi?mL)C7%%r<4PoGpR@;=drvEu z+$;Qe^y~%*D>J^W*^u%KI#_O0b7edMA1QmF(T@bTAT}qF)ALiNc=Yc`L!ZG&879;q zY#-D5Gd+;uV2tO`FTDu>NIC?M$taXZi$Z}GB^k(5T@#=?)wtjYRotF!45O2$Fe0tf zmS_9lzd>2jg1RR$dYzg8*_+Y}wx&^PeW5!Wf=pm%is%1Ahe}E= zk2Jjz>XUDVa){|MF%vj#0Wc~E>LGsn^nzI_u*QN4e}4!Ulc)3+Q_2Rz~sp5RiNDqj`kK>9%EPu`Ev+%htjlVfq5UNz~lMM9vHSUR395g zvfZIc$dT&ke+>yHTp(%qC)D)dW*61K6d7$w*f7apD-QSz8_fQn;;FcL2tpCr*W+2f zbzUKmZZv2p6Rsb7vxtrFIG32KJ*a1+r89E<=E)4XDp1g+JmInTH!TN?_I^hj^1 znip}^p(3H59H!EKj_Vji!aB5lWuU!?j6|p!ZJ&VK&V~??^!`!Gxa*$Qpp@59j$yYT zpINVko?uFFAaX8H0EEzW4Q@zcV+09 zW=@gWW~mE|JEdQL$FH8+UHEnY1r1!Lq`B9B-nS_YBGd@-SShv?^JI zkTp~UlPbD?M5^(a&w1D^cbonTnjJWj)l09b4Cx4~ zTKj?3=Lw(eU#<_uQN#5l0&L|gue2V(+TI%EQ#>5C=dkT<$=z9EHQRj~D_HEG7&yp5 zBxoM}AM6&67T;|^*x_akA5AfNB?xVW(FPc1QqHpjn#0%p<8+z{oQSCCD2hOH;iH(m zID7TZLv(jTsYJ=Yfucs`U~^xYT_fLO(mwgqst!S-vo6|fA}Nou3vilHxLD5kG9~KO z!-J`#no8nsUXniEInEkY$5B5^kr=n9Om)>ZwU!KzJT=JN6@bdI9?6^t9o|Yey%!Gg zE~G8_Xp=`^*z`Rxy_@y~Q#+|vLxsa{oPEfW`AXtfoTltLW>V*p=91^GbHG7fJMfO| zbef98Ty%1Zd8>oYKI1n{wZkjb_i$)s zO4pW0?=OuYm{~H4qtfzUO!po8KWniI)`WmL#wZKuSN%t^_;6Ik+x*oi`omg{NH$yn z{pLF3RSTMFh(G@9na5CWsS(+lO#EY_c&rAsz=C$xfH=j{94XX=sUvi4tgCdLZ%7PC z4oDBk4AAgDOtMVWfkfFE86P{CKNc3!W1slJvShgev~B~T!bJT=A9M0bC(_3T;mLph zj>r5pQ4;!{*?)fb75wn>W6+(;am6sxUm(372r|{seQ$BU_kC=*WCxP0K(yOMkXxP< znFjBlhiZ26yfExx7l`&Y0d2vsLPTgB9|DrBMRl$~qfuOQ0C+nFQMRuGR_;O7WZ_kh z;rK80{QkwxzP5S91XLj;@gH2*1}oZquqwA9W}%u;hbKi`R{_rPV+cRF*0!(3SqbfD z6{mb&8;FgiArHrQcP-*$1q8HkQxqs;#}_LXbb_iy?|+`zoWa}H{!4J)`ZgOETf@n< zh3NH*b8@shM+(8ktD|z}yR#7N*x(Bh<7?!>=X7!RMak-bC0Ue~-lK=kr}hDOq|!0`4%{%gxPknMY3bcvNcb89>3if= z!DRk0k$n&;qJWE_bq|fWsaZwZf_vOneyxk zaD4ykA)}x~bh*FSvT|iR6bJhq29Obts0f1hOka&fSe;STb~T2DUIxXNK=!4_WGqB) z9uFScP#7<-tv`giJ z6cAkPsQX!lS44ee;sj-Z3E|)P+m~W9Mks{-TKw`U2kz0q1%6M;=zs{zP9fjF&o|EQ zVl+awu&@}y8#v7oTa=K+mC@)0QfJhGU;JGdCtY-X1b7Lm>kJkkIHLn*#2Wzwh&c%| z$l@cvX{^p>Y4*&1pF}VmAR_kx%^eBX3~U*KTjlCe0V#Kanw)LTQO;k41JH}#g$vCw z{DM}ZXE+}`pHFQ0#~v4|N))A>?g?cPHk_2@cJdE3cbzg?7=1AFgyF6CgPBcos@EY| zzQOo@z6ugW^M#P=KvLERw=hr~5VWa<1pu_5u^E0*-s&zo6*IZpFu}64n;bOu2U@NlW2FErTRp$nZ0}&Y&TtXt`YFo##_-CjH-U}@RiBL^m zT)A4krIE+Ys+CGR1{cw6EW)QSo7(og`U=`R>|ybt6O0`jC5d zh$`c0v?r%6fkl=JG%sLyHV@A`2fWa!Bs&+*0@oWkFhIz&12i`sA<*>)rkT62WbA*e zmJH?iI*<+-G&=}uj)Y{LfM%rmfaTV0aoHkBoSPTg4uysaKuy!6zYmMJPEn3p>iZdM;> zB~nqhelgRxK%miWTZcOFw#;)#BI`kj;(!wF?_@&{xwF3#FyJ2M*{;o&E{=T4X?)S~ zEU4(whF;Iu90E~ZK9x6A(7SRMp%KwaG3BTe4}$0~x5{1DOIcE6W7UJZK{0lGXZRl6 zOqo4=zV;p}@uJko4H8#xZeWqQ*NEl9;I4*5aFY8a3Q)&U61)fDeW=mtl>bKMs*NLpv+!tayLKL!X$*4-|xc<&PwO?UZ73t!`*Ja zK-in)2Hz^7p9M;4WAcW+;m!BI1kLF~I5ADybmwE^a?7?j097|QjMgfssw$v49`Rwy zyxu~{p2RE-G=~zn)C0l+D;gktirY?iHs}&# zAMXEmguPTadk|lXQWHa5d<$etit3uz_O?4l#-qjS4I)HN(YRc>s7oVPY{3V#HN}7V- zWU&J|raFsHVpxUP1xC+_8A z5f`JqnL^{X3wVS?aFNc=nLNPsHl=YeHLrq~UjgtMNlSh6Rn)vY(**P$go_59eoR)H zlx6?m=r7h4QPIj(c3Eo3d@Zn=Pa*0i<#+BX2Y}0~028}3MX%p-vji+=7=S^4x83g@ zvF%_+uOVm2q6t}IpThH{lkOWgw1906I*y?`IvQMNe+jM*@~=(i8xelDjZn*2)>w55 zw5r-S{4P3PwK3H8xE5D`K9GO8>arNRDi@JiHh}m~i72N%hq3p^{sABPzl1%}<_>$J z1}kSqW!HHZZiy2#(~trXA{d2WjH0!&MTmdYR$cvoIrJ;k1V%vO`D^XR8Y$*z`ym#h z{=J{QRs%FQQ|*%pq-5Xl@bB$R%Gm7Q=&60Z*gC!dRc<-Ar4ZCn{MKS1%7*~RFAaz@ zfcRI?M|*J*G*`woMNxiIdPD^%K09G5Uj{(u0ac#hrY6BUsOyYcc^!p-t>GZ|uLcNG z6X=)dA`HSaoR`3&zDrH;Lf07yEwAhDZ>he?DjygxuRlJt?`ZzxQS?!(wR&AA7PtNN zt0VKN`@H+>(5w|@M6~}CPxLnfTw_Qw73BzJ!sXRz;7gjag)<$w{t|k6vG^s4qU)QE zK;_hj{q+Tb*Wdb?=#d>Oyh?zV63bZd-$Dd7Xw?m*`;t z5!9g0E}jc*9TNi&fXTDH6=?v|`u1SUQeD#2>nnq!G%PN`JCO&9@<49Xb{EDl-`{Z6)K#QL0Mu{83P8G|o*Sg6 zji*vTXJPUeu;cp&&58_eqMY*^IpyJ!HdiE3CSue5u0qtLx_vKs_s%u}_F)(`0PZ&l z$0q2ZZm%JFTGBoR8|zk)r}w{mv)3IOIH#sk`!UHRB!$D_r`}@CE%y5Os-cGM?aBpL z_62t*8Vqy!5yP+hgF3@;+4UIZ+CN-?agApNvYtUsz>)-M6&7}9XqN3EDi@&^eRNZu z#W^Ht*I~AaVYoe!Eig<~i+{nWe+Zf(3klbtf-Tex;+qSq87f&T#9Tou`#)d0{o$}hTY`m8-u#n*If1$%cSp0qp@Jck{SINNj`ms%+ld1XJIlT^Fj~J| zW_g6~)p-!ajsWm=Vg?k>o7NZ05oabWOyz}-tn;O3M3gG_6DqzTYggy2`WKY0-1*o9 zYtvE*r9QIXAdoY@Z`_gMZ>SduP`@lne<*nyRE+r`cYgu!vH+5X7gkyLD=?P-LXlRr z?yWVk{sr+C2SB@~$wun@eG#W^v>~MNUMt)#T?yPYp@pZK{PIMAM;%0-bpTdT)&cyo z?LTl`=}(?r`;cdsi<#ov9$(!ou4YBw1K4v8?aLb$Wg z(DD#?S5F*T?t?5*7*M7a#7V1oE2+^p+7hx5&@v~;o366ZnXUMJb!fdwx0J3@7v4?( zToR$Bx6y2*`+{xg21Gn~;l*H{V`Itc=K=j#`Av9Xd%g4tJL+_K~YSM`*NmE zPnE0lZYyW1*cSz4CzWU#R2XBSTeluUA$_!Ydmp>0kg^KfetW;;)^RKMx($@@`bk>y zA$G&V_hNbVAOoT?`B?Z`F4WOdVJfLnJNhzChZIUoX)nWN7p_(gp?!&**>@rg>$(l7 z>|3!fK%0dwf2^zF1v826*8Vgij^%8N`n)-PuHXJ$x{B;VG4Yo>bMhN8fcBFicBC6b z_>AbC;eXy)3DDvOYMiT>nn*_I_?pxv$1&)&&TbxdxU#9de?TglosJ_+RM0 zEl1729}xWK0Y6~SB_PT}MXqIi&8@kENTkvf=QV*@f09YeYT|yw(C#OiJz{hl4*wiA z5W@Id5y>G>A~*{IXED1FbMIlP+V@CZr)Z|ob!F&YM!MyXmA&F22cPfM=#-tA{R;q2 z@Immir4zwfx@d2uN1j$?e1mjc0N#tzUHH7uC)s%WGyA#-hiHnu!=|cX zLbuz@*`r1N{z^mlzM@2t2$!XUY!PZ>WsT6r#Tdc7GQL6goh*W+{mq3!UjK7EeYt}< zg1;({FV3EA{rs8f^honM{pdng=eTB@S(Z+l{wg*6)8DsfA+BYMi`sp0apS?bYOywB z_e`pNZ|3&+;_Qae!)+?K_uy8qCfr=l4Kfy5=gpy@W;-dbUA*#Eh>3WKJ2-0ydVCx8m)tHivLErEV=NUU4c3J+7 z$GHQ=j{`|HvgC6tblh4EY<6e@cl+1J2losrb@K21X7i~H@{MblON6wa%N~fwh)!+x z^?C@PZFzhbohiLVcc;#>t8G*L4qLpCOs2+daOd&HL^@{+g}3Jy^B7?i)6c9kai?^f_WA zf!xP^WP*2RCq-akXW1&iSH{P3$$x=7LyT{=BQ1C9r0R=O-6nse=?4UJh0q>w^Wq0= z^64&SknCG_fRf|tUyU(myj=Vr%)CV>tP2>*FDIae`4Xb<+U)2Bl?kB5ce1Kc?JO_4 zzp&t?B#!NeJCEq)VyObFeoMr-{Ky$DT-WuD7T@8wd|pO=taYPtYLg?j*rMMxf5)k| z)6IJ=S8*YB#9e$SY`_HE>n&H{T0RVZqW??Cm$O~TNIpm;9!28DgPD%A<;`w(mJy-m z+6(nRs#Ty5zl*kwCXMhh^@D`-q!tX zuI1JlrYpFfo>eWp*Ry%#<0E&Mk2{esYk90Yw3nC%;mVf1e$3-`mbG@DBiR^4?3?%v z-Jw5O4D(ihm<_cy_G?*>dT-8nc2GABNsCHLb|zIxc0xjwMxkyFIjd=0rz~V4;Fw6n z%M!)$&(I5+YZc$u)`(3euDavdsLeBEkk%@hkx#|>`S>njm`B|-a1da={(RY;JiDoX z9|^sb<2_UPIzy;{R;l}_&?-w~>5cmDwG&KDrE8bXB5a-0w2Rb=<@O#YK+So7#3$?YH(7$ViUC$3>vv>>U|+J1PL+zU1W3o6dA?uBvQzPcQH9j%FlE^XeY*>Q#3{&1SQLdK!m67)3}Q4Ah-1}%no#mkM&IDIt2<;57L`iaqbT>osYDf zlgB^dxc$tVw0{D6Y0ckT;9y)ywvFjX?-3d$k8m)Z#rJv;oW*^y@9VzNg2+#^sy)#F zcM0?0cM^=IhjUe#*9J{HD9?K3Lv) zhbAtOS0;$Ily`G{uxEMk%f)TMmi6F;O}D`bDh$&C*Ze`GB~H|;DCE;8!M1^ps(_Z) z_dCoTPWzA?Ph=nZEj2Q4Kjfz6l0OvPq80&@jalD@{-{@Q2aE*tiqtkY`!%au32s!i7&mRB2jl4G_T3BN@oBlkoj^`=OE{odnBiAV|X`Y5E988Hl?A>k2hDI>$!B%kPE8&<8#j5*EF3E!8f1P^n8Es;}b1S zwWI&%kqt5Y`F-7CGixU(wj4IUjOxUFO<=##)O4Arjles4&FbZ2!L|r1ik;aYlJcdZ zy@V{ZKrzj5J$=&|QYHm2GlItdyEOa{cgk;mq^oDSE6=D(d*+){{M6$gx{R6pNl`2V zRV>{@GE-w`-{uzv{&|{=gv4|H#2RmcM;3Z#NRH_Rnadm$c|Y`l*Pg8(7#J|0nXSD_ zWT8Cw*d)Pv;1Pq3Yc*)Fjx91 z!ms_GRlz4=yjMg@MH$1AmF}9n-Q%^uvzUx$Xqj8HbfT@VKUF^AI+GJ@UMwJfreY>o z+0D&uczpc!*-xB|#5L#pqOPET(c>x*19~H}e%ftxCOj}xABg(h?;h-aBl7H;#q+Hy z<#4O#E!`p{$IxF2xNN-VXJ#eFQ5kOO^4N(s|B+|lD`~01s?+?-;=XjzWzC1mAz7LX z3(sHaAXyMB$i=*&d$`sY%*<@O?NqzrMLbz*iSF@Ew~m>)!O(fdvdGr;{Zctf;l3{} zRIZ!PY68hQT(iBNyAiGL%X-(yMXBqbYJ|q%gAEV@7llUUCx{)(fd5~l3&|3^VgH&a zowd(&rUa#On1l}6Ug`1)Px=M}g60|q^GJP_{I)iFBNI>VZtT(wNp}|632#n1@w#`PLr<6n zYvk~_Pa}vh%MIs0RE!3g=g_g>OiqSc%Dg-Mc_( zp}XyQs`d@twd0jVrvVYm=Xc+$aBKw8Ge_J^FC1FJ;H*W|$@J&k?}4--y``mPo=ZLF zao=O7Y2@M#FWl%c*#GU5+g^GtLR{mrUTf};yZP@)R#`81Nvjl(hMm}F_`Z@~;93xi zPS^=o7BzK^Y$9{>7cw$M^w1^=|CTB60rO7^5XR-yYl<$m`dYF2h{l9QT+Zk9b=@{< zH_l%Zi>Jt_$rcujZQk$Vwcd0US*pEjIQN)&%k7g;soQedaXnMP1B+m2;u&`L{LRqq zkgUM#Az2p0EA&;n^419X%qi+!uE;=qEFL$mv&&4U~EK|+IlJtX+N zb3-JFYVUSAcB9;KT=w(sO0&6i8pIT2>^0pewm8xeA#+uH5fmL3r(uK0HmICuQExB9 z)&E(>NPGbzj9wItADHoaT>mws$7X=yiXzirB{kNjX@Xd(Q z3}1TBvv$1ZZCz7u?pbl>QPhoP!__!hFss~U-}_hIj{@JKldvXNw?NshNxiN02`PLV z;U!HPa1?*r&iaN>rjV6cN2}QNlWtVN)Me6s@0UqYDMfZt_wuLyUEK=N9MQyEwb>_h zi&jVr3!fJKd1ij8^Lq9ysFcPiM{*jJRK1Vkdc3NPzcVx4m9Yfz_v=-o@IWmlyT)#5 z>yF9iA3Qsbeu;9;ph@HB?lWy|fgo!8i;;Bd>p-jB;FXACdd;&$Iaa}0zzSoCRmHHM zp>XLKD?pK9aJjBD^re=3@raETc2?Qh*%^g?@mF^GJQ7{QU8f3hPiRjQvVBbW$Wb*P zSFejdw)Utulci|alut>VhrV|FX>?MZX4fU@aF$c2PF<*~sv_byggFUCH&`+$y$c#` zje~X*(UwAwu`5rAIiR>r3{@!X=Pc~|fYe*>0iA!nOBl;>^Hg+K7f$?IrR~x1Nvkbx zakjpD16B&YPn`yH++D3MD_NX`-firIdf%2B*nkPjPr($|p5q0X@18t(9zHy;;UXue z!b?(SdXRMvk9=wnY8wGc8(*Q%@^fQjBaS$1gnRA_70Uq#YaQPO zgxgq8jp*XBMJzaL{lML416w6X2>v$;%geJ($>r*yRbu-wSwpAwajzfk_y|zs5XOzk z&cUr{S5n1A2~=)*5})LTtf>L`2IjrhI^)^^=>z{%diH8#;iVkdOHYgtiRe&Bk^Ww@%sBSS!sARRQ?ThZ7<<8}<A-A} z@m+?4Tz`y!AOyOBpBEPwk2Xg~s63;C9h>>jlRVLr@X1&h;p+CnzKL)9C&E8GjgH;I zpWK{s{90XmS9_TRmLSriFRwP{99W7oN3MT<@qqbY0lvcmFeO5Vr(xFe*<)r*eesM6KNA5tf)yqMGD(P-vU(H&8y+M!vZcAUmV)un|WaeXT}l=0HIec zzw@PO7H7x!@-fI&cl0(54&PaEiSjcxZjozMY$b;=kRCpABr-oq>=<*R*mH-2b8QXI z#4|JmuD^*Cb*~C#)7Bu06}YrIl+A4Psa2qsl;3r+fS*Q~U076DP8jH5m}>kkOKfB| zT#>0|rABt-`lVy&L$C?R*Cf=-3O=SQXC$fR-p|`_byaw5%*sz~FQlwX%8K9Zke|*^ zURUivVZUk*LVdi2X*n{d5!vc#(kOAr&-H0!C89D8*hIczNEG+3gsv8G5xNSYZ) znN>o6e!G{pXGq%jkdaYYCo=x0SQ>Xp8Ph}4eN#Z0het;AJwfaRlb|j#pu)kyF}6{o zgwav_8Qpd8Z$zx8vUMsoD0$2ojo9A261ZX3&}pEX62)x0KCc~FV*R9(TA`zT2PKHWQ-uVJ zV$pVQSDkhlbu{5k@vqqH5-WAwPT}86mX44D(Ir-ETln?{Gf){ebO&c?M{;cO%Yi%N z!wb&xSe<-`2hzSTb~Z)=hsVa~mU(wCCF`=%KI(4aaXrIa`e;4CrSN`Ps8eCd&Z&|Q zR13hVx)%^Y z9t$C_7qzO1)I4dG`3)22q$$Z<$5xDM!=3(8_e_!m5XPn=hNrls_8_Pt7MFxSB9qj*GMKM&#;;D z(MFeaXHa078w;s#(vA~Pl=-wj8MQvVg!=bOtZp zJ;z_aek}nPwgE&5F28#9YTUYUTRCXn-|5TMt~k;h79Ao%@89kQ{-RnI?xvPlymEAlaZ6dX@do{Yg)efslNkbiqT5_I?-50%#&_6vioaO+nX zq=7D#F5XfNQHtP=c z@W77a;}4U9!5|L&8pa&Gol2bI zihzQ3M)+}uJ)lsvLpK2>#GmKMX1cRNfLtXFCX9*bLRY-la}woDHIC(OC=A`Cc@`HJ zcjgxK`PheaBAzHlELf=v;uO&j;O2;QrL^nPhn_2gC6V#8hVzcn7i>6Q+N_~^T~5sO zRXDSEXG^$wm)A3TWKoF)Auc_Y4vfTc20O=N@FkyH?5iJ?yW=R};(J-+7d`l&zjIg| z4rbRC;kW+jp-u$O7dt87xRf+IR6X>acWU=^kOm|WiU)%VLMfKeOVF5j9j8;_z%h3e z!+sNkBIZ@yq(JY^XE?MmILK^zY{0z!erKNOAHl9GI{-rx@?w=RAW%7!20#rTAiwYy z8wkvQ-sQIZ-kYhK-pH?2?H0QRtMvT#Lg0#s)Tw`5iw8Vw7+1eqz6Mi2_S^neQ-^8 zPyh%u+3^$b;tM_}X~Izsw|%Kn7e@h*8|%vl9*r8kILUahqI7fa2m#r*0QAR8fJjBJ zujB@4z&=+zu++cL!_$M)fd*knP=u!kf0f;0uiKetAgyYJpQHdEV*BSqz~zc5biKQK z130U+*REZAINizA5BW|BS0zn9s1 z(BD?*x^3P9=myHS?V#;4-R!CK5+(tN{jgyBFv<7W!Dn!5B5E0?70c>nQZ9<4a1p*r z;NYteCCa0+Ge=ifNLY9b3V{*6=w=bSAM5BNKLl8?1qnM?; z@r}9DoF4~q=wO}3B3nN294qLF2A7?(pCjyPi~469r}(p^)nQz`i~Z0rNioU zfUAQkI0NqrXirmQ$Tz3~Pw}A(u4(Cs$(?gMCee)c<$>+U_JhZZoAka)RnG0E+QV11t(DJ9!5m|*I%@tx59HV9EA$-=ZO$T zdL(OCIJ7mn{RWTG2ojWZe0*wbx>e@$W^iigV2p-+&j3JqU8UUmM!1<%#VIFo2rtH4 zQ1w(cWc(WEJ3r$cxeoK}2Pa>`aw`a31H)<5LbVCb1n673<3P>Fq=5?@39<;}OCX5V z09y1kPR}(ibryg7_KiaE9UL8199&#WG|K2VYmhPsI==2wpsz}_%<`{`wYt!(rS9dR5%#pnLne_N^ zeui@UH=(O%i5kacXdiB`RT^YmR>@?94$R=o%IVg*ucqMyNjril8({lTjYYP@!+`Em zALUt@qUlOxZW?a&h^{U#hX9|b5#Wp@sHGJ^Tp?itjRGM+6>5N$vwRXdIH;cNydKqF zb;D!y>)5NGp9GzG6vms6x=cobL&YR-UQ-<m~Gm(h^r~zNHQwUcn$6C<)xh(r*%l zux*nMJckM#JTX%scrP?SdqVT4JgDIN&47(l=!E@~4Az&vB9yH%dSzZ&bL*t>c>s^( zR`j$hoo>+k>C(bg73JS6Y&0QsU;v{P3a7#*_tjdARy{$s6Z1qAJYNA|U+ z=f>7r7Q;YMwM9|lK*!wlnw=>2ld){j8GJGwr@~YGWn&`<>@R=-9Vpg3S#!Uve3`MD zb^mdH zVoPl%je>XT;&u})v09K^24(8F@7gI+b^ad9?91UR;CpBLXC$iYCzI&G@dewmQtL(C zg}=Pc)z@F)_((A`pH8!~f|Gyro^5%V>yN;Bx%G@~Jj}VnPR@B{Qm;tBX82}55Lm65O!6(60gfL;7<@ z;TOe;9Dyb_1~j=P&;$F-*8$G)E0n@7fs9>LXNIcW(s(noj*d=>d&Pkld%ht~)bL3iQ8 z^}j9U@WTJ2>Mg^vTDPd-2NV(9fB`5L5ryY7v2@M?b0b1gQBfQm9QL@E4suND zpO0idE=#8C9(v3yM5zi1bH-ik3=JKkxjPf!=NBKYC#ckVgy(O(op}|$bI{=gz-6tl z&n8{=6QeFO{8o}lzhBTVbtdQ(KVPuj+}(ZG!>7HNtLh$~cjy@sL4VC*xo04kK)MOP z&*d5&9hjINz(YV=s+LNvoF+0oZyvtz1%*-LGiS}yA_8K^Jh)Q?gw`p(M_FlhZ>RxJf zTxI#h`w19wVVe&XkQI_YxorVacImPh+3Cxp9dibayl954CGi^Asue5BDE^k~lk3#} zeVp^}Qjgk3iZ7svVv%Yl>Gc}%ILy0*Z}0`lMPud#W^XX421f+h6x1W1EpUNP+VO!75y_$~ z9W!6S^fcPG=d^F~hooS#_CcRfuGQ!rcFFIjy>l72IV_yJvO8B+UdKiot@xZd%*dA? z9TeuoO;iFJD%U^EjJ8T)Z&MQ2oUTkL(_dli2Xqydxe%Xi6;gt=FFg*Y-*cbHE-`TtxeY!O}S8Td3L&B5i`YQ1CvpokJEo{B(cUj+DIgZ{K z9ejEz?*k^4ZWx^ox83I!RfTd^z0oNe6^gmwZ{LT*@~ed>3Rp%yA47~QKnhmV49*e| z0*w={l)7ZKvAeh$+c%Fa|1X0<-hhf-RYJm#-$tqHU_)5s+@tKI_^E$;!qBmA8LWZ& z)kg5>obh*4MPP-&{M@IJTEKx8h;aUfroV|V9q|T@A3%I(iR$CIkBM%?JJL+luQw65 z_Jh?TYKV}8#Jp2br@S)CRlA1g$t1}a=}C%H`P#+@dK;duXhczo$2C3K zqT(t4T|{>CsWD_TVCiE5=nvSW4=3(F|8TW2r7LZ)s%F)h4O%GS|4qS~`)ELI^dUD^ zQW6Bab7t#S6Ye``276z58O7Fg?y=V%b9tn6smOKgx}#bUIbPK1vG{MjpHxTx{$da> z7?4U!OcwHP!^k*Dn_<(O#pM37o{nr(`9?eQX3y!8m(w|H%b4E9Lit?T+S%c{M|RDQ zyEB~4fC`PHQr~Np$*|WbIpjvcIj^zR^ zd1HujPEL=htxXRdw!OegTbWYpU=sfIb(~Du3oO9O=IqY$tXi-kYU>C5je|JytII93pW!5T|7@z2q^$)^e@06z~H~5g^}pCiNH6@owsb&24MVsTbBtayD|Z||&-`xcl1Ui- z-F|#*{#8ke-{y(;qVI;eVUg@yXm9OEmU7=cf;&gAxokwJIwQ9?TTFt)gQdWh990jLkWP)xreN4tfFmstC5nDoJ67>GFr$1{7Qwroe<(+FsAV7* zC&@FzX6o(yq>wF zy6D*QUm$i*MrC8X`*lsqlHD-{ReoZ44kXhAxf6@S7}& zK&iRf1+$(F%i#lmo_CYsG4d#fT0-`{e3FMcnZp6;7J=i7)M zxjrGFuOHKK{O6CY{&VC}xXgQ-p(JWQ?h-xL+grs^u)nbA`F^ivhoydIda^FX1nxf0 zjhRG4{G#iSNS6LqFB&jM@hN%tp%!=$K(PNUL`^nu()NnX?$S-?bs?&<7e`W_1uH*t znYB1*=>14e`7E2DxYm_}1!(dp`_>4C-n8R?w5lzATwH#5COsp7nl1g9iF5YnM;()M zNU}~j&Qi-iFaPfZF(N03n4Eln@Fm)DNjuN9)Y+;?OMLgVr|XB-;<52pa{j}iDGrnN zyPUVRhu#nIk`Ya0?#^bvGSszfG8ANmy4nqdxYP`q1@TB-cr!8SOuD3;=B>5Ce%f*0 zsTZhSYnMYl12Wp@;8?6ab-j2m85|Yhk>em~;XpQfF~h|#p;W%NJOG*7hX$sPTxfC# zw}TxnCu93n9{gwL3(#P)BqqifcWk_FH+$jP=cLJfF~y=_*=(uO&)&q<%f|lH>$%w$bXw$_-ut zS$5<6{sl}-BNzd|Ss*O&q~wO4>c4M}0F^n)&>&@iX3u_QknGS}@o}wbGH21EC3E%O z@$vxnGY>Y(1|=SAp|kG#$g{l8ewExv@4T_W(-phL%|$z?!Lz}Krx{k5(E<}Y5;T7? zB+{pz z8&%r{j&CCqNtU~tEyOD%V`2GDFM`9j=6IuXB+}%hi+3A42cDmbAV>7i{r!77-@knW zplCIED*c7JD9qyCMKC2Pot)SQL}{9|M6#sGlrN9|q@r3d8tM!$HvDclQpzA9SVcBmb z&huqU)^IveHVlk6@=qP+T0OVEE*i`wyo_snGD9Um#-4wydHWr-21O)7E=A+jPI3@= z=@6991|YK#q^XDDju8xTpf(c0!N-qmi(->AGDu)c6blUSHLA%|(B9U4T4g;(D}I}~3dOr;_{(WDIyz;4QRg!U?_wu# z%r$9^g*kHUkL9C_?S9Eze*Jk`H?~7+0n;nJkMi$5H$^}<=(9fI+|U4(n8NP~y{US< zj{c?#M_r+ZqWd3@stcAx>}N5}Cs+Hj3yBzK0f^_}ebYF+=w;RCxpYAkUNWN*4e=p1 zbs8yp(-d~9EFs0U-C-fPE3T2x-}}n8KYt%tg6$ZnI|&7k1Pj4oDFj)q zvAhDI=}Cg3p)PEPm5J(9h&&lol8y2@kVgCU?oNO2oQTushk+W8`~F+m@Sowc^BrR* zER>Jrp$gBS4TfGk=4$vQc6e6V8WaH#30bL*D6q&Ln8}s@RHy9!W^jI1qJYiq21y(& zrfll*KOAX449iag>re|^^J4Xd&oCl z>rycWKu0}bWGb8G=xMK1fpH)L z@xz=+`t-<-jTfu3xK!7(G5~PZXrrZ%cPi4Q_DSgMVhJbtOJcq~^=N!Bp|r1Q5`Bs! znHfr$ogqjuplU`IfU}w3Lgj=JFL<5qYPQ7j7BY;MdGE>L5TKVsRNud=ysb{!4-Emb z!U7csywTX1r|>lJKR2IVq|(Lxn?Z=+XW|1!9=AmWMJ_HhCy5tq)uG2JF6A3emAt|^VOG6k-COgLjO2c@S6C+L zfYHj2_e>y| zxu+OU55-jm7(IyraSx-i_`d+y{<;Q!jhK)h2x14UGT@<@OrD&cWaz1Iu;e z`RpDhx-B!@sO_IJbS4HEAz_kfvFXtZnP5Z+cjpIk zLWHUz52?d4KTdO)p)%`Mh7iL!P-PXT zM9v(zwIHyg7Qlv*AfrW<6x0-KBnrN?=9CM}%DVRvQwS5+&xh<^Pz^z;-|xeSQ4Um^ zvqb>R_S_>g##~! zI^-SsypN4cwXjePX+8d4Kq+G$-KcOG6P2q-EQD7Aa#3hmJ%B>2785dWs3uK-S?WGPr~0P z??L`~O#e992iOx2ttYB!5h>7kt!p3a7;NpxMrM_H1a~HyL#dHzV;G&n?QPW7mnL$~ zrpHzG#$f+vItv2BFv#|;;8$7s4UqF2r^i!e7Mc#C$@^Hyqdvb#HH|_Z6nzN6h#%A_h3ZMiuh3V zFC0y)TnU6Ycjnmg7P6QOK<@ID{^%;P8Sq>qodxYA*ZW?8sAClGdFR3BXF2kD68IWo zd>BNhRuJ#O3Q^SRQ}~%o2$SOC;&7f3vgr#wxC5n1{>jw&X%du>$}rx(vFilbfvRJ_ z@+6G2KOP-HkZ%_$Wy^Zg0(U{i#if$rKDmIS^sCpe=U~lyZ-tFP4*WOzH+Gl$nszV* zomc5$D$7Gn0KZT#8H{jRquAJxI0j>d?fpCdKJE|lmce6lY)9B1Y7$39MP*W54A-g| zC@Rk<@7}%p1854xMlH`KVP0=I_^=ZQ%i0Ue!>*N`Z2^5Wz-d` zS8Uu$w{E>|zp}?t<+vO6KeEzq!=^dgMXC``j|xlSTFJj;B_$~iGy6RlzC;kSXiEbJ z%Y`34j|7}wO4r5nlB4r{5y}&Uirmg1fR|l>!v}SAU(^xUTBJh-z~C(DI3ER<`bqui zo{lOX&;rm5`qecx+l&|}O5dFgbBNI$Q@uzdvXF-g12V$&(@k0(D@V6(xD^s0n`DNh z%W0sn5UIEvWkK1287udF>tlMd%~u+V)h{JYMnH)#c3HWr^~IrTywt&Ci6rr4TwewY|hAFVyP5h5Zc}Sn1ubA zUrdK&7AXWkoHUGfWJ<#AhmB8453=C2Ig}vuWHhh+;R)|jQ+Jf|YLoWgO<~;7e4wAb zo$8o9qU<3=#*1b4L?XIfZ$F`3ms8yN?dpAlzL{j!&xO?FKObI9O-=b98u2Rkl*gWIZg_F{3B9X?7F!~vaYGdM_zKvaATyS-Spg`8lYNhrb%bA1oLBNB%w5A~|-B^lMSDS@gm@B3@9Ck@b@`c2lgr&ve(56`U^wRg7{ zx}xq%2K>RrL{Z*mxvY`*L>Ypkabni8gF0$Y9C;3i)7P*dF!AI>fheUF>a>ndrbEq0 zoC!Kvu^w3lFaB~;+%Sy3W4Xt+$%ndG4Lyy!SBT{yM*&d)xh5eTjvZeiZGNoT1@&ymd5hP@4V-<1Y`iXJC1SdS^#SX-H zlPm$xMJc@|nJn$Dm}`C-b_?rdhi;9U9F{+?R@pASa&dKS0Ye}bc+mMdOw`|m=M#~J zz@8>8VYCB!Z(w>h);?P7acD1-BvKb+3@Qm8Vm=t{t3(#Cy8WB%`io6aVSfwP_uiSp%AW7&Fvw%r^rvq!dM3Qf^DA+vI)H% z&VkSQ;?z%&@IELoKwCe$idd;OX%`#G^dGIsX5CQu*!UoW8hh6RHdol3B_gZPIiN_s zLP`PyQd1DNaX7C&X^Cb}Ymes-pP`(lB)sfvWP7+}jO2F@AZUew&dTFt%OytC(bvV@ zMW_1E!EHVw>FtSSkY=z>FdAwf`^_22E2LyFwD|*9HrCvRYeeALn_q=M;`x^g@Z)j; zE{d-kLP|$F9W-mUv42tvltc}`T_gdQG_5XRh<73+ES>3Q;2L-VU33e~++xu01zr_F z*`kZp@F4mbp=}XTAEm|?@JBPbvmV<0@yOB5ll^S52UPEj-Ni_I)|q%9b^et1{k^hc zfe?`?=gf-Lvj~);SQ9KE;Q*n9?=f`4TGXe&8K8?#u^s+b{^DG1eUli?|4V0{acn`S^!K>YDQ0r!YlzD&Vuv7gFZAT^Yf zK#=w9?5x;&LSS=q^Gic01}fx)Yec(1m!BUv1FPtR)stcuQFM3hy4nifOqz8-FNM~SbA!tUumZqOPZ zHh(g?X!zpg(Tuq{SFP{rxkC~{9v>_;U`tF)to;D*0?w`|8iE8_wPOu%&j^L^+YA)S zj#7Bf23J2nKWV6HX5n`+`Md_RTYD!A?B{q78!$>QjDfqBDk<}p%QdadNyaRC{LkYf z4sETN7V3x#yPYi54*m}04()e|$FN^ab z8ESfGXXF`hm)hyw5*U1DC_{vR)WFvOKDl(@3YIgw)6THcWF7Xc>WZKqr+++7=(3Fl zyTx@dVU`j(oW1dvdLM+KSYg2ha|Nn_Ce0yVJ#=BP5M_P}s(|R!MJOeVAj9b$m0-VA%dTX+x1~$%FKLx7Wjnd%@RcbBc z=d$oxPlP}s?uiG!Ri}J-KE%^-s8(d4@rSm8LDvRlTLfj3B4l2QrNR8THttvjP@pwC7?O{qPd4W$;Sq@ZhXT<9dbA>V`M7Z_MP*!*qo4J0!@ z2x+d7w}I#c&7nif{i`9Mt-y3vE7TVTzD*eyff?1dKdbHg-FG|a5S}!hmO>q3SrBZr zA71#E!h}-!2JcCQ)Qv!2Zu|A!A1ShR!AkdYma3V>WfO?+2*oZ&*q!Glk+g}qxov|8 zaJHTYJQqn6;aDpx)J^5fMg$)YMr~9G#cK_MQ3+rtV7+Gaid|sh4y*Eb0y%l81A!+R3Q?EhK2|g8f19hMibF^DrGL*QC7VQ z*gUcwUk3no{ht=;@5^0BfK8f0h-ja$ zzsTOkFJzmXoZN!9kp=!Hv#lD?iEsZ+!#n4b;8fNI1qUS{awTKz07dj$?gLUW|9lsy zmoh+HZ=9MkfGf4#Jl6ko7Qnn&7-NS)h5yL24!B%M+{@8Fom^!MN+!^9`uGU)W+1dD zEl^v~0&-LAw4$+Hab2txSgka^R-<3+-?X-s;|Q9ydSm_LA?xgC8HIFEkXCHoKZmoH zvXf!~`ECyO<8rnPLcEZL$(*?;%Jx3X_~GFpLgSAI9T@A}eQ#C%8dgqBV=_655te4HD)72qpreUvy4kSsheZ)o`Vh6Tx0v267Hi z8XtYu$ZzGoz}%1!h@zQ<6Y|`v!l91U*`hJcG^jO*dTegCD%^gxz0SyDFAqM-tBgj` zU~~j)^gE-KGH;{r^?29aezA=ZZ5b4o#T&S`gi{x)v1#cQ8E4-;zKG6krQ(5#><=Dx z5nQgH&1)s=ivHY>sWXYJ-Lw*F8T76gDX8`g%l~!mCzse+H9MG~V^U4#*?@}@dx7+0 zDuZD1(sAJjsC(}%@gbT6K(#*}odAt93QFtu!Ak93aY2{*LuX)TRXM|A&MQIVFx$h6qDnfyQ_C@gznn{|yP5Wb~)jVvJSw8yGI z&UsyE$8-SD7FmmA9oG3&DRBS2<;fZBOy8{D!bwo zw^4t;m+-1pDaxF{Np^@`r^orOKU`uCh4ONnsYya??h%k%7!}+^(Ud?l-3Fm)wYU$$ znv^G?ISw@m(vi$sys^db} zeVmX7{2JN&552Yw*nEU9(v92AqQSNX!&$!Eq3lNxe>>@-sP%;B>r!+410c~j6QC`4_o zP*-43M)M8I*>*OfF3oZ4j{Sq@4DpsgWa0|W_p}5f5T8#7zO`~050AS^C0WduhC($_ z$Td|2|DS*4dmKJY-VE^4mB}E`b^7=nqA<<53+2k(W4dURy{K@CxK|zaS?II zrM%|Y{YsT@#BCLAWU=#G7FXvOV0h*#C2W+>69g?>>A?tc*Z6YmH8b(}%# zuU`r2^GrI6=!;8trtrhkOjYPd+}0=#4LwVZEU1oYbUaHII5yaHE1yQKL3^Txym~Bx zL)eX2;C+Ma5Y3w*DF8U#Aq-gBv+HMzz^C4IZ^X1CF@Ttb5wLurLLsO>5t%ov0#?@m znkb;K+`n!qDJijXg~(Pqr1(ggGPxMHMX<=^N6|hfjyYO(ToTEMJFFe~Lsx7zYokK1 znPODOh_=$X>)$ykSMCK;cz#xQ#C2o@7dZAl28j?70MA|r!PTq4GIXzyN=dvfLgJAHy3-*Mah zGs(m_80qBZ>-P6>gg88-;VdW|9@l_iG``d?H)wK2Bqy$YjEi^K!eQz_KUQd<-}+5; zCAfCTCz6j0pGYWArEVSjuQWEbi6jhx2Z3xR&k_Rr&ZjU#2QF#jY5YI ziJZ?HGsDMM^s9ODgqJR8vs`sX_P=VB+46#ZMB*kc8syR=RSu>f3P%E7m9OnD_I&?9 z>L_9N2N*(`NptJ#)<=MaG+hC?G|=Z;07h(oSB1cfu1N?ij#CJ2Z4>kB>33+7AYi{F z$w6P!;h=)|ebE&qtp^>%`=@d*CXX6{q(`nnlc!o-uwypbXZYqD|E1O)TLNy2=a;A!&*92(c`OC#I@2WceJp&4sOMmBeW^jZciv4X)|fFD=tnxg4g(N}F)6q;J2)j) zj5R;F1Ko>QE9J;-kWHg}I>4gc7(}_S(k=OxRqC5>HuZ-{IT)KPz*Cg(@R zEP;XDt84rjIf?$4TtUHZCUOZi9QBqS+}v-(2)P!+x$m?TOwbX?F(~lmx?;wP*Tx(6 zsvax6whJ6WTDB6}j5Y@)i=QpnZ!;^ny1OHSky!vPOU7fpMu!0P$afvwhnw7rsA_%F zFhgzuz$5WzYl{Omy)Wnzf)dx+>KoK!B)b#Mw_{A|3B zX?P&|Yi8oT8nh!IkVZ6jz!12d2{6gvg*OjR?|k(YyOGHS2;g zRVHs&{~0l?&+O`lP)H5mEfYq6Rx#A>-6KyBkug;Np->aH!D{i4nWl@Bo5;CMmQheJ zzvS&IabkbSpNh? zx8SgqY+nc`)yz~{5h0^mv%EPrsz@{}{|h2($_W&)>@V95+s4RNMCTLmrUjpj!Pxzk z)b*bgYo>{=k04|kiFkt~cn*YX3R}(tpub~-A|VR8sa7D3uNEtS#tn94B;dS^7x5gG zr=6H>$=os-t4Mcyf4gOp+KdN!rRfJ|6m=V6?PS)qO% zcz%mG>_+_)0wSJ^*Hb|IPnS_;-F_)YyEaxl?y(eMr#|P3@55g+zvMD{!e!*k*QaP6 zeD!57pQwL<9W!cEtry@Ihi@4X`#QHxRY{l@;A@4gJrwGkYUDPo2|$HZBkX?;j{{rR z^V5Cf#qN|Ax7BKLn+ofRR7gV;*##38!98BLnXRBQPz&uQrzZSV-UlKltI^eoms7}p ztKk!wpmX~PS@#@?8tr*2N6MH44!t%*qmFS~3MC2X#$CO#9IGypg%+sF-^-$w3X1;o z;jN0G(=rXL)xOHhTM=PJijtYHBx=C8r;#j%;b0H$9r&U$340D=E55}JGZdLFrrTg+ zl-UqPD1h5jZbcT8?P&BX#AdR%?aSDxloa?9uYw8;j$F8M+F4TFu}{!vv+sOoz3!JU zUjMvv_bQF!!^NusKJ=6d%5Go8P*@L?F|J9*29)}|>m|I1v6Rp)8n6?@<=cJTZ9#Bj z`sd>?%P@uFmecdjkrIYD_XS1g@PuQLmnI<$go8|{#d&A;`Icn$3X?Y7EROtIso2QHsivC3Z!{qn|d)ZTZUXRt0< zy`o2BDO&t-ywdYK)tLVMr^?cykB3Bci>+izD=bzhU{%EQtys%^m|e+OE|>DgTI!we zK8o3IdBqpA_XwdX-+61zvDV{keq5R`Iys!#qG4cQpjy=Lyhs!Y*u*{<*~IYt9B8Ko zHZp}`=gDhw{!aJYXj)>Q7_@3Xh%>sI1HptYJOI0kq7N1 z5ef&E^-$u1N~MEfO|(o@qedy~6oxDLAuktCsBnf?l8r1PYdMm4y;}zHj#HB?%XWkF z(J;W4D&~HMj4{rDyAz$R5H~2_l4BTN`54N*kh&Lwq_mDtdwB-3slhHr9JLwA??$*swg+e`ciK{C;MSl>72sC z?hk+$^WKPzofb6d?8R&-J7_kqV!3@&wGypn8LUwX^s9?KiL#t{*=yG_7mU@199w)Dxl>jbj9bI#9Sk1~bC>TQExbYI6g1m6}zr+UO@9LM&h=DQ^D! z)gs+pTr}&B&Kt?GoV5XGi?5Gg$3Qpv2}(slM^Rs2UlWaJfDPidlSd7z*M)riVAa!A zEWm`X^YZfYJ1l)56{R@t%lgFd$DnxkfFGMqr^HXTJTX|mSp9fzC!-G(ERRaaiBObV z(&eLnvF3k}*J}C#un8Z3Vz(x%fPIW#wV zv~ITQOAmUMJ!rjIaFs1sf2__#+Gp0e%W7~VALg$N%lxnQQ~`B2K0iBE0Xd#lvC;d= z>gu1nR2SZ1KrW;2E>(m})j_~IaqYD1=z6NLU{q{cFE9Nj?Hepqr=L--Co(7drVNrf z2j(lp%!oh1k0ZN$gYzklD^Mdj4Les@9ox*42>-fGR_=t2)ME|PJ;UckoI1 zC?)mj8JX&zu(%3s{aBe~iq22YJ9c}`pNJ^T&)MDLds0#q_4+*b*C$lcrLQ5Jd!yFb zaSU}hSH4%@r2;20hC=rME&9Cf%6Zj^K{2-yF?>pKy^q7~f^IE?Z*(a31M`!BEkQl< zf&z)fML_E8IyujU>32k-02)eups9%VT3lW}&-T559UBbqaf@TZd~pr2$(a`^UONP@ z5^<5CGW)dOkbii`nDwel!ONdodkhmk^&CEzZi-|f<_KAw7G#h<-vay0jc+3yLgl^ITX zw`eHf@VD+!17Kj`A}Ks_+mX6i_d)jQb2*F)s8#Xe0TJXn8ETi9eAJTSk&Dbus2o_z zEbGo{{0T_&7?EtxUsjX22nCl}2(+5>F>Cc8h3qXd6u%+;#eW?kvDhzm|DL-81AuTd zB|QNs^Btyu;b&%rjmkryRg*_I5=M-?&fm=ZS`JMPniQ_9VLotFZf<9Bs}0RKFX8$D z6tJL>nWt*!H!r*sg&ILQ{hY=rw#S`dy`|lW^KM<}oeG=gEYW@Mna{%Rt0MJs_0hXF z#RF-{2ZXz>CN(9PUYz@(R!Zj#@Rqs6!EVL7Lq0L~3zK9HpDx?bp&G#Se+?0+Trc?X zKJ8`f-JJt*r4Tn4m*|JT0M1OLCtg-}L2w8F#0gb?+~KhtzR~zF4!XD4;GG}21)s9d zy}ykX5R>k@S8tGTk_Qtxt$hV;xzx&V=|@C`0Mjg4=q%I9Sb&*Tx1~KKp_Ir~)xLD> zKid^6`heWEp82qS6LE@x-gRs}X@J|siT@n{0nvZvV0KCi9VPpyKB^PR0eFamfT)o1 zoKomy^Oq7Sg_OdlSsonEI&E?O3E&&~-1ybR;EeYPS+^Vf9EV25>J?)iiz~fmV&YoG z9i2uNkCPoq2lVk1yoKo3hh}fI-1(RzcN!&sf8T1f^!*kOssU)fj}XQElcqGO;JcoA z>+9=VFdvO^^03-DSAdkP@KtfBc_5DXWXB@q{3Z}GtkJ96QbOCLHC7ju=VCQ= zk9opU`}QsoPxWU;c;rG)$VEKN3dq~R9K7%%>Rkh@<<5XxG5_H8Bq^y)lvPm_`P9vP zG*|H8@4?@}?+Q$F8y}1n9i85MXFzD^hDrkm6~_X+X=EX z$tp`5Vb__Li(}u@byK#&M0LFEUOMp_^f4Wu3G78#id4#oM2~O3Z#t?wTAfxel1a`oMN4|V67SW9;{)!pVd_FO&?gFbrF)Um2DLg&5WTlW9HWYSJiUxI zXBxvmBS}w|rHEAxIA%y0*7sCZZyxjBAMv+7zPqFjy+0e2+?<9{f6NSv0F^dTXk6^& zCgQ%8hV^i42W)EpEDb+6*Wjfed+fC#ICPQ!x`6P&`RMc`4(~Rh8+re1cn^TNseJOI z^QH)9EtN=CJw|Zg6Us$h0e*r+I6j@z$AA}&xp6tucf|`Yud;tt(pbauetKBCxp5$; zGv#dP<=xx+zSqw2SeoL=kibTBlvRCzz1`!1qx83Vqh-C!KPY;{NKt>H=>(m`hzSX4 z3@Q#Exp4)Yd~(|CcqjU{4LjTo!QeXvd|bEu(4DD3QS~X*v|Pj)hlU|07iJYW;fgIV zo|QL;r7jFVCH)nTb07u^RHm4JRTyIYu>8qWn_1}Pdi?i_V6N9H(#`N3-vq(E(iIBgLO z&mVFl8(+frFy9G6b}4{Jd}{U1cM{gfj1fZNdv|)K&Jde29%G zrQRD+kbXWL?{5H`Fb6Fd)>buuh;+jE_#lL`h@=*8^GK{ODLn&tvaTkNAz5 zp>0RENtI)9D3LQS*ghQ}__goAP7v>y-Kj#LMPzQBfuTPQ0OUd`s4LW7*nB>T?I-hbHtlcS zj*erPsPZI&E2biX+pn#-eL(7T5x253V!(f2G}^v@p_7{s!K601^O|LV5x@_K%r637 z1673y8%Vi6Ws7_kTeB_mtps(qC0NV zEC83_Xsu!@)*0XWG=moK;rBOaBU7x%{Vg5u7g`)I-+m1Z`Cky&3GA5U-7lbsGgfwv z4i8(vN@5Ng$P)Q`aJx)8Vq1XdWen>T6}#`EY`vhzL#TYQ&U;p)!Bf%iJo?iMtA^MI zfFC>u>(QXf`zakpBQsNLg_j5jN=j;=F|{9wS*d0kJ?u*Jop)@{7pkqt!& zh4eX+6|W`&;_@voDP1*1%eUZS+RBZMDYOCNatP?!+#v?a8J6jl>(;s`%g*kGEwc?I zw@Jv0Mzm|TdW-|N7g+wb@fA2e+rZxDdkmiro{rO+!{E?(@%C zf|f})P(JTMEj@_=coBP|k|}SVnW7lSlTUjjT^JqDYm-=6Rb@vcjFR{UAeb5XiN?o@ zrSiw4Lta8-QJsUBs1#ba^d2r0{$DE!q<@d;GmXR(=anN57Q!ibt#mOlWUH>V`OWl| zErj91WC*odPwvblFm=N%Pp96k?Tn&Z_vl&1f~{e;2s2fF$vB`7m_uQz0tAnX`(q@0 zw#f+9`1(CX%YfH-cX%9MX<+zl_m#CdfN{`!n$Y-@%@37XFJC^13r-NE8w<7!SG}p& zvgy#&KE#pUL7(U`HOL~Rt?>#)6;X9P3tO=0`QZM~H>WWQ?S|ZtNTyAbU zKRJGFeNkqwqPY3ge}4|{K4Qh=Z*@oPBr;-(V%i0+FXxq(mE_&IuI1)ssuj|spELza z0)bAVyWEY4bzm%5!wm-;t!$eYm#q+tA;jfx8Jfc%N%>WPy+R4jcrve+@~Fh$M$aU> z9sEhzSs7A-xi<}zjCPYe;Jl0!*BT8FC31gkxa%>>V5ec$T%vqovP$JtLYe?nZnzDn7S>t(ZD`B&sc%RtjH zI(9MSzAYBjRdK*|GoTGCcHg&V*m|g}#bf)%rPA%k@w$lnTwedWf!togxP{2j^Zq3p zT|K?uaBivh1TjSEsWAueF|e~G=I zn~V#u0-J;BDh$-GZgdjxxoSSF{>iV^Ij=K&IS^(gH#>*nlz5=cxiLR8KVu>?>HPwo zH(Ik5v!S#mEZlCTs4bu@5ad)hCuR=jGxI-Ilag2>$JeWVTNP3qErj$RmzJN99aJC$2pFPRDLSrvJA^-g z=+~Y9?C(b*$UST!JG(;GYit*4S!M?%TpdTYuS~gO^nLKhL{Z8kGBspDJrw!WA8&Jm zz9CZ@V$qDJ|0zt#!&r29z>f{+$g$0EN!v#Q-8|e>ZleA$3)dw;D6WECRjWtV!8prO z{y}eQtI>qTZ%8Ok7=b=>?d8zD?+Lz;0-d{VFNw}Q=XX2{IUGF|P4xcksnKB53zZ~Q zlEtr$Pq-gxY$9uwgw|c33r=|7NXqOHpu;=5>0KCY1mY{;u+qQ3PCFBGQEbNh2fppI zqj^Nn1NWJP-(^1ez~jk-a?(*!HgDrN0_!kFPY-#!Zs7AG-iQ$XBVk6}ig2SIzQHX9 z&(V8k3@AR{Isvf(2CX5gwSFUuuZo9>x5Qr9msvoGsc^-GN5E|0fq9eiubY#gin%b; z-S~ioRm3JP);9k{S(1d^v{F2%X(+e6YG@hBPx!!4HIV@IhZJrDKsX6iD~<7zsS}bnh=U0Z54z3* z73|iR;7=7U?U#Gi=>0_hKL5eTz$}n>w2-wu|G6Oxat3Dih zONb<5TXb{<<;Qf{cR1yOK*I7r2T)(;bupf?B3d+c zfQxLw45fO;GH?E+^O|Fge-~-wXvT}NGH#a3Jh!{=8?`F4sEr<%7`pBTY8stIx|)1m z2NIgVY$fW4jqZcXKQLM1JCZ~VVC#ZjmBU7m<7rAs?V0+GD#x`j)tBduxi>RfLWa_Z zevoJKWv>lI6y)>KBTc8ue~kzw2SV~e$WSD?YCtv(xEXxnR`W$B&=)`xlQoG1a`nKt zYxxW73k&yPq{sfd72vbL!ootF9u$gvtj@in%A0*5uxI_6Uf;z0TrnQ$;CBJ90C``f zC_gjhUG&|=OAKjkgQDeUm?)r*GWYl`z)IA6;K0dop<#-*ow(~|KyxX#YU2p&tmnaE zioEVTTjQjw^4T!gQ0YEGLs|3ISK$Ug10kFLjYGY^fovZE=eZeD@9*?e)N~$9qOG+x z%AZ!58IWY*sErM{Yqyt}7UjHdFRx!S8kr_C6v;F?Q^_38ZbUB--ANk!Vx1N8DosD( zRuM1dXMZCzbOgiWK@ZCnFoF0MepeEgQ{xbBd(y#qHH1`t&!bY+oe3CKbPU|iko^<} z?k%z~H#Iukn%ja>Lly>X)F+3Ct>BWh)5Jd17tsvr{9mu2f)T8D{ARO8cZzTr%kx3L zwO<@qt$rRJC*xntY`Xr>XX(p%wCk6pI6!iXls?}dO*L?&5t{E`!Pi*$a7?)>IN0&1 z{&m%>#|S{hbb%U-7*OA&{)G=v$|-Li-oZ13PoTfG(8UH6jzr))(R3a;B8e5CmKYJw z>X=LFSyv{?ETYs3$v25kQ$EovKP7|(m5v;^%CkF!))LO{>+RRR2c1)n^6W{q0pGgHq<-KoIY@MHGX_y+fKI|1iVZ; zjQ0RQ=UVICTN-^es_zbiTc09`w1|zfm?LQMzRQccZA=Q6Od0?~V;0I`o|T-Y9r=6J zUERRlGL1BcmDTx(^%Ni-7A1R6)qw69{UzP%J$6EBDOAuVo)1CBs>3(YL91HoPO0;A zm5Rbfq>|ymZno50=6QW&*8`F$SoFlSvg&#;V2ZeeWXJSnsZSa5!73b3h2d0RBTQTC z0}~afN38a8kB59emrIRhtOd3by1?z2KKu`Ye`P}$x7Aq)aN zg8!3^HX)RG3^_9Kr9E+fT`0Y%p$ZLyhA}qP*m3F0;&lRKB;6*AK+Sa7u5+zKiM%N0 z7L7l$QH*+}1m_vGY;QbHzRo6^nEO}S|7rKOD2{4gAX?L?%y8h`hk}0?`RdUH8~dOO zhz|b=L@Gi69Y^dOYa9<#!i~I{0;@jTjL&?rKdF7L7`E)}=w7V{o*$;iJyxJ&_qOsc zhmD(Ce-BKeH=1J^ic3~9P2}UfN)7c%lq8{ z+h-2Z^N`w)Mwq90E>`<}J9v2_E>bv!wvH#lQPSfh+Ol)5Anln#;&F5B8JtvOeWm8$<}?d;H4<`;92k;5n+<^y z#%A!eJI7-gcnJu{NOcwEGhlY`Q0aCe)R{(Y(Jb0h-cUu#Os%3Z{-oGRbsYKH8UB~5 zgU{#DzuBxj$0T!!+}^lnMv@@bht~-SOEmi~pz@>&*Zb@u6$M|UHGYM1ny0D+Fl6TL{|{045a(VGLXd-7Sp+b@!VNp8mJ#5}vLEl8iiL_+o;F#Yz4F2v>- z<9Xmy)1f|ZnC_gHt}7iYU-<&Is-ZBky+3&2>WXCvSbKeE&#H3D8?aMzkEt?z)I4P3 z@h7*RMUO4LnfOkCBQuSECk2N)k~C-5m&w=a=sf4_43w{tGb}}Sk3-)V!9hk6;APw9RYAi z%LbNVtWPFuXfkgChgu;=DV93m9nUkjN)Z%0&j76tv|v^w;UXgb>-U0cWMX$tB@r5$ zTi`NG)jlCJVczULl8eyR%BCX<`9QMd$ z03Z}U+HjTp_ChjOF3T<9dB)>Pqp|C*u3}`{b_hySp;sTg$3tR@;R4>=l;k~FYe4;E zg;^s<&Jajg-u|P@{q^wAFL6%#0h%mD!*J*xN`Ah{)O4CgR0RxR=owFTA3~l6L}>s( zF;MS>67Ir6=W-KfH6XepAsGO$ru8*M^;PY(Vlo(^DHBE$i930i9;SrB@avN*6i&>* z3@5%B6=A=-Y=whg&ma}7ACe%b*i!BDz1Z%%vg@Del*19Ab~M9=b)=v>p~Lt=KPJy| zGfVH<5Lb^5$2~4Gn+{z;Y8tqKzuGbKu^SgFb2X-J7r)q$-QEle^?q-fIMXvp$61C# zUKI5OEIv?7{{ieMiG)jXU}pMakh(v79^{~D2&$8B$w0pV@^ikFY+l?AR+ zhSqj*7;WHb33-tr5`5)Yf2YuMh1c6ebo4e7Bgm3k~eN}$W?6fnk%+Sw(t_l$=jKqf80X1_G`JfX2 zMX`5@P|eDMSaKG!5xb-SnIIks$86QtcDTth(7qW%Xbxj`y}mS>@!4@dmllKy!tH>C z=#j8{#GKqWDI2dj7DM!w5Zc1wL~q4mP20NZo5K{o*jd`g1^tBmr@+B*)$^^UpH)edt2O9Ne_R%_C|#|fWA}J}<=srO-!g@cH%K9yWfBC+PENMF5PLch?}dSS z63qB2v;wF~LGTv$C4?9o9+o-q=F6!1Q~e+fP}azP8n^uSFJ1w|4Ait4Vkn>^3&NDGJ(qJ)ytARyf>DJZa|luo(x-Fm)p#~tJQ z1MV2#{z=Xmx;JaDHQza(`GoXZnEs_B7|<%Ebi3Ec3xzi!w>_3kM&Erw;OEK;vBMh` z;N+@%N$&peVN{IPDs_5Gud~1L-f>Q!Pqk-^g^cVZoVaI}tM1Y!EX*QH4bM?Btj-rC z>~YyiRrffr6y^F{P4t@X{P3#dnATmtk0d*S!o~*i)(bFct-J^0bDOSl`r#;*y+~Nc z1>6OKDI0`jAjwNx*7e-EA=tdi!Bl7LHVJ5eX~{wA{by`3S1CCbIqM&rxR`U{e!nU5 zZ6wBkQ143pYepq&^=)Wbfy!&X*ZeCsG|NtUZuBBk*~cCH1K6p%a+}U~*JWg0{%mE0 zUl&`$awSj=ih&k*z@ptGR&8%xqmalWn?cj}GNpZ16=Vr&Sv`}Ztp=h&Z>`>(!a0rR z;2m46z!H$J7_(ym`dEI+UWVa@ZfN@p-pYi13fYhA=Z0l0rYWgk4W)DTEqD$V6ki^` zkh0y-Z-9Xfv^TQ8MwUeQ)gu-f#cLvm%vep}_%}Ve1d8e=;D{++TaL-3Rz&BZmU<9GSNeftv{a;?kLlxvgGJ-2*0=RqZtSzzg&m#;Bytl2wWK zH_XasRdnn-i*k07_f9rw*{g7jY=1DY-unwZ8Q%Hepg~8^FmwjMZ;+BdM_s^OmwBy= zpUljNf)_P6a{0rFuuv6P(!yC0#6DUnbHInts6u(a#6$4wl-Ti*s3c9QEWJ0*A%z^X zSHe%5S?rrj5_pq9WmkeA4{zVc##WmMsv_ru@r41A$bk7Szd~t}JlN2d;9@df$v6G$ zzS8p#<~GWbzwQ@zh7rpLM}JcgEfD|Ai3R3>$5<@)bj9Hf zt@Y5ot#Uhy@^D`+0pGXw3Q=a?O!%z?p|`+WWB(1tGj|YENU9YXUL$|EX3fU)G&G#b z^D|3TT-OTU)VA*RXylA=nY0{>_I3)8uFUt?(qGw}8I2bTcAfvanABcydHB`B0qiQ8 z5QdtS*_f|dSP9vThbuo=wEcAH>HD2c&Mm`!sTGP+Dj($=$=t`h zkf)Lh`$>$h2CU(|eM5|`2Ju(Jp+85@sz|Rym7r`R#VDP!?R=wI@<5D+t*hk9-pa$; zLQ~HKT9Uk#K~n84&9AkG8`^0E{3;(ME;j{UtZj>BVYo$Q zy>8MIewD;ryfJI<7e5E7Gb{#8ZCu3;g=9~@Sg&1wHLOr&zK=c21jm{wuY!shZg z4fD67Q8Bwi%fV%D%eIn2WBx1xo5Vg{p&hQvz&RA}b%j-227P9ELQA2JrU^96PbDVb z712^I98TMN30{OLurQx+G`ui$M*TA>2f1Y#R7ShM6m0;6_hZyKCuq_dXp)2Y!n zcI0%HKi+kt-x)$!9Ci;Lb(I+;6QPhF_sXx!cU3xlF)u1rX<^fZc6sK(?$|e=j%e)n zVRkP7Wzf75a*F<~bM`Zmoq^zu;C~jzK7?jEhwRF`Dg203ch`*1_2b0+&2~k9b@vzR z#fEL(`8gXN=9Fb})>gJZbRORvIq&ttZc0HCw(p--i7~M!2k0?mQZFTaHE&HD-`Q!S zQD_I&N4pPzXAsl8sFz{Y;GTS^s*Hv{NBc1y4<<8?f2A*qCtBK1`v(A)X z0UvGSjp@S8BI_SVK{6bqom3-8D6h3Guq6|}$shF2Jj3YiYs!On9VufwjcR_Na^|M! zCU&UzSEm<&cLu=m4>+*upz4sguI_BoaF=~% zt+@So&u8X``LZC~TXGd_@y2iUWveH^>7pS&k?z6RAj_(-Ra?9d@3#z0jjDiS^aua2 zusp48q^QgEwUZR$Bkr;8N{R$_sW4*7f%xnj;Kj=h9hu!P@3pYl>RpZz@oA~yJDj}f zmNM_hXxs16kr-8fdXp=W4j_AEY2Sh(o%;HsW=?sV0jiC^_K5lHiMHt2`&z)=p7U2Z zFBGN9$1IoZ^iEEgC3A-3_(XiQsg5ZIKTavM(1H98$N=rI6#Y8xOyGSE_j_UhRSc8( z-d-I*moRMycheMLuZ>vTYs1hNyLf-&oY8QkPpb#1KVm?XGI~j7*G*jqtR6sCLJeFsS5mg9FeW&t{jueE8g$b zKoPT*z^Vd$AH-N`4Flk$fkKV=(xJisXIiV}8`{NriH?kAYUjV6AKd|#%=31S9KN#o zA%|PLdjr>oczsM-`YVrzc0GDz6Ys91OBhJRp;Lt1>9q?jqYCzmvVmn~lX@WTXVf9? zHCITQ0)J&(X9{5l7j_5OyVW@8JrJEA)dg}L0F7*;?+JTs?()fB9CVFpWvUGj;^_&P zHdwHUc54+{}QRa zcR5y!dv~99SELv`S~3$?64xj3Q%DjU`djt}b|WUXl5oO$RWT$s^NOwCP+lW!vlB@w zsQ29iTMd5X=vI2vGU_Nl|8VL{7r?LNksu2OizT9Cr2N;F-)7aIg_-vtiXF+X(tD6d z>Qa?G_CxStv-92a%}~-9`mS)C5VX;~b>&!?>l0%gQQ+b?^ASjeG)A5eQ;6qpvMyax z_B8H!_=KqR)!OE&@VD_vNV&K_Rj!CVKZ}k9phe0>X5S%7v?dYvob7S+woF*RBF&_8 zHPo8vAGT>QTMC40N8aQ3BmK(}oxDD1tKbrrUC_+2UN3eY{c>aj%&N~hj2Dly^Ld&Z zr#b|=a%^=jyjD#++VL00GmXp=tP;m79%$-Q?>?rId?0qoc|E9_Vj4conkzIx^M7R@ zn3zZ95QSDCH#&SPPymDeHQ1k;^n7{+^xJ#PDP6 zm##glKW8*ui!)CwPC4#>CcPV0M2s0m_#gM$ z-*Z9vWS94;BI0Q^V^%KR>A3Yz^7D#&{ZwHzh&`1-!-Wk3i|_XXtd6=Sj3*No1g3LS z4Y^S|#SElcg4VN4UgB@$gQqE^`)vo9Xtr0k`c9DCrB|#N=n!?@y&)Dn!*5j+AiME) zM-%uh-!@3-G-kUGv1w$5gS&W3Wu$wW+xUfLmx=M8r7MLjTDZ%$4q`ymivSU4!W3AE zS#> ztCbFNKNAG0qn4_4nB#aeh+TfbVbGm+D6VD>XcK9$fDlv0>K;P_7>kQ01M;3<-pL3_ zNgei*(b}rXp*V{h@5V9;+a}M#t-x&%`NQK8vy|O2I@xU*Rx-~;7yWF zG^sWQlD<+|b?%r6r+I%(Ay#*T7R4DJr!$EohdkGt$-(6@H{?G_y1u-4B zn!6=XtQ%MXTUlUPy5693>r_F8@arAi;GM@qxr-oG-$UU?B_3OOKmoXna`TWTtIXwG zagmt!>#p1Dh=_{}sn9ME*5S5C{b0EZO18A$#)snt7HTV-SDu`SOLkeGQ(9dL`lZJT zen(rPuO8U0E`?G`hf!TLgh;mkXKO=IAYy$oSN|FFW&KEf3U}Ba7d?P|8W1jIPHRG8 zxCMp5_sX9@y%1oi2f_3{KT@LB9Mi$ZXX<<`u8@ft#-p}`Cozf%q1RzosDSkdrhkTA z4cbBjCCXN!0}>29zyuVzeeqEePH4I1q`^Oh_;;z_*_J< z;?#nJ<>k}{$^HurrA^`-c1EE2FS6%BNwxR{)rsnd%Nyfi1E+hj=@*xLQX!^Ex!`64 z3u66)x3WDrNRJns<>a_f{7fe3?~856#XVM4ymTe5Z!2y!o*>fG(?bI5^moKq7bv$N zSB1Y9n!C2Mz4h|Dt!H~<(`~)ydTH*AVODwSYNp5`K_OW}514Q)U{T9WI0)*^JTFRe zV*a={nH@;xgOrJ5cOIW$ZM|6!C=HJ$lV}gNWD#$j$ZrvWoSE+-ru4Vl!IT_dVfljs zCFQ^XM$u5SVtQ2TlOy$c8{Eiq9C^|UpMIrRqK&i()A3w$s_+CG zouXEcoccOYwRe`288V-wvs@Jz z1Ins{4U_gVBlK44xJ6C25fe>@mov&&ju|jZhG=taEJ|?CsDQf5On>gZVh1%aA6tN$ zbXS@T)IhgTpd2y_DH8y6FA8i1q>v8rllGci6+3PDdJ5~QPetCIbH=kv1}(`tCu7Cu zdUJq36BW&oXm#ueofk+btC5j!7K{@3v(7zl_V@{n^g$iFE(hj-~h0tZL^} z$x-wim{P2WVIPm{Je+$$N20saGTqitOQI_(cl-7W?a=7}S}$&^;bTHAMxrk;U?^n3%p5pZ2q)M4@k~ld!ESkLO8$UVP zCr}7|xhl9Ha$LH!ulSRO+)hgn{znDy_~5_|WT_gsA0JAH^m<#cocRi8LHfk&{13D7 zKVdAHDZ#{KiT43#8VIF4Z1(Fj>!%oNi}h_`HO5{Cw(X6&F1})9?cfh4Z3v#eSP6&m zHQ2DHxh##DCi7gnoCGWzZoX=BDczW$cTJ1Ydd-yV=aWi;CPaU%)L3oS{Qo{WM^k z`gRc1fr}qD2`Ot*A7%0czN2;!yV?^uvHi;sYBo5ZQI{3x$aBuRQ&S&?X5&-i(zn6) zM$2tNr0ZGb}k)Wv?KeG&Jhw%WYcq$-*3?5@yL_{C}`lsiR%n$|qF z>o|YG3jzWXM@f%OZbrJ!x0+mFi)ov+*X-nxQ7^4`?~1L+D|tuUG4|3CU(T)lv z-wWWV_(Y5N7%pfVtkL4=qT91xI4W!ac8DY?renF7MxjLy^NJfNyo1V0*nvw$n`B%S_`rNW@aQ@3fXOU+2<)gh96_y3rvfj|? zvytyVwRRFit#b7RxYE2@R<%tENOPS;1$PoKZIIL`wh~J$M?|VB#g@C%z(t&4{ zo^$ovU&v_6RjxeIwfUS<-`x1Y?#m2K+gxL^fjy;ZiMNzw|A@(qYi?b9aIFmXc#z> z@Og9?&!vo<0qI(x#qwh1^FMy=e+?Kg2PB%onyeZeS2|t8U=5 z;!Ri(x6P@>m^T9Hy+aWTJQ##C#sc+jiFIbmI*IhcrHN&G0tgGEvqc(c**3WTbq0_;V1b<6EIS{r6Ty(O1HKpI?0v*whU z+W|du!oXXlrlA}?(G`*Y0S5p8@y@ft$2oXW?2tln&fLJ(j_4Kc(D@n&~dPc<)Edme+A(zjy z0yn2*@L*e{ci>ee=h|9ku9{~BIF@-2g8dsd8P2RxIQyc9!fT~Xh?ys&#}Zf(`Y2ct zo*{uI5xNvG7lLVs2{`cG<+4L&p-LH9UB+*r^N7s;gROpCh!VQ>L|}N+bnvAe?Z8Wu zi#=$TW8?SS!_BD}gl(7h4rEj+t*wE|-h!{1={_kKt&Z@AL$|AlT)%dKD8hTY8p|Kc zt1O=DOz|;pi|^AdOyw)*?xLLJ8)lb{V*BUa4hz4^Q27v9`s_x(j>H#<#g>|tw2rH5 z;4;PUe0R7%6yoI)2I4BmR-H0(tC0U~IsS4hdnO*h3{S$tW_N&5=MM6Lhw1brxQ{WT z&It%9Bjv?beQ%<)4;jKt3>3$InvmO}DV2mr>^RvZ1f8$PGM{|F8la~*pba@92~0`# z4$X~Evy;j=Q=aVC38Y#9I zKXtUG!C+^Fn_R0Hg+_}3G&ND^;P-|)-e3$(u4(@fAbRJoufmD7rAMzX3;_uirVkI$ zI16n2fdj!5=Fk_)!^PGYna}y>KGPSUyYlAj@{Ehn#+jVnf3JWfCN(kzX(Pg{5!u&% z2Q61?rz$7wBX$Kei4pMqHX&NsBSQcRp25UnkZ0DxiKJvk?=vz|4?jotzZQzytCo>nbH}g=UBCjoBhL*z z_Juq+aD;vS6r6rMfXc_rQUnRdxRH{4R%<~2>sqG~Qx*-luzK?|q<`KH_Be`>@PwSU z>FLk9$dc??Dph%Egnwl6#jQ$@+!EWtPPXm6hLE z?I&UFHB2Puk@+DqzXT!;5`{1K>(~Yb1O$MaNqhrrEG2g(j?d`o(&R3AEqq?EOPE}? z{j#{d_JcOVs@lbTKmXYFOZ#V}ZT+M=Wxy*2l^#|H>$c;`zw4F9QwV3sG^nanNDx%y z1Z#)>beo~PG>FD(R**-&u}zSi2hqDVAzfOB4%pXIIz#XNj}39T+;jvKso2SJs9_&H zp8E^zx!nYh#=NVzKs*Acsi~Pnflc_rC6p2a)%Q<4oPyO|g=E}lkSRkTh8hz$cV|cm z|BE=tD&yC zd}S|+ZKEZ=?{KPT*@YW6+fUCuoR$FKR*V3vCIVo?`!8Q(wn<`i2x5Utz=xnmj=Bi; z@)dAu?Su3(wbYA{NsRnUhU?_|RI1{1I;|#)Bwg#m@aG!^<~O`>@cTzB%M*C} zHi2RMFpOG=9ES$*I3Si^FZ$e_jc^zw@+%~UO~nN`>SsuGd|+t z5^p_PF;j58s6BaUqjmdHk?~tEt~dCmicZAwPz(?-;}a+k0bp@EhZEfp$YL0L#mF4g zWFMbEY?y0+U!}q5pY@O=pliqvovhkri|^1H`C}V!nsu3#EYJ77A*J8~|I+R>x5f>( zwJf%59ZiqLjwe(ly(2D5i);`kcf?`mGpTx-TyL)QUsxR#9DTP5;M0sPj#qI3a3M&j zPW{d@uP@pLwo2KjUxTm2fS4dyIEaappW`1Ywd}hP$&#&+ZRcCoX>9eR?=nOLd~MV) zrL&?C89GC$SUlY}cj2ti+JnV&_}{MjspI1t74X?xvWRlko_u%v=@tb?<__?0FT$$t zDLR1cV<}HM6~#Pbtu@Fvdn8yQjDNMvV(JFbv2tbzIbfJ)OY}2&w4Y$wA1&>dC%5*U zD?ZnXdj)5guJ|d$LfT7^9Zv_lI(!hblR)Lo@LJKw)A;h{tvb^`d!q741#IankhD3tW%jut2{m$yv9iN*c3N z*%hKZ6DtG2%+v~YbT$A(xopwP*}4orvrnGsh#>i~IpAH)wMSICfvW^{Pc)-`l#G z2w{8GeCK06nsB?X!%~-+x}*ezMLqnwWzUxu`Zrb6BO%9j;@K zvXcQTa|TdW$3Qk|6G#caf!K1|9agtd`*(M=RMWO?*Q4Hj(v};bn;-Lh11*7~SMrM2 zhrP31!XPv(Q!VYKgTSTIiw!DZ74Bv5`_acft~%naf$7PZh91uzIeL^=ZRk5uI5e5! zk=7)(6C%cq2Y`E$rU#pqqrR`MaK_a5oRotW+ZZ#s)BqK)p1_<}5oG ztubEwj@41Cci<9t}P-o1dN5+!h#wq0D? z$jRTI9n@?12F>|Xzu?lK46{M2gCd`k#LZG|5^vmF8Y5Jj=;sFal8aEOFc}~~_`)a- zUmdx_YDHnT)@vaS8a-&foQs3QRPhue=(ZVm))yk- z%xVD!yTT0>;zzK0>)_{x<`o5K@j1W$=b%$7bu@nW2Oj4LxdODPuAXT+=17U#T2XJN zxO6B@1s!UYb`E30T<~CH0WfbX;+qWb4=&4Judh_<+JcQX_fpH6RR_ofIZjyCsMw-n zjUt8L--4cF>#j(wzm-#n$13HH1lp&=1Ai;U7zE z@+5T_ZpV4p-IYTLw+B}x*`4alM9b520j!jOln8y*Cl0vvycuX$jB?Kc&1%$Ed%pu3 zp>Roq_#qhj@YPEVSG32zeE4~$=^1O}X+o=~{eqPJ_V%t*8I7HunsC&O{9jm=K>_i9 zu&QmUZo1cFguk~UQdtZ`-^=lJ3L{GP7j#mz^UTf7uY`7MFza+qzRzqd9XqRPDz|Jh zjP-Hu9H+il9Qv!UGc9>8;_vPI(x-AQ49pF1e;);JL?PNaMR0W>@7;kU&xVol5{L7x z3+4v1Sr<#MJODLc>-+_g%07YJ!d%1nUrF#Rb09nX^80)(f9?0HX2njK+H}QfLt+p^ zL#SRjAawBC%eVd{z@F2hi}xG=2^h>GP}7Eed}&1BDVb9*U4c7wDOk>}hsT$)_Tw2Y zv9`WGb?}F7t!O{>YNIG&!J%ScGA=kc`1F(sSf-B5&D;u6NEBJ4(D57_=!NT?%-T6r z>Adz`y=NN4rm^mOy2KAeD8R2%rLkhcbVrx?k(({q-F!+#C-yf7dEwpE;lK3!^p{}f z#4Wu8c+hkt5zj;`jNjbq3(??K^NE2Fv6!w`noSjDWUZTaAT}}8CB*`1p@+bpgFp)y zEO^Q^ECIfwGY7g(C<>k(IdJ_N=-qnW2P{lM&8y!@Qi^7eJAK$9rAN@eH^D2*NRe92 z{028TjYjZWsGc{s-$ZU=&=Efa3_bRTIjFwUj502O1?=gcKkVMSi_UZyM8)wHH-C6< zh1MX<&xh0GPo5UEj!jiKz0x9!VN?OoNYRba56R^T@czCF-pj|ZbjBGh6HYKq&C?peYaB}YS&r&=qqVhnkwp*nD}TQ?kaGd8xh_VnZV zEs{>{;7)O^&WNbVN$XJ zI;ia`9Cle0W+EU6Fsb!_wLDRCc_qJeaTi3vtr5pD?@j!Nu0bDK{r6{ivsF^0O>sfUx(5)P)(tHec7ExLWm@xgbWEPe)=KXpnf z@J}J~CI^-;{zd=jPt}qJr#t-1_sE~RbL9A+8b;3Wr%2KL?;rZF*Qi`~pdZ5sI<>Bo;B^$^hP4DT5=Y!Yt_>&yV@Yq;?3-W$x$9TrTe*Y;ue@3H8I3rwIv;r9X|9}3! zxC5^{1cVzY0b^>GFY97ZoZbnnxIdup5pcey{a?m)(d4=)j0nCe7xN5SE*ZH39iGYa z4?M)HELKl41cAr}8mv713v(~l;yApyZ>m!m$ds*|jyIMWAznQe(7fCaM=|D9YX@Ez zbLUzV8_Jay%Ue3hc~|SpgFv~Sa-FV^9yA7lX`;uBQF~e;3udc?x5dRL`ak-_?nmF0 z(p+jt>1%p+BHpAYv4*hnxq|!gntZEU{ZVy&_?}V`QKP1uO^Ggz9Y~Gq`iK=Z=+FY+ z5AVArZ|UZXEQ&=%mrNi81dW+ZmCzc}`mUf1>Ec}#;7x5Ofc%+V%_Hwy4k8va*O(y~ zw;wHT)%Nb+SFkA3;J%gOhU-P4!kXGEO{q(@q#gEhodQu&j=-iPuGFBqau{Y!K@|*h zxc0xIHEJNKqPULe;yRLBs1P?Mm@2Yn>Mc5~3K1S0a&~~JxtT|r$#uM+rz1l@PXweVriGwR*{|FYrv|%4-GfF;J zlLYo-x{BtwUI)jiw&6N$ez|F?$k7vBV~{E+LHa%VP4Z2@NEI(M!!!4F%3B8Mvbs~` zb4hn=Ppi+D*P==d#j70qtRpTinrVA`kkt8|$m75+D2GV*+ad1^<^ACs{3T01mkxqY z)W*BFdq^2eDNa%42375juKmu6MrJJweqwQLHunNQ27S0S*y|()ed_6f?A3U)eah3% zN6e39m#~jM+X1)sU=D9e4Hg?x4&SI0^bbSG|n78#t3Y z77%(}Uc7lVOljKFMy?6^3a7g5^-B$WlQ=j61j61jBqQ%!YE+$Oe_~SR{XGky zPvWgF$aVT&fmHOTiehyHUF%s?xzs03OwV(0w^Tg@fv7I%4c?FkrJ-{dZE7T1sYPY# z-p7{glWUahDvvHyJ;-+j=1!_togULwW1Y`#;@^{*_(o#;vtG6{to6=1)PdiDgb_nfC+SrtN; zltd5l@ZI6x3?rj+{Pba02 z4p=kQ&$ic)BN)7OaB;J?Rq<5&m}Kh6 zRmr_Y&Nm~@11jExlq$+8Y3p-!32B!rYkK_J=8E^prEo@Yu>_gKZDAuykp+(>O%x=f zaRDQ;EO^5fxg3oP5OdnJ+4}G2&Q64?v#8sXK; zw(@8|-tGRLBZhF-lw{8~cklKrC>;ICv+1`Qh>frJZ38A{E=ziJ%-hynLolbW&48LS zB_~X{7t&`vHy~7z6|0_*%*3u1DD-fsyXIZYzKmo)X92o}jqVG|96}7NXWbipy+F@_ z11F_3!wD-VyX-PIt*8n7^PdkZxt)_w<@`({6VB2tNJKNr&#SZ5i=dE_Ek5uH_4BI3l-9{xZz@Pqd{}OF*kS& z5o@W-M;%|Xe_`!KyHtyh-X)lYt8^Ui7 zi4DLIoL6cA9p8_OPti3~T<{k&P;gt9tDQFlXHB`(l0PBh7EiTvviGi!>mg?IIS~u` z@9Q+JHBYJZ7ap>{*{Q^$wZH0OtHa$iQ_wFge3#2ybD+W#t;#eE8xVZ zEfya=yYZoB#as3cZMH>aGc^!hKuDlwH7HN}g*UJxBJ4vwUM8xu0%x+u0#3?aaF(5k zsfQ3m`X9vau9!jF=2Lc-Y0Avnm@s&&MVe#a;eYvQ1uX-82+ro zCKOzJEY|X%anPy|^Hbg3m-E}7VBU-lD~HVgy|`5L0JnsZ4Ff_S2WQfpFz~_HHe7k} z>%c@{HOO^e!_X|xkoKlGszaRewaOuqM#vB>>Oxy!VZrig5?7$=9}$sZu(2@Meizv9 z5p>7<5W-Z#acWVas24E$>7pIQhwDELP{PIvL^ZZeV6Gqzf_4ykbzzKC56BMu|NGD0 z0yE%|QltyI*7n=GF4_rAxp}I9%Scyx<8=3lB^x++D__4mozDYIRl@m;h7L%15VrZL zU0SiF9Eg1G4B?$~J_vMf*G}iJ1`Z(5F3rp*mT7t*kfuue>HK%VoK^nvHFWs;E6`}y z?u_q^G_%{jH%hi+|7c{uOJ8mjjr@!^i|g`??Cq*8%VW$Esu_DQDJG5UX_1o}CeM>o zD3>obfR_i-sky^Q*QFhd?Dg|>#W5j`0eWEOq&<`tKq#Hr#DBqCmF<3%GHkmOF5--? zS}8L!iVL$EEHJd>TG(i=25XYBrw}AHX-^v;UJyK7Ue3awt3slzDlqXWtET%G1iirN zNg6#z4b5M_ucE+q$rR5wX0ibfbto9V^R1;@Y}c&0`%(Dg1c)nmmf+Ah>Ve4Fup85g zFdxC+A|0n+$t)==mR-72Sm21bGfqcx5$ToAPT0zMLiwjgg9taj_Ow=-Un~>vhY#Y< zKF&s%+-8bKczW83^?7=T9JDAIQdmcvdK=!Z^CrB3Vaz?9&bCN^xDe);+cX$7DiJ=M zq##?G8Y@kCx;=}-GdCjF&3Y%_V+Jb^`em+~N-a6#b+aGluw)-Q9waDy%2o(Aa`go> zZM;j-24PETIGky7m*YrO;dJL4F48$;{&{_J<^aO&h&5;Sr4OUn7y&!ggSvlUDLOk9 zqSSQ6tZU{-3*}viqwM}D#-z)O_pY`+^$Dp@c6VPV3_9lL_UQEBrKv!}k+`n3$(FGy zz$?%~8wHR9wMGyh@RTQ%BRsDKg3k-DXOez3N= z@b7DKRG#ko)qw0g`i=0OqP=1Vu9ip}9sI;3)^$b|51S#I+^D`g?7tWV4&sKQ>CWy7 z7I7?~y#tj$m%2CZjA>WnE-ncFzx(JbQkvy!-;6&JeH^{XLyj_@9i?`UhT z=&Sys@zxXD?#Hp!uAwQ;oZQgmSSS6m`|Qalb1~#OT#kxH;?6ik4#~E+GRBX*8|D1{ z^_-IHWDh%9oLMEbQf53>W0eId4+aMljUQyebi?JmZx=94j|iMBD^mSKwBqwpbkxe` zo(ZpgiMM2CjI6@WbDboaw0%uGzx8p>03Bj~1(Op9l@zs1{#opEk@k`C%VP-nJb^zo z(8T)42daC#j4ZXYwKG>TL6MT~9okKLBfeR_?=NbBv^ zcdKKKn7%+_K4t4yA{o7g{d02g!vg`}22C7108Ar|yND~OwWJ#+waJ-fh)pKUpbj_0 zyyZHiRVqYry)$OrOx?&llJo_d)-5`d;;*-0sw%T^yV)vVvy%e7?>7vDdcmO66+f(7 zF3ytwfx_S3F_*(2!V!!Y$U{HOU8ik6^8V^454JrKi( zk%gYkNYYs8ciWl0<-gfZ-r*meA-DWD+xedc_aEDNhVb2rvi7X`OJ=a`8A8CpewN>< z_#Z|UYw{J1=$p!FnkPUTN9Q%slx`+*kQ%cSN)s~A#a#~=e54GRXf1~l4iP2svoyt=fL41ZXA?2H;KBW2t# zuFKC;`VGp(9Fo&{0z#ZslS??iyjUQb1#jD1nKv+MZ$ga}ayB}ia@#lMW1wB;4i=C; zd19W_PnI+GSU(0qPV>QQV#=In;@VJ93!QK?FRQ73$^f(aa+44+m$0N<}>CAt3utq z#~1dDG{6U62Cn<20hlhTMq%w_k>qTDcZntr>0c;bvP)EbKWBP-j6GI09@?+k?dvfU zH&ROR(i!d^i$*1d)p}9|J4YJkG?b@{7dEQo5b*LuUAW3ujL-Epb#Vm%?rQ5Q?e0gpsULT&N9rSO}uI;*8#+JgD)^ zE0QKQLP*R;7@m;YKz{u>-k%yQyuDlnySm!e*ui~OU8tR01(m{W!lhJ{?^IkkOPTbx z`PEMQ2pHE)oEMx|W7LC4w?!S>=0n9(^S{s$CCrA8cD`Mcy>c}Fm&0bZTh&;QCnW1& z`kpQ|*5n9my+u`}Nzkh4xfF_HRrY+<=S{7aSBEvLYgj0cwA*W=)Ln!lY! zFZsQ}>;Wj+>ZM!v68P{fs;}UH#b-nf>^FK8Ws*N!`#XsrZh_idCPoR+CbS#1v{;L& zJtvEcK&0exKjO}xhv@zpY-N<%3#Xg?_P&)7=}*JRrB&H8>`(EZ*b{SDc~oT~u}4%2 zyD1Eg>Ts)+>lEp8mQoQB9fGa5k++fPxBLJ$b8fHpV9=sN?qNCf=TH(-Is)U139SMHhVX2rgs-Tbg-y)>d2Vng5a_zX;VR>P&$WuC*;Hm z{+_%4PO4^9sBvNEz3|osS1+wyOs5T#S-ReQ5at<3HK&R2n)9JN=^WS*Qn+{Ip3toA za-$hPDiW@Xmv2t=!Rdu{l0t({*gydHaw^Fw~D=W`0UunaB zM!F>w49!PAByHqpFhze%`8OC84jYmw_WeF!GCSQF;e=sM(gTQrFXa>$;Ad~s?%8MS z@OG_+JwITz@|$6x?~aO=v2ed~p}6l7tiVh!LaT9;Pg0|%2}*0aF4qZ@R0B7Edy{TS z&MJFcC@RZba>b=03o+{v6Er93rh243uaIzz{kzz5j-;M{`&!*v=Oz^R#AV4Ky`;J0 zEJ}0W0FQ;hJIll`` zCD!W-v~86`ifNmydfN*TKQVoP74F@ zi{pMZRw4RvA?Fqio;zZcr}H*)63OB?36R70J{td=!@ov0%3@!k0 zk%H6{jaXpDbxFJNl47Up4#IPLNyTh0m$pnBJtuPK{^l5U-x|j4QP(lu=)xdnD|%>r z@4-tjUSlOlbx)ULa=!uwO!2KLy;lZOz{+>5D5V((TV#()ZIviT&+KI;;)!PGmqPxCOA8}pk;*+G@7Mcctu{0~gn*2D6 z>^&w67Ig#sQI>=j@f0~SptVV52YK)WGXAvJe4}Bd^ApUjwk?oVx)xJ_YnwVahDl2& z?XT_jlv>WI9?gbY(*of=GYz?G5P#txUC-!R z*%_7Yr5H0SkJ@^h>t_+0^LC%(wf;vQYqI7-4&ngUub73oJhe&XFLhS4_i4qN+zn3{ zUtb1oZ``C^TeT6XGH9XxF zR^A5W&HUTs-nt$|ar^sOW0CyCq+22kN2;Jn6BcimE~!u^;#qLQCxlURu8*DJcM>+yAbQc7Wa9i zaa;Tt8lk#$;)onb?VM~0)-^hnm8dtICn@8V#getj8fq*!@3CRCusuQ4jr$c^BCL4h zD^xoMq(Gk(Gu~c-$5ItQ`eaR&R71o|(P@H$*R5-d7s+!bp-ZJH<0C`$i=NFwPNH6( z)Zpw<{?#{a$PT{W2zM*LhppchXN+i~Hp;%ruY6oG8%f>CYHfwkF@(vOxF&$meI6tEee+{_B8P zST^tPk?xNn)AjZz-nnzf)Zm>1ns?}Dk0Db^G~w!37kB3kw(iT8@3@q3{(kFM{#r8h zBJX~I_!PF$bvfFON!X9(-PcuqN>^USd5GV>cQb!BO%@`vRv$zIA1FWlh3I-wHmR6| zyShLJ^2zku%ON@9H=s4o89Q?}O%{jCzRx>^R^H{kV|fdR2flarHt>jSbFk1~gsl!} zeX{qCA-Sm_0E1pi^PVVU5EU(-~vgZ{dKjIk1R2P?w&d!OHW51S;`@5 z6Ry13ANsI9$OOD`PvexmM(1%fkl=2bC5+1PgYxOkv)0}cLTp#fJ6<`kWAQzCzt?5O z-}dz*EtbU_5RmIQ#gU8!%_|!lLlMDE`NP&}d6+GLJ ztXH>_F?nXao01(nDR(1p1@Vi-TTbUI(vuXGqC8!r@7u0C4d+|HK0|Es9b|j>eCm3J zpb#*-84#4eZwW}Mfcpz&)}(XZofw(}^N5GZbIL)q!)ZcU`#bt%FZ{u1cA7~{`kJQl z!IV)ii+aqbQpW64sMn;u?uDlEh^N+(nWWyOO*l@oD;>Qrde{s|84m9uRCA>v!ghS{ z%Y9BMeG5mGTRC&1Iq7oK(mP3< z=gYOY_$x4?caa44JoUnZXBvuOBPvE1!7$Pjfo?MYil|bTV%GMeQZ2`wmbUR?bP@>A zfQ69>7)u?vhc?FQT&VR$i>DySTM;i9WmfJ|fUC4no)(OmKxm|O+(}!izaJ8gQNJCnI?H*+Z{LW#rFu)%pjth3I7*DFsjJ+ft^2V* z)VVFTGv7gH(wiSbgpR|EyG~G?ni4ScUKGdM{ zr}rLQrCD}nJi5MTcErAtl%K}thK)()n=DDO&$*&QnWZ#)IfnN1Rcj5wOvjHIP3zC8 zTI|`@1=PVdT9Zbz1P3ip?+F>7mVBo^-7LuNEhR1Gz>3w-~m$AWV6k?zHkQ*!WRXmqvKr7%xs)d78Zk zW&5~_8|;O3QzD-1r*%;O@X0vtew1G&2)gbYYB(oYn#)mAQI>?sNjBX;j3jgDF4%GV zhi(?UEZe2{dre2uJSvqZLUl)gEHSD-kFe)uR{$KS!&h$L(ICY1GFlz-ro>%STGC_2i`Vlbo@bQgLug zRSf33uziH4(I~rOBsZ+ag$L6PYj#ImQ>+F1SmP~MvcnM_inSAoQKf|g>}o;*jm#6k zVDC69Ju$}l!;}T2@d&~p`bBPv&WiCvDpezRWIJ?deBJco5xIGHXp`Uxe)m!;ujS&> zk+0PevzwkHcTQVrFTI*M*&#Y5Cn@)x;XrmK37_*5>6YhC?P`)Iez4;fhNyTHM&~Ps zc=PMK9kK1O3#o-qy^^blxHSdi^FV1==k!7&j*fb`-3;rTB@l8f!N~)X-FHJjqBLO#FPbv2uDXN$+~&&QX%T>3t~^rF`24quNg z)m4ny13`znPgwA;%Qk8=iDZZ&LyDX6f)r=-xsOBUaEaevUxfw)F!BmF12bDQz32is z=IrZs#lzuxm2*~856-PJ=9c~R(;K~d>4Nj&$lgD>*)l{x-|P&eXQo&FVcmHMjWjxB z-r~yG6l8P)!4QKHi&hY8wR2q4AAb8?D*qmwaXr}T_H>k3H1Q$>-u@jFux|mL6#xY? zjIj&~*uO4=g8w7NI3NQ*tkv@W1r)qf6}AFi5x@*UvR{T7{;(DrkYmc<$9RKN{yrZd zPxt;id|3(Fg+02AlK>nn_d@)5v$gOcNCBj|za5yW1CXgCgU&7kC7^P(^8I&6BnLFg zT%MT9a-*+$zy<>Ki3e=GpRKn7D^Ue9&t%Yse+`MDqY!6vro~|^S1DBBZ;g*Ad0KCz zJ5XNyR?|ut;`CmYi1{~u^^k-`?Krf17Pw<80iY?Z_xuc-Cs2Q-aa~jh4JW40de*q9 z_xBx*?9W(`UUrGXyp8{qFn{M)cgaX>mnf#wx2?VJ0)?oH7ml@#YXEZqco19bIvUGQ zwEoG7hKAL4hYq?T7T40@+*))4H2#hhawL5%0R!}6rt1yCCVxuU)<>O#S5^%C3(D0;M;NqGPMh95jTMP_oqKTcsZ#5k;}BOm$CM=M zzT$c>9-G+OKG6TJjG?*^;Q4ZslqM`Io{GPreoppo6sJ;GrYVPDu1r;rRdHS1C;RLK zw)gYo2PQ9Aa)>MA^|Tpc^SFXV{4nPBlT9%bgdfu`1EtbEFV5^mgYk(#9b~4#Phz7y z{fs9eBb=niXq8(@7xq<^J5Z|CaFb^I*zc1KQJ&UBl~l!O_I~0_P+LqZGdgT`HEGcy zJIJK3Q7+d~ol`pFnLpl*E0(f@i^-wyJ$Yoi2X)TZWHciS;JW~L(7rR$S{tVBgtOHa zBLCHM`c^ggt!wkOb&`WXqD8OL2wenHjo8K;H>|7Nl317J>LaNTU4ohjz8@f#8p}BA z){v;)@Krf+p6BI>v60jH=4gSs{r47)AtHiXv%RoJTQIXnd$42R`<$*iV<~_7rwRB* z_=7b%K;V_cQDYYdEAl2C$>pvV?t`8Jma*O46S__RCVxHVb-dSda{WrcJ3u!bh0=`3&Z#M&i2zzaTjJ1m8Raq_t}%Dr}pg6>XhcoMRmOQX$sQ^Gq$@uWaBC8IVqbkZ%T z7r6WTzb1-L?j<>0vOa2@ryVLG7EC8Dm}`7l(y#2Y|CNffPTf+!Uh(;0S**#4F>kf6 zDC<>@e@7P*D~=pzq`X28z{u9aFg}qM+jV~|ntlXX7dw$!!kn?X6K(X|cOzgI(sX(I zzKD4Q8sy^_g;@4b7QM||+X>sBPzV&Gi?7z_EZVeJ7)1=ApBHBNRTk#zGiNV}s1@#=;L(W` zKPl7%@2PP=ZbKg$`5h09^iJKKBWNDfJ%z2oi*~Rh8i!}RfXY8YMW5V%NGCkh7BHO4 zW__QvkZsz4WDcA!4vo!QQ#qqu4T9f%B{EU=2a{8sFyEu|y zHMvGV7Ks_0-*X&*kI^&X4XPpT&le?G@}5&$xk{EyPYK#iaj!^CtHYEQ=kd>Qa3Oms zK;YAcH?TgY6nKX2EIsxvx>N|%dD;72guirY_{9F^yH8r73M91Kjk!2R#8x!prbyFG zuIYEuR`~ob0+8metor8#r108{!Le=`O^Xr7pm-$E50HLBvlefDL^jbKFZib#00m?_ zQDCHQLE+uhQV@<)KsV&RiL4Xj>}zo{UV_4T)Ejs#_YD0cae*q@xk^X=v8U2-y#O0OoJOP2=`qeK+6RLZrTSlV(~q`;xxZw zjzIMxxKzTI9nM0u<(;d;{fvlW=-?fBu?gB0tIi5V>h@Zu=1vI+llrgRj_Q-GhvsW! z5E00DvEZhsdAz`;CfznzhfV#?5@SF=~2Y1BO}Hn-6{EFY`H;%11^W`);okiX zU3hSmC$614f49GLo`4u-*=B3~m~+ekZ=^(|=e75wqgmRlNJ za_u}6+#hrzM5tXS2C7ion}iaG!#f_1|4y_5qqEzg*G^jU)7=OAhIiA~<-pzK&}(s4 zWhW-s`iQ#PPBX>5I7T2)*m^D64JI*EKJ#DXF9zO2wD=;nUlhjuMiYF%j%zpz{1#=A z6_7of)@{(d0oG_hDlS<2C8j^c8*>u~pqd-O24HyL$_e`ft>j86CQoUjO$TG~rcbouCDE>Nc5z=jr} z1K-1F=KaKgh0GtT5JQz)=L3vLdS|eytDvIV|Pvty@_U}D;|4wR~TIE z9A!~qNUHwCygnFVLEys9%UqqKWr=d@z;$-?K4tewr>~AD>r8@HPe+V-E0lqBP1ViW zlO-7KPpE%0zdPfpel|A1Qw5m=QCfIWQ~}nBd-jLB4%Igs~oE8w|_!a zde&#ZWXe$vsR@f1FPCd~$GZtXei0gYNrL3#7YPv9`Mu})Gv08AV&Bq|x(H>}AalRx z+QMl2uJtb1RwJ^5jpk`^E??~D!y15b-L(1ff3NJTd&f4V2p^oMmk8BZ!MaD!^jzLC zI{l%#5pAAATCH~_jvUvICMtPLUyEo3TWc`P5f_UeIzbmCuobqCE0Y6Qpuzn9tm#$ovJ1#Ka(h_Dkrx?ojzifQTJ&ZMr* ztnTyleEAJPrX5;_owZHEm_w}QMwxelqPd6%m?}Fcb5DE-M`QPj^w?% z-{|b>W?RhD?e-a!}dTLowOjnjE2n#APfMqQz8Y!FRh1O>Xr(@P{qBp`>E$=tk8@*{Vy8^ z(i33lJHjScYx=g@+@2|)NU3Oax~{+2VhW*$7Su-13A^Qq_ZBJQcd4Rq%fv9yTincE zYv4jpK=F3gM+p6C6oFi}yypJzQB2mY9c28ovQC$6VI;#B?%rEH*KCS;=>B%x{sCwB zCD$2q$2ZDU+bYXP*obhJ>c7)?G&|`^D&F)AQ;r-+9p*LIBZ+QQlXcq!9+AC;5eqM_ z8O*5~x)&TcpR2fVWCN<~R-m?Gt)%Ll#fd8h^V@Jqj@O{6tr6RUYj7uNYsqrUaTQ?j zU*B5Ky0Ku62#)hVmhGYGgylyf!-p!UDWu5sY8j`x5#UtMH1sQ+1IswoHqVTX%sBD) z!lEsk+7*JWQvm9A--JGywlaNbBbEJceCma;f5mBbL2~)y`dReCJyxkhF#zp=P;_pI_mVvNZk*EW1OTXq}D6> zJjpYz6K37FVdd$C~EHL$t%DgaA9l0r4J`ci7q6jRt2lrTL3>3Sp1@m#p z^(CAaR_9_(U*QzzURWHIlXS-eS+D`xt6vmj&Jei7KmUnOO`a&mn9tFi@%BfM9g4;X z<@hiEkgJFBbdZA^JyM+o(M}ybXhGBpF{pQVl&gVr5;QeOrjZI3mB!B=Uos`rfFg8J zZ9#0#K3~P!ajsWSiM8O~_rO@Tra#xS!a^Q9t#KaXDv4hBNNPd{GyYJF*&2x`@tCJi zTAXwC*vx&yt|{eAmk-Yj1Sn5W#=sKh4ZuY_j{(kUoAZnlgCc8b#eE=|Eo27mRs=4_ zHSuz!-RUbQ$zN0XtYe$L?%yT3CoVPSV8C;NG$T>x$riCSzAAU}@Th09kPdLJ&hXFD ztAw)v)w{-olIms!j8r!t)nuwS?mRPwx-xDF`(TXweKO~ZDw1P6WuHhaw z7`S!t>`C3zm4C#04Kf?`?-iZF+}e_7%RV|*fQT+J4AdhD zXV{qca7^g+eyf`w9UN#Xb6=)hQ?sP5%am*O z9-1>3pNqg0Wec3djOtqID=eq>3^iJBDKGph`08O;G9@6B##GaDrQF8|K%|zL?7`@MN`$e(Zi85G4jgO9658#Tg=Gr zNAmvw(9V~{zrq8_kx1RoRQ;=009FNa#Qv`W0l~jH!k__a6$MGPO}L_HsytYrdJMyVODA4M*wJt5ti=af8^-igOHSl(tv4*usv zN2)i0c4)kh9zC~uf(KBYG?-PHQ3S(ccGb8s^ZCfUV2Gy#NOEetQk@z+mnu*~>Scz9 z{c#C?q;LRZoAS%*f35lkkzmT@c<9Or{nbbf3d++?;lhMkRGncDaxx&!qUc5zqTGO7 zcd4h?w5`ZO_lD4(G8`{bRSrQ9z#n1zr5a?=;!S{0ABj5im72?|p>(a2mHY&bguqPF zvsxV_IMNg6Fqj4-=bw5S@+B3JLaZctOaFRS&t=c1kDjoNKG#w4 zjKhnsvGM~t0Z8+axX&{UIzTSIvV~h#T({QbOj#S(K4}G3E@IpjbqsY!wWg}oNpcsT z^FUm$Jne0#JiWla+L0=!P=VTC#>5?R)Rx$$|)JqlfR)d`7Y%I>g7brUTe@gGi-j!g*3s^69?^6 zC-Xx5U-A1>T6s`3x8$nJzGJ<&*K;HM?Y2;t;QPFr#L8yt;`yM2;>XN z_Ja8%{sW_zFF$h2=b!8p47N-_Q`EOIue_@gNzvB?C7=>uIfi@UC&BiEZ!V@T79-5Kx}h0KZTNEy*0R~ zFfhd}{Q^kg8(8?-0E5q^ce0oKc{P7OUzZQW82KqdQ9k6mCTGi5u2RjB_iRdQ`kkM# zJJ+OB4+{+2wrycZherw*e-xcMj@+!q0b{53SU@LZe ze$jUpe%-_rpnxF>t!hyp@a-dsYn7)@k8w@JTjvDScyl0K&^TOI(^YarkqoM@{*1Z= zJ9aqAZZ*5RRYfbLPnR#<>Nl(|8_&9(R)6g9z+!=|u zJS9V~kMXIrwCb#>$5RO_y*Ewg@57}``R~&ZI8RlU9clbDU;`WCf4ob{tfbi_H0c)A zh$}+#t~?rGK5g9q*w=4c{e}|^Fncqr(*bX_Rk0Qo$Ec1HpSK{ke)dyqs<^sXI#QJ} ztJ+iqYi2{NNlOG)YW>Q+5S;2qgS{4YK$NKf3V|uT=YC{bJ1)8JB;yaQ>??XdSTQoF zv+EQy>w&x_K!SW{blTZm<7@d^-1D&aW#d0%GwwSjpRqob0HZr-?4#p`WJIFMi}q%# z3IlQ;ZL;L6+dQ92M~Tk$n5s(gZd4S3w^iRD}E-PFAf%ZsP%Lv8&w zrnz}<%uNLiR%E00vgUXz0NIaa&c$+N;$MDrna1&>GLiUmNImQ2 zA*XHsBPj#$NB&EV8~_hwxlkhGf&5Q39a)N|Qhk}_!q^Nz zIAA8j)mxkasxo=w_3xMtAfd>#9si9qa{a&YN`L~*atUdfr3{piz9)0y{#8N(K3E=3 zMv`W1Mz`Exy!e2xu)Bm-9R>ngK*|abg_jb08Cfhg_W~mJck{0p+|gQU7~-rfV?OUL zz)!u2>%8H^7>CP5BN0og3=Zue!EH#$khFB{EF2Css%q480P6n{G3yjsyMLu3O!B2s zlvxu3pd6WkPR0EZOfq{2#HfrHOg#EO-k*?;xFFfBtu{oeeEKIgHAWJ)1-p%=nm?Ua~Dn_RGoYaSP0I5q2Y?0BcbU!#C=n;_|U=COFuJ65LC@$HqX&oJ`eit858 zE?8Opa;Z?>bHJ7)_2sx5kPC*GN+d_D2KwP9$m7C5i{fG4leNM7;!-j{=%oefgtN;Z zz*4iA`dW6X@A^1ffx_>DPi(|h>sdl65R@y7dZK~5!mFw0K6(KpmzaALYt#T`)p+SA z=}JjIsZDepM|zUd+&TG<!!W}Tv@j7me=Np_xL5ceHCzOPhqA(mJZbwznF z!(Cz-r_IOFDhFdKD@kpOeo3g^iTUhxNqHKL0x@pNy-TbW&#y4Tbj^svVepS1Oh>}0%)@d=WhV);D#RcR znO_v1832^4yZzA(1`+t)2%!2*tBwn85bH=_+FnUO;eX!76J6LQ3P(u>Qz$c5uyx}H z1u(EjD)T;R^O71VZd3(QNZ*4yoO4E*kk8a`28PsR$GE zn@K?`**!MlOp0obQ;a$*fy30%-h=ri{?2%lnd0Oe_JC6_Q4rvaB^AHM>r)?NUSx9( z0J_2E2PhHA^3~62SFW1AU!tE+m(R5t*MD}!Z---3U%adTg(f%cUhi`7jslEz4viEx zk%p&oUcVj@biC!XG?);Rn{KI$J1ssOt{RQ0(8WWx`T2-XNxgJhXp_C$G67O6Fgxsl z1N`P{ZA9B~IoNEom+n#>YPeoqw`a1iZE)eY@q0;=I6u()xvMX9=w7*4Ho~}R)0sP{ z`Hvss6J&+Ff=E3tEM4z0hz3Y<4yyJk#gqu8VI4KS7aO1~)5ZF_GVO5U&4Px`7k6#v z(Hpu9N+dJ8Ei_Ua<0a7+O(^|_M}r%y>@rF1lsyYse#09 zP7<8sMPRhVMVXHrag$@{Om7(6O91Ic$CfzMaQ-gC`0)A-Ka+Os#tyFOVvAHeq>OjZqh*yf+~4xh-OW^$y!UjoqHP0elg zeKAqo&}&@nlf)C$eF(J{0IG7F5057sdr!i(s8|g|h3*h12^je40Y~8jAhs^Jw^=F< zAYb7{7U1Ovs(+n*?sJ0W4wvW@HFG}gRC3IA{639)@+cGS!J0Xu1}p4AY1o6e7SEkh z`UhS70D%$wadRLNLfI4fHuFPO_QG?Yx9clQIqn6!LqAvL(l>Ke-u=nsZj+se=9xa# z!sG4S+5;c>5win#*;Sj`CWfO6E(CVgj1sO$~y{!Qam)*q(K+<$1s@$-l;hE)#Wt$L3 zdR$msyqLRK?A&G!D`_Iv?R~gRH^c30Nu*c*O63Mvi0z|rVJBa6x_!f+U`{;?+n=O2 zI_=jO9@;Q&O#XaJ^+oikuJ%PXU`fRXmiEpGqWf+&zkl@$=Dyo^!VmiQ44v8hMnFo-_&cy8jkK!~uHG z`h#E8I0|{vyj2=Y%OW{`u?gaG~=^KAYGq z%-V_!9}zgB`LrY%ak5RuD8Xz5;6+$Iufyg}r^uPJ^o%d*5uQ8u{GTuUuauMjC-7uQ zhF{v&{exdB)t3dWjLrWO>2;Z7o2&g_87e>7yDaN%XOzFElxT5snah+}ponnpr%?6* zXrszj*@(-0;~!dCfV}&Ek5Rl#Vt)ElK6?tg`Y(Xn3-FP#@4EVb?->VhGe{bFf!W5CfLB}flVoPZr+0g!^~eqlG;G-Bvu`W{37~a2)B>=P7&mN;Q^h zV?ePX>4>)iQBOw7)=c)VvXRVgs7q_ynL!HRxP1`y zu!rs6+TXF>0@9d2GW#C`;m`xnjzG+o%J{gvHD-E^Te<)_>{6{b91)woX5L|Gy;jdQ zGemyFx~_ixsDj~_kYS#<=yj|ZW8IXT_1JgT&yt&wb##ytYZ@#V2-I2Tk1y;+mY-!% zA|bcmT**#3jn&vvi5ff|iS#bbr(Zw=g4#%^h4P^1n66zZ?A}ay?F3_mQ6b+^OdsX| zy4Cyd7W`39cCi6{p^P|gc|sWDseaq@aPYg?&%od705|j)W8%CF$g8NRI(^J#a6^{l z%UXg%>+X6jb35rlxh4%d2~Zr5Is+;gfWt0*J8Q0~!l}N;e6)g=`&KFDHt;7Un_fAaR za6M(l(-i<%iZMpogP5Ayb@aj0Sev$}@ayuqPz2h1Gwujb+da2CBjHun$*4sPApV$# zOXuLlk-LbN4|aXMmzH`mm)_R9A~r@2tOet~+g0#UUw8BPHF>dz>&lCFaa1Bw5(LoT zIExiP4HzUns~Zq%>Zu+D7M4wKh+p=m)=E3U6V;P7C0lF-_GsT_|iUl&brN+o9<_! z-4gkw%;<%GEkJ~1N6D_qzw6+CO4|R64jv>^Bm7S~_#f(nAIi*S@%*y%K-NeWx5+g4 z%MsbK24BYQ13l1I0TQ{bIYd5?j(w(h=DThHkmmm{D*Nvm37L}apWc@R692vTT|Wg8 znm-Mh$`9)UObOGHv20&zKjU332)Q2)B61dAi{Q7I=d~sqeyiKLbRnfnc6!h467QIr zCx~O*d>3^$rcoXQR6?z!30r{jdZO>1qU?7UNNs{ZM154pU$H*65{qSH@T^u zy=bE>5lFmb{qaeOM>3G2j{0NI)oGxOe{jS>8UE^R7TLntU$iPvq(m3S;(= ztXV=^x822;r66fqoqkniPCMkt(QzQ+AW@f3)ymhTp-@EMsC|t(3vNj6_3H?KSZ9f- z7j3D)WUuMjqH0KPpW%x1<5sPEncR64hTGS4?%U$M&4>+obQKxnBUwhd*rlm+9QL3K zoz7HOT)+Y3*mc?T{gO*y2%e9=C0fw5CY?+aXn;j^Q#QhQbwN$P<4V0yt@zwU`~$iU zL2|Y4{~Bm$0c1$r;cc=1O?k4F#OGW-l$eUo5dQ*`h*@Yp8D&<1w#2acDQ1LreS?mekA zFP%T_dG?c7@ds=Bex90j-dlJ_&oiap+syX@&y}*Q_d4t^x)fM?0=MgJ%yTPT;cvW{ zpouEXvn=MmihPYl&-r~bGM!G`*)*v`P;M(0K@QZ$Ll=*A4aqGGu-IZ=UoO0 z2;ka=a6PfxfeNQWxbDyXQJHwiSau74f!@B|6BBor8J*v6`RMP~*)H=>hzl;?v%$7k zXBt%3_49(uL|H2mcJ7+~YqsO{-@od7o4?<$72ZB`)jziLR?l`zUyq$XA=PC5ck}nk zwV56VV?oOyi?%0#XYCq*9|)mT*>`f#sE>)Lzn7V+N|Wn))I zU)y5eziIaO;#!j>JoB!nn$$CX&@9>`YJc8MPjx=1qGmut)3<@x{9FcP#R0+{ZY<%x9Q65d({y^%8vtkRLo<{an^LB{Ts5&Qwb5`+R@D{)x7+E`l49mEwl3QltdFRr>>=sn$g8`l#)0Z(@%=)309vt9M)V7W8v zZXO;UiolUTp#JKx2kd`e1wsyJ{`-PMGXLQIixZ&#zOjD~|Gkg@s>6S+;lIvc-xvJX z8T`MA4boGRz~wgt&-R=qwnm^SqqXfo2&*b6_{Kg4dIx*``gK**-mdDCpC?4Lf~(%1 zR{9aPaSV<{8JGcopc!E8k+_(x3X96B*4Eq?2SA}^4Glw2`?43>!fqb{LNus1(6%9r z;bDi3#ISDU{eEt#8eGQ^xz-hye(Z}l7-nh#diNr;FB_4*Mjd=ZhL#Ac2?9r%Ridk!-&Hy%?(ge|AGYNU8HnIgLLKiY+!suBWlz?{Sh6 zqK|_>+>TIab!ALsJ5F}J0u&uHO=huyb+`Uq2d}Liuz2oWau_6i1!H)Zv?~r=Jdv68 z@4|_N!BPi7-@E{j^mW@`q)g#s6z@ZUz%_$F2mXDCeH^5BR{SM}h$Q|;D%#P%K_JEI z|A@uixihK68@QTGPQm`H%uFxF;xHnT9mb6K|A#xNnKH`UqhE@M7n5Jq$5J<B?j8cob7yuH|3@eXfN$Lt0=`x29M7^>^;T>raOA&pYeG-3&hPO6zr}5F zf&+s<;3KGNJ1yP{JfM8fEoS5%7WgRNg!7;NWHGH-ZKnKX%0?Xsgi7-+y8QO-+o9_q zkhI&kD<@s4s@K0=k>LZ)pF?qGWot)d%IquD+grzg^&lP4zv>GD9g5x;;{U@pUaKF0 zR#sNlx5x9@`T5nRrl-f-_B;fPzQ|&r%uq6@g$uZM0igq7TG~4+x~yF$)<$qlH zP3wBx28}qlI9GJ(-m-6$IiGHPa>KWo_Im4^l1kxr3JZ|0eIilXjhQhq-19ydMw-^x z{b4Y3e2}Eq=RUAa{PO4pW^*br*74#`KNS^~jecFeF%}K$17R;1Yh;5S1XoR#Q3$A# znMpCuYdJ$t&qup>qQ@FwM1zeNJ`=9+E89p*+*-=W2%)&kU851Q)+Yidj706#SVCxS zQLSvNsK>^;^Q_BY)k6cp#yYb1TC2$$GqB}}JqG3`Jn5r=xejdvp0||nI*f*4df{@x z!2^22W1(|7BP6{ZSu1y_po+(o0E^X`rzO>J zow1Tk@!4DM-gp}oF(fn|?D}KT<}A}^cbU(t*HeMG#Fgd0xVh!4&0gf(7=!G2im2AL zvF$Mni+B3;oTZF|I!6tK@F@w1^OUGEjtJ6gmyLFxh~7q|bmJBTwfFoD0xC%cj*9*J z!EoGQsGSe8d|=-OYJwZlN4Zo#H%p3LGNS@qWoksXg>uUuse_|E! z$T#KphL+h%R-;gai0WL{WwX!Lnsetkk+F~ikEuSSp^9{SvT;Srch11KC!4q9$g`gg z+&R&2R-Cf#6U8FdAi;|hFdDejN?X%F<^Ajv1K0u)R&}Az&jGb=!CFn0@L)7)1k8@M z#qv0FF`Ra$gsIKg^%4cb&ekt@n}_u_Jdz=cW>L}5*`AC$OJ4__y_+WEim{%?20V|z zdpqlr&LW)1KZtPg+3Zqd5U$G z56WwmUJ+|73T&{Dj}3&_>fpx4G!yJ*=dabiM2uu0-h04|ybSO^uC1OF)?apGQSOXG zFwCk5IwP&FVOW2<)scV6n&tvcpo{Y(ss5)qz?|q1TCmibZrrh2T;xW*s$0LLU9*1) z&oS-;Prrx${+cC(CRe7* z*Ut6iEz73peTWd220A8f|7vF8)76g&Q144gC*C=kA6#G(P|1|m( z>A&@Nc}2}@t5}rISvh5(x}QS&RVVfw>n0uX8cEj)WuaC2( zqQ=%RPQsG!!x(#c@QChI4U_|CGuHZ95rt5LKN6{1YiyXzk*^2QeHY_wj&wInXE5&R+j99?nHxfm$>Qjh; zCRXXg-D+4Q#9d74HA|eol)A=eo$(tYJepeukzuhEDZTMCg zR8O_gm!JD+|2dElc78aqtkVOHBuBC|VsDEgDhnDk$E@JXR;_EPX^QiHt?8yxtDYk@ zZv_eF$2}(?oLS!=jYX>0c9l(NbLMbKgntH5_0cLJG2~0*;7-(cEATk7C2s!@F>Iy%f+iO zA8hf5#J;x~$#t-2vWI0!N7u&kPwl<5mSRQGOP#zMN9`VG>`i@(QZJ473JSpG%r0Yh z{yJALp3nIzYp}Rv+f}q}B32<~%qk809VxrB{jlFML#@UE3b8?LXRqzj4>IkxLW@YP z^Q#JwttK9g%(a!Jw=iesMu&rmQ4kwOcWrW>7j~gTZ?QJJ;KGg9Ra1kD+1*3c%M;;~ zHcT5_hWARc-P1-9C)YeI(^GYBTFv@bGzZ@I@2hI3vF#`?8K`cN@B??;-uk#F^%*Pp z31%T%G10jPa@-7bU#jG-JB6=y$lrF4ERTtSY%#y7-JP^LtNZ9ND~Te99Uxzp zZV+w|i2gg9<#Tttsj>#umGfQpYRAz|LRwg=;4`Gx#BZ5=Pgo>tcNMw{{yFA2shPzP zwX!4L^%6;F-QjZbRuQ{_S<#H+p7YyKSp8ITld`3hw{@>_jrEV9jBd6fOWY+@)`m5R z69{ai%!{s>cNGlC7CO#Hqm6 zu;X$)A(e0Lm;TiYA}90i5`DiZ#cu5EU?Eds<59a&yLk3)D{ap+zI|nQkdjQ6m|(uO zWR2NyPbENgg+(2=lcRjfwHz)O2JI=w8Wizgx#NRS@KMh1{Ey%ZU2iPANL}^{5?F3H z@ll1TN+Tk1jKYhNn~&OU58X{Pu?YZe_Jy=gTfVV+bx$7*Ep)^@Au`Th&B;~e-4Y@n zTr5YL63t#cFm^eYs$v`WyAVisfkbb^bz|KHoctKD-W>P)J2%EZliOOxuO7EEA9 zh$C5iB?&y5rjya-Izkk&ljW#M|O*n{n63?8LTud;$f^Hqbfq6+A5~!b#dcidVc}vrS%pI2{ zsn<88b`mg6i>ZyX!|Q_5GfH>5uBb(AGsoxLk{e=3PP==1rNh%cds9*FW8SI@r?%gp zblU9R!%ymc^lB)QzF)c`A(Osn5HyhSi0;=_1#)+{?^!5=787#WwJYtdMFI6%h0Ymo zV=n|9JE<^!0q>B_Hp?H`UBDC+y;oUi=`1!2X-*PfKbDXiSbFlK;63Udf$jZBI`)Lb zErFh)b|En#O4Qt(xa)%k1IvI%Y{^1QD2 zcx;u6)uS zY`+$|7Uk&mQy-Q@4`T=m684eSeW|K+hvpH+>vF5xQdyei!<|lhx=+1TQk&+poZRGV zczY*JA6W-Xr>wTuPaozbv#L3BKA6I@g&mIJ6eLUZrW8Z%R5%e&Fn*Eh&H578e~$;K z-rW6(RlcYO&c*bVu1=>|^<{Njj>V&SfWrkgbZtNri>F^dh8Xj%eV`}hkHUY^;xYUb9;y`n*hQx?*a z<}ZI6Y)%6_1suqHm|I-6WtkyFC-a1isAqw6uNl6@juR}= zb8>FhmVV&DnEHFB?rV#~64s5r*(!X_8-g&nR}%08*jH7oGlt@eqi zba_@6_A25?*07aIG7s0bmM15>5`Vu5$WNCTx4E@1WJg{?1-C@^V~f#oT?4qPn$nNb7XkWUjjV zW7~ivt*Q9uvP~7oGKtH=Kj`!%l_+9-#uMb$-C*N+ub)rBodujd;p)lqhh{H7E8*`S zBw_EZw4;K?r&pl2+DC{o^%4Ya@A1*&$mQ;W1;Jf}^P;==lK57xkoQpapDGRCrN?h* z9e8c`lFj*QV%=~qkPt**HYb@0gl!GLIiz?pw6{1v3H*j*r_E}^P70drcE7bk9+PEP zYe6VspA%ZI;$hAX_O>Nn-uzqMnTW z5#($Nc`bunk92}{I6hkzuE~y6zCX3|jB&!VK#Nzx3Aw{7Y!p#;AA!)R`45WU$8Wj< zm#RYD>V#T7Ja2o$1l9xu0w2_@{1LAI{mwpTMau4{9KX3`uM+;M3qz3=T01Zi&>O$; zA@<9YfJmjYs5OL3bMEv?REj$1S5MF5VFrq|Q44FBX4J!f;=N5Tp(>xtM_$0kw|$9} zvW;ymYNoe}+CI5|USntj=}pR1&R?3ti+(NQIdZ9HG*3E&s)vEts_chSf32Fnv@r?Y;i%7_ZwGz` zFV!L!rvse)!K)B9dJl);+Z-O`pNo}!2D}@!YJogekR|?Qp6rEJk-+_2|CCf*7nON3 z-*Npsw93Nw!er}A+AQo|HmW=5%E|Pz+v`Y1{6*SJ2X`^H8ssFxxq_RaMQ!0v_M{Q#Zh)in?)dp8aNpXX-Mx4OKMk8 z7IIkc$&7D>?5woA<0No@cRLD#XWF6bmTu+!H=(UaEx+0uz|+$VL;?k@`MW3Mx0Vq8 z2^1sp(wtE9V05W!x#J3AQGv7}%GSa<>J+NOM~?DeYQlLa3^>Bb8*EMy(3SyGc5P~c zkD#FZS-k9tRLMf0n7G#JGOWQUObh+W;iJ(H!H<92RVsmWWzU{N^&>yUy&fKzmqL0i zD<6ec=dAQv>ohs5I@YpP=G9n~6gc}>Z(Nb(Jii3tR~*g_`lbV(bhHbotJbKJ?e`#Y zFU52mo?gz&BV+x4C02`FC%cc&05O~2__Q}OjmDU+{9ORHZWxV@0p8DNHs&s%8 zjeu_EyBw)OlLjC=-5Pou&(EP^>Q%T-4%qi-NMOH#^(BJhk2n3P4VgLxOg~q zKB3l$*M?r9vSSW*a&ptI#aDMLU$>2d!|r;Xy#(2_O}4=0+%*sib{o$sFyp-XGN$ zVF^6((+G)>rl9PN<#^{MYrUmg$-~#f_pHgPk(-OU5)23G@tNG$_5A zUH|hclhx{5ik2(bWTo$Qyx8ln`%`$a0hcu4JcZ9eRxTC=w9uso62IW%hRby0ZH=s^78=Q{$dgj*K{MuF$_IIZ)jqq&%~7F2}Bc1;_4FKXc)9@$aUJ{6yzX5wd#Kfotmp@;3q*_z)b0QjyJtE5i9lfMi3OXF zm4})0E1?mmr?2A&uML5}@-GoGmsl`k%ut<=AJJ5XAX88HB7ZaJsrEBX7w;t%mtJ8b z0p)4LTXSOl&Ck?>dH3oN@I;Z_LZfrTc|wMUbJ}ZSl)NZMrw{<3hAr>&Pq@p-+&RN2 zc2I~g7bR*v)C@@1>_R3`g5BdXn~|6ppWV&$%hem=UCl>0#H3FQJltuUMRlV~f_TuuhUPS$Vu($M=K0?6g#_vu~YcMc2B3B z*toG@13Pi%fM#?{ek@D;*&hzOx+e)Di@8nFSuxE*BUx%bjyL*Nfz~da%_H+V&-=Un z4hZ7VhN|5KdK1cf_7WMk_I$t=^D;o`GxYLc$SI&mCue&n>>HHSN>z-$uA^i82S)lp z;{HWGTyA2#lR~QLAv8nH8@L9$OLBW|LMCzwoSn*$Jlz(}yJ4Il&`+*I>xYx3!K|$RI1+}?XiyI3I+o;WRxoNbNSVq~rvzpgv|4D*BN2gZAz;spEm7!=y zGc#vC@cKJD3vGbd&;6fW22##vWCE3vukxt*bIj5C1h2EE{cAkoC3Qco)@#j5je5&7 zr=FGKM$#9J8P;WIL_{3aae~b||2~EAdVc9`U32XAFnsow%|NIqZ9TTm7AR7J-g$Cs z=6iaV&04@-#2@o!d<=|^nxbMAIld2`(~@Rct> zmTZ0}dp=Ua>R3%}5M>Oq6{{STQPWG^5`#^h#Jz~X+bx9m)L$f< z3~!NynVO0U&ADgHr4if@pvdx+^@{2|wK07~^3$lk%i!$&;FYg8m_e?D97yDV|CZ*R z>+-+43O1U8mMobJp!D-WoVl?$hIBRjbm@JS!^O%hH*iD9^$%d}+AHO0r-A30l>QlA z^M~G}gc}8_AeF}@L|i8?(2`&r4thQlcH+}#>*5zj+5Ec z5VPa+*v$@w@e|Vu5etc`QM;WVwDsv;7NwDpX;Io-UerY7R=3k767}c%^A6xr^nqYi zLL4%1p|Ykg#T1>e5os`Iie&5v1#o<8f+`=6+A*(r(&^fltx=;r6jwOYwEo+WGGHJ9 zRiSATcFoFN!LD`9#9su925*6esC5O%-LRIFM)C&1VExn&sK~zZJ8}y52enmvtqtGu z4~YpIystKvf8#~f>a!vX+5}0a>AQ{kFJ|^aapX{$sW-YVXvx4E&CLUpE&QZ#nrE%9 z*8V)&*tO9m3vYPIo%2apnCV&Hv$z@wlpsjB#%iFf1TVRw6+&&0%6-=MBU!>HkGx4p6<97nwnw9IDu;y z8{guS`EV61!_N+nJ0cQEv>~nVKVP4xb^dVB=^ud;$_Q3 zN-Fs{ZHMFKxo;_Gs;G*4mg`bpZ0NB{BTOQeXv4&uyI@bq&JJ`q8RGa0f6WAkQHh5} zwM2x)LJHOy^8m`zN?c}o$9C3Vv3(wkdz1GK=Kxm7&` z>c`7w_U|5?a6ouv@MsnKo}|dF&)C&Ij^(jGqggH9rS8&qnDZdR#4}3pdkO=;w550B z!g0oH+kj20`TL^5)cBo>+@09x>Yc0_G}S|}m3?gts1#{1L=6yxxZT|h*W4iN-kL;s zbNi#s3JJ=K#kmclk56M>0@)xc?XJ#9rdr$1`geKyXUsLSKNV#=kc7*Z(D}{aGu^%xhw29=$u| zSVRUmQ(87q!O)wU=Y>?Bw>ncUd=G6#phjb|L+pR~0%uswb{hrM04nM{3H`^n3aKQN&89vMpaZ|FYi zWvUxs&{PMeLqn(1aq<$i{dH-s8|NdiPu+H+tgX-XKI2-7%veAaMBq<&cv54B!`&S~ z?ul5v%-m@$@>bGP^+>?e*95n^g5lk^Tdvf0@T0b^J5e}4K<rFeq57*RYo5^+c5T2?6;(_9Knx6 z0VR_?&Yf?dM+Y@cH`?Dx8Rup{$k5U{DLJg@nlh^^tL))jMLTT{ug*K4OJz3*whSFC zj~KLf!b0VYTzkJkNZV#d))ISM9sqiV7wO+sRaS0NWaXMU6!+uidb2|Mg4Y>rCp1~k z@$)vFqTBvkWl=ImZ`?mY0wEz*k?R32?c#EVs9ZeF8<1XPkc<$0@uWz$@VEQFek^jF z3;d$6(%I9EvCrG7iaT8G%8bV?!WdIB^Oq&dL(Dnufq!wkbL;%_#tk{R^j(tpY9VoE zqsn9w#xvYLmcb(vS*zX)-6(j#(`obMRDiwaQ}Q+*X&Wb1nLfyM*^^pp%#1NmCC1&% zm`!ntU<^~w#V+2M8KN(o_j9b5_jN1Kdh2DvzC2oKzkNF!vfrVTAHXe>zZ8kj4Rhsx zq31d~w&)Ylf8T!j*N1T~oA$(N4FTEB&DcDFu!c{me0L&CTs^5!Lqu07s@-flO(RR- ztA#Lkbfn)^h`~6{)Ht1QkFWvoabCm_uaE*|l)AmWOcCE)LL#p%oqJ~C@H*iCewJ!+fwQ1R)w$lBV8%;U$HI_2fjf#2M|d5!9^_Z5 z#M9iUC#-gB5|R>lwoTzfY5BqO!|V5k0~Aq>1@lyH)aLu;!h%RC!MU8d&#Gmj6-67= zs&~DLQV%flHg(^@22;vMfzy9C^Q~-RSzyxD`2048Jj;E{bUr1y(ZU}mBW3{#%tvuM z$Hr0urnWaSK9fIFG+p#U5I}icH{^wLK=a9{50kFE$y??5{gZv>T@ z9>8Dkgm_EdFU>82D~NSJX)wuhlDy`3R@XCE<{wPrw|&+NXJG(^4kFXNFg~}+N#jv_ z?3(MD=T-q$MUnyqB1%4JE`RBe)s69ZP<33@gmeVlPO03WpILYL3b6e1j86z{f}-vD zsp{sZQrHpMvNEYIK7PwDL)lLt!ZuhsaoCydOGQwH#T;H4-cUqAbDnvcmd}g&K@^&+ zQ#PJVeY7cLiI)6PdiWK@6;kGK@ zSTw)7!Z>3E*oZ_|jkBNwr+qSG(j=Jy&QBDQ^Jjfl)Dyl&XL4CZY?~hOBgB=CWb2>V zgl>)$sF0`8O5j>DYl3OJcuq6QDJZp1jALr3zBG(}UM=tn!`dmAu|!7Nc{i5~v&V)j zDNF6x<7_$p>d=N4PPa^mL(V(9ZfILG9dcy|*eGK#0;4ZnR4?Cj@jT#*TVbadGhs z)ApM^xRzTNAO2ujcxo-Gl7Af_02{8%&Xl|M=DjODZzPs@(c&=bFSL zwr+j#jq1?ztIUB;X_M_ggwvXi11J-R#RKEZV+*`zG5ra5#R+@ zZ&%JJggrK`+%^GAwH_a8RaV{|bIk+021Ve=<5#G?9E;t7098jzrXevcHD1Apix znk$5r!MeVR$Av7=xApopMGl{IA1$TX+(kecmgNS9>l$NMA2~>`2=j@DuY4<>!Ji=9 zv7PV*&Kwh&6r*ZvajR2B=~rFY0I3kHEtpaiF=J!R5$dBCQ)0tOBaLX4(9$6 zDfjZ;5Lvi&g_F7UoJ-s{=#P&?+JdSWQ>EzZ|s5o1dTKw0ZAS!$W9bkhvMr5Zv}lIOe9oD+^vZIjZdhHlazg_ z2ZOhGeMA>2h6s}ROT}C5n{mOHk`1gH-m1^^2BS?tz4)c8gJ+dxyfe&5xF&|!-0E1% z3O+}e0bI-4oo{j{g%4oAewq!vWCywjp$EjU3xi|7Dhx^Or`bGDu|;nCVMb?CW?p=q zIwgE+aC`vBN0;Oh)oh-8lV>D(9I2n(npJ|#IR#WkB!7uR2zw-p{u@lC?GLSc=X3s0 zHn3zK-#|*eez5s_u`AZscyhkY{0u&lC5A+zAQ5K^pui7+Vk`576L|Cj2Wq^o{Q1bk z%1z*GTQfb2rKz|NozZh>jUS zhxk}=-goU22(tj`d~??f>Z17La!C@&M}f}k{67pJ`?C18f|8%$hs@`PIY6;R zd`T3kvq?1FJG?Z4~hpmu;0cyih)e7E>@_b_M2``sd?KYX{!JB zOJA2ertFEoV#UiEfj2le4g(#Xpm)qO9u?Iam{e~y1|;7K?nr9w{nm?xWH^n2g)Es?QNXRUamznkHnEPeDg4PPjKYVIzar z=S{UjmtQe1iwWo?fItp2PjoS`OKb(u2{MmD%b(d!VLq`N>OR2_+ig8Z(cMWB6+t{- z-S2ZSGUI)dok4EKCpa7u1Eljk=l=l|hP%5q0!`XIE`I&fdA{!rKvGFWhrof&=i5Tz zt+5dWOKw4_VuUpgdJo6nD#-&V%Yn*@iaHb}%j?feosFP#PzN+=E(e+;9}TY)gdu|wYLf)5S8c$ z9H2T1pwz*I)OT7Lc#09Icy?v79TB+jfI0d|7*{v-ZHCh(pww8|wwEASGdG?&m$B6P zL)h`zBV;-+==VRjbVjlkfM~uvY~|EQU|QOm?kUP%o_j3?`dbf}05Gm_7a6}T@fG~) z`A{}sy16iFbGZ1uvrJF;-CCqqf&r_O7DA#rLJU;i*! zRP}fxCPvGuf?V5yiQf#J1scIa=sk&viD--$sNd!WXQ1FrHFBbkS46dmrjlNfRO zVg)d!(91u3<^t#eeV0We5`C~x%=UUCy=LduxACo6bLSU!AnJUs7?o96crN6T&)VN# zBu7=y&j!hZsBDdZ9}Z_HfEIrW8A~RS%^(NgVb{-)8{AWd@p%7_&gwu@>dV_QJt#-qk(HBD;tyX5`_2X4b;^yZvw5W<0iPey1GBz+>))ph{c$p0wyrnv}x6h z`&_nEpOS=ze{saJvqXJs1S=Re29nH*q1@n#UR?BmO}|weKXPUuOkiek)|$3k!s(>u z*o&I6L_&+uB0qqtjz%cw+8d)m@u(d?;on@@YJGr9sBO{y4k)h4JTO=gQ;OCC)a-{* zo;KyRt>$*Ph$ zUI@+r*eSXm*vUVptvPJ4@m28zV*B`+rx(xbkG(5T7uw;t9;L1e0=+s>BrJ@+ae~?I=LEdI0NM*lsUAq`$vKt0IV~YR&GemZSGH zj+VsLD_L;qoIMW^%6F<~OZh|=;xNq9@AAO+%H6J8JEI+8ec%U)m;HE@B-O;U!$)(& z7B8#WmW30%fRPdvcvA6!tzD)S@=$=BZ}~&*CqLhLD~Nys)%Fkgc`^_1_1+nIHM#3+ zhOTyS?GDb+hkQ}%&+Q)G(bWY;5-dg3zxXOxgPP|79oQIkP9FP}B311*{zMiV=sh9Y zX~t_%^_0ZzIg0F#AeS0TWPxFb`=72B5W5e93idhh&@d4gy;lv|ohC>1>>ass8G?(m z6q>zC%WU*P5&0MXTFIh4YcGPDCx1!hHK0(MvZuAXWS%PY7cXZ+{DI(ZT|JxOLtbtj zkyB9sIN_{o&ieZf=BBO=*E=tJ(&zCBJ$hlPVfNxt0 zvh@qZ&6$5bY>xnpcfn|9u1(9x%A9^j4+?gphanZw5`EfX>uze7=p(s@y7v7(LBe+*(q-kpw6pi?&pW|=!{VdgHqJXAHl*54j6g=JpRxaItT( z&l1@`e3sV}rh~U;($Qy2Ky5{O3c`RPcB!nr_9Ve9YVKyc)(DR6_a2V~90$#x0uJan zXqSC+JC0YRug_S*1W?l-0zEtHMZ;QNxGt;lLcbBGD9l??4Mo6(uPFaEp!YTQyNqpK z1|pe}5uO)NPDv#|*}2<*=b-HSW`HklBFPnREvRU^Pap=u7>h1IuPz!uPYS>m>H)KF zz`L8%-t0FVMVCfjWmwHU$+?OX1u4cyAJ5MhSln61_+UK@f~}f;Yf?$Dzu&t0b!q@# zJ~s|~fPHix`d4to8ds>T(P+TS3MPJgyY$KRIOsGm>t*te8ybn4Euh&ne?P;dHBPq2 z6M5CfPw13Kw*fq)&se-f|rzoJoF{$bh z2mjFHZU#m}5(rFX8X*DoB6u=Zm;kthHu>5$#mx1Tr&yxB zV~1%wKO^AoO6m6g34na6_ca!1H$9&J$2}4ihw;4V;+dQ0s2LWM`Zg~!#3Ep)Ka$wI zewxVu?hML*>E8T?B1i1sKi^(#0CWX9F=i&cueQ$5%>OZs&&%4A7Zx(Ms@v%Ox~Iu+ z8c5P^YJwyKfNSqx{`&l&eA&qGaI=JT86Uhoz37A(;VtmqLHzX`-eew`vX-+fk6)sS<9*~K#**5 z`glyjWhOJvQBl(8^RrE_|Lp~+sCY`rvb1Xa6~?4OLncC{D&-D3{DJIFLx91>2~4SZ zPqX~I48-s67m>cms*U9wg}Zm}+9!wV>FMoT+uCUWmJq%GgN(2}Hj`BSuGnk&0^n$q z81rLF%*v|rUlmp@UVwm`1=D@d6a-*%f8kb+p&h}?qm%l7-+c13_#(Vxl;_rv*(hs| zYgWN2jbM5jy*WXWto>U#&Z{^4g_)xjg5p~EYb)Ezmua3s9}cdVd_{3!qeM`e!OPZa zUV=Ka7=W1H=+mM#p>LV@u$%S)*AqE35UPSl_rt8frv!c}!gzB)v)p-5;8_6Z7wgb} zr(dyo9DiKQpRX@{Ye8y}Z;a}qFuE}PRyAPuUS(Aen}<*5cEjf1sg6X41evE!u7Ky~ z3<*CumjR>$JwjKkA9i$f>_=H?WdJL`x&dDBX<3c4+aj$!iQFCl19oQzZ-T?IyJ5hD z%jtcmuST;Ud~&lT_WZuJT?ZE3)@|)IhT9;=0Z|9i@2g1U2xdO-8-TS>Cquk}NjlYs zLx)7J(H9?jd<>lhosi!@_+|2JDb0bADK^$P%rLli~~qfbfhk31bp@$uN@w&T2UB zJF>Rsk6!&Da!^|E9V|`3$y-FtyP@@9JSvwyaj**&A+Z?Z<%hIfr}xD3Nl=C2p5$tP zUd95tcKU-l1mhGMn-xGnN4fWzul_n8ga{dafP75{K+r>AB1{ida=^cHwl@npR_9XF z;#`AiBwBfmcs2u>4!$W0&T<^In#JYO({UOmDsQ?L;M$? z^whL80&S;{cF5$MkKrqgKgnLs^H6^bv%*rt{{DD#+Ihqg1_k8RR-htdSu)h@h@6wsB zoj|hlNWH7EnuG(>>@fHHn_JGw;HRC*63G9FQmz;wfuBq)7IpEH5)iG{_<=h)@ScZ0 z$gBzLO+05*;AoxCZGe|~enj@qQ9H2;|JQ?{lyS1+Q@@}MnOA%JU;)4ZS0_(p(M!(u?AINlkNt8$Z1ctl64IGZX4opi&gMg4j&1>}`k4;tqzFXD1E;T7* zloAULE$(9!OF&x4pYLTn4wwz>9k3-%d zrJIg}kCSjpSD&6DI9Oa>i`Thdsi+?Z59cF&#H*OknQnmDg zgf>jbwLRO9mK@ZXel$FN_)6vE8s^fxWxt&ByY z!g-i*j%$sn^z@In0hn3t1yFRG9w08!pg&(Zgolyp8EEQ01qH93W1OE|35)r~Pc@Av1FU2;XlHgMf+kXnQ13^xrRn z=BWF%QSOBF7>^YC4R<@$nRO-+))xj(7ba#S1Llli074{rXRFbW<6xZD3m{5Fn**eW zB;U)c5KO^Sqy=`XkhP6ks;M_E(jRDem!eGG*+qLEizuq$9e2!{0%J`?)|lQ_eCCW+iNVL zI3DMy+#b;fpe@Jx^JoO>Yzu%VN_m!aYMyN`l#-SVbP2Lg6~2gLUO!IX`43TX1K5KU zW5QILixC9npWi=+a{_(PFfO^yzt>pd^t;9!?SRFXlu*wEu}ac(%rBr?bdO)x$Qq~= z?`!*Ou5{u`cTEFeOOFLv-`}@;tD_06AA!C*ar*1m+-E=_$&0|I(x83j3g}}Y^O95R zYE!&M8#M6e4KYNiL8a0T?pKJGEP-=?UM22tuK$0Li&jnk|HknjvW1bXr$pq_3?5mv ziDyLsRdHoQHC#PU{aGQaW#*3%Gvi&-z5d6(#@AP0qN4>}J2tk(?5b)!%(}1B0gMfR zCBXHG3WIbAfJ{yDhf;Qbi1;)`pJR8)+N&>+u*yY(Q&zzWGBR~q)TVYh@$?Ee^*vG| zHP~s7#ll`FK7T%ty8&pz)e2iLW57>2pLca2PCn(I%kZ2;ZqeuLLPIsUI6?jH`vUP@ z!dKUakRwL+vvZl7?XdX!Sx|6dm@7cURE2jWS<=3696a1agqJAps9npp`j|_Zgx8So z-!{;{;@C1u`tar1{1K7Rt?;E`q*GSbeIOg+F{*#s>+g95pbReqKM~C{w|F03QQ?ny zospXtxxIOfNZ)wiIgTCCe|yGd#3951o$Mo<4NEvnIy_mck8@)N+xibQtWJrXuwU-qZE(7pd$>sN}J8yu}SJ!4$F{^hAFdvNE0 zAqm(CEaog4reb;H#I{lTM*JIo<&kz=5oJAwj;I`9b1_TtP0MS#d(#H~9@_4_>5_Jk z`mt%+eXD3d^7M4Ha`}&E-~3#R1hr!c-f5>G8CV&_vF5QFvig3bR115-Cy zV41g;x~1IxKm>ShG&x<#aV)ft@X%`Zu#0?P3qXX~usZhBlHW0b4D;0`?{EGmmWWGH zgaOGFeg|)7iV`ZYjJ}imqk=S=Xgw%t{mG4Vpny_cVTbWIZ&XQ<4UXVi5u0AD8UEW; zKz10q0y`m&0=*>Cr8o?<%|R^iz(F|v@l$&M!sJv>@)`NJU>35{M=kvJRPgv6LLc;E zV2EjlsP8g`$y2)FNp#ZZrqCrmb#*M&YSfDE*FV!~*Ks?c$8trm&S<~0d3m^eTxAXFR1nQ-X0YIAej;J&TlF*lVkLFyh3RJBX4gdX=4j@A z8yk>r1J)Q==ES!n66N~A8{N`Q#0xSGt6(NgNynmZ=j7|t&T%J)t@68Z`C{nB1?>Z0 z?<3^(c$MwWAf8YPn};LlO^o@9d~R;@hI(?}CkOU|sx`%wg*57<= zy{eiL_jT=Og7JMFsY;KwMSl#us!^Mp+au|?e7|M4W6EB$3twb+h)|OX>UrS}b z%r{>tL&wpaH=EAloBNEl58>{UN-%_w{r56pQObVRn!C7s_hVC0**u%1s*A^ zItig^8+8+XXrf&^8@M*Vd>EU+LF$US#;& z&mh1s++SQ|l^T zZ@S&fNAMBDV#U7o8|8HW87_t10S~?7H~8^@;}yESe_%j*J6MC|KdFx+XzMu}WNYcs z7A?2qvSJ5VU@GE}-c|DgRmAmL*!WH*B`p|deRcYunY?ux+Sjc2NR%Z&De4KerLN5c z(}7n;!d9A{2PU(qQC*2|d_bug*iSpCNquWy3Sfm-XIDP+Nh4dhD*xu!7C!U{-E;yT zp5M-LP0^X*RXB=KzUbsN>{`mkC+FxM@E2tg(Od^4s$+)%6rU6QIBK;=HmP1ckp8E; z7-wluerUJdGAvf&JYqfitfqdBOy~(+#^57nKf(D2!>rGg-Zh!b0%F}UNFh3%c&g(Q zp4xnr@9K9YIjVH+#>avpeM5fk4lZIrBEc3O8Bqv)-&IplnR>elA1QOW`)xWv-Xgz& zo^fu~sG{@M%R`J>)8H0yK6J^-Y*#lAgI)@T+F;2L+|6!P2>E{oO2zXZP_uto?>^m^ zXF5KKr^q(!U+GfQs7-g?MW(*s@l&{uo86+p^lzxjW5hi$6+fs(qU8CSDvPm?9<)o- z#miGyPjUX7@T`^XB@(ogUB3x>J z_d@;PvDYpSxCRr%LJpQ5%)L?h@V2G8Va{V7!=AYZRzH4}||XF8|zAS3Rh3$nw)x`sxK-{HkAv1e!C~M3foAsJNs<>f zv@f58=6l_tPZ%2$AfC^A({pKk9!Ys+B^NNQax3_$$SW~h)x?yGMTQG3dqQ*iZ!ZI7 zTxIJc3s7UlxXks$Qp=mRy7K&5BT^?ySAQX@Gk!!#R_gOR85G~VW#c#YYE&|~)oRek zHqn6ubPHRzPvq;=atzK97fy!vPQ3E%RHB9}5A6+!>w3-x%PpP0=Tgju4BA);Y|`3B zvDz-wsC&+ZdmRtd?b8Of5(AaLx~EnCt-5$)Wjf`&=U(}o)=771jja_kQBaQN76({M z44m{1QoBwJq;%|>HXAfL667wX=16NLU|i8d8_8c)S=-|C)|XZ92w>vR);`>sPam)oNo!IZ$ud*unTi_QQ zj&!~o!Vsk{W|P!pHMV}8gr!2^&4Ve9;mbY>{jECzYx(0RXIDtf+3%+%*Gg~R+>2ty z1elkOUQb#dO>g_dQr)Pjn3)LWMkJ7Hw@9{=OV`I+1fJi@T)s9( zNte)3TEBw{%&yWskhvOLD?~minejb#zAs4FT*9`s%UXDgfofY4yx^*td_kKQ67+EA z&>*wf*L=N=XGvBHuD)@nM$tASN-9+lQNBOKvEVTf^_I3yf-bXVo#}fpGJ2GjRQB#Y z=~Y}+oU2AL{}a;bRis!GlXx)U?Frs-!kC($)Ia{NXZ{xU9q`! zETuEX1H+$ioW1`@$UxIsV1EPZUV5k$`=W`8=Iih%+&syAj?gu_;2LW*@ikqKb(6WT zLo4x8n~r;Tc12sqvQr$L%Q5a_98p@#I2(R~DgCPQhbvF(S{o8nwfhWT{_GdY7Ull_ z-33#)cf!oje~VfOUJO~7`(>&FGZz(g);bQJM-#`mTqT~1rAlrsM`id^lPUJ zb$5TlnQY`53f>7Z5H0IVL3}GMY-@Q(n*SO7;>FK$t#Ti}-obrt6*8io%lU~HWkgL; zlrAIZi#?up=!4Xk{6qh!ltXj=an7O&qLkx~=PVx66l}9?nAExRaPxBWsQ{zztD?zV zBT}+=lEz%)*p)8T>Xw$7YTdp)PP$-m!!bvnHt)ZZ%I?`R90wmnXPVw#Z(ys-ahF%3H$gI>XRzR!UXKo%~yxmQ#LJn0~c!apDF2w z*{k9$Y_=V%nEKXUXl# zTEi`0hyU~P?VQ_dj{gi4T2x#f`Dqd=J5P0P_bUfppYl3cWO-#jO8skxYLmBALKBFd1WI_e{i~wx61HM3I_d<$hQxmaV zWS=A{5s{O)@z&0*`kh`GIbxA+e{LGA>k?lMSH92SB@vOJtQncjp*lH@8oww+%7CtD z&5R`S?%gYT{R*oII5~X_Z=AbWu<-A*3m?T`1JG*wIW298=zjLeb80=~-KIs2Qxe5$ z#jym9*wE#ybNz@94stE^PNEExp8R^G%HC<{>|R}5oESuxF@+=k?bcbyLA(`ey+rg` zL+!9N_Ts2lHVbG{ru&-?kDGN}BSkbMG<8H{8y>S{a^tinXM&~hA=6);{v+qRY&OhQ zOB|iaqlrv16N`iGQ0>N}PgUi7mhV}e2tV>&Zj1|C`HM=}oO||j{%Xj3Xv)8pz$>uL zM9wb_cUmomRa?iz*+n!s8T9{RjeIZa_*y0J!c$vcR5~%(WPHo;oJC2i(OJEQnggqE=H24^ zu}O5ld-7LCR?!nhd3>U(X@ZG1T?*st5308-YvDKh+FcDtR*0X2kX~t1{h|^C`#w{a zkWy$k7;@91mFlQho#IlR=a3Q`+$58vimnPjYxFPD4fjWUGm1Vsx%3!&Q_cSSUD8EW zy5*(@{g0Wyx1;X3e_$L03HLt~`}}bySH_N+YjqGT@UEVeaVJmmijr%rLFar)*wRU{yIaga z=jq0qdo2oiHl~hsVs_@oSF>7Im|mU8i#?YsTxmwFcV6Q9w3YqW;(J`p`lVbsrq3Qy zRK9}3c+d8Hogxa_@a&ec2`+^JR8ke&c=12t=;E&$0vC-sw->!u|G$OaPkO4t(HCM!`zB^zUa2l zikEK6y~(p(hzSH9rTOrq0(I6jTkJ~TU%xbtht@JMgOgy@|6+Kai&!DEmH230YPCYf znqR>>Gx0$;f*@iPLAr%zX+0BUdC!{|FhS+NitAKb684{6u#v0h71c)n?9N%1>FgWv z4z$9&mJ!mtyL3Sg<2QUSWL~kxE0k$nm^&r+QJ~y^$==?)RK@L3b^;#3ptr^WWu-Gd znxeEFez&!JkIFfy6_3wXnAB8c4rPebuC3@qjn{c2U*+C>-r^SLM?ve@x3|P6m=6kh zOl=E0D9+N1{f;2DD#~v`~%WwuEU=W9m!qlTqz+r{tkLV?a>x1vOoN@!pUV$M$`2iKY8a> zfkoDNs%AJF9nQs+Dip<&E0DOP!=op;@Q6%X|4J3Ne2}do=}g4JU^%6#HDQLVv{o;r zghSSDAYb;!Ls^`efVFbrFUBQBUX1f-g2?@>rPrKs9J&TLM~S?Yi2KGjQfG#j9&Nr& znx?-S=Bma>^^!9SDaAn&1FKTyGmb}a?OMe@tC=an>F-Uf|K|2v12t5g`RDr|@_O%gv6pz0;y3BlCVRd^65~0cwXkK64jl=3 zFJfUNb0fz+xye0%;n3Vp;ql%;LDuclxcGX za?vvoq_1x54-0bqL^0Ay6u%xt7B@pX9+yMr62g{D5kc)ej}J=g^TPsqWrLYp{ucXS z$Bx9#IJ|#A<`ia?K^NeE4y6=6l}eU$5W80FMo+X}_VGak;h8M$(SC>C*Yb;PpzrQ) zqMD%D3)%VP>+dl=-MqAe*!>39(7!yeI)!=h*stN0rrv}~eQ`|sSuEv&Y%u%iiK6Y& zO&_VM`H?iySFaA)9q`IwVqmve;9!}5A8STke2GouL*C`k;f^Xp{#1xawC}#pcR5us zhz5pwT{^<+Unlze1=SkU&;G!1KgWRV^jc)}oL#$4)OQQ;(HFieWd~p{<@!=}brw7y z>0Br?TmVPUDqzgKe)l$i6S9|+7t2nRE5Ijl9CM#sD`(NRkyv=kfc>^z1`GH@43{dr z^)uIx_0(l?8FYT_OgQ(bg#?5YCwH4^h)8&ZH1osXX0hwZYWRd8!-*~VJjx5-J+9B9 z3F5$`|MwjMl>9kyw!FW5TD~UkQTy-hU)4avUhao3Vb$QLhm!5rj#9@|5WD&95P&nT zK?0=*7X|S!qA3CU7XpSa)xi6K^>;<3mMdtt|{Azm6jpSk&{N&yDzg5qW0rBrLUTR-pl-6-VX#>!TQy@JGHX*Xb1&?^1Q-M`B{NYnKN7?U?(;+c-aJOcU*ZGDz@dA1@ukjN zBBBYL)?do$5e%l<9qqQ?5Y#0?$4Py@Z8=$Z(Qxp2T&S+Ce@9N~%ul`M)LsO~j1}Lq zKd`}}dUvpSLlQdc#Ag&yDpx@)Q$tPr;gO_Y6ZT2z*E?SPb9Kn@rH>|2{m=5+w<2-L=>qyFGpkiZ2y|K%`E)xGBUKni5488@Kw9sekhCNPh9 z0lscAiDT@6Royh~(i+4o$c)E;#O!;?(z@ama2beFPbLhFR3H;SS44z)vwkws?2pcW zAVrMmNR1!fwky|a$c`O8r$0i!@$p((BGCnu%0!M4Jha{l4GKOcj$C4fo|g zyxtv`d{OIR_xHOb_6fe&vQP&dex3gKm-Akka_coEoOIY15y-&$&2YZ>y1(BFO40oY zf?D$W*3oLupXZK?Y#%`HFayjNn;jNsuLny;vHVA>i>&^}>Y|y&q-q3{+F*JS_l2N~ zNt0DOU?Y9WQKeHkRzgQQKtdBuvpUXN4m@S>vv*4EIHL0_sqzwnAQR_y2)ovYw*)=GaB zI9|Exwn7?N>S%3a0K8<`_AA=Ny^GO*ePfjcaP1s(O`H~_=4bk1$*jt4Rz(5k0fh;_ z7%#tBo^4CQsDZ3MhwAX021`X#rRGGCT7| zsVm1DIU3LRCI`ffzt#VXV2#K9t{zSeA`gW6!j8EDI}4e4%_H@#?tux!rv4x8%##wt zaFmz_sIJ*#Z=#h-R}XSl88hCl*kk;YTuXQ9_5o^CP{eFhR^b_nYM7?`+XP*<*rvEt zI&MFqJ+FXDMm)iJZumUn9@?XF0~*8FPww$KcdGln%=iQT8YYFmPs3|VO1hO+oc?%i zcsubC-gR-c*ACarO)}N`aUVT&;c8|iE1t$v4t%^-#g6rJIc?PW<`F@>Bud>o{iE1P z>=}h$Y_MGf_sHscblab8=8c?J`_-QNh4ilX*Qd`A(>qYw_E?nA$D4u66C=|8UNo!g zui>YVXjy7%VpDRQ5`5c`6jo;=KY6!v+sCW^M#I4KlFHf#9sd3gM{7#<(qX$~3^OIl zwCQ&|891A4VuvW7ipvPkYcL9rI(4!_=&v>63K6ujD*e5|u+T2)9)mh4Z1tsH%05Q6 zgiXET!{V%`=z-T?C+kgoC^e4AUsT#(##=%8+b+tf7fi4znxA-Kw{|hWqTgEPhnHiS z1OD{#Rc>)Bm&?~Q;=;UZK^sX;B%$J9o;qDXx-OTiHFQ2lGdsp{f~7JL*qZKwZRcQ( zM?u~=pTxt7npZcVj)&%2Y!+9NPtpYu5k}?=*MHbLKmEP|Czy#;_p`Rw)sAQsTPG59 z>ooX@8;L#qmg{H9 z$48hkj~Z)2d1ByDp@yPPS?Ca-h{!9Z+DHR0gw)Qci0Yk*8Ji@8m+_Mf13g~&gy~s5 zLXOQ)cm4h8e>xXkHq3DD0e+wAeA{O|6J5P(@)0uiZUnkpC&9~0!A!M6qhX_{{n0jR zVxqrI(hWrTq2{C56+P0a$86HK0YsOaZ$05hgn=2EdnqgGf2div;6|!^6Y!U*VgICn zd>$?VxEt>pTb-Gy>shMUI67ikts;)>Z46+Ym%C#jg}g`zSos=F5)|`5)BuO~z{*$l zqszlKQs{(ga>c_$o5!-O6cKBqwnR5VZoB&8$oPJHG(B_39=&>|M#r=1M=7KI_tM}a zEo1DN*3>rT*3BdDz6YGql%wB2)XT>+;NZ{^uP|R@%?#XVSX|@mHkaU4N!p#;yJgy3 zyYIF?aF%$FwJiLKrqlz2INvz`*T_hMvClJ5Fp#|R=;M%L%wZZ2mUMv|_lof`xWqNV z{ERiaU+M*}>QaU^kB!S@Vfc_+`2CrzaIn<;c6`!MwB^JfFMst2iu z=B_jz$T$x<09Akaqm;(w+BSvsuYcVnU^YHcbt~D-chU8zlTU z3$NNabu*O9H=|EaBj!KW5Z&)8Yow_e8xPLhZa@|z;1{lSStEb2AX#+$gEb0ilJd*s z4JFtMRmjcTpSJ3>@=UAwk@5eRaIsqFj}tW*e4{jV9G@jvvv1g}Yp}m3CGj(x1B3?{ z8t$b8{Eggjv>r48!|_vnkHCn)+6XV|zb7Sh7RHQ5vB&*iRD2?7MzN->M?076U0_6I z3qqznMdo^M=iWxtRn}g%cLwwipIE^gLKM{~!JEtc+Q!dWU^ZZBP_gcB-Oo_nmHecwyp@mgiSAtY_|u}byryjad^LifNL{H zn%i5XyxLcopHDy6Ev`8kQ;=q0nOyFE{*V3JxUHh~Qh6^Qsi=*?Pg|bbYN1|f zW%Nql&+#jMx5Dc;E1SRE+&f-PMZE5N0DHLyx{Kk@?{4wjxI`YFK0^g>9q3$kaVmb- zai+IPZ<3qnHEFDnX{nRXIvqPVn2pTRuVyG+*S8j}m{If!JnM`u- z)b3u3O;lQAeznKeus!Nur)~^<6tGSgyy(>p3i!w6R_Ih2kJohlg;&ZT22^{`;b-judbpq7ils$+ zVuw_J1l^*@TAL5KN6w~N)DzxXS$$I-duAKM;FCf2^$a_knW72=R&xFnN3Fj*2n^s0 zL6G3TNV^-XvHbinFW3e7VYhJ?|F%~!p3r_-i8|J1U6JL%rw%6hB#g zju|0TA3XR^nR06wIpvufJLCFn=FRO%o$KFD5}$Wrpm>26{reDR%~*LE*b7tLAx_w_VoWeo z-G8h^IbI%RjWas}2fmuQeJ85hrTg#WiRha*sROrl9;UUzi(Nv!c^8WwRLCRNHX|3u zw}^C(7G#`*{73lR*t>T$DIP(gPVAzYlr^GQFLSUp-9|heURl?}SV-zm4sqj(-dv{X z+l`G`!nr8q+`^gLPO`ltwiVtqNw1lAA$)ht=^xa#RtBU}35$zJ`}&$VW*E!^!$a*% zSMHqO{~zDuugEI(8=}t?Z7&9ro8uzU6W&U`vZ^Q_+YXC|%$4t24F%g}?<6GH8d+Hq zDQbkk8NbQOpy|-bhQq8tJbAHfaO3?92U7dU&;7|pL_WXxZa$JQcc(6cm)DTjN}?;+ zdOO2?b0B-Brs)sNi|Ae_o9gyP490}>y0 zU#6Cv}c(YGri>Pf?A_duq5vT(*bPk7@+2GZwRA9 z_Cj|4Qm`;#E=#~Vd_!M9IKBeF+gs=rJm)$bHCK7(_&NowRUs-n#{>1;cM*W+OW-$p zyT5sRoQQu9w91##5S~5mkjXSsd<()RAyZJ}U=dCGK}ySihknU;lBx_*-|X&-g@QmF z016rm?7m7!`vIaRaUK#;&+q>K>>;8?nRU8N3k2jLp%wPxgbMhE=@) zd<5N<6bG(;0=jzciOEa|SkFoBey{pIZY~PCn^BWLK-Hr<8H2a>oCcd$r91mP@&$|= zoG)ClsUP0z340#LySdrLF0$Nkc>C8k&p$f2dmB`j^tzGZji6)C{%T>IO!}`TsF&AS8r;MOTfR@%WI}HT4a6ZA6?%N%G{Y$-{ew-Vu z3@)BkD(!X&1UB)m#}c&(r?RDxp3m%uJ!FUO?4A}FySkbbAKM(o?RBHrzFg~H8GP(u z#Ew6$XV)HirI>`X!ycMOQxK+?GX*zN8DB%Xl{NS5Mm^3={yjjlDJM1X%weac^}ngej)$3?1|b&#~2h7>I0AG9^}lyUc7PFbijKf@ykt_uAhAE&jr3b87W;(Qa zt<4=(_cVMSsqMO>w1bxO*|?WSr(0AMEMhDLtVuUXYHBDMnv12SS(SZ67aJ^fH)59H zgY0hwn}09Y`q5Vu3X?iJqea7ya>NkbOIPPR6ECI*2tlFwr6(#ViE1R#Re%!T#F0}G zeqaTthhhr2mM!)jq0Pf=Yp%if$82eV<`OXnvUb`(2!@YGvKH9Rh0iB7Su1$Q&lJ~7 z+h!E!eu=IRSYLd3*319DR%HAD*4w$10tVl+@r_0uW3ICjwdboC&MUJ@-)l(oW#kp>)jf^Y*Y(|jF8yDey0Kxhi2ds9Hz}jn|6_E~ zHxQ#c?J_#1FV^R5NTnoY7$NqwC^; zpZ*JTmEnMC+A*_cY|ZPEWLk5-3JTWS2xV^Gd(t26W@knFQtZ2-{v%JwGd%$JXiG`gWP0tMuVuw~KBqYO~p zrJKMKsMlAMKrAxCy`-y|7mj!9RP{2x~bE=+I-6_+oiq!H_N(VJ(!hKG48P&5B)*zW02GP+e?yrvf2gzD+8hpVaH*rbQ$dttS^F_j!O z0}x4*3{P6$u+i;Il=sL`dCLnw>9-&Aumpa-+N6ffW`5|yr|O;2(u>*sR=i5SW``pW zyNa@zo~->}Gj;{)mq&I%_3HmXRn+Z>VxuYaK(`*zT3z?FcEa~R+?b>45pzSA$htGBWzb%^z1 zt_A*4+(=%CO{s0Fi(!x_rR^%hFPhbAHV<2F6Xzi*rjw!B6&(bYpZDo}dC?=q4$4k3 z!#%_Oh-F=pbhENa@g?K4demGb`=*1aa-0Yu=`w{HY%|HwJb02Qc)X`oK|?i-{~gJ_ zmel>{Z0lvuqWE4u))}01|EnN8aM&cBdtSbG=Y+*T6YlpnJ5QDcIzNoa_$OQWZJ%1Q zm%k=rSmR4S4-`>7d0!Xd;GiW5`zdFz4ZiKnW3gisx4#ZGaO7Ki*Sd8}u!Bg-J6spUn9^7UQGchh+| zH|F#PbDKHe9?dxLYGoov@JHydTcT!%4!h6W7d39)mb)l@ZIRz#AP)$Gg^cJ}WMlHK zjJz9aIc8dD7juC1GD02+UJR!V_A1x{v?zN`oaz$%<9yKhKHBVAMI_^#Gy8|2T`75} zfI0AoP#Q>(%1q>2#F*04kz#p$WjdXADVv>}{E0u_@U(tyU}^Vsq2XEHALDnfO?ws! zNgNHOEMGff?o-3VKoDvsoW)b^DyvVC=ILOK|ChErleaen5@pU|r>=JMD)c`IOPO|6 zRee^DOc&~G-@>~L*0i^!zu|tm+fAkjIhFsX%xsl!_AV_zZKLk$3xI%hGB<^-raalL zz%mDGMI7TulBV4p#LJi}t z+Bp2)rHT%AR?L{uXmHcp;`T@X6QU2;wF|N{`~d!%x`_e&Rorbsme=jQ{TG-4joKvY zJq2BV`bSECM6bnG3kO}GEhah9txImwqKModCUzzZ8U9uPr(yJ1A4DkmUU(r;=G1WG zQG!}H!@hRJS#z7VHuGtSFXlu({K8M45B&G;)GZ0goRtna2zlaTeNuwLYb&#~6es${ zw?9&yg+&Ui%c)k>UgzUi3vlw`b>-A+Y@h{%cSh|6x;UWYT;4r{0c68I+VIc z=wI|Wx0>r$iY<*B;WYM^<)@>?e-SY=x2X>|iNEGdJ`AZj6&;|^kDR;`FR~gQET;&Y zgLI?sMSe_a(%G7m3f(fD7GG$88kgX$7o9o>X3gD`sg4KR+sT~Vx?K6zCdCL*8Ro2b zHFE6Ub;`hoc7FPal|TlUnWFgFAO-rNB_nSUDb~@X`L-A;|F-o{dd+MyXXb@4!Z);e z|C{)uUj0Z7G3%N(Mc*+VT z2vi=*Ydp;}NOr(#@twL9!h>y(g>(|8ZTbX9_j{;hvC(PqKG%_J@;HQsvCP&WYm>LakGUNxv zDb3#!S|JDDv+U5c$lC#`X3J3`A8Tex<_YPTb-5+m{+P5_plgHt-(lTwR@k*&RvUXJ z{xw^`nyyr8H0hdjMn(XB%4ihd+K!1vJV6x|sL87jfIQ&*DgcB{`2b{F4*G?zdK~lv zNPE~X6p(DM;RTTH`kgnT$=^^B_}$Ne3Jn|M5Fm>JC8Tp|KP)707aQEx!tU#bM#Yqx4JP8x%45tMX0 zDZ+Z5!DHO7f~^{}0a+tfOCK8ZjLx*{Z;^9D`0Jx0?o7pw(m+9S)VRALSs3PV1{eTL zQ29^eH}HYbEkqm8d!m#?8pa!ztF(J9uB#Gcey)){85_F?7=H(H{N=j6Dl3pP2g?_^ zn%Q(6`oFg~lMeC_&U-O9H0EjFYr{wzz{e-JS`x}uR{nXDI&gPVxmLZ8ckt4V|FTw+ zhf`SQh04E*1rI*mvRri__2Gfuo-xOLG~RWclEf~CCAek3uC0%xT(3fG4U+j_sjr~H z5ptE}^CYp2!ZFV^V)>q3gvgVX)O2K|^VNpZo{(-RJ^ZDd-i%X(Z|7OCkIjgx^N}&6 zUuUv41Z3HZ;T_c0vB2QO7%}Y1j26x^ry~!*ww4ruotHrXsRM(R+wWaSmAHHEHEC4{ znC$6Y19>nhBMhHI6LpFc^xWlP`*zE1y@cs&Dz{nCm|P=~;dMs9_O&5j2X^Zqh|yff z)0CEohiI_hQP8tEc9WB@t|#D-0Qv99s3q}++XgHl524qT&*32X<`+4FRFd&nU|+TGnIEVO&)7@rXZg=AJKYMdmErVl?#-! z5cTC9bW+`z58AnIiAX2#{*RvDoMAK<_V+d8C@0o=``j@+SN0MuBQ zV@+*F9QkZUa`J{fbylO@TORHI&_JQZQ7=gRuKU}2sru~=m%Ft+jBU!v=Dd$yS(P~2 z@VP6SSvSd?AbPDG8Glmf^U&ycQg>_$#Q4rbf6r@SDY-oicedHMZ{0cCuJc66A`7(Z zy9YC|#}lGEC~W@*uc~h2Q5EBpuQ8MD%e|&}0Ir8l^R_b##0gs*OIhxv^V{lvNsM2| z`pXZ22EAp~7~k$^XfkD({3^ps_gH8c%$4(5dpAb+=Gc)-1I+&}B9^L*(r=yi(P@o- zT7UUQ<_?pZjsm%6_i9x)5^HhIqLDkMjI&q%l9&|Su;6oXx(LUG3@ShTf{sj4%noiX zaH-1Of~A_C-zBg&(C(IC<`Qmih|yIjcT8T)QaYB3;h&Q$w60ZMJ#Sf#tF|lHx869u z2kXQp>RqQqJwTwFO#Sjbe0y&=*Nq$ATXt??uTP_$+QOIQSDagZzV2IGOBLO!v`On~ zb8#P$TwAb4`9E4;S8JSkAGN8Tztuksc7C}y4}7bhm_yg3pn0?-shQN!6)KBSu`h46 z&(Bl-n@=fgfvbHt)!G>*x|aL4{Q~8^6Kr;7^+59GZG^-;bA#P8kW!G(+aYG6xeDS! zEKJ{jLxW!uuslN@fZ&m){8t+)TTAU%aFU~wt#@*L&ZvefvyK_16MD*A=dr&UM#Ml+ zz`Vf1^UpZjaWc;Fg?HA?twt>)@KT)-9Bw%HQ^Oxi8Lf9B{Y;%(43XV@YS2&rDeal= z?}W)@l9yv7x2wd`)qX5lRGF93TOqs`JVGwDl$0+;l||w=K%IryvW*O@z@^4)ZY5&j z=r9j4of#0;X0=i%b~Erv6jR8fz_`};z5k@$`om43^~A4&cO(Kb_l0?ve2_^4*8Q*e zUQ`f{Mk`P|H(QnuL%HByhQiR@4E0mULuIZLA4?mi-c^L#O|8AFq^HlPB5P6IAcKA8 zXF7^6xO{F&GM#{GGWC44@mDgPlg%V_mA03^%=M>2u)_aT@r~^DQJWR1@Emm_)1B6l z5uT54G-b;}tkBF*o~1*g5hN%LJUVPPehI|rKh}1f|K2Wo*$Pc5O`<)DQ451 zN%@x1xo)dg36y-+uaj9C|3E$QZ>*p{YGzFC7HfLFl1h=wZc&M4&RmYoW14hUUut z?vdZEn>VDw<$~vYIaPbVK3DhLTBB8o{=GHz*KeZgUgskq=C4dd><#kj{nU;fd;DjU zb!B+x!u|J~%AS4e?Z#2rn(Tg{WB-jzJRTiEr;(Mjx z2bi&Zp`CkU-xAd7W@>(;Hb!{rqU}n1D@s%zO8!5w&EU zGLwq7K)O1mlo4$kT&HaNxQar-^>ue+z2|C_5DTM-^{Cegr8}hamJE_iCXj76ez^r^ z`o!6K*`T{j=LfFv7qwnCK0Aj=#4Ij#A*9#?&cK_-3xon-uXR{mO6b8O}ZbLGZKn^4`df zw3H+X&P7Ymt+D5gzGw)59CsfP|ny*bH-`x@KVQ5C))0CKT z4=?^QqyBuutCKx3xH>CmSlK5UL_c5l6qvR$eD@qv0LB(l^}+o$G(nxkh8fMgDGlrJ zrKiL@AJ`5uhuf84>wX;{5Z|aWU%Eh`mOC0!r12h*~1 zwwIf|CKp}_?!>>?P%d#L2+9dVbJlKfV`AHQN0`^5{K|^Esw+;za!3eHRIk)4%4hmc zf$q`&T5V>UgV3#J&h<@RDhHYBo5Tn6^jfLdnnO&|8L0xh`ovY;nA6jko+)9;jXvp0 z+-+KPeesZT8GyfHJvfGAd*pGQ%WhA+FFcE?z=XV&4OABMy1U2b|~AubDHt;DZ4v5 zA|8aya)4jFZmMiVAMpnH?0eGC?=90zM+zT2Dnry18<4UxH)_exxS|U5G*`DtqXmUC z7lU^Wd8L^dsbbQrzwPt+uZ0R52Q2rl%~^-5hIth^^0EJ;2HLi`k$Pr)x?m(;s(>K% z^bZ}^*V;gsp2^o^_=^QXK!JPHyalIUkVafutN8}8*B=<+A%?nu*1xg8#> zUpx>al;abd_@HfzmIBcEGW;sD(3YVw6H@sPOvLzxkR^?dfrq#MqCYu)N?x_1_37SF z&v}WO6pRXef6qGAkJ8=gQ*^?Gywp>Ep*s?5!_${AGDkAHgs$Y3+4*t!Z?o8ROFAF< z!Di4VF0Rb~0-diyjfr%A$$&OR!E%f6qIw<IW`DS0)+H2JR)lX@kQKJRJRmMlkrpVa zJT!fhF6NCqeub6tL3Ild0jbd+gInV&%tHkGUsofD^p8&z_saJVFAlu$$z~yc zR2%W(U9rrT6Mmtd|E)IusOzd-D3qC?t5zc=0p|!PPK@H7i_dPa(_H`~0fTcH)Nn$# zz|Fme&CUk@N7QSFUv382(1HOe?N*c}Nd@SI(+GfPhdl9$jJ0Fed#sgbyFHjcQl+xr zswr->?lJJ+jdXU){MwMBe-H@L{m|ISl#~&4OA-ETJuFM9D;@H7yI&u~{FQ|X9?a6` zEc>2JJpWkFF4TL0rdzD1+5fA^hQJ(5;~JW~ftnpUP~Sk#;<*VQpd2syjs0q^k-Co= zxF_WPDIj*k3|K9`k`K@6<&0jBRU3Jv_1SLVTM+_pAyoc<6nog?Fpz=2-$yhvyr4z_ zc5gqF$a+l}U}BJyk|TRCsWOO~Nq$vhK-I{3%WC^|Q?68((NgJ3NjglmxYbUtbS0lz zK3HpW)u3`B*rD$&fmxG;v73f{(S!2kfvi1mL94Z8o}_D0xN)uz#2W0260rP;DQ=)o z1B*~;d;i3AB|mhY-@h1KbtpbxbS=P1LTX&xx1e^`F zCxm!Fn0y!XF(ry6u!src_{x%#u7 zHG#_IVkXi=Ad7(dMISP=vb0$9zg4#^PPDd<-Z+~&yYUEKQ}<;Ul$@5G-n?trH?Pq^ zdm%2Pqx~?_Y=Hjqr|7Wok{7^ru`9kzaT`$6ZIkV!%6BMgKnD;Wy^9b_jzRcMn6_0ZnjP+m}Xgiz%qQFacG~bwRjNStItr~DVt&imt z%)k&DPG@gEUoW+5y;BSyD=(p%#~wx|MrgZX-KZRg`W!{f;)h{$R#RRMGiT`im*p ze@IC1LNGh=;*E{Vq<^F(4k^OGBjMezBmNI9517ut)4CQvoNOVdKlh6H)OaEJ@^W11 z2#XZPOtztJ>~4r-nflx|HzdTdD;E3uddTyAFy)htJ>_`@CExHfi0z``SVV3uDf}4d zLMOSeLK=htY8CnhM1tn#S)nY0Hz(N1(u!a<1de-#m(UdhC$o<|yCQMWh}_ufxzZdM zMa$5r$?9`daqD&Et_jTPIJ%e&7flq#7A^fFLb>f-=T#H9biZ!Agk(}T^ z?hc1}{QdpckSHdUWnS3mZ%c@y)9fcaE)7MC6GJv{O4Od#2S0DEP8_yj5Hiq#x&hIE zV`R;0V;gg_v+uIJVNHNPbE2|;U#HBV-q@3d{XaereKU~s-VTSgXiP*M`=!BWaqhb0 zvqnjdH~M4ImeQjtmr@0avCfU2jM>izP-)zsAwS~@0cMtlUYsl%Bf*H%xX*o!0LMr9Kywb zar5+*qK<1c{$JPp%ggzRbZ&7Z*&=( zpYT01b4_fw`7fmVXupYWTc=@nvy0wfbOEd{D@$$u!2Ca>b7rx5X zmm%ZqEejntVxhE&&Py_7%+a=6RhyF$8NjoU;R)d@y#>a%>z+q`qTkt8|5{i?Ta!B< z&^TjWFIKQ770!OC0YGo_2cW#R-&FQy+lZR0J0m=}#&>Z{2+3)7($BYl0w!FNV1}|49R)ACO5&Ib+0i@*E2R+-7c- zOviLjgJb8XLfm(k&-+5F#euB^Z; zNc|ZLVurJ1iQvt;*-ouCywx40YtJsXalR;1-xj*0Xi+UF;cUosZZQ?J&^&5(?t6!0k4iE(oBeIkfA3B12-}JR_5u7 zZP<%_>kN^tlBZ4f(&VN|pV{%$*irut7l3gZ0+|R9i}~7cfuhBRNdqFADqai;`Ak%N zU*sEO`5mwbJSb)|wuCd_bV^@=MNJW7RMy3`gCz+<KLDPasyh<{W)O8@1ujGsr=0gH{e z#rL>tT(o6Vs++h-$_d9M?yo+tMwzP?EO~puexi}Prx!NVT|k!#`entqfWNi0GV^hD`KT3GZZCh zZEFvH)uNTGn=CbMvddnaI(Hy)c4hOmqn77@y3ufD7R6&;;fe36Jm+K~l;Ri;=XD5| z5zT;l<|uFW|FRTg&1A4VoQ?vV31i@ed>S}SN0-`n$4@L&KaGE6UuYs(QWv(D->B_J z7`-cq46>FlET~z9QNVF7Kr2^%YTBx*DFuFh`gHUdh3S3}T+E>VL;ItZ17ms0GTpUT zs!Xc-=uyd;d}H~E0Z~JOECT=I-N^Q_;;~K{$&PmMVNYDop?(fw$Cq9WOt1kT4lg@P z|9JlXG{`%-*7E1tS5aS*b7R#Q;@YBuBtz9mqVmt~lS)2$RqtQ2G)}?u{4hei5DI{q z#i}oBu7Js<8|Fhhww(Q*^_7B5^~Ajjet&kXXx?F|k03Q!lGvNGEH6Qn8&xSMI4>z%)8-{F3 z^NxU?r#cj4@1-PfUsNC46$`M5(EG0v?UPjvoa8EhQNpn9!L*fKTKDdK1hFzBw2{9A zF{`jwg}}#ui<9K7#F_&C26nSZN%VGHqNsSarVrC4>+LI8v#;RF-Hpuuq3sgv0 z$|-#ZUY61zL-B{9m}196m6Zl~GQF@nxM{S&_=BO7Q2uL*@3@6EeS7%FWntsWDhsdw zmpY5LL_RS%WU7YW1#eXIkRtFF2teC_{mCHR_o8dKLdUifa5?!|yj$Us*OjLp^33f( zvHM8P?8S*&tMaEQVC*&QJ$P`vYqjQMQj$0klN2$cOuk`yY^mY(XFF$5`)7Dewd&*e zI47~Ex=+b_z0Kwx+xfNU1IxIG?SZhARbee7-h|tfE&TNnPQmoTlfvc9s88>Lta*`i;taa6J3kB9zRaX zsUfQxJD)024*JC!hDQ_#><-OQtw=86o#)RlM#mWD$eT}@nRS$zAifqFsRnoDWm#e= zcT@cY4&$8G=xm`w-n4Z`6W}l_An)EF5QdQ{9M7pcXYuj)h7GHVR47vI7+vm34J&gV zl$Zzl9)#*SUnnq583)ui|GdXfd4qe)wad(b71`%0Ms zGT1s*J${2NLT)UmOTaPPr}vLHP{npK!G84XOFnM8zKy%R5iuSycf9ZP*j4eihp<6Q zFF^{+IAtqVPDZ)A7ow_4Hgz0H{Q-=!*4Fc!FS_-lJ^$_nm15~rY!?%pZKsclr2E|- zFv2QKHk0nCSMSr$^-J9MkTd6$ajuPD_v5|`3IqRo-vZ}!dmVTe`9Zlo6IeWDG_@>d znE2?(9Q`*JpeZvsc|#8;(gjXIgdfhbA0N3eB3lom?vg(Wiu%K0UYoS`&tfycLRD&_ z_7U?=-_`txIQylS?%PvUr3OWF915_7=xdIBw`m&@V}}E+Mw;w5((boSH8$QlDu4ai zJ}%rqkq3T*(jAA42)^;Sm-|W(;<|B-gS;Ei#JMdSJdpJ1Vn3lSEI3)UgNhlCl^CRV ztEfHjyHh>hgMaBh{&<$p9r^0{I*tKt+mKRi%_2@T6UfMKLsdmPSpKyOlFOmz}t3e#&=l z@hjVUndv^A(^*!^^ zWB*vU+^aIo=Du>PJmNB-LDsL4fjG`SWh(|?d4=Y^w^*8M+NW(oJtdQ5V}+&&#>i;c zYjam~z1;xr zirnW~)7(?{1Y18oz+1hH+EMMd$*Idw1flLVZ(p;tXq_tglgstfl7-jvj`4q& zjYcf(G+)m@vLNs_gVYK{ZpXvdFLU`0Doo=n&5wFXR7s$ZUkpUkqH*bO73M-qS!?z4 z7hN*Cb0OvCzl&=`s8rBvU1Bw&N^k>-s_7$hBjvell$@Zy@->(};4(HVxp@+}H1Ar= zOBPyqy{&Hkep~mt?`mAk(!QUKTa%)EfrLaeN=W(mD2F+RMQ)`TDW~Suvci#w!S_~o z3tJP{ttWz7YqRcmiFa@LM2t#JXa48a+D(=WjN%fWr(SX`E_TZLlsqIf$g%2T(Fc3TFov^vb+qp)f zUzV}@xWFaCxXu+AZn(NO)jguobC2KK)^`hZxH#xiea@_CamUAH9rqS=xWp%dpmc$V zS9~YM34_@8g-DEy+gI%H2lZh#$L_5*w(wI_)Y0Q867X4x(_{nRQ?&$ROaW4YPf={)8c>-=eqm=Ci$3o+0^}HTs^` z=v@y^>!|x-J4`%rfynlsh1~H6m#UlNgB>R--$uA`DhiB=KiR5Y<(!)^6=NciDwmY% zcSerA=s&#OjxKCti9vmqaJ*hM%Zcj_YZhV_xZR;LzvT;UM1hT0YTY#Gbk~4U`q$Kj za(>wl0bLS43wo3rXw>lI-2p)O@N{9QxG!5j{Y|~4C-V@@%st3;C^&Q9JJ9)_my$|t zKXdj!sf(6%QIelgpKysL_d6E_V_qB4y~BDT1^0gp+{>FWx`G)gxYl6g{ns=nVWH-W zuXl6Pmj1xt#-cbFG{8W}z>`Y6cPnWRibXsu?EFZ!dGZp2TLa99$gPH3jebkJvK4`) z=jnSalp{gTP44On_QpvM`MTCf^gF49q}cs!Q?A|B4t@Id7UY0RnaLj7@3NOqn9U_m-s23+Z}8L-*+ z=L$d}L!nW^Y5=C_|olQ3$f9_rR*FM)DmYkS)1(<&UYwvOMv4%7U2z zEXQxg<`jaUF%KGEX!SRsx`sU#4B*8FqEeUtN~cnB#2#PwZrZGWs5%T`$tDeFyBb z(p4B5IRSxrlZ+LkI7(4Y?Vz)l-W?0YQQju}oC5n3HVa|k&7#=N2;)|b1|@gAdqLB% zq>%hQ0~%+{(S^v@yczfy+-ps&YGWW^#(9Ow;Nss3f0--P#Ywq!%3V%X9Ch5wx zjvq{SLRs0fVS{R~$8+M4C8C*fL3Kxw2EPjN#=k7B%&{UdgXnDby} z82*=r%I@h1tDXj_Rk3H(U&~u(0lOvFSuOi~*y#$;zkYk?34=ke?#$;FYV*h^*^kZ7 zuYMf0xzTz2ImdU62_2zL%iy(`lwU)|Hc90$h;^7T*Ib@ASF_OTO12y4S+Qz|><709 z2GWUjs~L5j`3VB!r4~^kkSl)q#Ju3dy(hw zfB6M=ZHLCHeV+N91sZ=wk7K$8RGz-B*x8{h?Hwtou0Oh|c3{tuwQnEy7ziEEI~%QY z@v(Fd3oFjXwmj)OiLT)C5papHVb>&;9k(}hQZg0G7kS`Zo`F4Y8dUVOtHGLA(Erri z(3t1vG>%?8s|9J}XczIty2Ze2U`tv{D%7zU21X&J+te4IkO1%AN~zoN9cQZS?Cc<$ z6o`or2$-b62HYO^)7RNtDZO430s*lTheP!badLh(%zgB^+qt=ObE>Ncb>mSV>dRIMm%>cW`;$DBxUS6FM@-N$1jfWn*QWrQJv=ALy!E%cCA^F z%!*nb_3DR$Pc5I}&{3-qfKy(Ju$8Lk#RN!sE=ZMJw4lYGCh z&R)mFRF1&3od z+;Ax^Q!in&YIk~`Kj-NmT&|po@&r+6MiW7_#FUHSDV1dcaEwM6AI6vO6|QQoR~js7 zYa@g8vNt0jH1(QEkC;n$Fgw#rYR56D+~BtEYh>eA)&q=t3(KI@miZZ>3U~dukdZjs zk#%+U5;kQflf51Lo|K#B&Sw?mp)h+ogbQ-vf%9tR{(%^&cVmkAg0qqZze4L-If9=- zv}N7GXjN%IoD4zGkRYy9s-1G(*P5GAs_Pc{PxEojSGay3<2m)j*c zd*6ebY;3;`!ekywN@C-LgC{Qy{MtGl=!)yNCD%zBKC`O!ax^J(D5A38Ktc)e>nBve z_lG(#d&BDOr3I-c^`J?0>e@OJ-Yq7BP_C|Bn91T~JP%$KPWgdN(!9$G+Rio0xmjpT z=g$=s3wR{hci#pYkaeamd4%il1@MDpmrGOt^{*(BhtY|8Q2UgCo}XN6OKI-is;ho+ z3NX8>KQB0rlC~a9OX^b1dwQDgfSZOY>a_BCq_9~u%tdnL!603Y zjWVGLj~*46n{X*iM;}|)-~oAqH|lDTJrru8zv?6Zpq<+Z!sAB034R#m=* zv@CDZHb@|e(M({5E7862fGx-k|ACVS-Hy}2Z5~Yl{U{a6P>J8_u9`EE#bAD0%wZJc`8AlY`yOKLVBs5qwvFXqJ51#c(FNZpmZGjUf(!%*v_o_K*UFG|PP;`#K``O5*u9 zS&<;qyF%-KKiI{Lvrqn^Dy(dS-Q~ssp%4C)u{Y{A+WGejeHTXz;mMxS^hCBp@t0~i znp8l#X_N}2C-&1%5SkwPSGNzj%Yv2u`yTu`&Hj9qM!!yt4IeBN+y;i)#83UfltgJ8 z!ea|u)@owDoseuUV|o&V+Pg>wIFU2gnlpvpJ8bo$Q{?BR-oRnaFVfp}JFR;7=udhE z;P5MGAxLQLKG|<-r7%tZb#`vfoxm~<+VCQ&3xSqRub;oTxuSO zgU@7rksytfTKQlcMe2Rq%p@e2Y3T^41I}_Ck3*S^Q3)X`X*219VcaPC;>>GZOPNfU zIZkgYU*%np09?b~^%IWO6C=8Z*gs{a>zW%BY&Sv!Ba4D(+*A!!*Q1c1s5=AWU&s<$ zEn3c+FGtn<&>QIl&wkzFD{d{Rn@x zq*Jk|QH)BUGvIDQxQI7;!p|>{St~FXj5Y>TAMd<7c_U<-j&d$!gJ^$zeqh$)j7d1T zqmVY`*;ZKZ()@|?m4c}saK?1kt#e`}so8#0lePCFJ*7QTXg&0fbng7zv4sVsTmuBc z^%A_i*b<4ANDSY!e7SDtQJj?$ltyE0swqpS%^ExZEUtDiDs>;JeWe*|Yrk#2;jQgl zs5zT}D-*NBxGU8)h2`ce|FpLBuizP-H6JAGhKW_ba#{B$h;UrbNIO5jw%_ zX2|zw!F(uQ-mN+E`~I0#JN)_BIzuoezwXJYM80YCSbP^@0hxsypo!QV!@yU_1f z##~WBn;denr5Kd^sEccPVcL^kwUN3C(>ko*6*y`bK^aKt*n_=_C|C1^sSTn!R!@yA z#>$VO$m41X0?|raf}?{Ki(aH!edNqMwKkomNOL3gorXYK?X7nQMBW`Z>t((jDEv(6 z-LZ71u0}H}S_i_2uac)V7MVBrzBhX$ogZao5tKsbh~-iKOA*Z3T7te8Q*OdWXL0K~9bu8IA9RPYRL*j&lW zGWK1kf=4&&P9TaYM8x=d{)FZZ{rY$=h5WJq3liUL1^1#?YQ~e?x6Oo^PZhkk-sK4L zIHU`TZO`O(kV0n0eSZ_wxs~!3E0mCKlKfbetCL+Ru1RuEt9NcH`>g-)V@t(f0bjqO z+|^wwFAU7HTQy*j`wOZ!at&wS@bnNg{Pv^}G@M^%?4RYyqk2o>Bv#O{R5UdTBE7C9X+PA%qHxQSwDLa@Eo^gavXS_<*!6T~|v|2-jZi+UN#)GM;6Z#kjYQ9{3 z>IjnObv&+oi8y3r^u@r1AD#Y4m)|w2td&9?hXS==KRuEEw|b{St|ag+S__&7T&m`|4?q zINRFdY<>krm^B%2Ffu=++dL-WIYk%4z@Z!7uyX-d(x4mblao(;{~Hhmx60heGkRgk|ze9%kf<(lsu>Ks@a5A3pfZ@llY zNSiHH5b_95^BovO{kBsJAFN+3nTNq{D>gEec5o?CL)(2;%<>8JV&<&x#zIsG6*De$ zz2SYQj~T@zaqX=;@aSk@|rN?mlMYP z<2ot>RTAf9k8k`kfAhp@v3b8`zR96N30Yo^$qV!fr~Fr)rW|iC z4;r~CYL}g`&SF*_r~6C4%P8+RH;_5$BIJV01OvO#2(?+2Bkob)wG#vhZIg@En4EW9 zSmpWrM&x#jhP?{ZOZkk7L}lSlGrHBh!SPD`M1DPW^Qpt@KXrT4?cC>lc4ZrPSQc(9 zvv9LLKMMYPUXnv8sJ(xlGOe>XCfmDm5@Dk2HkQzPXQ9ODksKoJv0C|h3MaD6d_2tO!rzt?xoI`z-G9_iENx!QHFA7vwxq{WeFeIToM(WYIO__;{hlM4s!LjXZC8 zH(y*|}hq~U&A=ezb#W4ecEZ>x*N} zebXdHct!3n-q~)g*~hFrs+*&Vezkf#V(5CytH3=uD}U;!W%$hP;FmvL-`mM*PK;Rm zLW_S7z?aB$7g+v`H}r*We*TTDjDX;v-l&K_DkBN!VtT1l#K}!`H920P$aL|QbME^_0Q=wh*&tS6c$ z@>)~_H&Zuk#wzgZlWl#qJHdNm{Gi_Dl#&`@l{MzZz-oa;%9{_wfSMBug-!mWW;K?B zxFA6&PfmJ!uyM)4x>L2EC=N@{Sn^%%HCGpQiK-9AJx~{z^D(?0(zleS~;3M)jc4v$|H)6VS#Z~+@g;iV81SVFe6WMf9UD}O2E5KKVbV_)F$ZeI@^qIP z@gv{whn_rj>eT#a_}ZLqNHr~Jk~DrT742A%yZF7&U0W&NO@Wn;onIxWyLamA z3)4ch>liGktO8NtB07&w>O?QxCJW6ngFLYx&;T zRAmcx+h`7*Bz1d>)e6n(2|RZ_?Amq>J20KEUNebDn@7kvJA zY`hYnEc^o)^c3*r5&>Koufh#k&qzKv3xLyXRW%e0_s{cWC8SZe?`&%L2pMwYYn*a3 zSjV4h-M;zIYW_#4s@quYJXt0o*slS%yJ6cfg-${NSb>?DwVPIq7BYj6ReQiMsjIWs zsz4S*)zu}F==>oZ5C{#byLY`Mf-g2s#{LVjf?26t_t*j;wMA;+4;Swx1ZvkR5;*Y* zZ=9@+ti=N&KFLD5Fj#pf&>zvdKmTL{3hI$tWuNc(Ry+QK&r4H0M-ol?^0O+hpNf|Kr}QC z0q|8vl%P^O@PCW`W()DUjE&ViQwexmMgt=vU(H}#kVEePN(Y8o5BH(_;Mafm!24e? ucmDss@V{aS{QtM{zxp;dJb!d=Ye(=Wcj<60 - Multi-Record ACID Transactions + Multi-Record ACID Transactions Supported @@ -216,5 +219,4 @@ The table below summarizes the main differences between SQL and NoSQL databases. * Developer productivity - NoSQL systems tend to map data based on the programming data structures. As a result developers need to perform fewer data transformations leading to increased productivity & fewer bugs. - + NoSQL systems tend to map data based on the programming data structures. As a result developers need to perform fewer data transformations leading to increased productivity & fewer bugs. \ No newline at end of file diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 1d6dd14..f9f8fcd 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -1,98 +1,4 @@ -# Key Concepts - NoSQL -Lets looks at some of the key concepts when we talk about NoSQL or distributed systems - - -## CAP Theorem - - - -In a keynote titled “Towards Robust Distributed Systems” at ACM’s PODC symposium in 2000 Eric Brewer came up with the so-called CAP-theorem which is widely adopted today by large web companies as well as in the NoSQL community. The CAP acronym stands for **C**onsistency, **A**vailability & **P**artition Tolerance. - - - -* **Consistency** - - It refers to how consistent a system is after an execution. A distributed system is called consistent when a write made by a source is available for all readers of that shared data. Different NoSQL systems support different levels of consistency. - -* **Availability** - - It refers to how a system responds to loss of functionality of different systems due to hardware and software failures. A high availability implies that a system is still available to handle operations (reads and writes) when a certain part of the system is down due to a failure or upgrade. - -* **Partition Tolerance** - - It is the ability of the system to continue operations in the event of a network partition. A network partition occurs when a failure causes two or more islands of networks where the systems can’t talk to each other across the islands temporarily or permanently. - - -Brewer alleges that one can at most choose two of these three characteristics in a shared-data system. The CAP-theorem states that a choice can only be made for two options out of consistency, availability and partition tolerance. A growing no of use cases in large scale applications tend to value reliability implying that Availability & Redundancy are more valuable than Consistency. As a result these systems struggle to meet ACID properties. They attain this by loosening on the consistency requirement i.e Eventual Consistency. - -**Eventual Consistency **means that all readers will see writes, as time goes on: “In a steady state, the system will eventually return the last written value”. Clients therefore may face an inconsistent state of data as updates are in progress. For instance, in a replicated database updates may go to one node which replicates the latest version to all other nodes that contain a replica of the modified dataset so that the replica nodes eventually will have the latest version. - -Different NoSQL systems support different levels of eventual consistency models. For ex: - - - -* Read Your Own Writes Consistency - - A client will see his updates immediately after they are written. The reads can hit nodes other than the one where it was written. However he might not see updates by other clients immediately. - -* Session Consistency: - - A client will see the updates to his data within a session scope. This generally indicates that reads & writes occur on the same server. Other clients using the same nodes will receive the same updates. - -* Casual Consistency - - A system provides causal consistency if the following condition holds: write operations that are related by potential causality are seen by each process of the system in order. Different processes may observe concurrent writes in different orders - - - - -Eventual consistency is useful if concurrent updates of the same partitions of data are unlikely and if clients do not immediately depend on reading updates issued by themselves or by other clients. - -Depending on what consistency model was chosen for the system (or parts of it), determines where the requests are routed, ex: replicas. - -CAP alternatives illustration - - - - - - - - - - - - - - - - - - - -
Choice - Traits - Examples -
Consistency + Availability -

-(Forfeit Partitions) -

2-phase commits -

-Cache invalidation protocols -

Single-site databases Cluster databases -

-LDAP -

-xFS file system -

Consistency + Partition tolerance -

- (Forfeit Availability) -

Pessimistic locking -

-Make minority partitions unavailable -

Distributed databases Distributed locking Majority protocols -
Availability + Partition tolerance (Forfeit Consistency) expirations/leases

@@ -100,22 +6,22 @@ conflict resolution optimistic

DNS

-Web Caching +Web caching

-## Versioning of Data in distributed systems +### Versioning of Data in distributed systems -When data is distributed across nodes, it can be modified on different nodes at the same time (assuming Strict consistency is enforced). Questions arise on conflict resolution for concurrent updates. Some of the popular conflict resolution mechanism are +When data is distributed across nodes, it can be modified on different nodes at the same time (assuming strict consistency is enforced). Questions arise on conflict resolution for concurrent updates. Some of the popular conflict resolution mechanism are * **Timestamps** - This is the most obvious solution. You sort updates based on chronological order and choose the latest update. However this relies on Clock synchronization across different parts of the infrastructure. This gets even more complicated when parts of systems are spread across different geographic locations. + This is the most obvious solution. You sort updates based on chronological order and choose the latest update. However this relies on clock synchronization across different parts of the infrastructure. This gets even more complicated when parts of systems are spread across different geographic locations. * **Optimistic Locking** @@ -123,18 +29,21 @@ When data is distributed across nodes, it can be modified on different nodes at * **Vector Clocks** - A vector clock is defined as a tuple of clock values from each node. In a distributed environment, each node maintains a tuple of such clock values which represent the state of the nodes itself and its peers/replicas. A clock value may be real timestamps derived from local clock or version no. + A vector clock is defined as a tuple of clock values from each node. In a distributed environment, each node maintains a tuple of such clock values which represent the state of the nodes itself and its peers/replicas. A clock value may be real timestamps derived from local clock or version no. + + + + +


(Back to top)(Next alert)
>>>>>

+ + +![alt_text](images\vector_clocks.png "Vector Clocks") + -

>>>>> gd2md-html alert: inline image link here (to images/image1.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

- - -![alt_text](images/image1.png "image_tooltip") - - -** Vector clocks illustration ** +** Vector clocks illustration ** Vector clocks have the following advantages over other conflict resolution mechanism @@ -143,10 +52,10 @@ Vector clocks have the following advantages over other conflict resolution mecha 1. No dependency on synchronized clocks 2. No total ordering of revision nos required for casual reasoning -No need to store and maintain multiple versions of the data on different nodes.** ** +No need to store and maintain multiple versions of the data on different nodes.** ** -## Partitioning +### Partitioning When the amount of data crosses the capacity of a single node, we need to think of splitting data, creating replicas for load balancing & disaster recovery. Depending on how dynamic the infrastructure is, we have a few approaches that we can take. @@ -154,7 +63,7 @@ When the amount of data crosses the capacity of a single node, we need to think 1. **Memory cached** - These are partitioned in-memory databases that are primarily used for transient data. These databases are generally used as a front for traditional RDBMS. Most frequently used data is replicated from a rdbms into a memory database to facilitate fast queries and to take the load off from backend DB’s. A very common example is memcached. + These are partitioned in-memory databases that are primarily used for transient data. These databases are generally used as a front for traditional RDBMS. Most frequently used data is replicated from a rdbms into a memory database to facilitate fast queries and to take the load off from backend DB’s. A very common example is memcached or couchbase. 2. **Clustering** @@ -166,7 +75,7 @@ When the amount of data crosses the capacity of a single node, we need to think 4. **Sharding** - Sharing refers to dividing data in such a way that data is distributed evenly (both in terms of storage & processing power) across a cluster of nodes. It can also imply data locality, which means similar & related data is stored together to facilitate faster access. A shard in turn can be further replicated to meet load balancing or disaster recovery requirements. A single shard replica might take in all writes (single leader) or multiple replicas can take writes (multi-leader). Reads can be distributed across multiple replicas. Since data is now distributed across multiple nodes, clients should be able to consistently figure out where data is hosted. We will look at some of the common techniques below. The downside of sharding is that joins between shards is not possible. So a upstream/downstream application has to aggregate the results from multiple shards. + Sharing refers to dividing data in such a way that data is distributed evenly (both in terms of storage & processing power) across a cluster of nodes. It can also imply data locality, which means similar & related data is stored together to facilitate faster access. A shard in turn can be further replicated to meet load balancing or disaster recovery requirements. A single shard replica might take in all writes (single leader) or multiple replicas can take writes (multi-leader). Reads can be distributed across multiple replicas. Since data is now distributed across multiple nodes, clients should be able to consistently figure out where data is hosted. We will look at some of the common techniques below. The downside of sharding is that joins between shards is not possible. So an upstream/downstream application has to aggregate the results from multiple shards. @@ -180,7 +89,7 @@ When the amount of data crosses the capacity of a single node, we need to think ** Sharding example** -## Hashing +### Hashing A hash function is a function that maps one piece of data—typically describing some kind of object, often of arbitrary size—to another piece of data, typically an integer, known as _hash code_, or simply _hash_. In a partitioned database, it is important to consistently map a key to a server/replica. @@ -203,9 +112,9 @@ Where The downside of this simple hash is that, whenever the cluster topology changes, the data distribution also changes. When you are dealing with memory caches, it will be easy to distribute partitions around. Whenever a node joins/leaves a topology, partitions can reorder themselves, a cache miss can be re-populated from backend DB. However when you look at persistent data, it is not possible as the new node doesn’t have the data needed to serve it. This brings us to consistent hashing. -### Consistent hashing +#### Consistent Hashing -Consistent Hashing is a distributed hashing scheme that operates independently of the number of servers or objects in a distributed _hash table_ by assigning them a position on an abstract circle, or _hash ring_. This allows servers and objects to scale without affecting the overall system. +Consistent hashing is a distributed hashing scheme that operates independently of the number of servers or objects in a distributed _hash table_ by assigning them a position on an abstract circle, or _hash ring_. This allows servers and objects to scale without affecting the overall system. Say that our hash function h() generates a 32-bit integer. Then, to determine to which server we will send a key k, we find the server s whose hash h(s) is the smallest integer that is larger than h(k). To make the process simpler, we assume the table is circular, which means that if we cannot find a server with a hash larger than h(k), we wrap around and start looking from the beginning of the array. @@ -224,28 +133,28 @@ In consistent hashing when a server is removed or added then only the keys from To evenly distribute the load among servers when a server is added or removed, it creates a fixed number of replicas ( known as virtual nodes) of each server and distributes it along the circle. So instead of server labels S1, S2 and S3, we will have S10 S11…S19, S20 S21…S29 and S30 S31…S39. The factor for a number of replicas is also known as _weight_, depending on the situation. - + All keys which are mapped to replicas Sij are stored on server Si. To find a key we do the same thing, find the position of the key on the circle and then move forward until you find a server replica. If the server replica is Sij then the key is stored in server Si. -Suppose server S3 is removed, then all S3 replicas with labels S30 S31 … S39 must be removed. Now the objects keys adjacent to S3X labels will be automatically re-assigned to S1X, S2X and S4X. All keys originally assigned to S1, S2 & S4 will not be moved. +Suppose server S3 is removed, then all S3 replicas with labels S30 S31 … S39 must be removed. Now the objects keys adjacent to S3X labels will be automatically re-assigned to S1X, S2X and S4X. All keys originally assigned to S1, S2 & S4 will not be moved. Similar things happen if we add a server. Suppose we want to add a server S5 as a replacement of S3 then we need to add labels S50 S51 … S59. In the ideal case, one-fourth of keys from S1, S2 and S4 will be reassigned to S5. -When applied to persistent storages, further issues arise: if a node has left the scene, data stored on this node becomes unavailable, unless it has been replicated to other nodes before; in the opposite case of a new node joining the others, adjacent nodes are no longer responsible for some pieces of data which they still store but not get asked for anymore as the corresponding objects are no longer hashed to them by requesting clients. In order to address this issue, a replication factor (r) can be introduced. +When applied to persistent storages, further issues arise: if a node has left the scene, data stored on this node becomes unavailable, unless it has been replicated to other nodes before; in the opposite case of a new node joining the others, adjacent nodes are no longer responsible for some pieces of data which they still store but not get asked for anymore as the corresponding objects are no longer hashed to them by requesting clients. In order to address this issue, a replication factor (r) can be introduced. Introducing replicas in a partitioning scheme—besides reliability benefits—also makes it possible to spread workload for read requests that can go to any physical node responsible for a requested piece of data. Scalability doesn’t work if the clients have to decide between multiple versions of the dataset, because they need to read from a quorum of servers which in turn reduces the efficiency of load balancing. - + -## Quorum +### Quorum Quorum is the minimum number of nodes in a cluster that must be online and be able to communicate with each other. If any additional node failure occurs beyond this threshold, the cluster will stop running. - + - + To attain a quorum, you need a majority of the nodes. Commonly it is (N/2 + 1), where N is the total no of nodes in the system. For ex, @@ -253,7 +162,9 @@ In a 3 node cluster, you need 2 nodes for a majority, In a 5 node cluster, you need 3 nodes for a majority, -In a 6 node cluster, you need 4 nodes for a majority. +In a 6 node cluster, you need 4 nodes for a majority. + + @@ -261,22 +172,6 @@ In a 6 node cluster, you need 4 nodes for a majority. ![alt_text](images/image4.png "image_tooltip") - - - - -

>>>>> gd2md-html alert: inline image link here (to images/image5.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

- - -![alt_text](images/image5.png "image_tooltip") - - - - -

>>>>> gd2md-html alert: inline image link here (to images/image6.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

- - -![alt_text](images/image6.png "image_tooltip") Network problems can cause communication failures among cluster nodes. One set of nodes might be able to communicate together across a functioning part of a network but not be able to communicate with a different set of nodes in another part of the network. This is known as split brain in cluster or cluster partitioning. @@ -289,8 +184,9 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se -

>>>>> gd2md-html alert: inline image link here (to images/image7.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+

>>>>> gd2md-html alert: inline image link here (to images/image5.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

-![alt_text](images/image7.png "image_tooltip") +![alt_text](images/image5.png "image_tooltip") + From 5f5dad09c98658e36a3b180e523cdd530f0d7d54 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:29:20 +0530 Subject: [PATCH 03/14] Fixing Image Links --- courses/databases_nosql/key_concepts.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index f9f8fcd..0dfa7ea 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -80,10 +80,10 @@ When the amount of data crosses the capacity of a single node, we need to think -

>>>>> gd2md-html alert: inline image link here (to images/image2.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+


(Back to top)(Next alert)
>>>>>

-![alt_text](images/image2.png "image_tooltip") +![alt_text]( images\database_sharding.png "Sharding") ** Sharding example** @@ -120,10 +120,10 @@ Say that our hash function h() generates a 32-bit integer. Then, to determine to -

>>>>> gd2md-html alert: inline image link here (to images/image3.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+

images\consistent_hashing.png

-![alt_text](images/image3.png "image_tooltip") +![alt_text]( images\consistent_hashing.png "Consistent Hashing") Consistent hashing illustration From 8d48042c6c02b281928296819809d3e026c8a4aa Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:31:00 +0530 Subject: [PATCH 04/14] Fixing Image link typo --- courses/databases_nosql/key_concepts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 0dfa7ea..3cf5d72 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -34,10 +34,10 @@ When data is distributed across nodes, it can be modified on different nodes at -


(Back to top)(Next alert)
>>>>>

+


(Back to top)(Next alert)
>>>>>

-![alt_text](images\vector_clocks.png "Vector Clocks") +![alt_text](images/vector_clocks.png "Vector Clocks") From 5a15f340a34926e283b4265535f37088898993bf Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:31:57 +0530 Subject: [PATCH 05/14] Formiting styles --- courses/databases_nosql/key_concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 3cf5d72..78e99f7 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -34,7 +34,7 @@ When data is distributed across nodes, it can be modified on different nodes at -


(Back to top)(Next alert)
>>>>>

+

![alt_text](images/vector_clocks.png "Vector Clocks") From 908a941a26b50c6bda4f3c5ece479226de0c0966 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:36:49 +0530 Subject: [PATCH 06/14] More link fixes --- .../databases_nosql/images/cluster_quorum.png | Bin 0 -> 59027 bytes courses/databases_nosql/key_concepts.md | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 courses/databases_nosql/images/cluster_quorum.png diff --git a/courses/databases_nosql/images/cluster_quorum.png b/courses/databases_nosql/images/cluster_quorum.png new file mode 100644 index 0000000000000000000000000000000000000000..1091fb45ede4899c0b6eb4b19e3bf63eb6c70e63 GIT binary patch literal 59027 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%0DYNxSb%I}er|=t`911+859 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
(Back to top)(Next alert)
>>>>>

+

-![alt_text]( images\database_sharding.png "Sharding") +![alt_text]( images/database_sharding.png "Sharding") ** Sharding example** @@ -120,10 +120,10 @@ Say that our hash function h() generates a 32-bit integer. Then, to determine to -

images\consistent_hashing.png

+

-![alt_text]( images\consistent_hashing.png "Consistent Hashing") +![alt_text]( images/consistent_hashing.png "Consistent Hashing") Consistent hashing illustration @@ -168,10 +168,10 @@ In a 6 node cluster, you need 4 nodes for a majority. -

>>>>> gd2md-html alert: inline image link here (to images/image4.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+

-![alt_text](images/image4.png "image_tooltip") +![alt_text](images/Quorum.png "image_tooltip") Network problems can cause communication failures among cluster nodes. One set of nodes might be able to communicate together across a functioning part of a network but not be able to communicate with a different set of nodes in another part of the network. This is known as split brain in cluster or cluster partitioning. @@ -184,9 +184,9 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se -

>>>>> gd2md-html alert: inline image link here (to images/image5.png). Store image on your image server and adjust path/filename/extension if necessary.
(Back to top)(Next alert)
>>>>>

+

-![alt_text](images/image5.png "image_tooltip") +![alt_text](images/cluster_quorum.png "image_tooltip") From ae20972c60ae72dae41c52920318a4f6042d63f1 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:38:11 +0530 Subject: [PATCH 07/14] Farmatting changes --- courses/databases_nosql/key_concepts.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 8034b93..0c95d9c 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -30,10 +30,7 @@ When data is distributed across nodes, it can be modified on different nodes at * **Vector Clocks** A vector clock is defined as a tuple of clock values from each node. In a distributed environment, each node maintains a tuple of such clock values which represent the state of the nodes itself and its peers/replicas. A clock value may be real timestamps derived from local clock or version no. - - -

@@ -77,9 +74,6 @@ When the amount of data crosses the capacity of a single node, we need to think Sharing refers to dividing data in such a way that data is distributed evenly (both in terms of storage & processing power) across a cluster of nodes. It can also imply data locality, which means similar & related data is stored together to facilitate faster access. A shard in turn can be further replicated to meet load balancing or disaster recovery requirements. A single shard replica might take in all writes (single leader) or multiple replicas can take writes (multi-leader). Reads can be distributed across multiple replicas. Since data is now distributed across multiple nodes, clients should be able to consistently figure out where data is hosted. We will look at some of the common techniques below. The downside of sharding is that joins between shards is not possible. So an upstream/downstream application has to aggregate the results from multiple shards. - - -

@@ -118,8 +112,6 @@ Consistent hashing is a distributed hashing scheme that operates independently o Say that our hash function h() generates a 32-bit integer. Then, to determine to which server we will send a key k, we find the server s whose hash h(s) is the smallest integer that is larger than h(k). To make the process simpler, we assume the table is circular, which means that if we cannot find a server with a hash larger than h(k), we wrap around and start looking from the beginning of the array. - -

@@ -164,10 +156,6 @@ In a 5 node cluster, you need 3 nodes for a majority, In a 6 node cluster, you need 4 nodes for a majority. - - - -

@@ -182,8 +170,6 @@ Eg: In a 5 node cluster, consider what happens if nodes 1, 2, and 3 can communic Below diagram demonstrates Quorum selection on a cluster partitioned into two sets. - -

From 68d2a0546690a8c2dffee2a5e8585e18b0817ba5 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:40:14 +0530 Subject: [PATCH 08/14] Fixing typos --- courses/databases_nosql/key_concepts.md | 97 ++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 0c95d9c..40a7961 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -1,4 +1,98 @@ +## Key Concepts +Lets looks at some of the key concepts when we talk about NoSQL or distributed systems + + +### CAP Theorem + + + +In a keynote titled “[Towards Robust Distributed Systems](https://sites.cs.ucsb.edu/~rich/class/cs293b-cloud/papers/Brewer_podc_keynote_2000.pdf)” at ACM’s PODC symposium in 2000 Eric Brewer came up with the so-called CAP-theorem which is widely adopted today by large web companies as well as in the NoSQL community. The CAP acronym stands for **C**onsistency, **A**vailability & **P**artition Tolerance. + + + +* **Consistency** + + It refers to how consistent a system is after an execution. A distributed system is called consistent when a write made by a source is available for all readers of that shared data. Different NoSQL systems support different levels of consistency. + +* **Availability** + + It refers to how a system responds to loss of functionality of different systems due to hardware and software failures. A high availability implies that a system is still available to handle operations (reads and writes) when a certain part of the system is down due to a failure or upgrade. + +* **Partition Tolerance** + + It is the ability of the system to continue operations in the event of a network partition. A network partition occurs when a failure causes two or more islands of networks where the systems can’t talk to each other across the islands temporarily or permanently. + + +Brewer alleges that one can at most choose two of these three characteristics in a shared-data system. The CAP-theorem states that a choice can only be made for two options out of consistency, availability and partition tolerance. A growing number of use cases in large scale applications tend to value reliability implying that availability & redundancy are more valuable than consistency. As a result these systems struggle to meet ACID properties. They attain this by loosening on the consistency requirement i.e Eventual Consistency. + +**Eventual Consistency **means that all readers will see writes, as time goes on: “In a steady state, the system will eventually return the last written value”. Clients therefore may face an inconsistent state of data as updates are in progress. For instance, in a replicated database updates may go to one node which replicates the latest version to all other nodes that contain a replica of the modified dataset so that the replica nodes eventually will have the latest version. + +NoSQL systems support different levels of eventual consistency models. For example: + + + +* Read Your Own Writes Consistency + + A client will see his updates immediately after they are written. The reads can hit nodes other than the one where it was written. However he might not see updates by other clients immediately. + +* Session Consistency: + + A client will see the updates to his data within a session scope. This generally indicates that reads & writes occur on the same server. Other clients using the same nodes will receive the same updates. + +* Casual Consistency + + A system provides causal consistency if the following condition holds: write operations that are related by potential causality are seen by each process of the system in order. Different processes may observe concurrent writes in different orders + + + + +Eventual consistency is useful if concurrent updates of the same partitions of data are unlikely and if clients do not immediately depend on reading updates issued by themselves or by other clients. + +Depending on what consistency model was chosen for the system (or parts of it), determines where the requests are routed, ex: replicas. + +CAP alternatives illustration + + + + + + + + + + + + + + + + + + + +
Choice + Traits + Examples +
Consistency + Availability +

+(Forfeit Partitions) +

2-phase commits +

+Cache invalidation protocols +

Single-site databases Cluster databases +

+LDAP +

+xFS file system +

Consistency + Partition tolerance +

+ (Forfeit Availability) +

Pessimistic locking +

+Make minority partitions unavailable +

Distributed databases Distributed locking Majority protocols +
Availability + Partition tolerance (Forfeit Consistency) expirations/leases

@@ -12,7 +106,6 @@ Web caching

- ### Versioning of Data in distributed systems When data is distributed across nodes, it can be modified on different nodes at the same time (assuming strict consistency is enforced). Questions arise on conflict resolution for concurrent updates. Some of the popular conflict resolution mechanism are @@ -30,7 +123,7 @@ When data is distributed across nodes, it can be modified on different nodes at * **Vector Clocks** A vector clock is defined as a tuple of clock values from each node. In a distributed environment, each node maintains a tuple of such clock values which represent the state of the nodes itself and its peers/replicas. A clock value may be real timestamps derived from local clock or version no. - +

From 55f627597583630a3cda03e25ac695de3c81979a Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 11:43:34 +0530 Subject: [PATCH 09/14] Formatting changes --- courses/databases_nosql/key_concepts.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 40a7961..ed4de02 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -132,8 +132,7 @@ When data is distributed across nodes, it can be modified on different nodes at - -** Vector clocks illustration ** +

** Vector clocks illustration **

Vector clocks have the following advantages over other conflict resolution mechanism @@ -173,7 +172,7 @@ When the amount of data crosses the capacity of a single node, we need to think ![alt_text]( images/database_sharding.png "Sharding") -** Sharding example** +

** Sharding example**

### Hashing @@ -211,7 +210,7 @@ Say that our hash function h() generates a 32-bit integer. Then, to determine to ![alt_text]( images/consistent_hashing.png "Consistent Hashing") -Consistent hashing illustration +

Consistent hashing illustration

In consistent hashing when a server is removed or added then only the keys from that server are relocated. For example, if server S3 is removed then, all keys from server S3 will be moved to server S4 but keys stored on server S4 and S2 are not relocated. But there is one problem, when server S3 is removed then keys from S3 are not equally distributed among remaining servers S4 and S2. They are only assigned to server S4 which increases the load on server S4. @@ -254,6 +253,9 @@ In a 6 node cluster, you need 4 nodes for a majority. ![alt_text](images/Quorum.png "image_tooltip") +

Quorum example

+ + Network problems can cause communication failures among cluster nodes. One set of nodes might be able to communicate together across a functioning part of a network but not be able to communicate with a different set of nodes in another part of the network. This is known as split brain in cluster or cluster partitioning. @@ -268,4 +270,5 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se ![alt_text](images/cluster_quorum.png "image_tooltip") +

Cluster Quorum example

From 4deec2767fc7bfcb610209cb47de4b154862f324 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 12:59:33 +0530 Subject: [PATCH 10/14] More formatting --- courses/databases_nosql/key_concepts.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index ed4de02..4a16fea 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -34,15 +34,15 @@ NoSQL systems support different levels of eventual consistency models. For examp * Read Your Own Writes Consistency - A client will see his updates immediately after they are written. The reads can hit nodes other than the one where it was written. However he might not see updates by other clients immediately. + A client will see his updates immediately after they are written. The reads can hit nodes other than the one where it was written. However he might not see updates by other clients immediately. * Session Consistency: - A client will see the updates to his data within a session scope. This generally indicates that reads & writes occur on the same server. Other clients using the same nodes will receive the same updates. + A client will see the updates to his data within a session scope. This generally indicates that reads & writes occur on the same server. Other clients using the same nodes will receive the same updates. * Casual Consistency - A system provides causal consistency if the following condition holds: write operations that are related by potential causality are seen by each process of the system in order. Different processes may observe concurrent writes in different orders + A system provides causal consistency if the following condition holds: write operations that are related by potential causality are seen by each process of the system in order. Different processes may observe concurrent writes in different orders From b06cef0a879685d04ccd2f7a9515eabb623103c6 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 13:31:18 +0530 Subject: [PATCH 11/14] Formatting fixes --- courses/databases_nosql/key_concepts.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 4a16fea..b804c55 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -132,7 +132,7 @@ When data is distributed across nodes, it can be modified on different nodes at -

** Vector clocks illustration **

+

**Vector clocks illustration**

Vector clocks have the following advantages over other conflict resolution mechanism @@ -172,7 +172,7 @@ When the amount of data crosses the capacity of a single node, we need to think ![alt_text]( images/database_sharding.png "Sharding") -

** Sharding example**

+

**Sharding example**

### Hashing @@ -210,7 +210,7 @@ Say that our hash function h() generates a 32-bit integer. Then, to determine to ![alt_text]( images/consistent_hashing.png "Consistent Hashing") -

Consistent hashing illustration

+

**Consistent hashing illustration**

In consistent hashing when a server is removed or added then only the keys from that server are relocated. For example, if server S3 is removed then, all keys from server S3 will be moved to server S4 but keys stored on server S4 and S2 are not relocated. But there is one problem, when server S3 is removed then keys from S3 are not equally distributed among remaining servers S4 and S2. They are only assigned to server S4 which increases the load on server S4. @@ -253,7 +253,7 @@ In a 6 node cluster, you need 4 nodes for a majority. ![alt_text](images/Quorum.png "image_tooltip") -

Quorum example

+

**Quorum example**

@@ -270,5 +270,5 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se ![alt_text](images/cluster_quorum.png "image_tooltip") -

Cluster Quorum example

+

**Cluster Quorum example**

From b4e7405ceb0fd4046de0bcacd6bb62366b9e862e Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 13:36:23 +0530 Subject: [PATCH 12/14] Formatting --- courses/databases_nosql/key_concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index b804c55..6cfe6a9 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -270,5 +270,5 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se ![alt_text](images/cluster_quorum.png "image_tooltip") -

**Cluster Quorum example**

+

**Cluster Quorum example**

From 5725d484df3063ac87ff4d883ace2fc5714890df Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 13:37:15 +0530 Subject: [PATCH 13/14] testing formatting --- courses/databases_nosql/key_concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 6cfe6a9..0f45c86 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -270,5 +270,5 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se ![alt_text](images/cluster_quorum.png "image_tooltip") -

**Cluster Quorum example**

+**

**Cluster Quorum example

** From 57f0c0d01baa142e2cd6e010a4dbec6aed177709 Mon Sep 17 00:00:00 2001 From: Sai Kiran Kanuri Date: Wed, 18 Nov 2020 13:46:26 +0530 Subject: [PATCH 14/14] more formatting tests --- courses/databases_nosql/key_concepts.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/courses/databases_nosql/key_concepts.md b/courses/databases_nosql/key_concepts.md index 0f45c86..46723d4 100644 --- a/courses/databases_nosql/key_concepts.md +++ b/courses/databases_nosql/key_concepts.md @@ -132,7 +132,7 @@ When data is distributed across nodes, it can be modified on different nodes at -

**Vector clocks illustration**

+

Vector clocks illustration

Vector clocks have the following advantages over other conflict resolution mechanism @@ -172,7 +172,7 @@ When the amount of data crosses the capacity of a single node, we need to think ![alt_text]( images/database_sharding.png "Sharding") -

**Sharding example**

+

Sharding example

### Hashing @@ -210,7 +210,7 @@ Say that our hash function h() generates a 32-bit integer. Then, to determine to ![alt_text]( images/consistent_hashing.png "Consistent Hashing") -

**Consistent hashing illustration**

+

Consistent hashing illustration

In consistent hashing when a server is removed or added then only the keys from that server are relocated. For example, if server S3 is removed then, all keys from server S3 will be moved to server S4 but keys stored on server S4 and S2 are not relocated. But there is one problem, when server S3 is removed then keys from S3 are not equally distributed among remaining servers S4 and S2. They are only assigned to server S4 which increases the load on server S4. @@ -253,7 +253,7 @@ In a 6 node cluster, you need 4 nodes for a majority. ![alt_text](images/Quorum.png "image_tooltip") -

**Quorum example**

+

Quorum example

@@ -270,5 +270,5 @@ Below diagram demonstrates Quorum selection on a cluster partitioned into two se ![alt_text](images/cluster_quorum.png "image_tooltip") -**

**Cluster Quorum example

** +**

Cluster Quorum example

**