From eaca538fa773adbec10b9afd15d02dc706c4e813 Mon Sep 17 00:00:00 2001 From: Sander Molenkamp Date: Mon, 7 Sep 2020 08:37:55 +0200 Subject: [PATCH 01/23] Create folder for Dapr for .NET Developers --- docs/architecture/dapr-for-net-devs/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/architecture/dapr-for-net-devs/README.md diff --git a/docs/architecture/dapr-for-net-devs/README.md b/docs/architecture/dapr-for-net-devs/README.md new file mode 100644 index 0000000000000..cfdfbe37c21d6 --- /dev/null +++ b/docs/architecture/dapr-for-net-devs/README.md @@ -0,0 +1 @@ +[Placeholder] From 2e282675a8982a0fde942635c5f87866556eee59 Mon Sep 17 00:00:00 2001 From: Edwin van Wijk Date: Sat, 19 Sep 2020 06:37:15 +0200 Subject: [PATCH 02/23] Remove dapr-for-net-devs folder with readme file --- docs/architecture/dapr-for-net-devs/README.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/architecture/dapr-for-net-devs/README.md diff --git a/docs/architecture/dapr-for-net-devs/README.md b/docs/architecture/dapr-for-net-devs/README.md deleted file mode 100644 index cfdfbe37c21d6..0000000000000 --- a/docs/architecture/dapr-for-net-devs/README.md +++ /dev/null @@ -1 +0,0 @@ -[Placeholder] From e584a8ddaa1e715bad050042d49016e9af559329 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Mon, 28 Sep 2020 19:45:27 -0500 Subject: [PATCH 03/23] added outline --- .../dapr-for-net-developers/outline.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/architecture/dapr-for-net-developers/outline.md diff --git a/docs/architecture/dapr-for-net-developers/outline.md b/docs/architecture/dapr-for-net-developers/outline.md new file mode 100644 index 0000000000000..08273639ed711 --- /dev/null +++ b/docs/architecture/dapr-for-net-developers/outline.md @@ -0,0 +1,17 @@ +Outline for Chapter 1 +The World is Distributed + + - Movement toward distributed apps + - Blah + + - Common monolithic arch + - Blah + + - Problem with Monolithics + - The fear cycle + + - Distributed Arch + + - Challenges of distributed applications + + From 307a012fba248680c9aa4cc9aff4e50241d3ca02 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sun, 4 Oct 2020 19:25:44 -0500 Subject: [PATCH 04/23] Closer to it --- .../the-world-is-distributed.md | 81 +++++++++++-------- 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index d45bb3472e982..13814262a11ec 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -2,74 +2,87 @@ title: The World is Distributed description: Gain an understanding of the challenges of distributed applications author: robvet -ms.date: 09/17/2020 +ms.date: 10/04/2020 --- # The world is distributed -Modern, distributed systems are in and, monolithic apps are out! Just ask any 'cool kid.' +Just ask the 'cool kids': *Modern, distributed systems are in and, monolithic apps are out!* -But, interestingly, they aren't the only ones saying it. More and more, corporate architects and IT leaders are designing new and replatforming existing enterprise applications to fit this mold. +But, it's not only them. Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many are designing new and replatforming existing enterprise applications following these modern principles, patterns, and best practices. -As a developer, architect, or IT leader... +But, this evolution raises many questions... - What exactly is a distributed application? -- Why is it important? +- Why are they gaining popularity? - What are the costs? - And, importantly, what are the tradeoffs? -For years, we designed, developed, and deployed applications as a single, monolithic unit. Figure 1.x shows a monolithic architecture. +To start, let's rewind and look at the past 15 years. During this period, we typically constructed applications as a single, monolithic unit. Figure 1-1 shows the architecture. ![Monolithic architecture.](./media/monolithic-design.png) -**Figure 1**. Monolithic architecture. +**Figure 1-1. Monolithic architecture. -In the previous figure, note how modules for Ordering, Identity, Marketing, and others, all reside in a single-server process. Application state is stored inside a shared relational database. Business functionality is exposed via HTML and RESTFul interfaces. +In the previous figure, the modules for Ordering, Identity, and Marketing operate in a single-server process. Application data is stored in a shared relational database. Business functionality is exposed via HTML and RESTFul interfaces. -Although straightforward, monolithic architectures present many challenges: +In many ways, monolithic apps are `straightforward`. They're straightforward to... -- Coupling -- Deployment -- Scaling + - build + - test + - deploy + - troubleshoot + - scale -As the application grows in size, complexity, and volume, these challenges become more pronounced. Eventually, you enter the `Fear Cycle`. The *fear cycle* is a state in which you have lost control of your monolithic application. +However, monolithic architectures present significant challenges. -The Microsoft guidance eBook, [Architecting Cloud-Native .NET Apps for Azure](https://docs.microsoft.com/dotnet/architecture/cloud-native/), provide the obvious giveaways: +Over time, you may reach a point where you begin to lose control... -- The app has become so overwhelmingly complicated that no single person understands it. -- You fear making changes - each change has unintended and costly side effects. -- New features/fixes become tricky, time-consuming, and expensive to implement. -- Each release as small as possible and requires a full deployment of the entire application. -- One unstable component can crash the entire system. -- New technologies and frameworks aren't an option. -- It's difficult to implement agile delivery methodologies. -- Architectural erosion sets in as the code base deteriorates with never-ending "special cases." -- The consultants tell you to rewrite it. + - The monolith has become so overwhelmingly complicated that no single person understands it. + - You fear making changes as each change brings unintended and costly side effects. + - New features/fixes become time-consuming and expensive to implement. + - Even the smallest change requires a full deployment of the entire application - expensive and risky. + - One unstable component can crash the entire system. + - Adding new technologies and frameworks aren't an option. + - Implementing agile delivery methodologies are difficult. + - Architectural erosion sets in as the code base deteriorates with never-ending "special cases." + - Eventually the consultants come in and tell you to rewrite it. -Instead of fear, businesses need speed and agility. They seek an architectural style enables them to rapidly respond to market conditions. They can instantaneously update small areas of a live, complex application, and individually scale those areas as needed. +IT practitioners call this condition `the Fear Cycle`. If you've been in the technology business for any length of time, good chance you've experienced it. It's stressful and exhausts your IT budget. Instead of building new and innovative solutions, the majority of your budget is spent maintaining legacy apps. -Many organizations are mitigating the monolithic fear cycle. They are gaining speed and agility by adopting a distributed architectural approach to building systems. Figure 1 shows the same system built applying cloud-native techniques and practices. +Instead of fear, businesses require speed and agility. They seek an architectural style with which they can rapidly respond to market conditions. They need to instantaneously update and individually scale small areas of a live application. + +Many organizations are finding this speed and agility by adopting a modern architectural approach to building systems. Figure 1-2 shows the same system built applying distributed techniques and practices. ![Distributed architecture.](./media/distributed-design.png) -**Figure 1**. Distributed architecture. +**Figure 1-2. Distributed architecture. -Note in the previous figure how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a large relational database, each service owns it own datastore, the type of which vary based upon the data needs. Note how some services depend on a relational database, but other on NoSQL databases. One service stores its state in a distributed cache. Note how all traffic routes through an API Gateway service that is responsible for directing traffic to the core back-end services and enforcing many cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. +In the previous figure, the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a shared database, each service owns it own datastore. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. But, while distributed applications can help bring agility and speed, they bring many challenges. | Challenge | Description | | :-------- | :-------- | -| State Management | Maintaining contextual information during a transaction | -| Interservice Communication | Communicate with other independent services | -| Messaging | | -| Obseraviblity | End-to-end monitoring of processes executing on different machines | +| Cross-service communication | How can services synchronously communicate with each other using platform agnostic protocols and well-known endpoints? | +| State Management | How can services maintain contextual information across a transaction? | +| Asynchronous messaging | How can services implement secure, scalable pub/sub messaging across different kinds of message brokers? | +| External resource bindings | How can external resources trigger events across services with bi-directional communication? | +| Secrets | Securely access secrets to external secret stores | +| Observability | End-to-end monitoring of processes executing on different machines | + + + + + + +This book introduces Dapr. Dapr directly addresses these types of challenges found within distributed applications. -So, what exactly is Dapr? Sit back, relax, and let us help you explore this new world. +## Summary -In this chapter, we introduced Dapr. Blah. We provided a definition along with the key capabilities that drive a cloud-native application. We looked at the types of applications that might justify this investment and effort. +In this chapter, we highlighted an evolving trend to distributed applications. We contrasted a monolithic system approach with that of distributed services. We spotlighted some of the challenges of both monolithic and distributed applications. -With the introduction behind, we now dive into a much more detailed look at cloud native. +So, sit back, relax, and let us introduce you the new world of Dapr. ### References From 38bbb4484456c6aec4f159ba8f109c0f2cba5bf1 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sun, 4 Oct 2020 19:37:50 -0500 Subject: [PATCH 05/23] WIP --- .../dapr-for-net-developers/the-world-is-distributed.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 13814262a11ec..87802778ab552 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -71,11 +71,6 @@ But, while distributed applications can help bring agility and speed, they bring | Secrets | Securely access secrets to external secret stores | | Observability | End-to-end monitoring of processes executing on different machines | - - - - - This book introduces Dapr. Dapr directly addresses these types of challenges found within distributed applications. ## Summary From 0cbc927a21b5f0390bf26b078a5003d360e5a108 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sun, 4 Oct 2020 22:45:40 -0500 Subject: [PATCH 06/23] First pass for review --- .../the-world-is-distributed.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 87802778ab552..3e6ef10ba662d 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -7,9 +7,9 @@ ms.date: 10/04/2020 # The world is distributed -Just ask the 'cool kids': *Modern, distributed systems are in and, monolithic apps are out!* +Just ask any 'cool kid': *Modern, distributed systems are in and, monolithic apps are out!* -But, it's not only them. Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many are designing new and replatforming existing enterprise applications following these modern principles, patterns, and best practices. +But, it's not just "cool kids." Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many have bought in. They are designing new and replatforming existing enterprise applications following the principles, patterns, and practices of distributed applications. But, this evolution raises many questions... @@ -39,7 +39,7 @@ However, monolithic architectures present significant challenges. Over time, you may reach a point where you begin to lose control... - The monolith has become so overwhelmingly complicated that no single person understands it. - - You fear making changes as each change brings unintended and costly side effects. + - You fear making changes as each brings unintended and costly side effects. - New features/fixes become time-consuming and expensive to implement. - Even the smallest change requires a full deployment of the entire application - expensive and risky. - One unstable component can crash the entire system. @@ -50,15 +50,15 @@ Over time, you may reach a point where you begin to lose control... IT practitioners call this condition `the Fear Cycle`. If you've been in the technology business for any length of time, good chance you've experienced it. It's stressful and exhausts your IT budget. Instead of building new and innovative solutions, the majority of your budget is spent maintaining legacy apps. -Instead of fear, businesses require speed and agility. They seek an architectural style with which they can rapidly respond to market conditions. They need to instantaneously update and individually scale small areas of a live application. +Instead of fear, businesses require `speed and agility`. They seek an architectural style with which they can rapidly respond to market conditions. They need to instantaneously update and individually scale small areas of a live application. -Many organizations are finding this speed and agility by adopting a modern architectural approach to building systems. Figure 1-2 shows the same system built applying distributed techniques and practices. +Many organizations are finding this speed and agility by adopting a distributed architectural approach to building systems. Figure 1-2 shows the same system built applying distributed techniques and practices. ![Distributed architecture.](./media/distributed-design.png) **Figure 1-2. Distributed architecture. -In the previous figure, the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a shared database, each service owns it own datastore. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. +Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a shared database, each service owns it own datastore. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. But, while distributed applications can help bring agility and speed, they bring many challenges. @@ -68,16 +68,16 @@ But, while distributed applications can help bring agility and speed, they bring | State Management | How can services maintain contextual information across a transaction? | | Asynchronous messaging | How can services implement secure, scalable pub/sub messaging across different kinds of message brokers? | | External resource bindings | How can external resources trigger events across services with bi-directional communication? | -| Secrets | Securely access secrets to external secret stores | -| Observability | End-to-end monitoring of processes executing on different machines | +| Secrets | How can services securely access external secret stores | +| Observability | How can services implement end-to-end monitoring of processes executing on different machines | -This book introduces Dapr. Dapr directly addresses these types of challenges found within distributed applications. +This book introduces Dapr. Dapr is a distributed application runtime that directly addresses many of the challenges of distributed applications. ## Summary -In this chapter, we highlighted an evolving trend to distributed applications. We contrasted a monolithic system approach with that of distributed services. We spotlighted some of the challenges of both monolithic and distributed applications. +In this chapter, we highlighted the evolving trend of distributed applications. We contrasted a monolithic system approach with that of distributed services. We spotlighted some of the benefits challenges of both approaches. -So, sit back, relax, and let us introduce you the new world of Dapr. +Now, sit back, relax, and let us introduce you the new world of Dapr. ### References From 2eba58fa71c45ed3e21bbcc72e1bc582266f6c6d Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sun, 4 Oct 2020 22:47:41 -0500 Subject: [PATCH 07/23] First pass for review --- .../dapr-for-net-developers/the-world-is-distributed.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 3e6ef10ba662d..6998fdab008e3 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -9,7 +9,7 @@ ms.date: 10/04/2020 Just ask any 'cool kid': *Modern, distributed systems are in and, monolithic apps are out!* -But, it's not just "cool kids." Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many have bought in. They are designing new and replatforming existing enterprise applications following the principles, patterns, and practices of distributed applications. +But, it's not just "cool kids." Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many have bought in. They're designing new and replatforming existing enterprise applications following the principles, patterns, and practices of distributed applications. But, this evolution raises many questions... @@ -24,7 +24,7 @@ To start, let's rewind and look at the past 15 years. During this period, we typ **Figure 1-1. Monolithic architecture. -In the previous figure, the modules for Ordering, Identity, and Marketing operate in a single-server process. Application data is stored in a shared relational database. Business functionality is exposed via HTML and RESTFul interfaces. +In the previous figure, the modules for Ordering, Identity, and Marketing operate in a single-server process. Application data is stored in a shared database. Business functionality is exposed via HTML and RESTFul interfaces. In many ways, monolithic apps are `straightforward`. They're straightforward to... From 4f0b8ceed49bb828390118821a5807c0534f50b2 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sat, 10 Oct 2020 16:04:31 -0500 Subject: [PATCH 08/23] Update the-world-is-distributed.md --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 6998fdab008e3..159fb5948f47e 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -32,7 +32,7 @@ In many ways, monolithic apps are `straightforward`. They're straightforward to. - test - deploy - troubleshoot - - scale + - scale-up vertically However, monolithic architectures present significant challenges. From 6e1624585ca747d6bae3bccd8c1a1209b000f468 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sat, 10 Oct 2020 16:05:20 -0500 Subject: [PATCH 09/23] Update the-world-is-distributed.md --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 159fb5948f47e..1a490f486e21a 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -2,7 +2,7 @@ title: The World is Distributed description: Gain an understanding of the challenges of distributed applications author: robvet -ms.date: 10/04/2020 +ms.date: 10/10/2020 --- # The world is distributed From a75827229cff5173d7898ede0a0a81c079207e31 Mon Sep 17 00:00:00 2001 From: robvet Date: Sat, 10 Oct 2020 17:33:24 -0500 Subject: [PATCH 10/23] Updates on PR suggestions --- .../the-world-is-distributed.md | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 1a490f486e21a..d9bc9c1a884cf 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -24,7 +24,7 @@ To start, let's rewind and look at the past 15 years. During this period, we typ **Figure 1-1. Monolithic architecture. -In the previous figure, the modules for Ordering, Identity, and Marketing operate in a single-server process. Application data is stored in a shared database. Business functionality is exposed via HTML and RESTFul interfaces. +Note how the modules for Ordering, Identity, and Marketing execute in a single-server process. Application data is stored in a shared database. Business functionality is exposed via HTML and RESTFul interfaces. In many ways, monolithic apps are `straightforward`. They're straightforward to... @@ -32,9 +32,9 @@ In many ways, monolithic apps are `straightforward`. They're straightforward to. - test - deploy - troubleshoot - - scale-up vertically + - scale vertically (scale up) -However, monolithic architectures present significant challenges. +However, monolithic architectures can present significant challenges. Over time, you may reach a point where you begin to lose control... @@ -60,22 +60,21 @@ Many organizations are finding this speed and agility by adopting a distributed Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a shared database, each service owns it own datastore. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. -But, while distributed applications can help bring agility and speed, they bring many challenges. +But, while distributed services can provide agility and speed, they present many challenges. For example,... -| Challenge | Description | -| :-------- | :-------- | -| Cross-service communication | How can services synchronously communicate with each other using platform agnostic protocols and well-known endpoints? | -| State Management | How can services maintain contextual information across a transaction? | -| Asynchronous messaging | How can services implement secure, scalable pub/sub messaging across different kinds of message brokers? | -| External resource bindings | How can external resources trigger events across services with bi-directional communication? | -| Secrets | How can services securely access external secret stores | -| Observability | How can services implement end-to-end monitoring of processes executing on different machines | - -This book introduces Dapr. Dapr is a distributed application runtime that directly addresses many of the challenges of distributed applications. + - How can services directly communicate with each other? + - How can they maintain contextual information across a transaction? + - How can they implement asynchronous messaging? + - How can they become resilient to failure? + - How can they discover each other? + - How can they scale to meet fluctuating demand? + - How are they monitored and observed? + +This book introduces Dapr. Dapr is a distributed application runtime that directly addresses many of the challenges of distributed applications. Looking ahead, it has the potential to streamline the way in which distributed cloud applications are built. ## Summary -In this chapter, we highlighted the evolving trend of distributed applications. We contrasted a monolithic system approach with that of distributed services. We spotlighted some of the benefits challenges of both approaches. +In this chapter, we discussed the adoption of distributed applications. We contrasted a monolithic system approach with that of distributed services. We pointed out many of the common challenges when considering a distributed approach. Now, sit back, relax, and let us introduce you the new world of Dapr. From e0d1f567980daa52f7652cd147781972d7fbde15 Mon Sep 17 00:00:00 2001 From: robvet Date: Sat, 10 Oct 2020 20:21:48 -0500 Subject: [PATCH 11/23] More updates on PR suggestions --- .../dapr-for-net-developers/the-world-is-distributed.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index d9bc9c1a884cf..37547dd702bc6 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -60,9 +60,9 @@ Many organizations are finding this speed and agility by adopting a distributed Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a shared database, each service owns it own datastore. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. -But, while distributed services can provide agility and speed, they present many challenges. For example,... +But, while distributed services can provide agility and speed, they present a different set of challenges. Consider the following... - - How can services directly communicate with each other? + - How can distributed services directly communicate with each other? - How can they maintain contextual information across a transaction? - How can they implement asynchronous messaging? - How can they become resilient to failure? @@ -70,7 +70,7 @@ But, while distributed services can provide agility and speed, they present many - How can they scale to meet fluctuating demand? - How are they monitored and observed? -This book introduces Dapr. Dapr is a distributed application runtime that directly addresses many of the challenges of distributed applications. Looking ahead, it has the potential to streamline the way in which distributed cloud applications are built. +This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to streamline the way in which distributed cloud applications are built. ## Summary From 5e524f2d58f320fac59d6a54d6fcf984d7dcf4f7 Mon Sep 17 00:00:00 2001 From: robvet Date: Sun, 11 Oct 2020 16:39:53 -0500 Subject: [PATCH 12/23] Word-smithing --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 37547dd702bc6..ff5bb446fda26 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -70,7 +70,7 @@ But, while distributed services can provide agility and speed, they present a di - How can they scale to meet fluctuating demand? - How are they monitored and observed? -This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to streamline the way in which distributed cloud applications are built. +This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to have profound impact on distributed application development. ## Summary From 461f3be33b844d9b4298b19c658967c58565c28a Mon Sep 17 00:00:00 2001 From: robvet Date: Sat, 17 Oct 2020 00:11:35 -0500 Subject: [PATCH 13/23] Adding SOA --- .../dapr-for-net-developers/media/SOA.png | Bin 0 -> 63196 bytes .../the-world-is-distributed.md | 25 +++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 docs/architecture/dapr-for-net-developers/media/SOA.png diff --git a/docs/architecture/dapr-for-net-developers/media/SOA.png b/docs/architecture/dapr-for-net-developers/media/SOA.png new file mode 100644 index 0000000000000000000000000000000000000000..3dfe1b51878b3b5a6b0d156bfc35d7e47aa5d722 GIT binary patch literal 63196 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�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�JogV5=5*Wa)mNGJ}yy;hhNy{W8V8&@ujJHzd$aWSX_%aiaAcol$dp$YzFI z+g*k1fUNs+T4Egjq@erYplmgboHMa2n7TAm`j`E;KUQj`LHs!);afA*C}U>upxVXc zel(1K%@Q=IKZL+B*d|nA93T`$nqxDaOjVgdD@H=3%m7786q75BuMa<7mtIheDzb5S zUSDFC7hZrSUXY7}W^OE#TqeFCsxLQcVvWSi47HJ4?03%DEXr2HEzK-oH8uS_ZD5fE!W7cV+Y-Y}iU~hcJYGbB z7|s;QSW1l6`KCnfNJb`aEv3>JeOFDH$&}UJ;zcKmg$h`cyNH1Nl}^5=H@n*mW~3h# z*^z;6)dOc=ne~uodq1FaP@OCSoZiF&B+pWtMIZ1;1QB~`wa|}lZ!~xfA7o;0K=Fdf zV$(dDA~LG(nB$z?th5ELZb5`?)1JKK`C15oGX}EFQu#QtRYyOTF#%CuwRd9OO~wSC zxVTw?PX2T+lpOhp!Xp$3o+~7h5qKW>fX@0b6J9@NsD1me67OZqjti(%YU@G8b^2J= zGDP`3xo=m{YI(+Y1!{|YN9~v=j&|mo1<%q;a9~59@llQ16(@IVn)wp4&4Q^h*=O7@ zRN3By(7&qjh+}bB%88iS1<_$Be++MDc*^pc*A~&-ze286ruUd-Jr_G%Vsfhw7p8!n zQPIK3W6FKX_V=aHgO!>&`b>~gfc0NZYfd&yX z0Wp`^JRd$z2D^2}$KG2sMZ;$T)EwHev8h#I&RZrqTQy2-{&_hm&@E?S(Z(~Yz9~0J zJ|lEkr9K%cM3BS*cKM&%FCPa1D50OH6*%M&3VpH{b%tTZEW%&0LGE~IPZv7o8^{A9 z5#6>4eIOkWD#YyfPzW<^(yt&{Rk^q0GIpOi%Yq8x>#Wx3Ec$<~{ie~GZ&8WhTNp5F; z0HtNbs@?84anZgy?6Zgkv~YB1<||+*?2P6LR=KSl8=ljKr9VES9^sVQ++|m)6rc&y zsiT#{;QT#-D`LiLab$`*4h9U$dW(GlMTS0AOw?Oe|uJ02!rr<*r?CD+?p zzf|J!FkN~Nhq!ZuQ12)JeXOV%sDv4KPWw_gJsd^w)FdYDcs#`O;HKf)ujYZI*Upk5 zLQUiI#?qgYTc6&&30QDDNyO0*X&i({1Qn5OO{n^9%AcjmXx|P2XL{;2s^Cd+#Q18u=J-ZyvRRs8|@r4?{u@9 zFS(-iQKavX0L@`jO9=Vw1HxYyZZ(ix!~=yq@W8+fJFxg%mre_v$wQ<;P9N9&Ohr_N z0`pTl1RY%^9oqt|f?8&+vEFk@K?K;!yHuE8NQr*9p8W9uPe>y#*BTGDRaebB@UC=) zRN8@_ausH!IDi+%6PRf2TGGQ((*4&~Vnj18vYwd|y`6Tov}7OeR|!11kl%5a@^fxA zzO@sd;!vgBAPY;p_7Hc9JV9MrPrr_*rTTkUVyNkn=;4X#2@@0QXSBqHDO$kcp57Iw zY)N^0^Cv(>&omWIF1I)iLMY$%mu@^{84>+XSL+UGRYJv;U+@c5Io!^(wdvkch+NOd z-KuWK_tG;VHS^?AW%w&cLPZaKDrJ2qzd;-jTGXUIHb0T6x7pgAm#$`g!O~xfrp!rUwe#x;+>14APLy{41Q@PGOJ<#a4n9ebo z+|-ip&PDfRO6ek5Wn83OHnzuFoq?CbyyKGR`M%Dn$`EkZI?R~;*Rzfbm@*V71}-T< zRN~?-ZLXP;AlT(uMQD$BCWL?eUC0o&$~A}D>Uel}bxI7Ts2lPj`Q4p~!#0xGm@yH+ zUK^nN$}N(}7QpQUYL~0qCJnC7CA)LxF7GT( zUNsspP#`IhjEPW;nh_w}qXY6oC7fn`R~{FZPVQ`pwR@f= zT3ximh5#UQbFsW7mxt9;v=iP}81IQCO>2JUkIv-4(s0N8x0x4Q_COpuBx4A0o5mi3 zsTafFm=J#W6e#EMv=N9k#WDCW{X(A-nUPj{9luj?Z*5Pqrn9jTVeHMVu(5p@s@%gb z)V=b>2XA2XK_6+&luov{8d9YJdO!&U+h69AY9N9MUC822I=m%Z$;dxj!6S)QXWK84gyw z>v}u?NcBNHX&#@i0SKYfff+a!6@4RyPwMU1Zf; zpmu}l2B+VA3+x;TkgaLU*VfSzPb4NOv&YPMDALaTk#VKE2UaTnkB!$$3y~Rp+FOs7 zNv*e?A#AdVBnvNCC3zo>sMwxMR7z~srER5S@Nhl6y(KnWQr^I4d-Q;TAY_G>Y$*M+8O~{ z^cVfw6+9B-TYcWypnJ+BdesC!z0?^@ZV6{n3GjQ-Q5>(f|O7^20hw9*_UGh+&&o6yVL> z>iwqXs2m58#HjIuPnTS8zI^!$P^TdjyX*~I0V)EE51}bm5H*hQ|m!tjIOa>NL1!}%x14|C06YuszwqR8GLe-a@A+=&k00>yR4v^{B zpSHig?GK*&6BP^3j7itGxxa=syzP{7#C^ySp7C3+_jWK(u&AJrJHq|)FsL&3))$eo z`~(S$Dih^&+Pw4_ox@wWyx#7jwc>xD?HiZEV)P9O8Cm1ncJa5A-oWvnHvLvt9X%S{ ze`cDB6JjE#8ljqRYAibKUr2Av5miaGXNXo;mg+GUne%#Kp+7T-;gztJg z3mZNTPTrrba{flrG*4J7X3h=M?#-e`w;DLijh6Y)s({G-g6}7Rbr1^P10i^ZTVn)FM%35HOvtV=gyx=@}j3g-TBxs4}0PW@i_jKfNl)Qy#U z-jHJ`gGUTc+&+J{!(hfURI0%pGNKVQMlD~*P2M!87bRU#9~Z&WuAHK z^t9rMM8Hoq4cQ>q+p$Oyf2vK-vJhJ}>1x2@Z#K9^baw;p)#jGO*N{+pfp+Y&c{C9}7x`jM z$6x1w*xnS4_ZZbYRd2H*zZMSUbwy3IxQiEl$L<_u;`m-~qp>i~{GW}04WUzGE}bh5 zT@^BFoC;252QxesYwVt?_kh=LO zXnP=f`)7hGMAD;XZtrsRmXy~DPx!Hb9)RNh2yJ%WB>>VE%FZTiX_a-!U$`%EH3s~f z-OhoF+eZYqh8S@1)@9XJ4JC2fO{2X`f3&Z`H+dE|V9+h7ivL}`z`_yqmi{3Eo=-q!~j!7hE&-bt5Q68BE z{?rOMF-0by*UPJ$f5~Kg6sF>X_ye7}BV#OrXxz`@cBC%N)9XgBCOy%2yqnZ-|WtyxupiXIN4XJ^`C5@}>P7sBC@r)2XMK z52~Um#QLn*dXQZoo4Lpmz2POVcRAW(Y^4i2WrkQ89bD?wudvaXI8r{5A)N6BIYtc;Bc!T*FEr*r+BA{j23 zz?hGis%DNCoosL;srhSB{39tk$sm|6&0Gky*z-Y>qoZHEz3FF&DtQ*NSE^pQJ_ir& z@i$9O#=ikrYRAGbFSBEE8Q}t@;|c@R7=KtZ~no58zfUfL&J8=>tss! zk8|~(H{<{BcVXC6jFaX5_y2&U^Pi0roAiHMh@}I1OQmBQq57X_A%j~)`5Pt~*BO-m fzb(jOLA{~k*nxl?JYz^O;73kMS+Y{xIOzWY=?DIA literal 0 HcmV?d00001 diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index ff5bb446fda26..4edbc3297e99e 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -52,7 +52,30 @@ IT practitioners call this condition `the Fear Cycle`. If you've been in the tec Instead of fear, businesses require `speed and agility`. They seek an architectural style with which they can rapidly respond to market conditions. They need to instantaneously update and individually scale small areas of a live application. -Many organizations are finding this speed and agility by adopting a distributed architectural approach to building systems. Figure 1-2 shows the same system built applying distributed techniques and practices. +An early attempt at speed and agilty came in the approach of Service Oriented Architecture, or SOA. In this model, service consumers and service implementations were separated by messaging middleware componenets, often referred to as an Enterprise Service Bus (ESB). Figure 1-x shows this architecture. + +With SOA, services were centralized and registered with the ESB. Service clients cloud then utilize the ESB to find and communicate with services. This approach, however, often increased complexity and introduced bottlenecks. Maintainance costs were high and ESB middleware could be expensive. Services tended to be large. They often shared dependencies and data storage. SOAs often resulted in a 'decoupled monolithic' application with centralized services that were resistant to change. + +Time has shown the SOA is a better fit for larger, complex applications that integrate with key legacy systems. + + +-- filler + +espite the promises of SOA, the integration problems result in increased maintenance time, greater complexity of code and software and the continued growth (not elimination) of monolithic applications. + +The first rule of effective integration is “smart end-points and dumb pipes.” Building logic and layers into the service layer breaks that rule, increases the overall complexity and adds another legacy application to your portfolio. + + +The main distinction between the two approaches comes down to scope. To put it simply, service-oriented architecture (SOA) has an enterprise scope, while the microservices architecture has an application scope. + +(SOA), which supports integration between heterogenous applications + +//https://www.ibm.com/cloud/blog/soa-vs-microservices +Before SOA was an option, connecting an application to data or functionality in another system required complex point-to-point integration that developers had to recreate for each new development project. Exposing those functions through SOA eliminates the need to recreate the deep integration every time. + +-- End filler + +nowadays, many organizations are finding this speed and agility by adopting a distributed microservice architectural approach to building systems. Figure 1-2 shows the same system built applying distributed techniques and practices. ![Distributed architecture.](./media/distributed-design.png) From 1bb1a5c96bbc600c25f71b387a2bb420bce094cf Mon Sep 17 00:00:00 2001 From: robvet Date: Sat, 17 Oct 2020 20:46:41 -0500 Subject: [PATCH 14/23] Added suggestions --- .../media/soa-basic.png | Bin 0 -> 33514 bytes .../the-world-is-distributed.md | 38 ++++++------------ 2 files changed, 13 insertions(+), 25 deletions(-) create mode 100644 docs/architecture/dapr-for-net-developers/media/soa-basic.png diff --git a/docs/architecture/dapr-for-net-developers/media/soa-basic.png b/docs/architecture/dapr-for-net-developers/media/soa-basic.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc5a45f94b600f08212faea82a3fc1069677597 GIT binary patch literal 33514 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�mRWf5bltVnVm?CXamMfi*X3 zS$+`5!**Nu7QJxc)dm8{6Ns#sg;K`QP}uXNIsVWdav3L?So)<_%=J3bWHa%fx2BiqEviX;IBUBnO6BtC z7)j$*IBPpZZ+TwYhzQL{Mjxtovz>2@Y`dI7@my1Z9PY0V1-h@&_vS^-Zq0qUw_MRC%uND!{5@lkBCXHXWjWgh6Zv;&58$cJJ{uq0iTWjW zc%4XKt@V~v!!fn*^>-z}ANuzl!>rjm!Cqj zz~bw>HR$*~_k8xpZSn6a_A5kmJ8ZJNWNjYvTv?44AWf;d8*zq=n9_`*ka$C5siJyH z1`)D6FBPWu2gnN3xAlcm7zb{4DqzT2shQ{cw9m^Fv_w-Yq{{>YAp3AH^4`*QgMazWvH43IuOYpv&vY^s4ZmKv zqxDpWDUDi@X?kX$!SnGDmQSHZnI-{BscX8MjWtISZT!phm3wSLf_l55k4|#x=Q7R8 zm<$ret1l$;Z3w z;e3Q=Nd~K^TkMNMxEh1K9?T~LW#N$%7+uNk@e!0ADrI2-6O(`eC&S)hNyI0@xOXQv zJi)I^A@6*j6qU@y;W{Urb!7FGUR9Jtn|!^{eGvuN=lAppsP&mwu4;v-xg=9gF`?}~ zYo%R4=L6fDJ&Fi9lu1aa>esecmP6>M(uMndKkErBa_0JdAN<9@zv}%P6qwGs{c00T zPg^XP>T@~e>jkni{Uoe;_B&1WEfPGqe_8ZU)XnVVbsRi0{5Cs{(C|E)|1XzR81`ql zTL?Qh@Ag9>-;jz(MwdFKHzH2?f(yA?`bH$gjx-%8`sqG>=F;SAvSG-h8H>$_YO{y_ zrDzR}4o{4@;bk-3e7~3@<~%;Hq67T(yOJSfr>S>>yTLWnJBLcXoL7uR)Kt>thu}@p zo#IQDHZlG05ghU|3AknKyKCH?$<|j%;DUj(JyKv#x5_*NT*zXG3}j@3H7;HYh%waV zU9bCiSfe%v)mv4w+q@?UZ(~(nHEV`F;(pJtKBC0 zE;n68xv2yFB#jYZSSNA<_0cQox1GQPTiXPZ4Q&)C>Zj_RiRS|-6u+`ZeA-cct z02obGNwPj_sIud4NQvff1U&str%w28XKHwXdAvGrn~^*3e)ZR>FS9-zEmS=Ip&x)5 z4>q%Focr%k%G6GiNDli1>QUlCS$D?qD_)Ut+a>96Nm|ur|H=!I(#Svg`9_%MHow7^jTS zE{i;jJT!@>U|{eTSG%b2?rz&+_yG9|7-iy=^wzWqrK(J(!nYOQhkzNp>WXiILe#F402K}5*vE{;yaGAplW=x=6i z^0_IqoyVY%Nt?=9{YN3QzIEdj3U^ACXCR(JIpr~*D?Kvm@PMaG=%WQB<<5(UOG*l|DQ`W*68YZ5k zr)(7l=K(KK2$M>+jA|Z}i%d_&+f7-$!L}BH6UxZRDuRW*O{p-C$w(*USo6To0I#bR z;EMl!TM6De;*w?#$My@GMBKmJpCw{+3?|w^#y+awFpXS~8!NY+G>|_0Jjw9ZDFU~x zz!>bwYBoMt$5P8Z*Ud81bB_zKn-Epqb^B2D4-m+~3aR~?F-O6jbz>xw`D=le?*m4d zs*x}?z2vpQQ#8&cz+&$U9LW&SDMIFyOV&w~o(Gxq#THw$6)D1?Ad3u7?n=J?;n_W~ zf8VBAA&MJ`Cdm?zi|Nvxn}UfY`1{zzwm0Qc`vVnYYxNkG%2Yv#w)t}NgCx#}_eY6w z8Z%f8A;H>|RJ{nt88gf}&sZ+RD*5&*VGrNhYqCm@ua&I-jA04_1MOl2H7t0)8+Za3 zwSrnJUlWa2(OCaUqNo-1d^{c(V(y0v=O7Ljcxt+#Y9-P~Xm3x-__JXA&M~7V#%0;H zuc{r`?FD$7dVJ_M9C*loV-x(p_7dv Date: Sun, 18 Oct 2020 22:27:28 -0500 Subject: [PATCH 15/23] suggestions added --- .../dapr-for-net-developers/the-world-is-distributed.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 7090fd9b81559..a227d456f6db9 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -2,7 +2,7 @@ title: The World is Distributed description: Gain an understanding of the challenges of distributed applications author: robvet -ms.date: 10/10/2020 +ms.date: 10/18/2020 --- # The world is distributed @@ -52,7 +52,7 @@ IT practitioners call this condition `the Fear Cycle`. If you've been in the tec Instead of fear, businesses require `speed and agility`. They seek an architectural style with which they can rapidly respond to market conditions. They need to instantaneously update and individually scale small areas of a live application. -An early attempt to gain speed and agility came in the form of [Service Oriented Architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture), or `SOA`. In this model, service consumers and service collaborated via middleware messaging components, often referred to as an [Enterprise Service Bus](https://en.wikipedia.org/wiki/Enterprise_service_bus), or `ESB`. Figure 1-2 shows the architecture. +An early attempt to gain speed and agility came in the form of [Service Oriented Architecture](https://en.wikipedia.org/wiki/Service-oriented_architecture), or `SOA`. In this model, service consumers and service providers collaborated via middleware messaging components, often referred to as an [Enterprise Service Bus](https://en.wikipedia.org/wiki/Enterprise_service_bus), or `ESB`. Figure 1-2 shows the architecture. ![SOA.](./media/soa-basic.png) @@ -68,7 +68,7 @@ Nowadays, many organizations have realized speed and agility by adopting a distr **Figure 1-3. Distributed architecture. -Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a shared database, each service owns its own datastore. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. +Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a single database shared by multiple services, each service owns a private database. Other services cannot access this database directly and can only get to data that is exposed through the public API of the service that owns it. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. But, while distributed services can provide agility and speed, they present a different set of challenges. Consider the following... @@ -79,7 +79,7 @@ But, while distributed services can provide agility and speed, they present a di - How can they scale to meet fluctuating demand? - How are they monitored and observed? -For each of these challenges, multiple products are often available. But, shielding your application product differences becomes a challenge to keeping code maintainable and portable. +For each of these challenges, multiple products are often available. But, shielding your application from product differences and keeping code maintainable and portable become a challenge. This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to have profound impact on distributed application development. From 4fef5b0bc282545028db31676b307a953ccbb25d Mon Sep 17 00:00:00 2001 From: robvet Date: Wed, 28 Oct 2020 22:08:08 -0500 Subject: [PATCH 16/23] Final updates before PR to MSFT Team --- .../the-world-is-distributed.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index a227d456f6db9..25837bb4a1c74 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -1,13 +1,13 @@ --- title: The World is Distributed -description: Gain an understanding of the challenges of distributed applications +description: The benefits and challenges of distributed applications with a look at monolithic and SOA approaches. author: robvet -ms.date: 10/18/2020 +ms.date: 10/28/2020 --- # The world is distributed -Just ask any 'cool kid': *Modern, distributed systems are in and, monolithic apps are out!* +Just ask any 'cool kid': *Modern, distributed systems are in, and monolithic apps are out!* But, it's not just "cool kids." Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many have bought in. They're designing new and replatforming existing enterprise applications following the principles, patterns, and practices of distributed microservice applications. @@ -24,7 +24,7 @@ To start, let's rewind and look at the past 15 years. During this period, we typ **Figure 1-1. Monolithic architecture. -Note how the modules for Ordering, Identity, and Marketing execute in a single-server process. Application data is stored in a shared database. Business functionality is exposed via HTML and RESTFul interfaces. +Note how the modules for Ordering, Identity, and Marketing execute in a single-server process. Application data is stored in a shared database. Business functionality is exposed via HTML and RESTful interfaces. In many ways, monolithic apps are `straightforward`. They're straightforward to... @@ -62,7 +62,7 @@ With SOA, centralized service providers registered with the ESB. Business logic Despite the promises of SOA, implementing this approach often increased complexity and introduced bottlenecks. Maintenance costs became high and ESB middleware expensive. Services tended to be large. They often shared dependencies and data storage. In the end, SOAs often resulted in a 'distributed monolithic' structure with centralized services that were resistant to change. -Nowadays, many organizations have realized speed and agility by adopting a distributed microservice architectural approach to building systems. Figure 1-3 shows the same system built applying distributed techniques and practices. +Nowadays, many organizations have realized speed and agility by adopting a distributed microservice architectural approach to building systems. Figure 1-3 shows the same system built using distributed techniques and practices. ![Distributed architecture.](./media/distributed-design.png) From 53ecb0d60f4e10d8744149a10aa362ee3f4c37e2 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sat, 7 Nov 2020 12:50:34 -0600 Subject: [PATCH 17/23] Update docs/architecture/dapr-for-net-developers/the-world-is-distributed.md Co-authored-by: Sumit Ghosh --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 25837bb4a1c74..46bcc908b7bf2 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -22,7 +22,7 @@ To start, let's rewind and look at the past 15 years. During this period, we typ ![Monolithic architecture.](./media/monolithic-design.png) -**Figure 1-1. Monolithic architecture. +**Figure 1-1** : Monolithic architecture. Note how the modules for Ordering, Identity, and Marketing execute in a single-server process. Application data is stored in a shared database. Business functionality is exposed via HTML and RESTful interfaces. From 7ff3acd11b490a2070de83a634c1fe12162f5813 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sat, 7 Nov 2020 12:51:09 -0600 Subject: [PATCH 18/23] Update docs/architecture/dapr-for-net-developers/the-world-is-distributed.md Co-authored-by: Sumit Ghosh --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 46bcc908b7bf2..0a61f2165d19b 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -41,7 +41,7 @@ Over time, you may reach a point where you begin to lose control... - The monolith has become so overwhelmingly complicated that no single person understands it. - You fear making changes as each brings unintended and costly side effects. - New features/fixes become time-consuming and expensive to implement. - - Even the smallest change requires a full deployment of the entire application - expensive and risky. + - Even the smallest change requires full deployment of the entire application - expensive and risky. - One unstable component can crash the entire system. - Adding new technologies and frameworks aren't an option. - Implementing agile delivery methodologies are difficult. From f2351afb994625e3338ef5c09d0bcc05bac9fae0 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sat, 7 Nov 2020 12:51:36 -0600 Subject: [PATCH 19/23] Update docs/architecture/dapr-for-net-developers/the-world-is-distributed.md Co-authored-by: Sumit Ghosh --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 0a61f2165d19b..57ee6ed6cf09c 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -66,7 +66,7 @@ Nowadays, many organizations have realized speed and agility by adopting a distr ![Distributed architecture.](./media/distributed-design.png) -**Figure 1-3. Distributed architecture. +**Figure 1-3** : Distributed architecture. Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a single database shared by multiple services, each service owns a private database. Other services cannot access this database directly and can only get to data that is exposed through the public API of the service that owns it. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. From fec6accfc1e04008b5e826d5108a4fcadf503093 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Sat, 7 Nov 2020 12:52:09 -0600 Subject: [PATCH 20/23] Update docs/architecture/dapr-for-net-developers/the-world-is-distributed.md Co-authored-by: Sumit Ghosh --- .../dapr-for-net-developers/the-world-is-distributed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index 57ee6ed6cf09c..cb172a1c70248 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -81,7 +81,7 @@ But, while distributed services can provide agility and speed, they present a di For each of these challenges, multiple products are often available. But, shielding your application from product differences and keeping code maintainable and portable become a challenge. -This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to have profound impact on distributed application development. +This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to have a profound impact on distributed application development. ## Summary From 8dcb2a4a6fda5dfb748da71e9e019d4d50d632b8 Mon Sep 17 00:00:00 2001 From: robvet Date: Sat, 7 Nov 2020 14:10:35 -0600 Subject: [PATCH 21/23] Updates for Microsoft review --- .../dapr-for-net-developers/index.md | 6 +++ .../dapr-for-net-developers/outline.md | 17 ------- .../the-world-is-distributed.md | 50 ++++++++++--------- .../dapr-for-net-developers/toc.yml | 2 +- 4 files changed, 33 insertions(+), 42 deletions(-) delete mode 100644 docs/architecture/dapr-for-net-developers/outline.md diff --git a/docs/architecture/dapr-for-net-developers/index.md b/docs/architecture/dapr-for-net-developers/index.md index 1d4c6e2e0a485..2a33865495444 100644 --- a/docs/architecture/dapr-for-net-developers/index.md +++ b/docs/architecture/dapr-for-net-developers/index.md @@ -48,6 +48,12 @@ Authors: Participants and Reviewers: > **Nish Anil**, Senior Program Manager, .NET team, Microsoft +> +> **Mark Fussell**, Prinicpal Program Manager, Azure Incubations, Microsoft +> +> **Yaron Schneider**, Prinicpal Software Engineer, Azure Incubations, Microsoft +> +> **Ori Zohar**, Senior Program Manager, Azure Incubations, Microsoft Editors: diff --git a/docs/architecture/dapr-for-net-developers/outline.md b/docs/architecture/dapr-for-net-developers/outline.md deleted file mode 100644 index 08273639ed711..0000000000000 --- a/docs/architecture/dapr-for-net-developers/outline.md +++ /dev/null @@ -1,17 +0,0 @@ -Outline for Chapter 1 -The World is Distributed - - - Movement toward distributed apps - - Blah - - - Common monolithic arch - - Blah - - - Problem with Monolithics - - The fear cycle - - - Distributed Arch - - - Challenges of distributed applications - - diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index cb172a1c70248..a715c843ea49e 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -2,12 +2,14 @@ title: The World is Distributed description: The benefits and challenges of distributed applications with a look at monolithic and SOA approaches. author: robvet -ms.date: 10/28/2020 +ms.date: 11/07/2020 --- # The world is distributed -Just ask any 'cool kid': *Modern, distributed systems are in, and monolithic apps are out!* +[!INCLUDE [book-preview](../../../includes/book-preview.md)] + +Just ask any 'cool kid': *Modern, distributed systems are in, and monolithic apps are out!* But, it's not just "cool kids." Progressive IT Leaders, corporate architects, and astute developers are echoing these same thoughts as they explore and evaluate modern distributed applications. Many have bought in. They're designing new and replatforming existing enterprise applications following the principles, patterns, and practices of distributed microservice applications. @@ -28,25 +30,25 @@ Note how the modules for Ordering, Identity, and Marketing execute in a single-s In many ways, monolithic apps are `straightforward`. They're straightforward to... - - build - - test - - deploy - - troubleshoot - - scale vertically (scale up) +- build +- test +- deploy +- troubleshoot +- scale vertically (scale up) -However, monolithic architectures can present significant challenges. +However, monolithic architectures can present significant challenges. -Over time, you may reach a point where you begin to lose control... +Over time, you may reach a point where you begin to lose control... - - The monolith has become so overwhelmingly complicated that no single person understands it. - - You fear making changes as each brings unintended and costly side effects. - - New features/fixes become time-consuming and expensive to implement. - - Even the smallest change requires full deployment of the entire application - expensive and risky. - - One unstable component can crash the entire system. - - Adding new technologies and frameworks aren't an option. - - Implementing agile delivery methodologies are difficult. - - Architectural erosion sets in as the code base deteriorates with never-ending "special cases." - - Eventually the consultants come in and tell you to rewrite it. +- The monolith has become so overwhelmingly complicated that no single person understands it. +- You fear making changes as each brings unintended and costly side effects. +- New features/fixes become time-consuming and expensive to implement. +- Even the smallest change requires full deployment of the entire application - expensive and risky. +- One unstable component can crash the entire system. +- Adding new technologies and frameworks aren't an option. +- Implementing agile delivery methodologies are difficult. +- Architectural erosion sets in as the code base deteriorates with never-ending "special cases." +- Eventually the consultants come in and tell you to rewrite it. IT practitioners call this condition `the Fear Cycle`. If you've been in the technology business for any length of time, good chance you've experienced it. It's stressful and exhausts your IT budget. Instead of building new and innovative solutions, the majority of your budget is spent maintaining legacy apps. @@ -56,11 +58,11 @@ An early attempt to gain speed and agility came in the form of [Service Oriented ![SOA.](./media/soa-basic.png) -**Figure 1-2. SOA architecture. +**Figure 1-2** SOA architecture. -With SOA, centralized service providers registered with the ESB. Business logic would be built into the ESB to integrate providers and consumers. Service consumers could then find and communicate with these providers using the ESB. +With SOA, centralized service providers registered with the ESB. Business logic would be built into the ESB to integrate providers and consumers. Service consumers could then find and communicate with these providers using the ESB. -Despite the promises of SOA, implementing this approach often increased complexity and introduced bottlenecks. Maintenance costs became high and ESB middleware expensive. Services tended to be large. They often shared dependencies and data storage. In the end, SOAs often resulted in a 'distributed monolithic' structure with centralized services that were resistant to change. +Despite the promises of SOA, implementing this approach often increased complexity and introduced bottlenecks. Maintenance costs became high and ESB middleware expensive. Services tended to be large. They often shared dependencies and data storage. In the end, SOAs often resulted in a 'distributed monolithic' structure with centralized services that were resistant to change. Nowadays, many organizations have realized speed and agility by adopting a distributed microservice architectural approach to building systems. Figure 1-3 shows the same system built using distributed techniques and practices. @@ -70,10 +72,10 @@ Nowadays, many organizations have realized speed and agility by adopting a distr Note how the same application is decomposed across a set of distributed services. Each is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a single database shared by multiple services, each service owns a private database. Other services cannot access this database directly and can only get to data that is exposed through the public API of the service that owns it. Note how some services require a full relational database, but others, a NoSQL datastore. The Basket service stores its state in a distributed key-value cache. Note how inbound traffic routes through an API Gateway service. It's responsible for directing calls to back-end services and enforcing cross-cutting concerns. Most importantly, the application takes full advantage of the scalability, availability, and resiliency features found in modern cloud platforms. -But, while distributed services can provide agility and speed, they present a different set of challenges. Consider the following... +But, while distributed services can provide agility and speed, they present a different set of challenges. Consider the following... - How can distributed services discover each other and communicate synchronously? - - How can they implement asynchronous messaging? + - How can they implement asynchronous messaging? - How can they maintain contextual information across a transaction? - How can they become resilient to failure? - How can they scale to meet fluctuating demand? @@ -85,7 +87,7 @@ This book introduces Dapr. Dapr is a distributed application runtime. It directl ## Summary -In this chapter, we discussed the adoption of distributed applications. We contrasted a monolithic system approach with that of distributed services. We pointed out many of the common challenges when considering a distributed approach. +In this chapter, we discussed the adoption of distributed applications. We contrasted a monolithic system approach with that of distributed services. We pointed out many of the common challenges when considering a distributed approach. Now, sit back, relax, and let us introduce you the new world of Dapr. diff --git a/docs/architecture/dapr-for-net-developers/toc.yml b/docs/architecture/dapr-for-net-developers/toc.yml index 56d8262c7fd2f..45a85c7663fd1 100644 --- a/docs/architecture/dapr-for-net-developers/toc.yml +++ b/docs/architecture/dapr-for-net-developers/toc.yml @@ -3,4 +3,4 @@ items: - name: The world is distributed href: the-world-is-distributed.md - displayName: distributed system, distributed application, microservice, monolithic + displayName: distributed system, distributed application, distributed architecture, microservice, SOA, monolithic, monolithic architecture From abafebbb3da25ef5ed46105cd82f67040201e159 Mon Sep 17 00:00:00 2001 From: robvet Date: Sat, 7 Nov 2020 14:44:27 -0600 Subject: [PATCH 22/23] fixed lint errors --- .../the-world-is-distributed.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md index a715c843ea49e..b97c2775f2cd2 100644 --- a/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md +++ b/docs/architecture/dapr-for-net-developers/the-world-is-distributed.md @@ -74,13 +74,13 @@ Note how the same application is decomposed across a set of distributed services But, while distributed services can provide agility and speed, they present a different set of challenges. Consider the following... - - How can distributed services discover each other and communicate synchronously? - - How can they implement asynchronous messaging? - - How can they maintain contextual information across a transaction? - - How can they become resilient to failure? - - How can they scale to meet fluctuating demand? - - How are they monitored and observed? - +- How can distributed services discover each other and communicate synchronously? +- How can they implement asynchronous messaging? +- How can they maintain contextual information across a transaction? +- How can they become resilient to failure? +- How can they scale to meet fluctuating demand? +- How are they monitored and observed? + For each of these challenges, multiple products are often available. But, shielding your application from product differences and keeping code maintainable and portable become a challenge. This book introduces Dapr. Dapr is a distributed application runtime. It directly addresses many of the challenges found that come along with distributed applications. Looking ahead, Dapr has the potential to have a profound impact on distributed application development. From f433c893069001f9bbf892dccbd0c439dbac40a4 Mon Sep 17 00:00:00 2001 From: Rob Vettor Date: Tue, 24 Nov 2020 19:05:39 -0600 Subject: [PATCH 23/23] Updated cover --- .../dapr-for-net-developers/index.md | 2 -- .../dapr-for-net-developers/media/cover.png | Bin 33420 -> 62696 bytes 2 files changed, 2 deletions(-) diff --git a/docs/architecture/dapr-for-net-developers/index.md b/docs/architecture/dapr-for-net-developers/index.md index 2a33865495444..c43d5338d2f1d 100644 --- a/docs/architecture/dapr-for-net-developers/index.md +++ b/docs/architecture/dapr-for-net-developers/index.md @@ -71,8 +71,6 @@ A secondary audience is technical decision-makers who plan to choose whether to ## How you can use this guide -Blah - This guide is available both in [PDF](https://dotnet.microsoft.com/download/e-book/cloud-native-azure/pdf) form and online. Feel free to forward this document or links to its online version to your team to help ensure common understanding of these topics. Most of these topics benefit from a consistent understanding of the underlying principles and patterns, as well as the trade-offs involved in decisions related to these topics. Our goal with this document is to equip teams and their leaders with the information they need to make well-informed decisions for their applications' architecture, development, and hosting. ## Send your feedback diff --git a/docs/architecture/dapr-for-net-developers/media/cover.png b/docs/architecture/dapr-for-net-developers/media/cover.png index 0ba5d2e6d802553ac16c806cbea2e783966b4873..ff1b7a23e2652a696d51b0a6582feed2dca3cf20 100644 GIT binary patch literal 62696 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

