From d8f10aa7a4478bca372ef38145d9d208d82d9255 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Tue, 14 Mar 2023 19:13:09 -0400 Subject: [PATCH 1/5] flomesh blog dupe Signed-off-by: Hannah Hunter --- .../content/posts/2023/dapr_flomesh/_index.md | 573 ++++++++++++++++++ .../dapr_flomesh/flomesh_dapr_blog_arch.png | Bin 0 -> 34753 bytes .../flomesh_dapr_blog_demo_arch.png | Bin 0 -> 60140 bytes 3 files changed, 573 insertions(+) create mode 100644 daprblog/content/posts/2023/dapr_flomesh/_index.md create mode 100644 daprblog/content/posts/2023/dapr_flomesh/flomesh_dapr_blog_arch.png create mode 100644 daprblog/content/posts/2023/dapr_flomesh/flomesh_dapr_blog_demo_arch.png diff --git a/daprblog/content/posts/2023/dapr_flomesh/_index.md b/daprblog/content/posts/2023/dapr_flomesh/_index.md new file mode 100644 index 00000000..5f5baa6f --- /dev/null +++ b/daprblog/content/posts/2023/dapr_flomesh/_index.md @@ -0,0 +1,573 @@ +--- +date: "2023-02-26T07:00:00-07:00" +title: "Achieving Multi-cluster Dapr support with Flomesh Service Mesh" +linkTitle: "Achieving Multi-cluster Dapr support with Flomesh Service Mesh" +author: "Addo Zhang - Flomesh" +type: blog +--- + +How combining Dapr with [Flomesh](https://flomesh.io) Service Mesh brings Dapr functionality to multi-cluster services. + +## Background + +The continuous evolution of technology and architecture is trending towards multiple runtimes. The basic capabilities of modern applications are consistently separated from the application as independent runtimes. Among them are distributed application runtimes and service meshes. This article introduces the integration of [Dapr](https://dapr.io/) and [Flomesh](https://flomesh.io) Service Mesh to achieve "true" cross-cluster interconnectivity for service invocation. + +### Multi-Cluster + +Kubernetes adheres to a design philosophy of loose coupling and scalability, which encourages the flourishing development of the Kubernetes ecosystem. However, since most of these are limited to a single cluster, more and more clusters are being created within enterprises for various reasons and purposes, such as: +- Single-cluster failures +- Regulatory requirements +- Cross-data center disaster recovery for multiple regions +- Hybrid clouds for agility and cost reduction +- Multi-cloud deployment +- Limited capacity of a single cluster +- Coexistence of multiple versions of Kubernetes clusters, etc. + + +### Dapr + +[Dapr](https://dapr.io) is a distributed application toolkit that decouples applications and peripheral functional components by providing simple and stable APIs. This enables developers to focus on business functionality development. By decoupling from peripheral components, applications become more portable and cloud-native. Enterprises can easily migrate applications to different environments at a low cost. + +Dapr provides rich features such as service invocation, resilience policies, state storage, publish/subscribe, binding, distributed locking, name resolution, etc. However, it does not support advanced service governance functions, such as canary release and cross-cluster service invocation. + +### Flomesh Service Mesh + +With the rise of microservices architecture, as the scale grows larger, the difficulty and fragmentation of service governance has significantly increased. The emergence of service meshes solves these problems. A service mesh is a dedicated infrastructure layer for handling communication between services. Through it, functionality such as observability, traffic management, and security can be added transparently without adding it to your code. + +[Flomesh](https://flomesh.io) service mesh uses the programmable proxy [Pipy](https://github.com/flomesh-io/pipy) as the core to provide east-west and north-south traffic management. Through L7-based traffic management capabilities, it breaks through the network isolation between computing environments, proposes a virtual flat network, and enables communication between applications in different computing environments. Flomesh service mesh can be imagined as a "big mesh" that covers multiple clusters. Flomesh service mesh is a suite of components including [osm-edge](https://flomesh.io/osm-edge) a lightweight Service Mesh Interface (SMI) compatible service mesh for, [FSM](https://github.com/flomesh-io/fsm) components like Ingress controller, Egress gateway, Loadbalancer, Kubernetes MCS API implementation, Kubernetes Gateway API implementation etc. + +{{< imgproc flomesh_dapr_blog_arch.png Resize "800x" />}} + +## Demo + +The diagram below demonstrates how Dapr and Flomesh service mesh can be integrated to enable cross-cluster service communication. The example consists of two components: a server-side NodeApp and a client-side curl. + +The server-side NodeApp is a Dapr application, modified from the NodeApp in the [Dapr hello-kubernetes](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) tutorial example. When it returns a response, it displays the name of the current cluster. + +The client-side curl is used to send requests to the NodeApp, but is not declared as a Dapr application. This demonstrates how Flomesh service mesh can enable communication between a Dapr application and a non-Dapr application, facilitating cross-cluster communication. + + +{{< imgproc flomesh_dapr_blog_demo_arch.png Resize "1200x" />}} + + +The NodeApp in the example has three endpoints: + +- `GET /ports`: returns the ports that the application can be accessed on +- `POST /neworder`: creates a new order +- `GET /order`: queries an order + +Follow along with the demo to: +1. Create multiple clusters. +1. Configure the environment. +1. Install and configure various components. +1. Deploy the application. + +### Before you begin + + +#### One-click installation script + +For this demo, we provide a quick, one-click installation script to avoid the tedious configuration of the environment and components. [Get the script content from GitHub](https://github.com/addozhang/flomesh-dapr-demo). + +Before using the one-click script, install `Docker` and `kubectl`. The script will check during runtime and install tools such as `k3d`, `helm`, `jq`, `pv`, etc. Commands include: + +| Command | Description | +| --------------- | ------------- | +| `flomesh.sh` | Provides no parameters, the script will create 4 clusters, complete the environment installation and configuration, and run the demo | +| `flomesh.sh -h` | Prints help information | +| `flomesh.sh -i` | Creates 4 clusters, completes environment installation and configuration | +| `flomesh.sh -d` | Runs the demo | +| `flomesh.sh -r` | Cleans up demo-related resources | +| `flomesh.sh -u` | Deletes all clusters | + +After downloading the script, execute the following command to install and configure the environment and run the demo. + +```shell +curl -sL https://raw.githubusercontent.com/addozhang/flomesh-dapr-demo/main/flomesh.sh | bash - +``` + +#### Prerequisites + +To perform the demonstration, you need the following tools: + +- Docker +- Kubectl +- K3d +- Helm +- kubectx + + +### Create multiple clusters + +Obtain the IP address of the local machine as the communication address between clusters. + +```shell +export HOST_IP=10.0.0.13 +``` + +To create four clusters named `control-plane`, `cluster-1`, `cluster-2`, and `cluster-3`, execute the following command: + +```shell +API_PORT=6444 #6444 6445 6446 6447 +PORT=80 #81 82 83 +for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 +do + k3d cluster create ${CLUSTER_NAME} \ + --image docker.io/rancher/k3s:v1.23.8-k3s2 \ + --api-port "${HOST_IP}:${API_PORT}" \ + --port "${PORT}:80@server:0" \ + --servers-memory 4g \ + --k3s-arg "--disable=traefik@server:0" \ + --network multi-clusters \ + --timeout 120s \ + --wait + ((API_PORT=API_PORT+1)) + ((PORT=PORT+1)) +done +``` + +The above command: +- Creates four `k3d` clusters +- Installs and configures the necessary components for the Flomesh service mesh on each cluster + +### Install Flomesh service mesh + +Install Flomesh with the following command: + +```shell +helm repo add fsm https://charts.flomesh.io +helm repo update +export FSM_NAMESPACE=flomesh +export FSM_VERSION=0.2.1-alpha.3 +for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + sleep 1 + helm install --namespace ${FSM_NAMESPACE} --create-namespace --version=${FSM_VERSION} --set fsm.logLevel=5 fsm fsm/fsm + sleep 1 + kubectl wait --for=condition=ready pod --all -n $FSM_NAMESPACE --timeout=120s +done +``` + +To join the clusters `cluster-1`, `cluster-2`, and `cluster-3` to the `control-plane` cluster, run the following command: + + +```shell +kubectx k3d-control-plane +sleep 1 +PORT=81 +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectl apply -f - < 443/TCP 43h +``` + +To allow the pods to access the apiserver directly without going through the sidecar: + +```shell +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl patch meshconfig osm-mesh-config -n $OSM_NAMESPACE -p '{"spec":{"traffic":{"outboundIPRangeExclusionList":["10.43.0.1/32"]}}}' --type=merge +done +``` + +### Install Dapr + +Invoke below command to install Dapr on `cluster-1`, `cluster-2`, and `cluster-3` : + +```shell +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + dapr init --kubernetes \ + --enable-mtls=false \ + --wait +done +``` + +Check the status of the components: + +```shell +dapr status -k + NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED + dapr-placement-server dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 + dapr-operator dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 + dapr-dashboard dapr-system True Running 1 0.11.0 2m 2023-02-09 10:36.51 + dapr-sentry dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 + dapr-sidecar-injector dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 +``` + +Check all services and their respective ports: + +```shell +kubectl get svc -n dapr-system +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +dapr-placement-server ClusterIP None 50005/TCP,8201/TCP 5h50m +dapr-sidecar-injector ClusterIP 10.43.12.213 443/TCP 5h50m +dapr-webhook ClusterIP 10.43.103.31 443/TCP 5h50m +dapr-dashboard ClusterIP 10.43.172.156 8080/TCP 5h50m +dapr-api ClusterIP 10.43.126.14 80/TCP 5h50m +dapr-sentry ClusterIP 10.43.41.10 80/TCP 5h50m +``` + +To allow traffic to flow through the Dapr components and Redis ports, add the necessary traffic rules to the OSM data plane. + +```shell +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl patch meshconfig osm-mesh-config -n $OSM_NAMESPACE -p '{"spec":{"traffic":{"outboundPortExclusionList":[50005,8201,6379]}}}' --type=merge +done +``` + +### Install Redis +Install Redis with the following YAML: + +```yaml +version: '3' +services: + redis: + image: redis:latest + container_name: redis + ports: + - 6379:6379 + volumes: + - ./data:/data + command: redis-server --appendonly yes --requirepass changeme +``` + +### Create namespace + +Create and add a namespace to be monitored by osm-edge Service Mesh + +```shell +export NAMESPACE=dapr-test +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl create namespace $NAMESPACE + osm namespace add $NAMESPACE +done +``` + +### Register Redis state store component + +Run the following command to register the Redis state store component: + +```shell +export NAMESPACE=dapr-test +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl create secret generic redis -n $NAMESPACE --from-literal=redis-password=changeme + kubectl apply -n $NAMESPACE -f - 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�H3X^Zc;1>0a@dBEzxVQz3dn%kql z+Q@)9PL_0&n$m5A3=s&qFzHEmUU%i(`vAfkNQBoHO3n)k zjxbgjwZ~9eRpdVW{t3W2Rk!M3XMJ{6h0|)ZB8*LwhR>RA%#F6{Ve`a!vU(E6QjrHu z>2b%8-gyI9CTmFjEsb=epWb0Nz)RBe_ zZdwRp#TTbo$ku5D9?P2vWdJGyE5N2qZd6}hUhmTtzE|t{M9Ove16y!_JegSB1l9x5 zkl{dzBYPY^9~ctyIpNmHd|@O&xpfO*PQYa=$DYS(bXeelC8Ln+&6_u+r8P?*8iW(mRRa-!G)*d4mO1`{3 z6?;9mx!^1&G5+3x`$J;;81^G&g)UGo4muAK0I$PLZV^Zif;&n3gQ?zMTEr$LlVzj1 z2!}x|?0hE`E8y5QytsJ0_znWF9%uk`q6q(!NGMEz8`$fJNk>T~0Ad1T)?S|S5P8rAU-&P|4{Jt=MqzU02Y-Y4eu4?n1| zUkBN>%UYuNm9Pu;fgUhn^?tLI+^&B~9zez4#g`C^|I!Fze9(xYeT5)-OP;NA1G^z7 ze@4pqT*UKLzj6>W!W57x3CG*pTW!}E6@5+o$-S|!aAM*?=GhFf&d$zlqGdRA5Aq6X zF67nQXn;@w%tSlR^r?z_@9N=ym>@o_R?~G$9K8p&;4eg-lzh%pCJw9e;;~!204ZKr zcQAgN5*=n9-4-_z2_0Di$x;|-MWYl}PJe&gLIl;ah=h20p|E;Xn-n?V-|`U8j|Xkr z9EqeDSfVG!!#_eckN>`MRiAuj0j!-I+%}I;1%&3qVUX+`gHS?o5eit3i?pK59`>2r&g%+)RBN3S+MWo8$l&s-Q?gua7Rg*DK@u((_DY_BL|QdAk8#sJ5)^vc*x7! zmLp{rl~0D8s#tot`GJeCNyB6?HzMqulOQTQAiTdVn6&_(Iv zgcJ!FYR~aCKDR`?=MIRZR8UYDR4p-|yYk-9z~D7DzU3K%y!`y;P?qFrBet{g(}syy zRUkFOq_C;S2qHtc3$n%tZxXWY6?MrPn4FZPq|oNDtzmaxre?BK?_|qs_@$ElTf~)2 z8r;O#Hu}|Q%*f+0+-AKnmc%pyDal`-sPn6Avy6XZ3$E%>1R{!$ABdyX;fcIn#2V!y zH~U%fAN(ilWRd)DhSF5hA+rsc{7Xt(J=9ai9Qca+`5UT~V+}?Ql3?v3?i3DfwMEEJw*L{KM zZ~OAWn`QM&T6$L3ot$3BlI4$->j{xD-dFukhh~~lwQ6S0a7>a_28c;bK?noj4I5df z??~~yX^_N4xl|e8i|Uu4uoh1H1x?o;`g)_h|`($da#IU z%F230l^V-kwpWHM%Vq46l9D!lbc(4dq)=x_%Oet`o}9;6GVR=ekOm^B^Qpy6m_%z7 z*WkK8i)$LB^QuadH#rrFx)PfUV5Gt+Nut|4H|+85J79qm<_cO{xb6{BQiV}V#0t%# z`+g7NFz&}odQhftW^*4{=)@~2e2!L~S?ov6;`E;DEn1i!x~Rq{p%3P?ljPT+;D!vFak#c3?ei+4acJv{?M%$ zP{B6#vN15AH?KvSVm4lSNkk9_T^7+4|)`? zrxu!jJTTZ+6uyky0uDR}=#BT$P3UxN8rN05(H2>Y)gCHqt{2+|mqQV)?j;Oo4sMv~ zQ6G;UG-rk#6&V~a!@pSy>X5f!PRiQzXUuT>VavWh>6lpl?{8tESRrqr=)b%P9_#jq zzYA*w8i@RL8aC-QQPRk-2miXla|#}tuI^y{(`;yy51Q>sB2q8yXGbvKAUy4no-yL; zem;nnfPp++qxkm(2NW{%L0eqA%=PQkI6PfV52N~0FZFNvFE|b%Z`CNbl&US5HIu_s>>A1wPXMU&B;=h~uh7f7$hP`8Edp Oxg{Yho^?a-$$tPkS-=Yb literal 0 HcmV?d00001 diff --git a/daprblog/content/posts/2023/dapr_flomesh/flomesh_dapr_blog_demo_arch.png b/daprblog/content/posts/2023/dapr_flomesh/flomesh_dapr_blog_demo_arch.png new file mode 100644 index 0000000000000000000000000000000000000000..f052cf18187c0a1dfb226e62f4e42d2123aec8e9 GIT binary patch literal 60140 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

5!uv+aM3fe<#MMxz~McI672QL0O_ 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 Date: Tue, 14 Mar 2023 19:30:37 -0400 Subject: [PATCH 2/5] remove underscore Signed-off-by: Hannah Hunter --- .../content/posts/2023/dapr_flomesh/index.md | 573 ++++++++++++++++++ 1 file changed, 573 insertions(+) create mode 100644 daprblog/content/posts/2023/dapr_flomesh/index.md diff --git a/daprblog/content/posts/2023/dapr_flomesh/index.md b/daprblog/content/posts/2023/dapr_flomesh/index.md new file mode 100644 index 00000000..5f5baa6f --- /dev/null +++ b/daprblog/content/posts/2023/dapr_flomesh/index.md @@ -0,0 +1,573 @@ +--- +date: "2023-02-26T07:00:00-07:00" +title: "Achieving Multi-cluster Dapr support with Flomesh Service Mesh" +linkTitle: "Achieving Multi-cluster Dapr support with Flomesh Service Mesh" +author: "Addo Zhang - Flomesh" +type: blog +--- + +How combining Dapr with [Flomesh](https://flomesh.io) Service Mesh brings Dapr functionality to multi-cluster services. + +## Background + +The continuous evolution of technology and architecture is trending towards multiple runtimes. The basic capabilities of modern applications are consistently separated from the application as independent runtimes. Among them are distributed application runtimes and service meshes. This article introduces the integration of [Dapr](https://dapr.io/) and [Flomesh](https://flomesh.io) Service Mesh to achieve "true" cross-cluster interconnectivity for service invocation. + +### Multi-Cluster + +Kubernetes adheres to a design philosophy of loose coupling and scalability, which encourages the flourishing development of the Kubernetes ecosystem. However, since most of these are limited to a single cluster, more and more clusters are being created within enterprises for various reasons and purposes, such as: +- Single-cluster failures +- Regulatory requirements +- Cross-data center disaster recovery for multiple regions +- Hybrid clouds for agility and cost reduction +- Multi-cloud deployment +- Limited capacity of a single cluster +- Coexistence of multiple versions of Kubernetes clusters, etc. + + +### Dapr + +[Dapr](https://dapr.io) is a distributed application toolkit that decouples applications and peripheral functional components by providing simple and stable APIs. This enables developers to focus on business functionality development. By decoupling from peripheral components, applications become more portable and cloud-native. Enterprises can easily migrate applications to different environments at a low cost. + +Dapr provides rich features such as service invocation, resilience policies, state storage, publish/subscribe, binding, distributed locking, name resolution, etc. However, it does not support advanced service governance functions, such as canary release and cross-cluster service invocation. + +### Flomesh Service Mesh + +With the rise of microservices architecture, as the scale grows larger, the difficulty and fragmentation of service governance has significantly increased. The emergence of service meshes solves these problems. A service mesh is a dedicated infrastructure layer for handling communication between services. Through it, functionality such as observability, traffic management, and security can be added transparently without adding it to your code. + +[Flomesh](https://flomesh.io) service mesh uses the programmable proxy [Pipy](https://github.com/flomesh-io/pipy) as the core to provide east-west and north-south traffic management. Through L7-based traffic management capabilities, it breaks through the network isolation between computing environments, proposes a virtual flat network, and enables communication between applications in different computing environments. Flomesh service mesh can be imagined as a "big mesh" that covers multiple clusters. Flomesh service mesh is a suite of components including [osm-edge](https://flomesh.io/osm-edge) a lightweight Service Mesh Interface (SMI) compatible service mesh for, [FSM](https://github.com/flomesh-io/fsm) components like Ingress controller, Egress gateway, Loadbalancer, Kubernetes MCS API implementation, Kubernetes Gateway API implementation etc. + +{{< imgproc flomesh_dapr_blog_arch.png Resize "800x" />}} + +## Demo + +The diagram below demonstrates how Dapr and Flomesh service mesh can be integrated to enable cross-cluster service communication. The example consists of two components: a server-side NodeApp and a client-side curl. + +The server-side NodeApp is a Dapr application, modified from the NodeApp in the [Dapr hello-kubernetes](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) tutorial example. When it returns a response, it displays the name of the current cluster. + +The client-side curl is used to send requests to the NodeApp, but is not declared as a Dapr application. This demonstrates how Flomesh service mesh can enable communication between a Dapr application and a non-Dapr application, facilitating cross-cluster communication. + + +{{< imgproc flomesh_dapr_blog_demo_arch.png Resize "1200x" />}} + + +The NodeApp in the example has three endpoints: + +- `GET /ports`: returns the ports that the application can be accessed on +- `POST /neworder`: creates a new order +- `GET /order`: queries an order + +Follow along with the demo to: +1. Create multiple clusters. +1. Configure the environment. +1. Install and configure various components. +1. Deploy the application. + +### Before you begin + + +#### One-click installation script + +For this demo, we provide a quick, one-click installation script to avoid the tedious configuration of the environment and components. [Get the script content from GitHub](https://github.com/addozhang/flomesh-dapr-demo). + +Before using the one-click script, install `Docker` and `kubectl`. The script will check during runtime and install tools such as `k3d`, `helm`, `jq`, `pv`, etc. Commands include: + +| Command | Description | +| --------------- | ------------- | +| `flomesh.sh` | Provides no parameters, the script will create 4 clusters, complete the environment installation and configuration, and run the demo | +| `flomesh.sh -h` | Prints help information | +| `flomesh.sh -i` | Creates 4 clusters, completes environment installation and configuration | +| `flomesh.sh -d` | Runs the demo | +| `flomesh.sh -r` | Cleans up demo-related resources | +| `flomesh.sh -u` | Deletes all clusters | + +After downloading the script, execute the following command to install and configure the environment and run the demo. + +```shell +curl -sL https://raw.githubusercontent.com/addozhang/flomesh-dapr-demo/main/flomesh.sh | bash - +``` + +#### Prerequisites + +To perform the demonstration, you need the following tools: + +- Docker +- Kubectl +- K3d +- Helm +- kubectx + + +### Create multiple clusters + +Obtain the IP address of the local machine as the communication address between clusters. + +```shell +export HOST_IP=10.0.0.13 +``` + +To create four clusters named `control-plane`, `cluster-1`, `cluster-2`, and `cluster-3`, execute the following command: + +```shell +API_PORT=6444 #6444 6445 6446 6447 +PORT=80 #81 82 83 +for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 +do + k3d cluster create ${CLUSTER_NAME} \ + --image docker.io/rancher/k3s:v1.23.8-k3s2 \ + --api-port "${HOST_IP}:${API_PORT}" \ + --port "${PORT}:80@server:0" \ + --servers-memory 4g \ + --k3s-arg "--disable=traefik@server:0" \ + --network multi-clusters \ + --timeout 120s \ + --wait + ((API_PORT=API_PORT+1)) + ((PORT=PORT+1)) +done +``` + +The above command: +- Creates four `k3d` clusters +- Installs and configures the necessary components for the Flomesh service mesh on each cluster + +### Install Flomesh service mesh + +Install Flomesh with the following command: + +```shell +helm repo add fsm https://charts.flomesh.io +helm repo update +export FSM_NAMESPACE=flomesh +export FSM_VERSION=0.2.1-alpha.3 +for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + sleep 1 + helm install --namespace ${FSM_NAMESPACE} --create-namespace --version=${FSM_VERSION} --set fsm.logLevel=5 fsm fsm/fsm + sleep 1 + kubectl wait --for=condition=ready pod --all -n $FSM_NAMESPACE --timeout=120s +done +``` + +To join the clusters `cluster-1`, `cluster-2`, and `cluster-3` to the `control-plane` cluster, run the following command: + + +```shell +kubectx k3d-control-plane +sleep 1 +PORT=81 +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectl apply -f - < 443/TCP 43h +``` + +To allow the pods to access the apiserver directly without going through the sidecar: + +```shell +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl patch meshconfig osm-mesh-config -n $OSM_NAMESPACE -p '{"spec":{"traffic":{"outboundIPRangeExclusionList":["10.43.0.1/32"]}}}' --type=merge +done +``` + +### Install Dapr + +Invoke below command to install Dapr on `cluster-1`, `cluster-2`, and `cluster-3` : + +```shell +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + dapr init --kubernetes \ + --enable-mtls=false \ + --wait +done +``` + +Check the status of the components: + +```shell +dapr status -k + NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED + dapr-placement-server dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 + dapr-operator dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 + dapr-dashboard dapr-system True Running 1 0.11.0 2m 2023-02-09 10:36.51 + dapr-sentry dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 + dapr-sidecar-injector dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 +``` + +Check all services and their respective ports: + +```shell +kubectl get svc -n dapr-system +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +dapr-placement-server ClusterIP None 50005/TCP,8201/TCP 5h50m +dapr-sidecar-injector ClusterIP 10.43.12.213 443/TCP 5h50m +dapr-webhook ClusterIP 10.43.103.31 443/TCP 5h50m +dapr-dashboard ClusterIP 10.43.172.156 8080/TCP 5h50m +dapr-api ClusterIP 10.43.126.14 80/TCP 5h50m +dapr-sentry ClusterIP 10.43.41.10 80/TCP 5h50m +``` + +To allow traffic to flow through the Dapr components and Redis ports, add the necessary traffic rules to the OSM data plane. + +```shell +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl patch meshconfig osm-mesh-config -n $OSM_NAMESPACE -p '{"spec":{"traffic":{"outboundPortExclusionList":[50005,8201,6379]}}}' --type=merge +done +``` + +### Install Redis +Install Redis with the following YAML: + +```yaml +version: '3' +services: + redis: + image: redis:latest + container_name: redis + ports: + - 6379:6379 + volumes: + - ./data:/data + command: redis-server --appendonly yes --requirepass changeme +``` + +### Create namespace + +Create and add a namespace to be monitored by osm-edge Service Mesh + +```shell +export NAMESPACE=dapr-test +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl create namespace $NAMESPACE + osm namespace add $NAMESPACE +done +``` + +### Register Redis state store component + +Run the following command to register the Redis state store component: + +```shell +export NAMESPACE=dapr-test +for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 +do + kubectx k3d-${CLUSTER_NAME} + kubectl create secret generic redis -n $NAMESPACE --from-literal=redis-password=changeme + kubectl apply -n $NAMESPACE -f - < Date: Tue, 14 Mar 2023 16:40:58 -0700 Subject: [PATCH 3/5] Remove unused file1 Signed-off-by: Nick Greenfield --- .../content/posts/2023/dapr_flomesh/_index.md | 573 ------------------ 1 file changed, 573 deletions(-) delete mode 100644 daprblog/content/posts/2023/dapr_flomesh/_index.md diff --git a/daprblog/content/posts/2023/dapr_flomesh/_index.md b/daprblog/content/posts/2023/dapr_flomesh/_index.md deleted file mode 100644 index 5f5baa6f..00000000 --- a/daprblog/content/posts/2023/dapr_flomesh/_index.md +++ /dev/null @@ -1,573 +0,0 @@ ---- -date: "2023-02-26T07:00:00-07:00" -title: "Achieving Multi-cluster Dapr support with Flomesh Service Mesh" -linkTitle: "Achieving Multi-cluster Dapr support with Flomesh Service Mesh" -author: "Addo Zhang - Flomesh" -type: blog ---- - -How combining Dapr with [Flomesh](https://flomesh.io) Service Mesh brings Dapr functionality to multi-cluster services. - -## Background - -The continuous evolution of technology and architecture is trending towards multiple runtimes. The basic capabilities of modern applications are consistently separated from the application as independent runtimes. Among them are distributed application runtimes and service meshes. This article introduces the integration of [Dapr](https://dapr.io/) and [Flomesh](https://flomesh.io) Service Mesh to achieve "true" cross-cluster interconnectivity for service invocation. - -### Multi-Cluster - -Kubernetes adheres to a design philosophy of loose coupling and scalability, which encourages the flourishing development of the Kubernetes ecosystem. However, since most of these are limited to a single cluster, more and more clusters are being created within enterprises for various reasons and purposes, such as: -- Single-cluster failures -- Regulatory requirements -- Cross-data center disaster recovery for multiple regions -- Hybrid clouds for agility and cost reduction -- Multi-cloud deployment -- Limited capacity of a single cluster -- Coexistence of multiple versions of Kubernetes clusters, etc. - - -### Dapr - -[Dapr](https://dapr.io) is a distributed application toolkit that decouples applications and peripheral functional components by providing simple and stable APIs. This enables developers to focus on business functionality development. By decoupling from peripheral components, applications become more portable and cloud-native. Enterprises can easily migrate applications to different environments at a low cost. - -Dapr provides rich features such as service invocation, resilience policies, state storage, publish/subscribe, binding, distributed locking, name resolution, etc. However, it does not support advanced service governance functions, such as canary release and cross-cluster service invocation. - -### Flomesh Service Mesh - -With the rise of microservices architecture, as the scale grows larger, the difficulty and fragmentation of service governance has significantly increased. The emergence of service meshes solves these problems. A service mesh is a dedicated infrastructure layer for handling communication between services. Through it, functionality such as observability, traffic management, and security can be added transparently without adding it to your code. - -[Flomesh](https://flomesh.io) service mesh uses the programmable proxy [Pipy](https://github.com/flomesh-io/pipy) as the core to provide east-west and north-south traffic management. Through L7-based traffic management capabilities, it breaks through the network isolation between computing environments, proposes a virtual flat network, and enables communication between applications in different computing environments. Flomesh service mesh can be imagined as a "big mesh" that covers multiple clusters. Flomesh service mesh is a suite of components including [osm-edge](https://flomesh.io/osm-edge) a lightweight Service Mesh Interface (SMI) compatible service mesh for, [FSM](https://github.com/flomesh-io/fsm) components like Ingress controller, Egress gateway, Loadbalancer, Kubernetes MCS API implementation, Kubernetes Gateway API implementation etc. - -{{< imgproc flomesh_dapr_blog_arch.png Resize "800x" />}} - -## Demo - -The diagram below demonstrates how Dapr and Flomesh service mesh can be integrated to enable cross-cluster service communication. The example consists of two components: a server-side NodeApp and a client-side curl. - -The server-side NodeApp is a Dapr application, modified from the NodeApp in the [Dapr hello-kubernetes](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) tutorial example. When it returns a response, it displays the name of the current cluster. - -The client-side curl is used to send requests to the NodeApp, but is not declared as a Dapr application. This demonstrates how Flomesh service mesh can enable communication between a Dapr application and a non-Dapr application, facilitating cross-cluster communication. - - -{{< imgproc flomesh_dapr_blog_demo_arch.png Resize "1200x" />}} - - -The NodeApp in the example has three endpoints: - -- `GET /ports`: returns the ports that the application can be accessed on -- `POST /neworder`: creates a new order -- `GET /order`: queries an order - -Follow along with the demo to: -1. Create multiple clusters. -1. Configure the environment. -1. Install and configure various components. -1. Deploy the application. - -### Before you begin - - -#### One-click installation script - -For this demo, we provide a quick, one-click installation script to avoid the tedious configuration of the environment and components. [Get the script content from GitHub](https://github.com/addozhang/flomesh-dapr-demo). - -Before using the one-click script, install `Docker` and `kubectl`. The script will check during runtime and install tools such as `k3d`, `helm`, `jq`, `pv`, etc. Commands include: - -| Command | Description | -| --------------- | ------------- | -| `flomesh.sh` | Provides no parameters, the script will create 4 clusters, complete the environment installation and configuration, and run the demo | -| `flomesh.sh -h` | Prints help information | -| `flomesh.sh -i` | Creates 4 clusters, completes environment installation and configuration | -| `flomesh.sh -d` | Runs the demo | -| `flomesh.sh -r` | Cleans up demo-related resources | -| `flomesh.sh -u` | Deletes all clusters | - -After downloading the script, execute the following command to install and configure the environment and run the demo. - -```shell -curl -sL https://raw.githubusercontent.com/addozhang/flomesh-dapr-demo/main/flomesh.sh | bash - -``` - -#### Prerequisites - -To perform the demonstration, you need the following tools: - -- Docker -- Kubectl -- K3d -- Helm -- kubectx - - -### Create multiple clusters - -Obtain the IP address of the local machine as the communication address between clusters. - -```shell -export HOST_IP=10.0.0.13 -``` - -To create four clusters named `control-plane`, `cluster-1`, `cluster-2`, and `cluster-3`, execute the following command: - -```shell -API_PORT=6444 #6444 6445 6446 6447 -PORT=80 #81 82 83 -for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 -do - k3d cluster create ${CLUSTER_NAME} \ - --image docker.io/rancher/k3s:v1.23.8-k3s2 \ - --api-port "${HOST_IP}:${API_PORT}" \ - --port "${PORT}:80@server:0" \ - --servers-memory 4g \ - --k3s-arg "--disable=traefik@server:0" \ - --network multi-clusters \ - --timeout 120s \ - --wait - ((API_PORT=API_PORT+1)) - ((PORT=PORT+1)) -done -``` - -The above command: -- Creates four `k3d` clusters -- Installs and configures the necessary components for the Flomesh service mesh on each cluster - -### Install Flomesh service mesh - -Install Flomesh with the following command: - -```shell -helm repo add fsm https://charts.flomesh.io -helm repo update -export FSM_NAMESPACE=flomesh -export FSM_VERSION=0.2.1-alpha.3 -for CLUSTER_NAME in control-plane cluster-1 cluster-2 cluster-3 -do - kubectx k3d-${CLUSTER_NAME} - sleep 1 - helm install --namespace ${FSM_NAMESPACE} --create-namespace --version=${FSM_VERSION} --set fsm.logLevel=5 fsm fsm/fsm - sleep 1 - kubectl wait --for=condition=ready pod --all -n $FSM_NAMESPACE --timeout=120s -done -``` - -To join the clusters `cluster-1`, `cluster-2`, and `cluster-3` to the `control-plane` cluster, run the following command: - - -```shell -kubectx k3d-control-plane -sleep 1 -PORT=81 -for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 -do - kubectl apply -f - < 443/TCP 43h -``` - -To allow the pods to access the apiserver directly without going through the sidecar: - -```shell -for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 -do - kubectx k3d-${CLUSTER_NAME} - kubectl patch meshconfig osm-mesh-config -n $OSM_NAMESPACE -p '{"spec":{"traffic":{"outboundIPRangeExclusionList":["10.43.0.1/32"]}}}' --type=merge -done -``` - -### Install Dapr - -Invoke below command to install Dapr on `cluster-1`, `cluster-2`, and `cluster-3` : - -```shell -for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 -do - kubectx k3d-${CLUSTER_NAME} - dapr init --kubernetes \ - --enable-mtls=false \ - --wait -done -``` - -Check the status of the components: - -```shell -dapr status -k - NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED - dapr-placement-server dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 - dapr-operator dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 - dapr-dashboard dapr-system True Running 1 0.11.0 2m 2023-02-09 10:36.51 - dapr-sentry dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 - dapr-sidecar-injector dapr-system True Running 1 1.9.6 2m 2023-02-09 10:36.51 -``` - -Check all services and their respective ports: - -```shell -kubectl get svc -n dapr-system -NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE -dapr-placement-server ClusterIP None 50005/TCP,8201/TCP 5h50m -dapr-sidecar-injector ClusterIP 10.43.12.213 443/TCP 5h50m -dapr-webhook ClusterIP 10.43.103.31 443/TCP 5h50m -dapr-dashboard ClusterIP 10.43.172.156 8080/TCP 5h50m -dapr-api ClusterIP 10.43.126.14 80/TCP 5h50m -dapr-sentry ClusterIP 10.43.41.10 80/TCP 5h50m -``` - -To allow traffic to flow through the Dapr components and Redis ports, add the necessary traffic rules to the OSM data plane. - -```shell -for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 -do - kubectx k3d-${CLUSTER_NAME} - kubectl patch meshconfig osm-mesh-config -n $OSM_NAMESPACE -p '{"spec":{"traffic":{"outboundPortExclusionList":[50005,8201,6379]}}}' --type=merge -done -``` - -### Install Redis -Install Redis with the following YAML: - -```yaml -version: '3' -services: - redis: - image: redis:latest - container_name: redis - ports: - - 6379:6379 - volumes: - - ./data:/data - command: redis-server --appendonly yes --requirepass changeme -``` - -### Create namespace - -Create and add a namespace to be monitored by osm-edge Service Mesh - -```shell -export NAMESPACE=dapr-test -for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 -do - kubectx k3d-${CLUSTER_NAME} - kubectl create namespace $NAMESPACE - osm namespace add $NAMESPACE -done -``` - -### Register Redis state store component - -Run the following command to register the Redis state store component: - -```shell -export NAMESPACE=dapr-test -for CLUSTER_NAME in cluster-1 cluster-2 cluster-3 -do - kubectx k3d-${CLUSTER_NAME} - kubectl create secret generic redis -n $NAMESPACE --from-literal=redis-password=changeme - kubectl apply -n $NAMESPACE -f - < Date: Thu, 16 Mar 2023 11:36:19 -0400 Subject: [PATCH 4/5] update link Signed-off-by: Hannah Hunter --- daprblog/content/posts/2023/dapr_flomesh/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprblog/content/posts/2023/dapr_flomesh/index.md b/daprblog/content/posts/2023/dapr_flomesh/index.md index 5f5baa6f..b2cdccf7 100644 --- a/daprblog/content/posts/2023/dapr_flomesh/index.md +++ b/daprblog/content/posts/2023/dapr_flomesh/index.md @@ -42,7 +42,7 @@ With the rise of microservices architecture, as the scale grows larger, the diff The diagram below demonstrates how Dapr and Flomesh service mesh can be integrated to enable cross-cluster service communication. The example consists of two components: a server-side NodeApp and a client-side curl. -The server-side NodeApp is a Dapr application, modified from the NodeApp in the [Dapr hello-kubernetes](https://github.com/dapr/quickstarts/tree/master/tutorials/hello-kubernetes) tutorial example. When it returns a response, it displays the name of the current cluster. +The server-side NodeApp is a Dapr application, [modified from the NodeApp in the Dapr hello-kubernetes](https://github.com/addozhang/flomesh-dapr-demo/tree/main/nodeapp) tutorial example. When it returns a response, it displays the name of the current cluster. The client-side curl is used to send requests to the NodeApp, but is not declared as a Dapr application. This demonstrates how Flomesh service mesh can enable communication between a Dapr application and a non-Dapr application, facilitating cross-cluster communication. From 2e206587a8b492a40966aa49e15414aa1eac775b Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 20 Mar 2023 10:47:44 -0400 Subject: [PATCH 5/5] update image Signed-off-by: Hannah Hunter --- .../flomesh_dapr_blog_demo_arch.png | Bin 60140 -> 41622 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/daprblog/content/posts/2023/dapr_flomesh/flomesh_dapr_blog_demo_arch.png b/daprblog/content/posts/2023/dapr_flomesh/flomesh_dapr_blog_demo_arch.png index f052cf18187c0a1dfb226e62f4e42d2123aec8e9..a40b03638b5ebcde0689455dd098a1ceb5b79ab7 100644 GIT binary patch literal 41622 zcmeFZby$^OvoK7T5|Sd_($XCwDJe(`8>PEDHXs5@cbBwuZn_Lgy1N?$N$Kz2DE@e! z^PKOm_x=9(&f&WD-Z$%BF>BV$teIIe>%EeK6gt`?G#D5dbQx)JWf&L)bQlbU!4tHA{0X-f5_8A^J3QWl~ z?L6>zyA8Oh52&$NIEvO?dm zvavj2{ZGvdT}=O*X3#gko88Ro_i%#H&iJ2MTiVze+S>zQ33CbF4Dc^y|A6-Er=``O{L66-sJ%NbfgY z-;@G`EsQ3}`j<(B(Y(rCvSDCEVPwRgzI1`zoa5tHDRyj!@4FbjXT5f+1JG8RJ{+Z~8du;}(k{{?O(*hN332cZw{6ngXeoZOuT ziXR#lo! z7aRY7M3LJk@0_FINEIspIrE1A4sv-G(V&R(alz@oczznwIsB^FTY3MhKNQ3L3N2Yb z$D*CciEpUlOO-dil2&@FzE0Ip#a<9nzzCg7za?h-O0CykSxWZgo3BHYYlc{RIcx3#JSWbfV+ z6XJuZ#?@H$@n`>w5(ETn3IvYq6OO@abK${gPS*IIoColQ>hki590L(CMrE2uNCB(& zw5&G14epsh>8uOD-wUKQ+Z%!!!0P90o-(G-M{B4rf8FZ#9_s?XB9cYIGA$*RsR$)! zQqok%1RXzmE>{MU*&tlan8RO^ln@W^IRglx4vPlhGuKg(CMC&?e2*3<>FQVP;iZ&EU!%6li-JKM`HF9RR>?8EADbHo3OWU@Wo77^nA*G*`jmJ#Vtdid$z%4G3Tndd0kX7nu5M5N`zZDgqqrLFikn4Jrc& zq>_%)4UQE&Txt=t6~UT)b-Zxj)cA4!e)E~kXWuIMkr1B-;j@={gE>kL!_6+4TTAlA z+AMNco7-9UzVWS?k0_idUTZa)Hn*Eu5<-~X*Li5Q3Xer+$n4N*hVY@W`vHQ?Pr|!7 z(C=M@_{}y^r!E>R(2s^u18?b1*j*fKG^@UPZKAJI{+a1Kpxbi_O^7tjPDB1Zcg1}L zo5}B;3a7<_x>Z(?`buR<^2dZd4PFp;P=eywqbeE2G;~wh2rpP7DCOfIm?*BJR>=_p zJD86PK|g2QSY=U%x%u@P>uLNPByOed04J&8Q`WS|>%1ibXU$p7nZut*>TczHtr=3V zz-* zhl<6Ah=(E`@zI|PvA@%9mA%k-EqCoF^Wg4M^S;7+oWBQ=Gn`Cz-cX@dNeLw~AWGR9 zS6+9ueSPW3fs+&BFwMbZIH*)#IFuY~f@YFqFEw#sZ@CuYM9nAPU0pY;GvhL}oz+Q2 ztdBI|)P*3$F0{#p`kp^@6ycccXIfNN?)Dh6SOrwj4q%0+@$7TtzR1ztGeD7hI$U3gImX?&{?0QywRNI;!1Z{bmOH4bb5}qY<1~Bw7@?YY zPmXvwoK)s&bOb*X)J6&w8@4_<-utdqy4-jhN*SK;mS4KR!v9tl0s~uODXrUm;L8*3 zbaQ&PhMb5GpMUl~q<3?*-TAO%)%n!&?Xl+5p*o!(iAa}CIspwO9?H(8uil^y&3>MB zQzz%?-rU}6=S0P;#;vm!TV2JmCrTjgBJxRtSTYupc;t;< zv#tOuAGPXonm+eaJ+ZJhc3r8QTPstl`#De8x-|)3ixq@{FsK1Ce15=VmIf~I>V_@h zysyE;0Gh-?(lAUhiYqLhSMNlnE#Ty-WQ~7ST|drvk8AupNoM46oE?^Rr}Sw zg6BsU6lorK;LH5haj;N*L=96;^%D9h!OPaO%l6GzG>mlSv>?&6ne~gZUPhen`Ui!z zo=o}g@lR(qD-+KQHQZ>DEY(cw)t8W`0#-FJ)z6$s4@bF7^WWzn#YMV?FVht9QHGOD z7-)!TI;Phs6U{nsStBK zaS7q{C95neW^Y+GO;W&7)v}>hmf?JLP^2t_Cl~tU+05Xhd6GnZLbjIU;h9DzqnL;{ z!mk$QJX)w`qTI6Mk&UJd*o+d;>Aw=Xtbd9Y%5KUW@zMF3+L(RieJI1;Ded3#X-EFE zJ@&FG=_0~XgKP&q+)uiBjJ#;+*blrEk#$)iP#p&g5jM(IHiKvUq8LK)m>HbD6v`)K zWN3F@8Tm={`A0QXvhdT;L#2!tQLR0YSMi(;%|*^1G!sb-BK!s!=G+UCj$>VhqL>m) zSEpE>^Bc#{yygjes7DfRXgewQHKtdDxp2lw$$B}?2{FNYgiJcR6*Cou=S&JVObXDA zY!N9haRPZ;Yj)A?LT@xKN~IUh9{UvXQ7q3UQ?bFO+3K|1F+ZdrJu;+;MJM!Hjn6mrlFydygP z?-lKQv>4T%hwt)1*4>U3hdD^7FlrX|th38@wea1LB*Sb(Ori|??uz;Y%BF3!dZzbn z;`n0DyL+Gwj}ABNw-f9mVJJLT2<^jG{#1h{EzI4gP5oSdQ2WKiZ~674#`}VM%6|N0 z=#&ezZ96q}y%;@bzt0C22X(6()AjJRM?~sHz}`oEmkOUPtVu_~+!-y>FPs;q%8$$C z3O6`oay6JUe<)=sW5Au2aapK1J?j3lID57vOmB6}SUc_4)Lc{c{6~5mkyq85$@D4$ z+I4l4ligM=HtJn8Dg zB;&ZgGj?H3Bo6HeyZ+{yKnVxSd5Ec*AN!aQm9z zHof+@>U7r^A&GV0ylXG_pRr3s1oKFjCRF3Qs#%|O_~q7Ws%gr|REN+&u7r_vK56>m43zt>z!G^}C*@ z*Ir~P0sFWJ;($d9fxY3g3l!c$vr!FW&6w-4-LdXB$VCypl|)&*@@rwXMn~lhSEiS3 zN5#?NDrUZbxS@72aX>apdZ`T*ZO2rtrL!PYzv} zc@QVIUD5F2C+gj+r5ap+V$q?d?y|F@R=#w zuS-U7#OLP5{lPg9*m9=}uh-A7PECV*4gXQ$M1_cDvVYANfWsK%730}(kqT-(W%~Z zpsT8pgZ(|uWLGJfDPZhK--`n59zf{4L^O~)XxNaEz-t0CSq?Mxz=yA#Ci=mS7UT$+ z6B%$BDq3ca&X0z^l=&lw6{HnRV!U`h5dnM{dti#Q>P*4%6tP(9} zlU0(`g6|CH?zD4pR>Y&@_O*fRYMX%FthVlxvTzNAIr~BaWNpM>O+wG-k(Z|w%3Y|< zco}3>w^SU^d>QYN$SR`6Es7+JN#eBoEbQV}eb|iS_1m}p_j`Ib7}bUCPDlhG)}Dty z$qsksuEUyLuc}KtOplI*1{q~YFMCR6gveQ~XPb50d!tR;Q~Q6+P5Z#lX&t^#=2uo8 z{DFvp6<7**R{VTqNN@DvO*q2*oFrqqI923W3n#>OPT3{z?{1Z@&0tXensf*#*1&42 zLVAveK1^h<)l6OfndlqTsKK?Vzm`3wM{>oO(4)^Iw#O^n^-SfGRQsLTljiU#A7i5G<(_d%#PP} zvUUmi2vp|K88hagiLvXsP9)-bMrdyn7))G2fyDup&nkEZ2sdEM!R?oUl|oe|aihn6 zLGaxS@epNdYNoFj+a^OlV``<*ALLsJ&d;hYnp!BcBR#ESM(?Vg6=9Va)ptUSF8m~^ zEmokKyc3O2*1Iv+T=CSG{FO~-Hs9r$r{RyUQ91Hyysn#w_N%W1PxkdKHQFOSU~I>| z-9bd`yV`y~TJbdi1L?#bc@^<30;+t#p@L~+i$&S?V|vJh!H5VqLY~-BGm)6J~GS9UD|RTtHj9 zUs21sLMv^;i06Es7@5J8oA^puxNvN2%#jH)Vy07VIz<SX+$euBf!PI`Lb;qmeKaW4%q^Nd0F6PD@blB3cc1-s{6am9_gP0Pzi>b;(8yVlal zdKFVE{VR5eCDGi-6A1#lpOSVP1YA}P=2+wHH#&6}1>pt=053@spQ1R_OAr|8E$7b9 zIG5n&{Ed$2(I*46Ob(YqKLn?sMD{^8dpX~UoXyKKWi*SQ%;fN>URR%Yuh*zBXHPnK zRFst&85wEi5~r&>GWXjXuGR?B+|N2?OB&49s*Bj`Bg8T6d^jHz>eLE4&!=Z)E$aZx zG*Pp#DzF=I;8||Jd`?u-7#Wd3|k0?ZLHkk!nX`4LyXO^e6ram00{V(glyv#n{s^)v$qVH^s{43w6=w0wd zc^!dSg-?c~;;vRyJ2O1W=j=*3<45K@e9W!u43G8=Mb2AKsFUN}W`pOs_C2p>g-+(2 z>{V2vw&`eTI!%lcHl&Z;jSZ%4=Pua;He^{ZthW8$la=URUj(ssJ_6S6gvC|0+Rx8V zqF@xAjE}*^#eeQ?0^jGL+WS7m_tp>i9E9+cfBQIF0^tU8^JZw9apY;6X+1+YOLF27 zt4I_Y$U0hJH1R0-_-HB=({Q{f<4l7LMu$T`rDL-GQ6q70Y~lgGQ8OUGMPuL&;Y@fLBD7+*ck?C??wOj;mD91$GhP zvpNOh9ak;+HbBX*>1dup)g|aiz}J0N(PX_}3|TP0yS;HD`rX}w0fP~E<-Gv7kne-u z;oi1`DqN-a08ej9G{PNs@RJ4@Ti=C(aJV}@YAh$Hk1#5d9NN)MZ!mEF02x2=z*B~~ z14I@*)5B{36chn^)H~kz|3%*aBJV#_Ug2xSh+BFm&p~La zFB8t$e`bUg7}^qr6P0<8?&67NE7mZ|v?6xHDf2ZjWbvWerDGfjC}H)weTM>@brke} z*#NMotN{xDsg@aiV^96&EvK-BX9OypAVqU-HHv@1FWa6+AxG};|b z_>u%reZ$D(m8bu3YWfy1h7J!k;y;XluqY4c*|TQR`*&dJcLc^LCW?f+!>B)L0j9L( zdhU7$mUZB$N^A^W2KFD$0?sA?DGzy+EqDhO2SAQwZ24#1W!?r}W@WXutG%>Ud6oM) zG9lrK*Q-?;g4IGw%?gq7r9P?3sw%WoVEzyLxoTGsA0TudHI1l{9e#t33%>&sYl zJ3X^m@TrZv->@_~pvIU2sw?{V9;YrO75T5EO~DQ)UociInkg^(sNzic^UZr-e6Lp; z9yM1#+jFoP9MsXVKRU(<_DS3>2R|J-GpZ1Uw24GS+w%x*%!&8q05+prU5Rh8Zo>`7 zPW!ZuD5WPwvPtR#6C#ft>iuNrMFe-Bc7&w>n=tb@xs#Bth*W#es)TaU&#DBD{T7|T9wM3}Ds(CF(?ueT*#)9bYbyp( zhb8>GHz=@TDQ;0GH&t2|ua_ZO>-P)Q1DeoMugV>PA7}^+s!>d`e{&l3yKB)C;N;LD zOhEDPq(8Fiu_YCb#+FEn2$g^ai$J7CkONbW!NG{gZ;EP=ut25D>4NmK{pev6sNQwB&Uc^0{S#G$u&JaLK*xh^Sz)(q@x@QH zgtHz2waPJ7Q9U-k$IQm6EBa@`5Ul|h=c$_K3;YbGM9OHEPDxf2|3eWkPHcsvtz0b8__FyACj;3L{TbVeBTb@>D`ZTA5H zmcv+I8R(3*;GG=Qzj`y32m%-57Yi{2YoWxEs}35GQ5In$f@O+16^fF+oB|dTny28B z-SNsI_Eyu=9dMd;MS^@6wNTt9QA1i0i|da*ZJ|`}FAp#6vFAL%*Kw;D(J2B~mlXx9 zJ?EPZ6qojq7e3xIql2yV`z!OP4<6_l$cSsmK)sqbi}%E@rKycSs*|%6Ts}s?>yh<( zB9W@3v1)Bb;@#e*GXdK)cXisX7JvwWK*~f+S6|l zgei8Dr8arl*B-t(3p@XI(k=6U^Hui&m{MQ1ao#eP!p> zyj|$0n~xFjY?q4~9#1UQA+Iu{d~&8fj><*XjjSrv=SNfmIo&;{{$Q*(M#Im}NC>M| zJ9utcq~Fo!XQrEZqT0(>BKmgKfLlSfs`>oIfC{UH@Yi-vAs60Oa$`ft1{qVBT3uZ# zqjDf3>?F>c4EzrGzg?ii*&7`b@o`@2$uxHFqzRXWEzf83ICU20mviVxdX3vgv7v65 zhBit#l7RTNGNe%0)iU&?RNK}0^m(C5nkpgT-;?=X-T4NYiH&@W4a4X$R!vEAX)$b~ zjuT7wPX?18wVT;3hD#4;H$v%g%9odW#_mVCzBH8b=bH1{u_4SCG&89qX3;5X$EKLd z*})@7o7;5{ORm_fc*g$2^;`6I_&r|ESU^21+YFlitL*4tKV+kpZ^|lpp&DX5v$~Hd zEc8p}!0mfl37_3Y;eO{5djR@#Mi$HQnxZ$-R$b_zN7%tQ{upv3{XF!%uNHO?k!L}# zhS_j-JzsG;ij98H=Nr@E(|GiFbE}bFraCmv_S<7%^O4M_-+zD0p$;;7Tg99Aiow?g zG97IwVOIt*g%iXmCR~nZ)Y9dhc4)0Bh_V=6c4)%Qv}sq`aeD5*kQseTkea*s&F9?B zbj-@-V@;xlC!4-BJpeYqU=8zS!duD@4D{w?uat)rPSbdXF9*xnX}wsnIv?yjHs5-W zrC_9Adhp%ZpcIX&{+4I~pv0egANxHfKR~(Nl3McM*a!8l+|R3bjL@h6r-tTQ67NFc zM$Lo2!=!o-y^aXm9&n#6qvPT}^*ZmW)|Z;uE5U6bO6{VG`8fAr7w&I&FmMSy1tdh| znG3yd06|+rA&^39E0)_?^N;LlYWZcGFaS1T5-e-SZ@tmL9k&=Gw{i24W%TBpn-RPRLKP;Bsj;2wx+D?|_Hj(UO zI|nO+_V{Zwuv@uXI6AwxCJ*4lrc=5q~-Bc6Vxq^mnS%p8@S zYU(85nj+`JP(jq$Vn`Sz>YS;t`0m;VH zhmQ)X2OvdDRCHR+e?As<7ZV(1F#N4q0sCMZ-4k${EOt`#>wBQcECU#TGw&ZnoC!{$)NoqA8p)gY`_%2q3--U zwV#ilfWfjZ{dG8D*;#UQSmX-4uxPpes6yiN(otZU_jJ+}0(K~}eGdTrgwIi4=C7pc zMQx~^BjI%l*zQ;;qq+(K1DoZq68+~l-c9IMk(|uRixeVddt;m5xS4C6vT-A z-A8or!ntsq#;UhWr~{a?`c>7IrWKR*lItjQZu;ou@rpf%TY;G3@F}((*AVw=cUj!kG1vv)nRclybCpm?zhVg14n|W5muWiqsaR#xgW!TS^SAF;Q_i5v%$aruS0%$lmUSHIF2P8@lNjUcTO8HAG z`SH__OZ}Ago)HscSR42IJtZ(L9?%(vO$ch2OdcoaSBspwdPe)>LL4^{JToX?Cgd^62OBiHKOgb!5~T z4G;Q4+*%@z{?BCc$^D<_U~tK9X6iG9(h-laVdan*wD`l2z8qID=R%HzqwLQBHU!p#CT~YE5 z857VDBGUdM8sOcJ2tE3Lw75L)?^Xu=$h zjYA|9bbNv;uodzNJI|XSGjjNbo8JfP>@NAj@?qmD<(H_>b5`3saWuJ3sl_CPXA*cq zBD!T}|L_;NBm!vz^YvMQf2C1QStsONv}YGI(`4!FXcxJ|+6SsM*~qwd%}76jbKG?EYq|c@~=WJx%S6;govviRp(eg;tMgnE7HqO}ffapGb zkk746jYFpqb@$Eq6!iT!<6vR|_ zIi`_x@Gsom*gY4PH|jcS;hQl zX?xR0=FAnM0GZ|;KaF|X%Va!u6|AkDSE#_X&t0|e-sN~mZL*I7yJKRejIEw*6V)r7 zC~_F%qy88ab+*p!*v(CIz6Bz31W5gwd#nQDjgQqVE7{WfBn^*S?7cX!+m&6ijNOLl#pIcEB2bsLYR zxSOY5U9N6wos^{Uf=B$z=NcNAbkkOl7&QFmX4_TApX}pP+JGQBo+_nO+Rif`BYu-p@_lQzdV;wv8tS= zU`vf5=sr7JekDbhPSNqzGv>>jeV+UXNP(%y%MhuTXDBP*l^l_W6UholSRwAj$ZS+L zk>PAc`%;p(Vjm4o0^KL~-lN<`^$F(72)FDF__!G>@Qr=N1p!48V|2>O$d(E0#D>KY z#Km%j5RII>hshNdope3)XJjGP<2xoi>k6{3V8;$stNWOa`%dZ?S5@A){Ym*Gs zlRvwD)}Qq%$2EP#KFdof$sfdHIKlQ5_2oqD;4ZBlda=-a=y_^Yo!3x%*2FAf7_6HA zR&_zl)XN1RP_xwlse5c68 zo6(Mpjg9ipEZAN@EVOzZcZ(n zQ&>~kUM7hlmFK6b+6jyHT&1sJ9H}Na3R}&z8gtfyyatUp&!rUb-0R?8&^8-ojX}WV za#vLjojfT%n}2lK;9=9(tUVWDd8l)C^3^&2a(7(-bR~C`Rs=zkCK9s|ZSz^>ecGhx zCKpD0+>imHojMjNP~07I9`rBJcHU(5{CV$EsXEMB9a&`1nf5x4f7h5{*G_fM{4$*R z8^ADc3dK79L`Wb&BP4!Cr4Xbh)6ZxVhsIhdu&28M)|JZlK&{eDyD#CD!MY0X(Wn*T zg&Iq~pziC4$Ce0Si?A#(bbbRdY`o$8IX6-*LZUdBkiSc&Ib}y%L**F&*8{#6F0$u5 zt&F^}My-YN?P0>w(KFKslgBUk*7DEZtgIJ-We(n1z_X5>KYC}uReuyJDdQ&p&MF`& z&800)jCG}k2+G*7DN<0z_Q&b}vHc~D9sOk;)sH9F5BRyeuVzAy6cyyGk|1FpW+2Q( zmhL%@*B8RvKtLhuScJjOo=?fqN1N@2^A|59VrDh-id*YXM2qA;xNW}d=^+U*;5;~E zUSWZNSBJMjjWveHhs5$jYQ>n~WWArrIn4AfOI54IT)DlPW4euJnV+gwnnFzvtCN6Z zW%RcsOKuR*{fwn-IzcL(>+HV1K%$X!*LIM|#6v@KU#}34Lrg2n_F&}thnm|A{mGqg zdpNSWakq4WzpHs-j3#kcPt#me8x;sg9nDi1M6t+N4q13|#i!vk4ZEQW%+LW2M$cox z-)5pu{DZ(N-c>L&3tF$U11-{-V46Pra##5W+Ko4rPD2BlLv}3ndM)YG(M9#2KAA1% znkRqFs^br>#dG*Pw13V_@dH7$REEmj`us4JE0wTb{$Rht;3>@!eSj+f#tsPYK2RaUF1+h)y=NwukVrgPpW z*eSf|Y93X0@#THMfA&R`Cj5`XwhoBE`BZ1FJIp~}_Svd-tAHvQqx8@`7A(9m8He=cD3CuC}rZLLiFkQ+L10VBp?z?sSkWpeC((Rck&ROAzf;$R;ky ztmt~-k{m9iBY*1Cm691iR^HjNGHQ7^^ISJ3_b?^nf)tNXnY!S=iCD)AZ|&u_L}v zgY%2IBetH*A4-E?AOC_}&okGrZ5@!W%w^8uO$$1nmFjQ2q0X;DLfu!^&u^O7`c@N* z_t1d)?R{qqC+*17xJhny>G=oKkGh8krCxr{h<$eTo((qYa5JckDdNV~@Og;+q%rH{ z!pKAHzN*Yx#h|T+SnlAj%_1^~%`+RFi!C~%`y}yhL!Z++#PirAGdf4CB3Ly|7aB!$ zoGQyVasouq$8ZF4aNhkyB_VSw=a>MS5CVs(_j(T-Xr6*HCbZ`UXY!7?6G&7i(Uuzu zTd>L#NEm1oK_XAxSP-WvSp7+9k5!$?M(NabPC;F}sy{w0Eqw8_{-oKgOs1RL#j}AK z*}wR`nhIpDer{~1LNIr1ydS7hLp$}LRRY6AG4LG&E#|H63+E#$T2Oq{q24~06WkX$ z>c3)s#2Z^=4_7{`c~p!uO}X&29fiUr6v#9dl6|h9$g5t=8zuKXtmC(o7 zVkAM-zbX1G6M5xj|4i7GfjmsK(kn{kMQo%~H%fAhIpH#ZNV_*2($A?|4 zUCUdz1bfO5R2TD+eeS5T>K-YHRvD0)JK=d5g=ll;cpkFdZw(8`Md+x^Dod>DSY;eV zBQ2$ssBS4sbi46$qulj#ljk6^bKt!Bqdg0TCli#Fe{*QNQL`EUP0fBN!orbrKv4Gm zt5)j_{HkPOAzO+Kw97Hz(B~i5InX6b?UONs4;#dil=gta??SCCyv3O$Ih&bJs*VG- z05mgg_0^%m_+xwH?mMU=0Pb!Xz{&IAd9r~bBUXW}Z%zvL)~j1D z^}vHtt)4Iu?xS)(_@yTJNL-~4^zULQrP{0Q70bp8SgzCAu7Su$Z)(KoH_u(1p|6eAj6`iHcmNfMfX<@pbbU`8h+lU( zBZhRNmATbR=j6_vHu1nMJT$lT@;V4f(!cYvK6K*i0+eu=`5gpg@ z?3@HY)N3>|8%%y5TF4pH^NEL-Q<1U|)OY9j1qSXl?z%tk)1eEiwCt?s?#_lYzDL*; zznF~-tE$gy(o!uV_tL9hXb~Kmv>L_aJ>6m2|G}?ud181s;bmpziCH-A9di(69qvU4 z&LK*x`GoVA!#+GNGHVlt0@U&EwC?r_6v`TiERCjAH*QMdERqg1;n-1c-XZ$RzxBjFa&uq zhukA+;QcKHZj3F_HN=m&bkdBi#c$?#z#!YaX=_OJeU%^a+CmKd(S0Q&T$_w^HI0LE z>6luveb*EZyk*+%2QidjH2ivTX`G~^I6dHgL7sq~uOFFw2VNK-g?r-p^`U(wvDVHc zOa}rxwD#Q`NkGaAAvER1AYAO@&@==>L-m#Y@f5qIpQW@&LGZJ1d?X<)li5Qsmx?`z z+ORqgA<0znz4gKwQc2q5jCXwO@YSLaDDJ*dE`4tzFdrs*V~BZE#$H>V?9q?cyi z)t{v=l(bmW_4v^phI&8{D3+Xl3jb-|Tc97CYF#2y2S{8g`F=g{jrMeX_sIO;6J5d! zB2&t_efM2P>SlgS=#wPmJH00x-F4b!Jdgopa&K&)TG2;Rpmi;cJ@P2hPo?T@2hu3g zku5oL*ich?RhNJ|B+36HA&K2IPiNFrL6#GdbEr0R`?R+DKvEzw zImb|2XSdj@!PIGR`9Ub#TMGe0U#bMsBMnRGVcSaD((AzMWNIP9Q@q|AV4kMar+erY z#mOg3R@q7}bPB@#_MLU0i3=K6fABGD{u(B5Gl+7?}=2`X&Gn!~Yx^;%q=OA0*Cozhf7_qW)uP5EdwRh2$ zjWkn8;E3;}x)4N&=O|@;0G6T>ZM_KX44cK`kE#(S>bHadNc3g(3pZR3Kv_Gr7+c%fzdDVEvjNCBzM6WE*!}Qrhy%@(to$@+g5Di^? z;ox+C6aI4f%vW8_yjG(h4`V8uqp5&JCZC3r|AM+eOCxmSq5OfjzGr;;#F$P=(^yzz zwW5RUG>PYQx&+*5Aeq=n&~MDc4=z0DLO2)~G`Av?HTx*xHNsz%<3$*&+i8?^U!6Pu z=i8lU_JskAmjak>TZxs!;wo=tfuy(n$Wh`49ibNNOc{mzO0V+Kcc(6tr5`@<5S#;? zias4EHSi2H?DSDLF{UtZGn7~xysed9aRueVdgh@x%PNgbjZ7Q_|M#<7{H$D`{ZvA5 z`vlX2Dpa*f4?Tg#g1|ip#gSWOe#dT}-kbY>FSlivh-n9n9kxIu{P9~d!HdDrDIR9T zXXN;ZzlOw_M$uf&sP+KM-!gO@dI|$XeJt=k&Hqrh6oqM;=s-Al9Q{j{v5~zj-w)&e zJ;$Z6h!!0sHu5>7ut!jW5+O-u)J#};$KCeD+wM&C4fCC`DKp6PX$rQ$EAu*Nj*BWN zOdeD2k4O>~72;zfgj&4m6>ty2aQ;8YaM_z}8@;^?0JJ78DVQ`;)5?uXt(EwMKdAMn zj6q3Th2wf8?rP_ZsG__=pDS$n-i_1%z5*G20^3plo8%Waq@tM>&88V4sySVqw8K-i zvBLH|Rq4|MWOZ$+ns?gqw6oE-LOFvJwrl$GHYRbNk=qzc9m>dnd^8SxI zu#6HE>9Lelr1(qXBTd-NLxdmUEN)tAd6cdrU;kW>wl_|eNLEtUJ}&_`Ii8M;Wu0t} zI7Y9eF;6t=pZj>8cZJ2uC-U!nVg*gn(dBM+{u9=PWe!Df`B0B@pG z1M{ZwrE0Pya@F2$WY70V)g=4Z9$r0n^JoB&9}4u-Zc%5^BBane)-~vY#?}%I7f#Ok}kxtdVbqnFC0ROndaP0>z_WzaR0A@_C^cAN zvj3!AbqKqJkJYyKi(ji}A^WCi^~~2MbrI8xHznF~^^|Tf{l7kbL4z71kLCmKn11V!*P2I-JN%Q6J5VDK9ZFRMmf;R0%`u6tA z57c{8%Z$G6&+n*z7j(WVVC^0%Y21zkH}Q$M?BmY02dDLm@IdN5?c}>E{ZuiVLXk-&@|Z&&!hrlMzpaMiUFaeEC?4XtXHiN`hy`cI@+G=hh{WZY;>}1y>oP4EeK2p~H?C88}I*3j_N!WIO_}=RGT9+Ry?Xw2$I{$6f zh-t*bL4oWexQegknOW0DQKqg(Jxf2Q?LRvTR9m^84E1qTl>5@1{xv1OM2Ws!Lh$L9 z=9&={s4e6#HK<_Z&Cz^>{7TpI!0Wn6xi8{TvoM`RNPIAqugSvhkLH3n#r6o(zPy7 zPW)8nXU4a0-@Y7w#@6bNnXPwTxbiFtuyl@8QEqbBIohY8D`~d-ApizHTSQ2jVF_S~ zV|2-`32c2%G8Set3(pgZ?!O_mjC%0fov@pRnzgmkq1j|xZ_2q?zI#g_RY8|J1YXMAkXWp{GBrU3J8iw0ZT!e1rbX=AFI& z#Byd@5_v{uTtr`oDBP*sby}F9Myc&*pGNm)jrwn_1^Sf}k}F{ms4~z5l^tzJN1?d6 zdNE4VV|j#ob6{uf*3~x8bK$c+kT$nfyxWiauK9}9O&F7a1Xr#BU$?fkWqg+Em|vZ{ z+$ZFt$_!t55UFL3JFv<}H+wnR!^3no<{l<|b(y%iX(%fkQ!>&Wm-0)w_is#vB!2(- zo`dX_j&7Ah(AGa0KRxenGJbZO*-yXS!#41HE9d9d0O~NcUWI#$(s7v6Cv>#jBven+ z%&w)^-Kv~0ybh#k5)^B2ydGTs)Ya8a>NVd8xnj|Io0H0uS>Dj#Y_wXR#-!71bmSPP zGdMg(S8SV-|)tk9r!Ygp1;X1Y&kAw{mJl)` zB;tsK*om$Zs!co6!c$^JTg=S%7-@Mo&)kE6D0%W=xCfW7NxpeFanl3W+I+ATf@;@X z(0Q1i@Qmf*uNv@(Uo2Vu6Q7;#LqteTqO7yx!p>>g!tt2v9rxKtMd$MNZb= zcrhRoX8;=WsQY&LcSy?bf%l-9ICIgscc6R%1nK(@n1^570R_toh>f}%dk1WAlF&>X zH}pvG9Z=eUq#!IW73I5`IO_n!k|j^~{|03N3-k*BrOo>JhdU5I1Y-VM*SVyx?tp^Q z48+6y0>a|{$O@>7D-)WD(}>h5a;swipe#T$ahmDr|1#hIA`iF(?0=DWm-1|m;c_aP zV+5eqy%m1oq2d!D!l_t~^oA_^L*Q1WuM>B^mHz~8e+qQ=k-kQtQV2Y8##*_#RSCHA z<1OedUHbwa@YWXkb_v-axEZzsdJl=WC;}oj<>gup%4$m11JU%{d*Www4{gO1!2vJ4 zpk^uEJ&m3m1TUQ9WoH;esg_c>{R&wxUkT3h3y0vxtnY95>`R^KhY^FI?UG3i0&*}w zzr3)g`7|Q+lqr^XQmN&DFv1*NZY{hwb)g+V-bW=~cq{@?PkSmVVjLn#`C{-l=e3B! z?Qe097(KslA`ja`q68~%iqs{fDFIwlL{84;#2)6GsxF*p;V#rGaZi+=pZJ-t2v zw_m^`(d1SM`wl8|LhtqOuK!B}As`%q%eLlI{_3|-8|Q!Mb!&h8?f|Pr3(DgW^fDceb5*TQ31g0Di(&(Dx>!&nwNA{_vw& zqIRk7Ez>y>C%=Hh?DNP6Cz$^llx+QlvT}7|qtw8NHkd5VwewwVExfW;U&ZY?jnMzo z-djdh6}|hyil87MCEYC`A)SJtbVzq7-QA6ZDBa!N-Hp=S9m1wJAl=-xLHT>ec|X15 zezv+^f(ZxuZ1ToItEnH^!rj;XCSncNT z%I>|Ud^Hd|h8Cyx=qgDAzNmumhS^GLqa%X+KxFPj6%H$p?zY7u)e9Pq*VzahWr{uz zi&ZNmwpzZw()O$U7;v9Qek8UU$hZ$K=PQ8Qf7Ygy9~!Z%L>eG# zBk2N1<4elfe>RArh?dQX&=OVJpcRr0WEI8w$&bs9i9}~h$t(4ZhT~m$|=vn zlUI@$w*2{iuwPPu4STZ{f%=eg0K}=w1CuX$ZuPJA_ZtY(LUy+m_5VkPY~%r!qasZ0 zzqalfB-6B+6D;R14n%lvMHUx`B-TkZvuk_BUDYrubGeeTC8)K0W>qev)m%Hdwbwhg zJCU?cxKhw~aNf32wfHqy7~xRSp1ZiWnvZ>rkL0N(pOp|A_nXXbPfj$X%5u|0td}%( zQ8;(icl!RW$l1Di8_a(S#HmFiS+Kv($^q4B+Wit6)L1G}^^!t>uJ|?L>rVIj>hjrT zc({qX<4xKJF{JB3co^wkB&0tHE1pTOfiN^#$r=IAEcUwRTu8K8#SN4TFdwr&ZCENY((ls6D{wD`c}sGNKml2$?d(Xr3#*7 z$*LPD*Atk&4@xFI)RB2eqqr~m>hzx#(Vi*~P};FW&w|^oFCj+9!n9Gc{uR$G2yPzwUyLuSeLZkT)FS znEr}=K1G^Izaju7=3e2cKj=E)Z z@TQr~q;)K~U&RrWRM$`3j!GbgFXT2jiu7~&l+DCoB=XZM%ab7Wbc+gGsN7uj?cf#> zkoZNbGb|mi(_i#U={Fqynv=R=-7{})QX1$w-{WQc{WDv?d*4@UK@d^G8SGAfbpZO} z<@X=AHYX74&7WQK3-nn(OCt=eicCjRZe(VtPUJoDlSJL}%$$JIi)a%NjFV#KS5tfT zBxg`Diui2-6PZvx&{?(1HQr2G4{sKEQe_Zomd=WUJ+l`~fxgn9qhR8MR9idjEyVsTY=GW83 zY&|h+=2sRV!rQ7*6IO}%DgEggnOc*RqlBfOWh=)|Crn;%JJ9R@Wg^ef=R-*rDrpW4 zEwd@nJ)ie%rm0!;^T3Hs`QdC0J2xG&)x2Zf@okRhizl^Bl^4(gb>w+XCB-}=heY!S zpigWXJaVye7QfQNNCVy7%5`hn;NX=@8f6CbkE|L_Ek6mQ+pmo!=-+;1U}yU>@Jd{uP-9aIm4YM#i#zi; zGw9GTpAE0^?8;4B@F`fpC=d+IB7Gj?C7U@dKAeEbqJ#p&MXh0%V)SBal8Sk%&^LXFs_9UiZ}r^r1H0FFV;;GP#u0S**7`@A!hjc8Gg*$U2A2#*eaF+sm1yS8)AAVNE!sXn)p&(t0#LCB z2BRlETJY@$l{TE5Xu?H*q@*Vra6?a+BEK2zVfW5N%GbRul6gu^n}YL#=C-t%r`a`C zbgP)#wr4hrJhk-wb)D|#8;k^)$4^ zL*;i8h9x8R|AoR>f8V&T$# zkp!%HxX|akSZ`d_r>9Y>Qh$v?f3J^#o18h+Dx9k|Q?K%}N8ar42L=g{x`|GBD0G~v z7YJRwkJyp}Y{l~~i^j&0O`h}vpXwiG0us~K8ono|b{pbB<-UxOj-yA?Rqaj;lJOUx zzNa^(cOKht3LCngnIl{LaA}gAK1~Mk;0yZLel<6DT)BPQd^lcROEUJ@=P&TH(fG)b zf3KhY$zydGyGR!9qwM~9mUp|BNAZ+0H?JFZjr6(x03CHA`=qZR+RG-lyop{gxxx^kA&RS=t0hY?T_x(NqYYG*`}|zK9_TJK8Nv85FV}Po@=9(2%qWdk$z%lsgZ>QG0hv|` z`JlG@?GWaDeBgbwQ6442CNx$W%pn%+ds-KXngu<(J$l6Tsdf4%tJqOM7z4S|bw=*r z1l^}{9^9Y!YA@B4U%88lZAM?XIN>C|`XpLnIJWdln&Uf0fMoj9)7o6fFzcfne-Wb* zF%NEH(~JD&vE(zMgmBh=u&e+%A6&Uq_Lk$wu^5FEE$vV_Om49%R0M;pCKAh^dx?iM zu$X`mv`%xsc6IAkvHr~JSgS{2(B!Ei9zDx%-}Q0JJ&f$WlJEJc8=LAd+IRyB*^E&qSb) zkcp&*1QI#_fdm<<9yxlIUiwY^V-%+N0c`|ZV-Jbq0N7ay103KyZ^es$7RCb{>e0t+ z$$#DuK+Bh;wR4kddpETwRLK4aI;LYjkmV@@%j;?sn7v!xQ&A#R8R`s^s;Y}N(QZtL zL}(d-k`xn?+P`1a`!;G+vjeWh*)`3JPmP_1T&`9fhT%Mp%4O#B1GJK4!sZ;(zjvXsNZhTf_5!vB4;8xJ}RT~t)o^n<%-xggZ1D5XHhIa&W-@Vw;d(Bea+Hv zC1{npEy~ri@X|htB*B-6xm!cn<1StAuk>2Q zWm&W)D1&u%RXNkWSh^M-Tsgs_`a?~o3KfRvueRn z3ID=M^oUm+a#Cmj{lwH*!y!VpehJM}m~0iE^TovbB=_oN5K9=bH=Z5HMv#)OnlLKb zH2f%~Nx6v5VA`vfO8Lu-0>)Gmkj}MWsm|W%{4-YhOWBTD{mxB>P88%AWS;{gm#M-% zzaRNAtpF^$9e&xhtL}V0VI^J>eEklq{Va0&)H|!p)@_CA*FDm9vn$2Sa$~|6!*1h5 zabgkpFSw8R`LgI#>S>q1q!BRFzhnjtbQ&qY zdk-TJ>Z=DXg=_LqqZp!~?OngEL1>{c^c9ew@FjH3{M~l!eJm}?zs0-5QE zh6j9>;i3=p{m_Yg3>gY0hV%C9tG2T{;O5^ms2=H*!gNHMj3UIN#)L_GuevM)u(x8k zhFQ$KW!H$i(4W$(8aNx?3YwT|heph&GOAVKKl>s!$qd7<0|$P81sI+bXiH9B-JB5? zcl_`c1=fc&{`4tG+x3Y2lm$n5BgYs)o~=vB%`_fC04GjAnWfdWhwL;%x+oMzvX*6Q z2dzQ=I5p7u$zY+0NeEahqZD01uJvioSqiB2`oTG{Bce!4cLed(5JJX{Z zU{~>pRPQ^h7a8sAnb+2eRdb(8kXaaRyxY39V?7d#`?-s{d}B{_p$5U$(#{+L$kAvk42OH+q?8w;jhAcaOa>#Z%G+hXf2YpdVB2xAf zH#0McG=~2~FpDRk4`5m1q&nGf~k%bp-FHwl+H9sQ*3f|h7`m*7MeV7I z6ID9SJ7q2@j5UtMi-d9n*|ej&(cN$w(LA#>i;=u33hq1kIZ@cKGu8={E<3Zf?60%~ zIU};sYf8nrJTM`m@GYQ&4v(o&?nHW5qd!UEB7NV#m@xCO>@_ z_h#X+9rv(EHAY!&wX3&E-@yc%fLux%D{fDTn{B0D?4aX?b+?Oe$3z#$XruP`1j|#A zNW-Do(@R`cm;^OXdqAbdNC4*01B-usj+X;RSn#}Zv8Tc`Jb)@pHBl0GB~EQ;x@Pir zW2A#-pf852+xjpqL3w5VAYtuYY?Z|iyDk6Sks;8`M zRo?1FQ`t^nhim}}!u99Aq%^FRO_jNsX%rP1(urK7)@v_|bx;^5x(tI8xJU&CLXBZ> z)y7H6G415fI$zjI&{;~+*>NP$rY=z)izY1{`myc)9>iP8h5v9h!z1Ge+1hT*5JFK# z&mL_>Y`gfw4W79$&HhsIgU(=W9;G{zfZ=;fM;YIGE8hV#D2!i`2y42Io(S`)j`;9O z@3x}ZZ;_#6iBLASih_mReB+UU*(Too>`9yxc~QwvvyMbVQ#f>VR!&^kjuJ9HfzGa} zU)2dF?8F5>V+j5NWH%{n7a=h}$~c~kyr-}$pV>MqvU?<;^7$u6pF$LwXU6mQBnR;F zZ#V33$SDWadXHY6*SnYV%0%cVvyX5XM$Cfc7%?67KP)|yn&ds>U+Lg^e2%_jkt0*< z%g{qLXlNFhP2(+R=i5&ejT>Z|i+5t_$VV`?RAxUQ8pIR90=$C=8;bUmJSlIcOft32 zMY}MgiWK&}_THdIE;1|GJ zagtf@bDEMq$NN$ari(2yksa-<>qN39$a!Hpi)moszp6JArxH2$OvLWP3?r0sNVK>E zyBaQCaZmz7gQ=n#4oYDXq<}h~3=9;?IC8)$0ap=YE{lOrC?#291k@c(*kG0vPA{m; zW7$=L;0|&%2pV78)8RyzCNs=Q%WQX!_|x?%Atc-G_85?vFvr3^7;}9m2bLfg(VYHtuK?CZS3FEYkI{Q^ zcEqZ!1R=LyDk;Tzee@A@0WpyxI%9ii#DF|tuXL#Tzk30NSAEnV;man4{ zpFMF@4r+UMVm#Q*Y3Mb(QYD24!joU!uQLISFYvxDTx^iiqc<2uU42@RYLO-GrbS(z zxnKbO-J=PLc3D`GdYw6(a$~l6>@IF61l2Ro_oK;<85xOyFA3KRU+TOkR@$;6_(ke5 zJZ?FxSsT}dGl!8x)vRZ$zgl85liJj3J(k#&z~TB#gHZ^ry5agPgn5W> z>k4wm39;GcI7k*Z?L-%dIle{(jj{B2!-6KB9gbqH=f*jZy04`qiZNV0s8fEtP|w^?=Q&_NPkG-0$KqIYB)bD7e0cU*tRO-4opso_uziA`~`e7 zIa$d`CQ*|6QMewQ`?@Ot=DfeosNVf2#^Pq??o3BPHCts8V>hXG-~{;Clk zkL9%0-w~Gf4l_B-@pGy15wei3z!?~^kWuj+9dZ}dw*BS0)UlhJ^a*hDsI@7nCpqhz z?Pr90=SE}vvnw5S=3DrYcAN0}`rsfA)7Ug#PzXf@+9B|vni&2T)<>rrVB#@iZ0(h`lVIU+n^_{w{Cg6?f7p`hjB9m(}&*f&YGb4aTUcS zSMHNZN%{&IC(rUZe_X{#`5102jr(lsB_5p1zw zZ+heZGpHkk^$W+i`|P$7S1-Wl9(ecp%Q$=&f20a!Vv3Gkqeqh3biwYO>K zfD?mgNkuvm)Zp!LY`Ij@8#{{=@3e+m=elK}?P^!)DA3_`bde@wr9+II zaMgc+(l&knC5&s=YJiVAZFy83pohHuIk zO~ZPICsV&XJBbEIRt75+hyDJbsOi3fuh}eSMx^Yxx}Os^tlcSfb_KR~Ti>lWYdEfY zv(nM)K+JJ45MQ)dr8_#gdp@xrO6q>Q{jB)@d>A>Q6cRS3LBE9?vK`VTjr>q zz25Fj>gw(X%fA|zkF;u7g|n98O<(cXPjW3PNU~ly56_kihdI}2cG=|JyX+n`yBGnN zIUUT&W(Q-}9u%_C)rr^d?4QpzU(FL#f`8H!=B6(+Q@MexZhE_6Kx zMcjPQm*BH?1`@awNR-3JE}>3L4s4!mPf;d9Z5{^5CPqV{yXVEaf6r01t+zF7y4 z2ex7T5<{~>PWGWSDA2GNO{Q88uKWA@V>>0qzWT%h%w>OCG-cH3vy+e@M&B&cq_Yx< zN$a$Gn-s;}3bN}pGB!3o60Th%g8z=8>C%tL_MzJ5^t!-j-L{&hNYnEVdEQFX*p^0U1YT-SRqLYGV4 zn`_`^V6m=fWo4D0pRd=)S*s0886|n%OGtPP3f|@2OZ#4Jx=^t-9~s8c_1MZ^YrLN3 zn^16fPtQV=X>Ug*p}KW@f0=97(5HjzP0Cxjk4j|P-#U^Rq$${L*YtTqw~-iaTlWrG zSXhFR*}J!o?Fuq`b!%V!zVsu&dt)_Lf=bNl9NM5K`Un+uIR&7X-v=PnlG&P ziXGN37wZ&9{5i4{33vpX_7-YaCX9;>4Glv|E%6g9B1v3nO(UE4Cy((~b(dTBory03n6WVfln;5g{B z9*Eq04kvjh2}^!H9VE~H@iyAJYcia0!j&!w4PtzbJx4eu!&yw2sgqT%1D6WOxUBl7 z<`%rKE;}Dj$8G#g9p(S{01vdYlh8&ikhb|w4Hs1P!D@1BU^EeAmw7<`<@>7DyH42` z_}o)-V`NMju8aT_`U-$T ze`-+b-T!*mh6=!sWGA2KA@;# zZ|koQN_TPH!q$(UxUvo|4O$xB=%t;*Dk%e96?R=eL!OFLLEdOst&5ezk+oyy#sA1N z0=8?A?i?;EERE_<+2%y(fa6x~PDAV8`3l+9P~#*Xe2dVl*-=+JTeGzZ5abRZ+D|Y6 zk(5&=RjqVI)L19;{OtfWYVZ}2bxF}W{@l~L_Y!+DV_M)8UIU?{le)bKLMm-2no2&T z)SoLTMhE~1w8~=@nz2img043K+80;(vXSoyGIT5qLNw+3Qjnr~kV~v`(%-a9VEV`m zMINOc_}G*FQFqwhJ@aXiLrDIZwe%l07-9k#D2c=J-@*|Jr~uc>n4{7B!?iqsa@>eT z6Z$`OIE#}VhM>P;J2vPw&ZgRRtciA{Lr9*N`g*4;CX({2a6l=0i10#YXa;Kh_bqn5 zcPMzY`MZ?BRatvZT62v3uL}|KSJn_`O1-=PKYlFFCIA>d`VeUSAh>{`ssXWDdl|j) zPus?KK-&DjJsf*KKEd!GS^><}6R^3`zm8S1r~-3ojo|bW2JMTAHW+Nh;O z^U{q}+Oz3N*S$M|x+hw)Qj#Lywc7>?EbRQv$I<}DwckN@#)o)`IpG6nG<&+#`&Wc8 zdulOUorSAL(JtcplNE}uyd>ioyg3j&zgQpP0bJBgZrwWBqdD4i{5J`wO-ZHaY^=I% zNg)ZH8udSw>&dNG=v76V$1Jv_BHB$8PW{JK`2TVAK|9eBiL{*(Dpguq%NGxdSEG@^ zt6Xd?96SjG9MPR$bNRb?&p_Yjo@q$2O=?stmZkLdBZ;(q1l-pd&l}goM&JbdBg0=3 z{QRQ=`EFrWMZM6&ys;vnX^1-&0?UaMQ42!IezcG)!Esdev^@ey4}pPw{LkX_pcpCN z`Qm0Or(e#i!6`%S*}v(2%@-eDa?aNM`VD?hSP1#PjX^HltZe%m@{ZXExnpyT^L~Jzwwf^p6lRcw7sUmpU6=)`3lHQ43?#^O?n_H40JfRD)P* zs1e@akHYrFU>LPVb%HUiXz4#n@Yb;P)_t-UDMS5&LQ2?&TK69j6tV#E&&|76+WpmjhTWgFlk-kF}Db`nX=5Be7~qanAC?`N9>q)SRG#GqsjIRlREWX%Kz9z_in$ zfjY-cM*Ub041Vv1-t>e*;#ik#cs+{fdViziXoht{#ov$|1QLtc%1lKKZn}w>wWy^| z=Pd%a&%JBG#^vQ|?r!@Dy5`{9-=w&opOp;3dv4q1?}Uo(Ze6U)$k$hb-^Ygq%HxiG z|L&|JIe=x`fiy0}D}5PFxE@g&o%?gJitvz^Nq)R;1#fV-0&=ZZvBeC$w@v^Qycg+= zPE+IZXm=t@iwqldoEZ>l{DP<2WRJ!ijP$gfi30O#V?p*Qs1D3p>8d#I`E9K!A|`2F z?N(vly})qpBfhZSp((2^@byXfifMUC%f08(qt0hI)}eMw%Pcde8)a2LddZ;Fq!>hm zQ2&%i=D~y&8vEA%_`J^9wmtJ_(qO=0lFDk?@zv<3LF28PuElHJ?IK37XXgt)u-{?= zm%iZeCMDAO`u64C*+kC(rO4>2)M}QC{AHV1?{)Ly0wc%Z@9EM7so>ujj+dwUa~F+0 zoATjB@_P&UD#12iDCA)c^kw728q#{B5d^<^|2hq5`Us;sMl+c=XsS@wu=ectGaE;R zqZH`+Ut*us2?34dI+y#WEHNo8^Rw~W-IH!bktp>tADT`Fu`>K8b0r^NkxXKcNnt5O z#4g)%A2l**xM|{@kH=UNpn)@l6#y;s_l3KB0@E9Lq_YD3jf}>ny=co@f5>UxkrSN+0cDBJ!m&==4JrWL=q$90Sd8Z7NO)XUbfvx#YS@Os6B$pJ(OG zmF78x&-@Os+mBEk3!pcyZ}?LAlH5LF!UI@)!mv>*VFiMBG%-v~l2(^lDg^ZKXoUvw zWJaa$29kTw1hXTf`qcIW!DIDtPL35<{a0hk0(9)g5ee0<_Ud!fffAndbJvnKD|>G2 z<|Ahf4Qi)7<9>7+N{s2ux9x%QlmXrNZ^;f5<v~UiTzyr8>rfEvg<9m z8tF@;_2n)}8L@I#95PaQ=vx&FS$XqZnR$P6ni8MHSwvQyU6FvxJR0;|cnU12lHpyjk$sYlSNOvSiCp9y?IO>y98|c(HB@hMG;Y1B7&f3Qb>geG+X;>G51fuUEBDY%msid6Mw^O7=|1ARWfmSV z#sJ1gE2sAwL^MA|t1-y9%(QB5#ra^}N3`E{t>3ec5uEKB6E1F`(b&Y;iZ9J(QkcYU z_OVr~SO+GIvX57{W)&!9`dXoYA{cxWrF6+eE)bx10}#HS)QKZ}B}gEDrusdm&d$dg z@U7+f6Zdt+T`bdh9r$6qbc?zwYDKcR7kQtub33d+-IGnL2R;pgnkj)S-<-!?3lN!m zMx3Z`Y*Pw5=J*zkkRGC-;{B8HK{^PM?adbSS| zYI%*ODWO2rV0mfTI3}m{z)&)8o#hQxJ4t9)y>VDFB|HCet+|QAMR!#yi@)kbb7ORa zOnDyTRBeDuwZs~;yIz65%1tSfz=n%Kw5rZVbHI7*nKFysZ_3O1`1GB=p`g&`T2tE7R^xF{`!P;u!ZNfknhq*&R7oG!l|)ECdSb5$-F zNHs8B(U_Grz#ZLy$2z{~*!N~A*ewGDN9oE_^{%o4F`YUt^M!kg>1$4rOFF`f_!kE7 z0_!dPejdd|#M4Z{r1Z79{6PAdqxubE@S<*= zwP0wTntNZz# zm;@21x|Hg3^HQaq2RsmX!nl`Dw#9U(nZE>u*=df&?1UnX-%O6>SZm{sC1H+d7?1hf zX3ryc$L1o6hm~qNYse5MpRgQ@&4iYH*tNiM?xqSeQQME0`K>5lslg>?rhk;Q`ULZp zX5!4**Kc@@SS009`iqAmNeo9XSuR!c98#m)y2L2xIyJ)0Wy%zdu-)pOpUd0$3YgHt z`=S8uZE?jRad;k*&9XMTTR&w-HY82~yl|C}R9hQCTCR&dqv)MnRJRIHpF5d37KtM)? zQW#Nv98JZuB6M+Mcc?FYIw6|_!w?KTGYAu#?DyBEIHdgQT{(%%S;g~CEhtv(as3jC zVZ1+U5pF3vL~{Z;kB3D&*}9ayxEXiN4kk==KE^NZ4*aM~At1K>2I)MElD1*r?=V=d zTFtd{yF0Jcn&SxrZ>n|XyealY{Rzk7JpRxqI0yj@*YDYJvMg9Sy1JWVRmfM>i-z?} z!!EdoYB(vGh%~ybsV4Dver)@=#IuU{{H99@^yjZM`zben1Qh2u@+#go@XHsCQiqMD z=@$!BLG?Ii8FDuGGFr(=>ayESFBUG(*1pmA-LrL{TV8^g4Mx-CUxFMmzW}#3&LdRQ`xr_--p94`A>74U zOWW=zARahs*VFd)gUBV1o4v4>OHE-^F<7qhoz|+(Sn|>#xtHiUiZq;a0hQY5^0;;L zoW+4Gk)hn4CuF{ z|J8twd0RL%1Qt_X3BafUZa)z}jW)b!acg!P`GJ4|%%MNu%RrzlS=#v(G`P-UqZ&TR z4qOnVG#o`<~qv(q9zcZBg1}*^E^5OlXNbE@=5AIZB%&I>&JD>Q{1$lUO6vht)iDsf!(XOWm z<@aH}+AY4BIU=Y9-U(@KR3|ln6zL@Y^=Fy|bW1ifd$q;`=kP-DZa_#cB!(EZ48?hV zxu|w2b8Tc+ocECk5DiSO1hT*_B`p}H*!^x4=td!WPx%*=z&C5mn?CiV`H=T6PF1@J z=<4czr(+WXYa-7l(N^l?0-@!d!KjdZvdgZDy%Lm z&~(YExKfvfD|{>)vV(Y`d3Nf`%pcKZf{B4E6v8kf^L=eP2((bZXFXIRk^YGafIfwZ z={`KbixkLRb}GAW1r!^VH-3CcL+%2icVGnMN8juHAIi0QFM_A)0NJ(i)VKc+c>^?V z3YCqxoF$;(LW6aXq^Yn2`!BEw1Qr9LdJ7>Ah;seg#p4}hQX?qLPwuW#_dlKhUKp$# zCWGe>e+F0#5IHF-T$Jus&mjN^fylT0ECOvs>`VfSDgnqWtN!x0X(aXvXuELe-+OWdJ z?I#0Z?5qVc0A0U73nC7vV!|VOn!O9`zVCu{-DqLyCOa}%_Bs!t%D^0fDC%VVZE(>H zbbTF{4|o&6!b5@@1>+xfJ3ME|FeOZF;RPQ3F{k5MFl+_ zL8?lu0L<;>&lNrN7mV_BgZm+&9Ha_X98NHC0Q$GvqaZ%Sh})osOv47Hhok7E_F}_x zvIH8*(g91c`b_;mm?Ls2UB;RWY1g}gWkmUgII#V@UmhjSKVz1>muJ8%3rLW0jbEyk zh^|Hjhp)d;y`g>dK#N0-d^_)+bF-#8lUeT)OEKs-qoV&k<&c-2Q(s;>nDEPRkLDmB zcr$Okj)Rmwyj$J|Q415A4Idj{ci;;UtEVg|Yi&Q^;H8`NF*ScuR~{*7BM#LRi;DFe;A5 z8$r)-0EzY@*Gpqw@LN_i_wfU&(TEm81E(O2`uP)~XYV7n5a zvCYP!nMTj?AVPZ`cBBTp3THUy$ovSZ0pQw~tuhZ^j0_Qn zcnBH4izS!622_Lk`+rpf5Cwh)Wd%RBLa5V03VEC;^4}ioIZ3wtP6t~+;2EuyK@vx= zx4UBx=Kv6UD1_tYxGL_V%Kvg4AYqOyvlafb4TR$WUy|19LaOOsdBMjBgJ%~%I(-w_ zXH`#~uk(H)OiIF{{=8y3Qj*ieI!l1mkn}Gtc<{Ny2qN^m>}2aZ&IK8~lj!$EoHdGS ztaU&C_T-wjF8^>nk?|_ZSW>Mq)oMFvrs$-+e*=(wf_ua>59tkLAGG#~s>$Gv5pO0J zc?_!aOMh~dXJZZ|N{@}9y6m;Li{z$R6ITtyPlZtceGNyXnIEz*gne7e#ZIr5bHT%5 zbgIl3#?|7NTN1Lom&?ZZy-~{|sTLV4Q5$7Cn9COH{WBPT?HJE1lf#xuilp@NiGdA5 zn5JdE3yz0ukZ@y*b?=FWjoI%E%P$QCLUvKxNnCm_sE%Gxb%pf4z^#_QJ)u{fG%Xs~ z=OnmTz^03y&oW`O$}OeZU%Pzfe%>kJ=B{KF5DIvC9W75YzYF%Z9p7H8k*`OpRXWUd zeNs-fm;xISE=63h=Ma-a^}QB>qw#qlJwxIWWAiWldO-OdE@T8k_OYXZXMRanvq9_8 zU|OC}`~AtWWW+iSi7TR3en{PO<;}~8rY&LMFrW0|8jFG*97Ph+=x=TggL5Nj2NMOw z5z^wfCqA2`zPd$9>c7|Z?M1UfF`$^sxE>c#+EBJX2;G(|C<)rfaAi3y^`?sR!GzPu z@D3&-14rHGrS<67hsUnNjX;fFp7Y*vsYI4l`ay8Smut_VYPW{9FO`0}+#~bV{UNlc zw@&jk=Fz=gWCXI5pw8zy#9)BZMv8h382*wmBwd?8~lAKlB>?Akwu(gIp*34(=i zS;)}Pe;Lha4$G-;_Y&^-n?(-`m2wOTJZI8b@hwyn{K_OYDc^ygX*@V=_Lpo^ZlOk{ z`hwq+=z;>Xley*Aa1nZJd2dChp9B|3?OSS!5!A)37R=FszkouwCT^;~p#~7O97B^H zL76^CNE>7&hqbRFD~BieCML%|lCd1`RraSwXF)}|Wfm8&O)C$@*2q>74|ZM~Z!~NR zM@A8MsrewP8guUHip@YmBh;gZwH_w42bJBA6BoT5DlJG(TBiHd>m^yOr^{kPx}ceA z#p)=UWI{-E@_H;!x-hGT^)z&CaNg^#inVPz-gkP`$?R{X6c(K{d&z%kY*)!8I(K|^ z-s3jhjK9=fINU7v>%ea@a)P{3(S2Cu;f^2JxJ>l8tl2}YR4QYnpwLHt89LcpdYRpntyqxx9`vn^|KKhyqhrbTW1_B+H$ICdF zz6~TW?R@**(F60Xqk~T}D*y14i3lbjvurl0W**Xnj>NP^PiD%CTuSRnR$E~;FL#{} z`qnJiWhPVRp+z(f*nKwIdd+vjJE@=rP|lACouOy(7gez5aj)qHmFrJE$7`qQ9N))B zOju&}{&(#QIO;z527w5QOd{V1mwhm^QjuTTuF0;Yzor>O-=(3|~@#59e9S_W-amNG() z_g^rFXz_Ky)CrtJjzmgN7Z zU2bUY?3geICBJJ%h8C?W3Dq9x~eqQeQDY{Z-?4@908vK>E*g?tIaX{0*?%|ICqyFR8`(fn*>{`~|3%zy9jK zOFn@9|FuQ>S5N=$P>T(eeX%LCx;QitT$zhr@_{6DY=Up|ekNG*OCj_oV_CzHFG>RD zg8&Z|9$rLSS}-BD(7*Hd_-|?tn4mf^UmH-i)gL;7Oc{X+unYd+wtr7#1IWZkq2Z1E zXA`xA0qa!24nFX~U`OWTQv}-7&vWr0hx2D&1b|QxtTI)DfBn^UK-)%-6zHF=#F7ER zSVHFc(;qql@iX#3j-;X+^_}_30C<5B*4rDq0As=7hGRL4( zJ@o276M?n?k_v|+lY9OlJBAFv{wA*X5&XwXo{|r=63vFBOs;5Ww9!G%vMs#}YEsOUsj5 zqOMc`bIDMJY$a=5d5G)oNkdX(AxXT9GS}zlw>{a zmqqVul2sjmv4r^C?7F2&A}0E!IwKBb*zd*|hOtUuRWx!R$5Hn6+$UsfS@4bAfj1Tm{6B(#XowC#0v4YC+w?z5 k<$sq_`M*-{w%k5RGPLSff?-R11pE{EAo;$CU(4%%0j8ZuIsgCw literal 60140 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

5!uv+aM3fe<#MMxz~McI672QL0O_ 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