YGQizKoIPxX~S2 zTbmXiOju-Wj#;I7Y|DJ>Gv}#+@+jHB%_;j9BgxU`Cx80h2V(7lV&O%GI3AmpH5`sw z!XzqN!Oyj3XO=(1_WD`vBhtF6zz7kV-CmoUh_I?{U$3Z3$HeMQP*>oB?Ch)Jsu45Q zZdVj(V>Jp41=H#%oP@Y2O1uoi(iouddUc4&@qPk}$mfli{ILzik@I#3LuXcdwwEnl zh9WHXY~#i*F>2|v=!i-07|!ay&FaB@$~7Gi@j)$cADx!Bs4)D|jH`cM%%}7YrLvFx zlufQnf7)SJ7d{iI$i#!PkN3G=UPtO8q{%>KTIyn{^SgLg#+`nLhc+^fwdo4mU5zNrOK^O2j zsAc2`efmdYmYh-PDkT^k)~@1;_WvcpcCk;HOC@Hvt`^KO$9-)<#GcP_1`>u=5|iBg9y=%zz#HihIw5hBnA0y zlv=o5bnOl2E)F`k2PwZ*L6i9CQsr#N2m*RNpybfc6UOsR*QD&wfkK)4vp?cQw6Ge+&e|wq#}6rAfeKtcCe?~x=Faj_gU!X z@!412p)CXB)ktOJZ11rjPyY45vmr|ZNgGdKYX_F?pKrml?4BB(%~D|CS-zr;+q`Vs zi%lmapX~jxc!F)sit5CT@^Z-;ssV_|(*0}>vpLc)a&ps{KLVKnO};ggA|6*?WPko_ z$6LMi9FpO4ZdzD~?WGcGUCr->FGz&)g2%4>P2=c$+<)Oq#tX@)UD*wtB#YpH`J(Pz zjDd3Vg@6Fz_;)0Y1_b)abYa;4`s60Cn?S+;s{1F+|Nr1ZS^sA$c`ZOrSemr)ZL(@` zja99+X&K}R{z+EZ7)!@ClP+fCb$&*Q8+~>P%5QF@;@2-ovzE?!7`QdlWVN~wwo{Ee z>V@;>&DS|;wr&CbbTa^JC;xNkqx~RbFC6eUof4kW8YU}h)~L`X?}bhU3)9pWr!|0! znvKaK?P#d2sW$Y6qp`R^lYbwfqd+$2e`V1AZ zdQ28|UM9tLQ^dRq=QqtDKj-*;=dBLUkIPsX@o1VmXwK+Bg_cioQhp)0XoBzZse2b% z<5%y_O17^YDC&Hsx_QRYvz`KyF@0Oz!~~)YcP|g*m9dDv`i|j}#R#nJ{EXP34k}+q z)0-PbcDP4=G`5%bNa4M3o0O>GUa$PJJb2}jp`Wq;?|(?h1pRx3Pge%AV2GXd*xZZ_ z33FlXCzsT=Ze}t>xy!7W7${FvI%KJMZGeH$6*YQwpyDCe1#snd+j!!3$56CDi#?eA zaE2E^OKEYA<}M>Ecfdl*1YD7mVB#b~%mF^CJ}{ha&x=Y)lWT^;-_!q}{`6gG^$PyDiWHiIU7dtV>vlkFoe zP1mF-OmKEG) z@Y$fmPuG-=)M8 z9~U4T@LENtidRCDdx#F}&zkaTc#$u_&Qb!w5d<3IP{ zKKJx9#32DZ`pT@|n%7cdnk!+iRm>G4;{iWw%ol5vHNje4Z7BAjQ;ttj(FA;x#6gj7 zO*P?IJRj%N<@6=)Dep4=8Tf9=ua7v zc*mc~%(akq=W?t$V&Bqhq4nmc!}4TPv1j44yURCFj9^!0+LA$iOJ{+t+#PoaD~wwE zkLUJls_e#D_`(qE!8*AZ2DVJbCnVdWKYF|51TjnNZNOBbtvb%az6Xgw$XVXr(x0Jm zUB(o|9@)VQB(KevhBKjrU)>in{i^xEShoSy$TX17H86UEZp+|6Nw}3w5x(nZkFyoX zVGE)k`(Oe@%JLBn$x2sUuGT`B`)y2oP&l!W5iN^Pr0OvyHf!mRQiUSan5#)btn8x^ znHfw2zh2yOcNIBNsqofshYZtWJs0)Y;@_K6DrUa-UY}8A<)L&uU5uJz%1;`ziB?Tv`lL@J1l2b#UR4r)MRDto)ys%g8Se zmcOw%43Me@*G2|6XM7HB2>)iLT~Qg``1oP}u5(Y)*I6wGKZJb|vxhwvWN1L`YIc?6 zI2r%^BV!vb-ax_gA0z|w?zJ}~QARWXD22dmc%g3!!2z+K{cKNzdv&g8w`9xxJ}yop zi3QH$Y@gDWmr%&e=W@z`k^%4KG_oS~jH!#YaQ41xl%Cy`(iWA6Z00u$-m;f~Yqk=5 zoqGqoCQMx{lr87I-jow8naHzRninwxh3M$So9Tr^ldS2=L6XCnCtaTl>CzJkKhhL! z+H9seN1HB>FzQ18se<}F(eiu+-Mwoeoym`RO9lE4cQjY`;V3K%PFA&ph6-G?- zpu?BIlXlAm&1-BuN(}4#$f*Ezcd{P}`4MrfBR;iFXj0d<^k1jXqQ8ft0cIo+aP2z%EL1ya@rW$7_6duZ`TB8!W zR{WLp*8CJK{pQF%IXaoT#(vH29!=^=N|f+lSd7IiAKaSG8_7Go5BpNcC$QYzZagdI zMo1044#SjFZuW`PK7=jmR1QF!r4d9Pp3~*%&UB6(38>6O=Lem*r#QhYGndENO{bzQ%?So5ZqNmD9gp zUSmB}vjytlz6>@rv=V8wj4?VZU@je%^#B*?GDAp72hoq zCR_G=WEKXv=XJb`-qoh+jYjmwtP>75nBcKtD51~U{4fIgs|RW!6D~;}Brr~FIlv6yV#ey*U$v4c5_CH)g62#hi{biO!qHrJI zAt%1)uB)1^M--#-eAtwmJ(_DBtB}%{4e;RyO3b2kIb2{q;rnZMalttBNL@a$(mgLg zR4>c*KC$pk!CCaWJd54by>`2tM2#V%UQH2=))Sm<{s@Uhe3|dX7*E&n$phk?p7OaO z<4okCXHqV2P|kMkYQDDsjK=Y?H7NO}voa*hlL4eus1nKPxI{@-wvz=N1?4{yN)#&+ zVv1@h#5BetLdf#%ff`M)ZovRJpkli5twlL#_%4uibQZY|;66NGcbLrca0lg^0~eXv zmGkMa^cC(m{^7a`0v*OVQs!5f5=)F~*E=1& zkTPFg(vC7}ee9JUgiyKi{qe1S2(-%VlB^p?0livLK@a_>sONMwI#d*`6C6;dH3?AJ zySknv{wxr^poIt}2$zTiVCH{Y`RPAOT(TU{LA#)Nm+I>3r6ITqp-g%2J73&_59-i7 z8|-O*yx$(MvH60EN0OdCXs*R;`tiTGnDT{6E33Gz`*Kfmzg=_W`B|OUT&vV+*PB26 z8LKL%%|7#bl8HZ_NMDqwSbw-SP&AO`FGm2NWhPmEft_c6*0)Pp6clwp?Mi1`f zP5nkqM~%fz{Xzug#NHfGjdC)KS*$@5)+OKEUz;m;ZMgBD-s+{Q$j>?dF^ChUZ0Ep5 zv*01~sHtbU+Cz+$?=CiRa2F%LXnVv~Wo$2@C;`dO%J)yPr$nEuRnNRop%%ApN8}kXSd}Mj7B4v1B?|)9h+mzd;dKCC@B(jS2 zfv4Axunv*1ZqDCOaL7he)r^!*t^QVvxJBgr3#A1$PCzl1O;EF1L!|sAurBh%(GToy z{Ns#^{jOpptxJtecqF2X(xk0c^^%o`sZEV@H8v4y#U^2|v=q1GFalB^w~IP`*+5-sez=`$Cm+1;_CM9-Tq7<8JUM z)KKZPuQ0eZ0Cuiuvm+O~G4Y|q14%`By}K&emIg)eN^S;oD?3{K#mrXFmIF zn5MB9T%(xl!<#q+Xih#1e61Me;4hn|k~BJq|8wL3uUy_j+-ckqUKjbLe|2(qxa>am z#0p|sLGwBuuQw`X=D;a`3B%1R|Lmg;*{wyX1h{cxgr!HvF3do2b;OlV*|m{Il@NL@ z2X9O``kGx#i&{uPnTK0TX%aajQLPF~eK~ZD%48ON2|4bOiYV2}A5#pM1P^^1hQl(s z4w!PN=SU3cdu{o!=aDfZ=-yu|U&l9!uh)9F3=!^OkLH%wGt1q(@5^*J^4 zylLnnwG(bWpP!$fw(&)Q=URZO^NKhll(!;K+!VlO)1JK1^38Kn3ES~CbPEp>eI%%# zp|+VQ-bJ@yJ;exjV>jnJ4ZY6iZ@)wP=MD(->^cVCZ&Tj{p&Qjd(3@6IGWHnmw9>`JMGX1v2S6?&-r>d)clrjvJ$;J>50 z1>Y=Z0euL~qVui0zbZcVaRPedkzDh`Yr?KkzhZdzw&W?VbXREIJ87dbUdF`-& z=rp=J=BdfgDY%SnyUq>CG(Y$viMIDr(dBMURY~$+D5`y*?|LiTj#-hFV5dIFHnWO5 zGuuBj9{S~%!H;tN<-puW(pcTD#QLG}cajI-=%ab17aqjswZLut`=cAyvtx@-4is2J zy*uzfa2fB4N#-MgSsUIzn{2jB_d~2q#kfmcF;Erz8RSFohF1By{lwO{T>VCl2WF?b zc#c=d0e7b44)2faC&eqR-O#=yo=W$9&5r^V#@Wcmt;e+r^WtRzn@#f?n5`3pae}h; zM}gnL`{szQ_s6>rpb5!c=FyDB(Y1#c$n;Q(2Zv2WWEA$QEG{~>)n=51diOotM;N_E zJ22lHJlS4dkmwJIOpvSX88SHl|K#C2F0^~fdpPqNjr~o$2R}y@hj16K#i_3a6$mvL z|5^+U&x{mpUqIrr(;_6ym8)UcfBI9)?H?n6!>^j0ln8JlDKfkewk}WiMy7}RLrHbN8(X$KURn- znsKQDW&i6y9*Ncdcs=}6*x2uE?anMiZfxp(2`n)IjrB z)*c(W6@Jq1Aa2dXPMXD{OF2Y8bt1^)9nHy9&`#g5aUw2K2glU;zOW4&x#77oMIG3} zXcBcFD=tzt^Btm082r&?27S}#NhXdVtULO$+;BbrBeQ%`68h|&Mo_rkOIevVHv>q{ z&th+LZo$ypk($e))%4n3pRAc9G45%P(fE|-Xu;b;c#_Z-Ma#5h57%g7 z4xMlF#h+*d9mGIpA@{h|4}2d>+AqhpMk!3yW>^Linyn3l1LSEs_ga`G0R{k9>PI6h1WBev_kHg!C1%LMrGKM3KI(21wHkHmfbXgnAXIaOfzEq{32^8NXdDkLf)@-N#jbO^qs=LguRjgj$iaZLW`>?qOi z3+b@nx^K@>a^=Z$Fq2PYs>;>5Ut`l#2b4x5SR`R~t@-dXgmx49N#ro}*_`P=hqv1u zLlDcq(Z_9A=W@F248K$6Mq5e!eJ%8O@2l;Oh1Fj>R0J*~hsTiJrLzcAzv@EgrDck> zfUu&R`EG?Mtkc*I%g;7kZ~B4cgqViLnDI6P9vF|{UUb`C`B1zv;Qs01`oYfl z=Y6pZdx?=NixZi2wYgs%&Iz-Ir6(FLV@L>Up@AyYX{oC`a>Kgr83r>upy}90-+Z zHbqx+JYbTGN)^*?zIBLa2caWeIboQx*LvhP^g=MWWEsxBIoWF`8c8Zo!wb=>KIe9& z8#r{wgsdKiN2T=_oGH_x2JahMI&ss=hQOJ(QOW-(Dz`_nrtWvXASnxs1CU~=Q8ijUn3`uVFv}gY$WH}1FmFf(1+*IB|8|K z=}Z0Kk`u{SLC+^oj2iBj5O^3~;@q8-^KkJ{e;Q;!h${i^)4S{PEnY9N%igl4yw*MQ zDXeUKRnq%4B_SNM@%}n22e~%ou%0odQ6xz>vWUoS`D__pa*2V`+4S$Ho0(=0!V@S_ ztyB#^1PNqzgW+bos+-5zI;S?4GdI&*gIk-qVM^W|Y4Q~FXjTGu`RfYRey~>dKtSgx zg<{@<<+2G&>n-AlK)FWFSx)e)S}Y^{h3!J+aoziTFG?AvC_SgaL~8Kv~bqE7xpmBC{HggULD~(KcdhbevNx=9e5-F#R3Q!#~&aw z+Neo{?&!v47@Md>=?}44cr0e@NF)X8uaD@OH@>5mf~IPZK$avJOn#7UXPQt4idwjA zBu=Yp>3huX&YXQ(A32EQdzU}8Mv&k#38>GgGOtmPAz zep~x1t`Qm&^>x^)1L=OUhIxsZa?M8+X!SG=`-FGzTU}<|wFBCeay7$8%XDWo4qa&6 zAR~IUf1?<&Km({>nD1`+dJmHVCqaW80vP;kVb6=P9dQpUTa{P?)k={$#(OvTBog` z(G9`1W416dxD- zG9xbA5F4@wEq+=Vm%+-Y1?D~2QzV0HsOIaP_y|Vy$HS0@5fvN&a~l0;ANwMAhmX;i1T}eu4%#?@0K5I@SlYzqU`5Lg^diTE2HVhi}nT5hTWnOO8V2i#m^5XEbxlj zx;r07@G_{t`3?CsU&C5?REv(o@<}t7vcX8#1g>o|WOy;);7GAqz1l7ht8p5*>x}Gr z5gy5>80pbfY$9wm)%4?axW#mrgwQ0xE#Cu3 z^%QRy+PV&y`H_E~HJ$5rThEYI0pm<~@51G};}*ZzbJ=dycGZ)V4jw+94}A=-!n;up zgH&D!EI{daPwV>ZR-ql;3COCBYxAzwUbfC2tEXx2J^)w)k% zC}?wDjXub0?q&10N&1H~dBwWEZe~uuolis9HV*Rc6DzUaqoldrS9rXCZLQv`-1wgj zqR$et^eV=~?u#XgTZ+HWq%b2@6xJ5V#+1rNE@X6_{+aWhPVx8(FhO5K(nP8v2CM+dK>I=W!$fb9$IigF8Flke}k8Gzb8~6)9!*EAy|F; znq7JoXFrRUMf`}@>4c>M*@6+PO%Koy0HrzJjK1z^A}4;qclmE%f&I@jsw@OL`qLK$ zxommgW-mFe^ouq*(4cn%DuvG=aTSKg#)4e(KDM>}heV)-$p8Y~OmQ^7ytTCz2$Xm5 z?Oy%qV*eK8SgWtONORb9MZm<%DpsCO*Sjo90Tbl)VAM-DZo4jP=gLjGLD6K7rCO?T z&DAgIE7VG?H@e8=xqLf6B6G?Ar5>4y0$c#z20asRt44D#fY}6;_SylS)0P#Vk@rPA ze|WWCq_%Suu#FB-VL>{s2u6L=v?^-TuYcd7PYL)#|B&w-fCwn zh5qFnbSO{UED!Nr`W)*7NsS1Cz}jmylDB!Q1BCD6QM)}{eqEjsU@RUoYw>i{xm*+7 zTx(SP{x{)GdGlu2BGG<(wU;MM)FO37yB@igid`flw~oCPx_K~nLEoC&+1-C{aN6l9 zy;Q6)t*3AXP|WH!YP(c+oZGQ+M;7?kXmQhnPIj+Lpr+b+s9Or-PQr?y$Ty(WnGs~u z9q%8wh=!Fn7oChmGp-d9OBKcn=RQCy&8zk1T>0Uc(GvYIj16l}mp4$jK;?Q~eP!%z z(y{>u2y89bqv)G6p1dNvbA>KPo6{(t)s)E5{i#L|lP(7?&&eu}?;(2tE2-oP?SAHo z2AJ0qTLZEEtlK2wGZ7^?F;#Z-=YmOMyrwc@{Q+voMT9g_XyLR}@)u&pe;#NG&2Jp( zVgdjX)3(g{G(>)$nKHxu=2(37C9}rGbd|(N$6rlsd)o8?FdHmR%^DG8LO3ZD32CMV;4Ys1RPjgT^q8e@2^z*pR;vvfy=wHY zcReDF3Xk9+kjNSunX9s%%j|a|ufxqZsDYUIKkwXlCQzz4tihgeA9d2&KB8 zmdvZFa^o$o%vE?R|J94Dku@iRbJ}nxp;b|pP>UF4K&Ti;xd(+zy?W(MF4t>AbQ@Nl zD8Nk;aM6FJzZciX-q)!~@2G3rZULH$bIwF*u=a-|kz`z(X+u?t3!>g*3~4`WWO*4h zeg)ajep`3{y;*2Bxft59EdpzLv&5LGmSD<{Db9l<42s75E(#$>6*OZb;{qOab@xEB z0?{180zjgBP;cA@fO$DhZQ}da(7p;g8B6coA5ZjY%2O^?P;vpJU8?Q@ruUiUs1J-g zdI?utaf~f>AqYq0Y=uJ>oiri}ycL?E;+Hy@0Oh8uE}#LG@lrIXU-xwtaXYX*Rf)0E zXLgAGfiZNTop{&gU2HdH3w9ZaaDjflK|SFEO^Wj(ye3my1~^IoToz)hVHLG>EZGyv z)LMOF!h}#fVB>nr!Nw3ouu`u!+{##iB|b_ni0~*m64AGgk;TYWpjb<^AGhywabLXH zH>vN&{gD$?UzWf>=m*D+V3!`x{^H>|my@q-iV}@=ZG`vpA*(rUi!2mlgNH0Ej7}bd zFFc{u>Bo(nKHNqiHD{p9nju(LZru0op>>3yFlGi(<6ix(>?S+^f;jrN33$>VN#b6b zFAY+b9}^1yBWjUWo7Q0OW@v)lI6>OID^EKViCO8lCpJZp2=8(&_|uyU4F#F|qF5*U zs>Meo*)>+E}Uc51p2Wp3-j?I)mMB zBb6)zzlKakDeaXhH=Y;^GV5VjqOHJs<=qd#T)T{+q#Dk;;OcmlQ(x5Kq&--u-Mhfi zc*~L1p{`T4$-*aWH=kMg%I=K9ym?c+hyLh3T>OD}7=9bG5WJj>;;~Q_iE4M|UF?NY z$i$8xdusN|uQe4cHr1hKYtM42F4(yA!M8Haiqbd-Ob-fp&Os@Z67SvF6YWc98XnKq zxJp(&kwJ>=A~hy%tnC%&8&?#QOxTlhTaKktcq4PL?wOV5l74uJqnQWoxsKYv-UeHI zcGO;tWGo{m0P#0e4D#FkAWttmlrkWV@pE^+!P{#&Q{eC9M?Yg2ts}otNxM7w;VmcF z8Oljlpx=$TBQZkAk$iG3lPH|h9R{zbL{?P+#fX70N>J15HEH38bcr2rBRsHL%$Kjl zl0zygn*M20DMac&eW5mMI^wPj`-{v;(3qW&z5a+lL&!M)HN03fAR*~CqFTjWZWGM? zz|+%HOFMUku73M?*3F$6?3-pZJKZ(2q;G=Hy6!sHCgc0Y9SRVHDWnJ5q%gCgq&wCBv)DW6y?3rncHs=Td!ww_gX)Z+&|Zvd==;&p+N6mTLXLLYA}8YpfQg#9S$L8&zkB2tE{;X zJl|6?b&~q;c#)X!hN+Ye*9JiOlWnejGO7VuUnY~@L$NCv(NRY*#Jwf1i<^bPM!766 zrDE$tw`An5+S?Jy!@TD;>2F-LDnW*x%-_>(_r0OL!keFJs*g??yF6=ah%d-uUIL`` zCN=QmM2Yh_j2&U(X|9whoX%a=@9|Y&Nquq?eaO4!tcOA5daeZ`&lad;s z%ZJ~;xlcvLK>iAN0@}#!jK2%-jSyAV8>bCleq#am~t&iIY~8 zDe5_k4i&KT=iUf;BV9mc><=q$74ce$_0R095{A@IQpi{?tka$U?Q2HOX$mA4JY+~5 z?`+#%@SUCQ3jG`vK^-$a{4>u=-O33Ba4j%X-_BP8iJy6E>W!9>?CYBSWzPZ!wH#=u zyf$YD^#R=5lKJ#D(R(1UD@YO~Fof{!KR>;tZ8NDbkxN>3fW`3V8eRd8h&bL9MW1Fn z2^L9MkxaI-%-tpXr>=bF&};YxoR*1Nclzq$e6P;0l7wp(VQ+ig_?ffe7A2_cZouEJ zm7`u77lw!3r;KO)GE2qXYSywYm(*fCIFtI%j(HH`P7utOtttaMA6f5zV#U-$q5#5N z+0{dd_Jiz2#^`AW_P=i*9wS;;ntNlcWho=`B?0A`Mj@)l{inxvxp1B{m)V#G4VeLr z6Ld|S1kwBeQWPmG_;ct>o+UN+6+lad|7dUs z-*FyWjhHM`h>^0R1f``I#`SGvJ<_ba4+2c~;I&~K6wz_u`BDa0A~zW{I4Gk(TM=mq z*HRN1oL_XO(h#$A4uAABB*y^PN;#JfH2#S^def8y1v?tLNH0BrOgeer z00en8tQd!#>zT>;8*iUVD3okY#y;T#nDA;XT=-vN{_1of_x|( z$#8=uoGJYs`>n8_wOmDZvBX2Q9i_!6!%Gzg*~_gKfz861t4M5dFn~}%)qB!Uw;d$e z^HTsd%QipkNk8w1$63T7mMF;^lb(z}RR$KfyZg9GKC6c$2(ohsOfKK4oF6OOw;|^~vT+8m z+i0V+7I+D>O2GG#?6!^Kt>7X!4A%rYJ5=#!iJFkqJM>`9;RE1T?}9<;G>K)Jf< z)ndL+y<5DMR*>QnO4*d(d?EA8wk?OIHvKNBnsRnvw-&uu`7=OqhX!DpE*;1vPIZH7 z4stRmaQa1UK0EA(#oAwZ+=z7h1gnF3wN*7RxiZfscQCYn*igFpSU>W9wN>)JgM_HU zX8L4phX*qj5xs_CfN<;S$lm-fs+{jBJCnSZ^>wR(NtM|gh-qp%6Os`3CCLpl%EZXa zz?E9S`vW`(A#6rAlutrGa{%a(BO|!0Kt15IhjZM_*Ab3Ni{3|>sDo{q zFuzruRr{f^uaXTi*725pCLTlc7|)|qINI}X-k{IFK7BkUzj<>5-)TD5y*XAIG~*U+ zI7xklN6Gzs2p;*w&dv@ct{Sn>G^y-ro;N$BjQXK1hxHXq40W2NAx=y#qr^RZ))go< z^_3{>;*Vw*Vb17)fI#-n64B-)fQl91LYSM`wn1{%Yty($yAH4eC76i3{%kqr$<=z@ zqBz-yf~f`r?)Bx>C{?6c_R-P{9}%-wMSnliOCQm?G7}Rf1$}V8ZjK}_HSd}Ue zHKd3E{d)%$VEROVFUo|+q=!2f7od}-59rD+gGMuzJb6UOf|Gz1y)r?VbNQq;st0m| z5uV570ndfnZVlN{(pM$roajbp)n1HnVKUWzAcs(yD-R7Wo+PX7e5qs%H_-gkm+I_d z!FW6rrb~?{>B3`{ap3qOZ5V`g2H$TCI32ZM0{g?z5d-3>A=ZSoCtZ^a+QI- z)5bPYKgNODHR?{y+3(vOc&^o%*0;&KZYTDu4~VLZSoD)R)nHnrh|tMX|n+l6V$`R;9PtaeUp)C+m1Zh4*) z5RKV&%~l6*$@;gQ|xF{imjI>P1 z>gEOZ2-rihfF9RHAE|%wqB7l7x6xf*Tvrk#S4&kU@8a^Cu*|Ci0C6>2*8%eH08hZF zn*vAvKgaKufwx5=zQ)rSav;jG$UtWo%R?cxT#Q^eK_&a*zrT+@p8T-Bv%AGpmih3n zyjF6SJYb>D23&$_eQo49fA;Lz#MccDElN{k0r$R#4KtLKm%8brGI}26dSsmK;N2foWIKZp;5$rp`X8J%hpQ!XNdAL zncGthdxg9UiujSqz>8ti;svxtCLP%Kumgy-C+4)D^krQLFB~c9K>>RXXRD0Y`ar>n zH7pT;FhXE?#)cIq3`|_r|M+P)@d8&?2`xhyqq?NK!^SPY`~-HWmf)M5$c47Rv$oYZ z)n0Bz|0y~2K|P8zh*ZG>&l;y)C_M$ROhPN}GrycOp|KMS=TR1J#khSQKAPF^T@eq0 z^#wNo4E1mR9BO2=PhvH!#y_9zKLeS$&J+f|k!JFjxi1P;bIqBl)GyKL~xp7WRH#yaHiJ_Fc)!3b! z-ug-RqZ`}Xepda%NoF$uBxktLb(BuvjT@}#+I#zX=bb|?cS^%&>LFjk?3(u-Cm#jc ze7PGe>zR!|fPEh8wKyxv4v@ZhzOZ1}>8pUC?KQI~W71gq$kE`LYh@7NvYP`joU;vX zLACuXeUAn@8+W!0o_LStGA*4SZqJkMY>i}egxVn!q+{#fV&2zC_0QB`YS~YRpMZps z`|o+<`JwI`vRwPq*qG6)-5&@$YQG8BhGLdc|e?O55pF zonYkm?P~@4Q&U+jg_!N1;A-$yYx4{tzCpi|J_gpGIIk3~aM!Lf%y_FS$c1}cHKtmj zn;-cy;Iu+_(Y$bXv{M%>>KV9jMj+0q8Zilu(+kVyzu217^UgBBIa7YRC#D%AUz#rL z|D1<{s-wQ`%y4k{r^qwJ+koW;-WiJ7EF#L|_))(0Xuf7$7dEo7u{F&N`fgEL8S3W9pi-_N!b>J&*UNnzNSvi1FEY2S3ef zE%_kJhVW!n*4uZV1~f<}R=N-@SvSZo|FtL2T-Db=0u}T*;_T7R)8QLRD8Jb_%5yw} z`R7w z?_x`XN=S%SR}$2QHdq+Q5R3lSbJwZ>nIlY)-lGbW1w{VeQXxl5T=zoa0=(~J7MwE= z+E2}dJvWVQn2&Gw?#qO?6CYuG>J416mV75(vxD~C4-qQIY#S+EE?S9YcN|n6b*KxT z#+>gZVZ6^P3INRcAdLn+Vdn*+G{PHclCqV;BBs&^hdW(>CH7)79Vu_q2+Pex132!} zC-!?Gu9h)@Yw|lZI#F`M(Hw7X-r!Ved$!09a;zJ$BQ(`5W^+jny90|W`l+k{$k7m& z_>9=MBll#B19*{ShyakhQQBCB1rcXORITVr>0)Ke-}EtQI#z0ci z3vLW*sLFHT&KN9ndt=0GBc1poR7$oF6KcM3>Se5T<<^#i3QwGDY}4&8R-K*5Bz8?d zf#JKMpRKS<^cQVP zmzPU?7)=>-8X&{%7I=8C7bN>Gsj2q((J`8IR7>eoJ@i6NGRC6Oe&*dG@hA$iU6F-s zVt&=xesnABtaq^q${y0aW7(g?9|sSAz5)~=>VZU4$?e|x=C3)njZolTHcG`e{M%nf zYh(GnRb@e+enL5v#XqcWo*$1Teo^^$7!@)gSq9V>78~TO4L$$#Uwa0pSg z?xrW#gJfXm&h9on0YxQ@+NLMgmXTbtai^-U1{M7t8M@BC+-0h2YirgiyFee4RbhQc z+p~Fixm5|0e6#8bO zphyQ^-yg9-r~ds$Mleca+GX+7_X2}VxTmeWTddxC0RlP>`BxjBo+(wzV=$Q4O9Qde z!1uX8#w6PK3D9dmw`L$y4zq5i^x*<2d7&vlj%rV$1u*^RI+bP@_x?2=vb~!fFsNa3 z=EgV@P6J{$^piNT#sInPe%GC&?RmG^=AAn0LIEoV#|MQ^o2y8Vxs;&*s*!wSt=%#+ zSK?6pLu-)6HP>=~d~E4^k9Cn`xjMaWQ`CG;*yg7pi|MJOuEtwmv^jwe<057|d>y)<2A-1G zw!UW@0N+MKE-)se(J*;+!0;NaTUYoJHl$W{uV*>%G2Vs}@CVZz{y-ACj=C8X74@sC5bVCmaRM!5`pxR38R%XFJEB1S4T=&}C4)k58 z9&qiKpG%#p{&*|TTdKr=bpRK+5ned9fBcfUX{&jvHD`{pV~d{uNf ziKGWbK|Qm3`!c2oNvO!qSTgo~%Q{6U zjCCwyEQ#!6H-j!q(-a=KS46mV7HuYi!TxFla#3b;BMNR6T~DMlRw zR!RPe0%w81b5te-s9mw#!j$$vd#(eg?6yt8D;n!`pr%Um_yd5$V7X0@SXdn4SmZhH zxtEDFa;2wH$^L0b>WX!%CN|EuQymdY7w}*Hyocd@u}50F9iRCkA0AKL!)+r;Jkcvq zjAn*+BQ4F~kMmBxZet5`ezUUub;RB7J2vQzI!gUcmTV8Jv+BO5>xI#d4uQ-oV*o;Q zL^h*ntkkjJnENB-oFENN>`PRie7<2laV#QGJ$1Q>g?f0U{x~6_)T&edq`PQLRJ)Y~ z;!cBX0pU+iwG$95*H{1$JdYwjYe6iFeGorcQ=z3F0eCfBKnB3M+6`F!cF?@xsSk@JUJg zXj+=%p{f`zDdyaW8coZhVQl$hog9mrasnD4Ai5ik(qk@;kkVy!N0DwCUDPpO){lh`d-;o&cOKNC)1Z4!4%c%8DDX3A}ea4MrO2e;sK`*?xxN zsw{^MbRXF`w&Qs(s6CyEoxO!_x-m5Z$&#EFn7#4RzRE(DhNh=#eiTxc1OR~{O-)Vfz@TN_h=FTwM74o_ zy7R69H-t)N+B}Cz!hI)$kx!3a(#o-)tC_1h>|^`#F-**hP~#aZ?UR^e<)+?f2XDz|#GG z3`OmFp8(|FxR}V4>n)dx@e+QQ%7WurII2Dg}t$Xuq@s)jdoH@w38SmfX zv7`sBhYtPdQ{%VU5kq5fuFq5iO67FbyqzfWp0zLdU%P($mS-MZk+ay7p$dE8tXc>k%+GwZGsU z=X3i=(nY6CnMq!r9bZ>Aa+Ae6WD`vAKK#jicN7A)o>la+JvGSk ziq5GtLk9i0h#hSIV|1>DKD*66IG))o{E3#JQE2LEDZG`(?=ZhW>g=cMx>HMm@@sl#=RqJmpGQcAaX=B#^vLM9cMJv^r)21|zRe3@`2A3VMK7 zUbtIPL^curvg&oOfg-7ZJ(rk}yfwVW<%k5i(C`&{QVp39oL>}}{P zyl)j+@6<&W9d>Tgbqi4CcZG@p&<>m1cgoHDs2iPGG@oji6z zy-SZ!ooNH;K25|Q{odL{*FhTL06h!vr!<-%8uYRlBSdl`7gK7AQ$Bj9lQHPCmL->=nhsFumk3#&vbzm12Uuve*d}#TQMB! zas-1LGmrb9RbE6~rqG~jTkrzg?r1b8+A%eOPGEnd+sj3|qCEJAjV0-92?H>KBkkZ8 z=<%<*AabG=WBo^7kNoxHT;SYeKO)Wnyusxg_sk04o67E+J4q!gxqcQdrr zp@z7CAZy~lX{mPn%Mf~+M}h}^fqUqXGVwGC9%vu*b=Xr&yaTt~^DnWSigyp-&KpfD zBl-=o_gdM@V>oC0hEt!!p`y z))AVQ3$c->Hk-@bK**#Bm@ek>TKMrHY&`z@p^?Oz!I!%YoYK*nE+;@^Qs*LM)jkO^ zt#_14tHN(d{jTWC-2?0w{x}{5o2{UIMeidM`zIS;Uxi?2^+1q(7WyAgMuR=Q&@rx!5bD={WWVu-g%N;tBF63jA8{D$n9h#P-UZ20u_&2fWe9 zsr`CizJnVXv+D~R{_V3h)=|bV*RDMmAS2P$2QPW`h3+Nyt`}1`p+MI-ZyCNzCnbEu_GoJ{UZ;Pb%vx)X@S#?soJaJGVcjlcK9lXb!Jl z<5^QW$bmz@lVx%p3t>}D-533Q@$GcGgk$f43m%B&!JEOvM%#%ER{uzNe|aNeJ9no>G`AxS(j_~ay86$jOE}_*JgP#$O5IPX+ka+%kgoyOqbJzf zUyuT{ZrecmBaYX`K8ixu#}joo^fT{xv?jzrd#+1VQYQOUVVi+va9L`qUhrc#c| z><~30s9GEY-$oz#>8k8jJYt{4l6qi^9|oGe0CM7izja$dq{cH$ej)CYZ|=?L{fLA!Q1aq>UoER^{m;|gPk15{nWVfIO4@?PA8^?euiBepZa z-0C}s8Q1NuL=mxznUy!|NeiCAWqCi#TaII7?Ail@*SC?AGjKAK(jri}#KpU}wxb3J zD+tuft{-|dg|>KGc$dsMyHX=fOO%F0$$f^4y!F~wb{T4n_@hV)DJ-xx1u|Omd9m|3 zrw1%uK(Y|x0}q()sMxG;m~JW^aARefiDuRede@sT+GRLh!aTk<%rD&V-rAu9&9@BfK4Zw@=K@Leh5Q*N?G+ z$}XyilI;9?5$FgIlJ6Z)4jW%t8c{x~Adb$GGrzC70Dgxm{N}Vg z=vkQz?K*GYdAaXl_C@j)!M)dFz_Z?@i5a{``!Bg$mW~zu@uVtrl{6Zg*nK(d$+&Q( z>yH`^zv;#po`mOhmLa?Tvxy&{xW)OLeg9ZEI>Dghp<{*o<}K5&{CA+YSH3Vs4Ldh+KRB) ze8p&c6xb~?FbpYWK38KRp7OANQJ>3Wq&u#9#a<~*L=SD&BhpO5&AKl)pC=8XZpyeW z)`pQr7plwS&2OsfU#~*t1rxq+T^QrbLx(^%AhOr8=R2baOXyHs)5Q%IwI`c2g@?UC zP6q=X=Hw-y=72a4oxEsi5p~g*{#B)igaTj&fCPeR4$}=#3MPsGO^X zg2{*#<8;I~I^rzi=yU6FPYHc?5SL6!ER55MdekE4hs%%(Gn7#}Zk-g*7<01CkiwiS zj1IfjDOr4O2{3e1+H*&Tn9qp#9_QEp>|}_t^ME_ zQ(AmzJQ%oxruGfX`y4!bYQiCF7xE{IkA|kr`O7nu=UxG_>BccaqL5yHZXH~bRi!}f zY)X&B4|(y`KnDx^4sI>sB5bQ5SyU17@51&x&Brw;C(O8wf&V#E`=rlL3D*I%YoT3O z>Y1Tw+k?Gqx@xtzAcG_*HY>R!*P`Yu3|Sp+qGUb9RePJ!by~O0g&TPyMaBv$*=*G_ zEe$XwLv=ME!%iow zey+i5Ia?&C@q^&Cub$*z9jr_<`Z+oj%;;PL9{}Bl#QI7!lWpPhrDD67 zjBMJ&1}#7Q!Od`v!7dL9LrJ8aw>WdU(AEC8Mz&I7IMW|F9f#=(O#6;Na?U;qxE&w^ zPHbX!Vsv11s(aqDDi+0BBO@|3Rs6nwWzZ>(i#)zqjfj=1To%>#scBsr}T_7wC)bs?lkJP}q z@A?2(e0q~>k7@Uj1*2nriWKw<+^*+AGi=7Kc{2fmr#2nvksG}AYwG7lF9;nT<*w`; zgL6`?%2L%v(|ipq?@OT!?mewZs*pz$C%g4=fwkA#^Ox_s%%;FhI#!DC>K*Z?&<$^jbu1 zdcRT!a1tlSo%G8eiCMJy%EmW1>(`b7OKtm4MZAGhNt=@kYS1vj>7#vj^Ue$d&C4KT zvv2F|Qpf2J{j$Lq&fv@-wK)IqMSZ&3lfhwq?J0-4wC^&}YY_HNPK+!KcU7#~qMa`| z0oR!T*UgGQ#1D4RNsnfKvJ6HUrA5434p1;quGK?YNJWUS&&V$vrpcbc zVhZ&@_R#w;_E0ZTO3um?^&`BKO(mbn#jL4NOkAu|-uR!PKbhE!Mvp}f@{}2+uSw?Q z^SC2)82h~%k}22C7;TWF8q4X_m*ONoY@wDMgy=0hjtC>FOMDtTy+7dLBUax0HOZlr>#62Aosnd2(zTPH#BN)?R+_J6}~I z-Cc#Bb7uITwvES1htZvOD*pp)=rEiG9*W7d!d;GbafoE8$$=Go@u%;cyptku-WDzXpmKDUqQ8RSCk5L z#VDOGUK%Ymf2ZkEOkAJ1F)I0dD`aOrCS1bP{8~@w{@T9ZfGstXvO6$FuL@VlVP?q@ zaqhvcQKD}!&+eir*5dE1_i#*v-va>eO-0iMr&vkA8VF@j$h#vTmLeqX^(jmhbd=^)+Mby+N`z7Tl zjS?(U&)($5E@Vu#iZ~DJ`CqG9wO@=5EX!MG9e9X2ShI=eMQIL4yR6#E4(!0{VSmVFh<|(0ab2WbK;XD14*o9L#$`&G`8sbt-`vUu} z)WQMoWfZ$JhCZ=utHs_7GgtQA#JSW#53$k2H@W4td$Lhea}nu2SU}s5a-F_M@JS{gNKQ z?G#;EXTUSYvp)t*{E*M*x&qsdZN1IK&JWX3Zo}Io7^!k3*!m=NS5Kj4?P|&AZS`s* zLtc%{<9Uw7{(30R?^oq?eJ65pNi*Am#;5>7^K*}s^8pyX*eJ4dQqfZ^YS!p8k{5fO z<&@~;1MBP0$s=1KO{Gv=H9E#ZRLd2N^aE=5X?rd@5F&WeY&{RTOG1g^&u+~ue5+Uc8&xnE0XX;00$SjW8S!mAvV z*x#pezxcj7{5Su_oI43`?|Dfr{0sS_gz~w_IkI$QhqJfycCxwy#fU>!iiEkds%Rhg z+y$7A_W*3(O$r@mIFrjL%9>e-D84khpr*hR7?Oag6Q-`ZFDAOa@$d*9FHubxVJC9t}ns z6|q|>H?=UpjSLHIKaFAB;QpC)Z6wnJavO!*o;x_oey)65^-+5Lk_&frU@QR{r2Vu5 z_37-w#J0Vk8?|bS$mk4%nY?%<-V@uRx4KaAiIErX5l>5F7!R}`9QzBCaxtk1GG!ay zscPeK{{9pFnF_FjH*=~l72XFZEN#to)CcaOD!X8lwee|8pq-t`A-KY!i0BCh#k!7E zcCZ2RU`lcNGh)ZMEFKwpbVi+8I3|ku2YmRt?zyV=nx})@oxcx82%UGF4Rwiu$y=4pwiGBpxnc7aCG4Kq<}$n%w!iXW2l4W zj|=w)Z3j@U#S}-GyI!IB6%Cjy69bPLzP4sTQORPLH((c+i)6ihJ-YjMtwP@nKABiX z{gx`!QzZCs<0rXJN}qvz9&Pd-ag`N48@s;t3+aQ;`jCwK{vo+jEfxA5RSUjAuKT0| zf@0>=JIHrG6OKJ0*M<$PfC{>pP0IwzETGGa?&!+2(-px69BACi{!^{%xOnhJ<5Fo! zNt<9r*;r$$WWLx#*%)@jRKEhE{IPK>lDq$c&f^An-$jOs39w)g6edl0wI)&i71-0Y zVyO?h78~M9AF&uIy0{95KCDj7GE9t5V;#X-UF8Zq?4RSe+s*H{|A(%+zP?8k&<{X` zx&zgPI?@bcAdXMj{fEcl&Y!E)_g+omAv04`#@htf;Jd6!2ic=FP-Hq#kG9MoB{$Ax zWSg>#AKLQmp(ng=i0(uP&#&*Q?n2UvZVmEhpi7aAu`Q+yR5Wfc^tq79jSM+&RO~gS z_PgM3dargUq}c+ZC@U$_I%ba+1)sGkVEXLse%v9aD#sOSic)*|HcbvKpC`r)jdj!c z($8EjK4w>j|~g!xl~!JO`L| zKRRY)&uqC~M?~7IR1F8b^3k4ANsBOGkst^{Z1JPq(O#*4Ec+DLmvddqfmrvQ=Tfo?f2$R%V~8j}Gzb zQkQZ@!XywHmO^;Cgy;HpU6c$#h|xAUdB<<>2?59FG2tMKgh#@ieqU2}1R7k_gGpl8 zmG0FL6pLemAh>$BUtvJNAS*F|qL+U8q~bk*v#Y?5mEoCBlL`%qbP2l__+7$rLEc4CxZeC`fNgD9IQr<)Xl`URz5_WJde zw#2cnjT-THkyYiOk||Z!}%G2a% zvB?vEd{-mK?c4ETWV*!S0JLW^hwI^$p|F){d2f_Jk}SAhI5(rwvJ$ zb!{lZ3!V%*W1{Les+Aw^N~?QC2*iPN-%CFan7a@P=`RdHOVG7)*ak({NyY>$e9$^2 zB`ekfoZ^=mT~`~_?(?qqCG7I2YmK`2g~`#t~b^~Nmsj4hw^ zpYN*`Fi3N&08slh5)YuFDH!n}Zm>kqN#GKDOKf_#j#LMl_gt--w6T<}gf}?NqUi#k zwv?CK%}#+t7z|bi<&-TC!j}ss2pZJOL9!g@Eht$5hX+6Pp3awrDy>S5oPQvD0vJ6u z(3L(@6TivC_R+7a{HCIb8Y}exS$|E#Y^dNS%+wX7?Odm$@(;)b`rCXAyZ*uH_rwVo zs5%JK4c&P%BAd{^=sy?1G5PV1ZYg_4@C;oe5*fT97kqNKRF>uS*8~eDM1{5#$HdSxX?rWu>23Qy;)ph>%;*+5aw(B7WZ5gpKNskeH~hNUh9hyuwxZ{*g3i$Gl2>yFHPlBEcY{AV;tI1#=zr(Xhr zek^hvDKKaV>TKL*T{`!tFcsAYRJE?Qgs!fblv&j{^@~3E#~>z`Be%_Ibz!EEUz#t_ zKb}HBv6dR^`*CFPm#2-GuivY&?F9OM>pu}ksiVzFN$k6-ej9b)`q@GaDlt^&RJeyl z-v3x(Z0D`TVI=1-Eq0fl>++uisQ1AahMd2NW?Y<)7$! zH9#k0dBXNVittN~sDw2VtJ3kHP4GM>yQ{Pb6!^xO*X%ePRkX!%*Yv_)qnBnZ`>nL7 zDCi2wh32az8fUsCv+2$YrFQhmaN~!s^&SZ&P9Ni(9aQ9#Ud3M^UL%SRr|DjOTVCTHjkXZ2fsH^R4Be@sE2Wxc3>Pa{Os-&*5PSOl21eH-mvbN?Pe>f ztre)aXm}I=qej5Z^!RF?Q{oot#%C+F69fuuo@m)^jHAV8J~StWY9N}o%PRHwOld?2i^u5^rqzV!E732A|S zPt115fcC?VO~qna0Wz?Qy$=bIg7k~l7FDA3a!My0a*OW>L%3dlJ1@DvNbr}5VjAbL z+*h4jpUxiB)pfh7uo_8! zpP9M{9t4R9iImc>PdCi=%aKbxkKTrya#pkA`#Ulf*LdSrt-bSAh)3KW=fKbI6{HpV zU`z}~Dx5D7rc1m}s&X4f8nJ<9%2kUdAjr0?`m|=u?&?%Y()zO=RUU5J5L`WM)~?d? z)x4Nx{Y0sG4Rp0blP^x0vSJW(aj(enzn91bM$P_5Eb9qBJAIv91Qhe}OPz$SHB_t4 zaX?86{PWpg4{Cxu`0}YElWealBm(KAVUZ79k48xB0fxB-*0Z3!Sko{wb6vXodd*pe zi%EiJeKKQxBcE!_(q8rBGL`6{LzY>R3STAMy_Lu)}wzsq<=iam<&{YkJAc0 zY_EvX&oR_6C!wI(KB&zA=IxJTiA@Ss7bQ;$TfI5BpqLGul1l{`t^ksG8cPpV2||RJZ3gg zN!yFx1#l#;<&9lwY0!#lI6(C=#}ErWw|ezgfE!x^Uo7(D;;!Cutn=b`S zp_wgw^#8tZ-eP#_6-u@eOviF?3N)=5&ox@0snIa9qi^Blg0JT(8vphhITe_kwW}od zaEYsq+xCvy&6B)cv{d1p>HhPd{|Owq?j5wHD%IkN$aEVI?e&rA&)xlRv&8}FP@Gc0 ztWvF9255#84*h7Z_7rY1@pe3<(HpUTa9{1IB7hzjJ-8u!dqiXDkLtHm_wgBpwU*FT zyWwh;K|V?h+|{C2{_CEK#6WVVf?a$m-_#pA$mjotbZh+w7HVy9982E%U0trMHo?eUpkMCO1=%Z!6h;g178*{2t zn?2^vH~(*M7&CI*7d(A5bDKoUe>zD2C&?XsmUbNzJ^K>M#g+JXn%8g%5R%huUa#&g zZEaN)t#<59G9_UgBfAutB? zGBW#_FQC#k(U&UKG5eUjztzDSH3zAD$EQ5A0Z?nVjEe+J15$Hvain6fUjX`fjvGMT z^JGX((k5yi3FxyxHJKkI|kl>8_Xh%LWmtf#K&tP^l!tGiTp?{KDcx#ZiJ94 z-nj4&Adq2Q{EYaQhO@c7sJ=ku{8s~DQi4T<*UdD>4^Y6v0g!)KMu(v6m&F zXb`{+g4y_vK5i{HgC#ao0oAY6W~*1uqs5OK*B+Y`a47)T;(I}s5P%1rh&3_TXY^>I z0Ax)Z^m+h8((uW$*C~&>B|w@N(7KUlQ4g@AM=4jB*9b7X|8}1zT9Ulke*0MZb1O2? zjE?dqiURx+SnmsGzA+`4bXyw2Hp-rINo4di(CK@@~__COPS0fYK^-DH(8PM2y2oQbkP3lR^SSx0ofGK ztA%Eu6`k6=A+*SA;Dc5pYv&jqS&vN!1IjT%z+3M%e|h%ji^T78Gtam5H?Gq0afDe_ zGC|V;IfgxEbn9QNYzB0=OVpD9W8K1^FUWv17&ZYTuJpr0Lzg4poe~DG zC*-%;oT?KBSOfGJNIVCV+^YAYT14cS9K%V3+<3Pp2HoZW1Y0WpAG8QBsfZpxF>1{8vJAS-FW|z*TF$*UeT4v8(%-VaJUi z7&(&L{d|S)YR6)IAaD})S2vStHz%`>f;7mLjlJ{a>(hKg#Od8P7u7uBOSNeCORqx5 zWUP?&(v)99Y&se`6WyZrir?JIXjL*t60dHj-58ZA`jRHJkAE@ps8B#O$P(D6739Js zQH$_D^#yCwrNHd+8+&0mpLUg zW17*zTYvGiyS5C_84hoYM-g2CyV7X?$%g_^yL}=BWhVjipwj0^bLA@A%X#sWfVkmc zNzxx+6@<7R-96>_B9?i;MW$pa$`c?ZoZHyOm-&mQCUtj4lg!29WM&iS_?zG~kj2C6 zF)a|((mP!NNGeQ^m02d^8R)8l3RlklPGhFwdfEOjAUE_^=(BeNO+DE{aLBOna%CzA zP<*F-$NyS9fYj|Oj>sSXaCpt1&OAaYd&bb7KKthSEL!)Wr#Ka~a>xN~r0fF2}+yV2(m?m4p7l&_oYbZQ=zj%!p48SgQvY5Q%?v^LI$OR&wD z;fDyP@>yv~>kJ@-m{ioqI%KWBG4gqhUr zo=5(xo*FMc?%1SH<~Wz^iJtQI2Mj6-xj%7a-u->r0PjhDk2*(tHzecpd>M@4l_>Y? z0?+hGLB*uthop!5*K-@jcZb@XkF7D6bNP-p{NaPmTffDN?fKfYN!s4Xn5 z@B8lP>^O6Tq{^Msfs8ZGLaR%k1)3Q6LL}V&@y7UhF|mvO0L2s);s#mR4F!FC-}{pu zGX(giC8tV3A}JHOBomY8ZQa`cziB)76`7zmXs9nZ1dyhSzM3b{ z3!r-CLc}LIKsib3m~zzvru2vVR=MEx@|7{l_35Q$Uzbh>F=uYQoL8r0EQ9Z*dkpv% zB93lOpUQs}dO7}hf76b}*g0^usGz+v_kEtqoLWTt%X%KP?PT2Ms``Ec^7wW`Y-bDy z$Mria-_O1wPw(f9$gmyMVrs*$vn@^$u2%MB#;J8{b`P^u)4b;cPQLo1V!0t9@aU~h z;Q*JnQKwE~c5xk$-ngh9DPP%~oktd?=`46Jlt0!5J}B#nfrd>`)ry; z=vS;yQ7`C>;Wu4c%~zTYMqiA+c#goFxfu-@RfdFbPEptn*qnTnKLO!Y{-gn28Q|X{ zF;SC(Fxzh;d<63TxGi6tK6ZY&zA1iVt&r1bKpW)LBtEmA`Y)|MI9~if`17jQutn8# zjezSu?|e$xo=;a{>&dzU2B4tHEGWmTpd54@F}oCW%7$ZIUXgr8>tVLgL!l6jbe?I) zrdB4-I7{M>QTIDA-3EU^xp`a=Od7|s0rc4wurFza&InO|K3Qw6W2GU=kZ(D?!Fadp zaxDw#;XGcnZZ>&ijcA5{$1A9aUOu_QqdPsDnfDpr>|F#O0irDE(9#(!&3{xpfG#r! zz0}eFGI0O@t(Wx~}zKg|e#tRy*$Z(K<_!Tdk|E!XZ) zr&-Cny#QS2f49_iwyF;=&+}j+3lnv70CxA!=D2<}nNJC>!Yjh3NZjSNFxl)NlA`ck z<62QvGxY>OS~+s-_{fWxhj6X|M!zSKR%o$pnOW*L>0sC0N0!@vNU)!|7fX_+$x*m@ zSAhuSd-9v_#U5;Cv((ClFCD5}VkXg(clbOuYCm)|@6PyXUHZOp_>Hq(@Jm^Z#Kh8C z*u3d-X#QyuICw*;#u;&~kFCX2M8@lQ+h$xubfrmeYZq4|UzR2itH2wnOz2jLk{o?c zSuQYnQRk3)tHJD=ch35*E^%^iq$KTJrGerJmn8Wn8BG{+-p+GJ`V@_a9aq{*Eeg=cC8nNOVC|91izyQPZhWSzO(= ziG$2(^Z;)Ujr9A7C0@qxE=x;IVqUo8qvkIC)xZKI|tzU*`ZlvApJ{esW@JvIzVOUm|CSAE8Xy>!05s zMcg3=MQD(|j2I|$jXi6G>oviqJQ(Z@>#T64bf7mTr72Th(GNXF4}=$>$}(*-sPX%2 z0PzDL1^+K5HNGN~Z7fbBUCLT&@yDE?H#mk-i}m3{Q0e6~KMS*KAyz+*2>FU2Yeucf znJfxVV_LpqO=QG3Js$F?Tj5~-*V=j0s6aZYh+ESJm^X|M#Zz2VUakeBdaYoIP?URH zXz;b~x$z~QpO?HAmItR`w#>wB#L41f3mnaMX=FGQik7-S@>lMNzl?4e5pcC8b*7BBIKZ*7~9}nSHcz zfKm4F=8M}CT_5<>y&JsoI@ODZ+jCS#^Pxfiz)G~ZXjgb`)6^wo6)YepE2?LB5@TB7O=NdF=d(B$j0rg5AF0R z&8_p*(x;O|omv1#llO+0;ejmVvw;eax)1z8VV&Jhq|96M>$s?n6GyM5@9ybr`X|dJ zn~`>_jlb@<(=rqsWjAs)7rGhB8;q9nL`NtwRdBaxDk;jE?Q+1g7^8D9SqT3n9(aHB z5n!tXwhclmmG^bkQW@mm1rL(F4%6tzB4^Yw)pI~J_&MgYr+DRMvDWa6BhMmxY8+LW%m@lZ!;_z%0_`w#Solmgw6wX-Ao3eZn#e5V8l?*-mJ zCJe;gIM?XZxANiT+)rv{(CxajGk*;)T6YB7IwZh zHpx%Be$}|vZ73cg->J#0jJxta>;^zj)d;)eW}Bl4a#($@eCxbpFbRbJP=3>|vncMk z*z4`A+))Z3nH!c-pWodQ=(y?lSu&8fc|z|bVxw{iYiuMhu+*>g&)Ad;8oLRmeN6c? zCCxio@YxCXmjh%lTO5FWjhoMakGS&94DAI!3bh>AL=%}W_;IhCToQ