From da392d96f3f237c61432c3a237020e2fd356498a Mon Sep 17 00:00:00 2001 From: Javier Dario VEGA BAEZ <66302636+dario-vega@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:44:44 +0200 Subject: [PATCH] examples-nosql-cluster-deployment: QA + new version 24.1 (#172) * QA new version 24.1.15 * Update examples-nosql-cluster-deployment.zip --- examples-nosql-cluster-deployment/README.md | 64 ++++++++++-------- .../script/env-proxy.sh | 2 +- .../script/env.sh | 2 +- zips/examples-nosql-cluster-deployment.zip | Bin 1874211 -> 1874297 bytes 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/examples-nosql-cluster-deployment/README.md b/examples-nosql-cluster-deployment/README.md index 91fdc65..0e27dac 100644 --- a/examples-nosql-cluster-deployment/README.md +++ b/examples-nosql-cluster-deployment/README.md @@ -30,7 +30,7 @@ In the examples in this repository, we will use the default configuration, which The code in this repository was used in **Getting started with an Oracle NoSQL** workshops showcased in NoSQL events around the world. -To learn more about the **Oracle NoSQL Concepts**, we recommend reading this [documentation.](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/concepts/index.html) +To learn more about the **Oracle NoSQL Concepts**, we recommend reading this [documentation.](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/concepts/index.html) For those of you that prefer a fully serverless managed service - learn more **Oracle NoSQL Database Cloud Service** [here.](https://www.oracle.com/database/nosql/) @@ -110,8 +110,8 @@ bash clean.sh ``` Just before starting an Oracle NoSQL installation, we recommend reading those links: -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/release-notes/overview.html -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/installation-prerequisites.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/release-notes/overview.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/installation-prerequisites.html ## Java Version @@ -166,7 +166,7 @@ Often physical machines and/or VMs (storage nodes) have built-in firewalls. Addi the storage nodes need to communicate with one another, so communication must pass through the firewalls. Open the firewall ports used by the communication channels in the NoSQL Cluster. To make sure your network firewall works with your topology, you should set the ports specified by the `-port`, `-harange`, `-servicerange`, and `-admin-web-port` parameters of the `makebootconfig` command (see section: Configure and start a set of storage Nodes). This parameter is used to constraint a store to a limited set of ports, usually for security or data center policy reasons. By **default** the services use anonymous ports. Refer to your network administrator. -The documentation has additional [information.](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/configuring-firewall.html) +The documentation has additional [information.](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/configuring-firewall.html) e.g VMs in Oracle OCI are configured with a Linux firewall. For demo purposes, we will stop the firewall in all the VMs. @@ -211,19 +211,19 @@ Download the [Oracle NoSQL Database bundle](https://www.oracle.com/database/tech - Enterprise Edition: Oracle NoSQL Database Enterprise Edition (EE) software is licensed pursuant to the Oracle commercial license - Oracle NoSQL Database Migrator: software is licensed pursuant to the Oracle UPL license -In this demo, we will use the Oracle NoSQL Database bundle - Enterprise Edition [Release 23.3](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/release-notes/index.html) +In this demo, we will use the Oracle NoSQL Database bundle - Enterprise Edition [Release 24.1](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/release-notes/index.html) For more information about difference between versions (CE vs EE) and other topics, visit the [FAQ](https://www.oracle.com/database/technologies/nosqldb-learnmore-nosqldb-faq.html) ```bash -unzip kv-ee-23.3.32.zip -d nosql -unzip nosql-migrator-1.5.0.zip +unzip kv-ee-24.1.15.zip -d nosql +unzip nosql-migrator-1.6.0.zip ```` Modify the file `env.sh` and `env-proxy.sh` with the appropriate kvhome path location. e.g. ```bash -export KVHOME=$HOME/nosql/kv-23.3.32 +export KVHOME=$HOME/nosql/kv-24.1.15 ``` Download, unzip NoSQL SDK for Java and compile the NoSQL SDK for Java examples. We will use java programs to test the configuration. Other language SDKs @@ -258,7 +258,7 @@ Note: you can use those scripts as templates to create your own. If the Storage Node you are configuring has the resources to support more than a one Replication Node, set the capacity value to the appropriate number. As a general heuristic, Replication Nodes require sufficient disk, cpu, memory, and network bandwidth to satisfy peak runtime demands. -See [Initial Capacity Planning](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/initial-capacity-planning1.html) for more details. +See [Initial Capacity Planning](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/initial-capacity-planning1.html) for more details. Consider the following configuration settings for Storage Nodes: - We recommend configuring each Storage Node with a capacity equal to the number of available disks on the machine. This permits a disk for each Replication Node, ensuring that Replication Nodes on the Storage Node are not competing for I/O resources. The `–storagedir` parameter lets you specify the directory location for each Replication Node disk. @@ -307,14 +307,14 @@ First node | Other nodes| Topologies can be modified to change the characteristics of the Storage Nodes. In one of the scenarios, we will show how to change the capacity. We will setup all the Storage nodes of our cluster with `capacity = 1`, then we will change all Storage nodes to `capacity = 3`. -To learn more about it, we recommend to read this [link.](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/installation-configuration-parameters.html) +To learn more about it, we recommend to read this [link.](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/installation-configuration-parameters.html) ## Deploy YOUR topology A topology is the collection of zones, storage nodes, shards, replication nodes, and administrative services that make up your NoSQL Database store. A deployed store has one topology that describes its state at a given time. Read this architecture section in the documentation for a detailed -[description.](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/concepts/architecture.html) +[description.](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/concepts/architecture.html) Topologies can be changed to achieve different performance characteristics, or to change characteristics of the Storage Nodes. Changing and deploying a topology is an iterative process. @@ -336,14 +336,14 @@ file|topology|nodes needed| For information on how to use the command line interface to create, transform, view, validate and preview a topology, see the following chapters in the Administrator's Guide. -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/name-your-data-store.html -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/steps-changing-stores-topology.html -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/using-plans.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/name-your-data-store.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/steps-changing-stores-topology.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/using-plans.html ## Create users -In this step, we will create the initial users with [password complexity policy enabled.](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/security/password-complexity-policies.html) The following users need to be created: root, proxy and application. +In this step, we will create the initial users with [password complexity policy enabled.](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/security/password-complexity-policies.html) The following users need to be created: root, proxy and application. - Create the `root` user and the file `root.login` that contain property settings for the login as admin - Create the `proxy_user` user and the file proxy.login that contain property settings for the login as `proxy_user` user - Password for `root` and `proxy_user` are generated randomly using `openssl` tool and stored in a wallet @@ -365,8 +365,8 @@ bash create-users.sh ``` To learn more, we recommend reading: -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/security/configuring-authentication.html -- https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/security/configuring-authorization.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/security/configuring-authentication.html +- https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/security/configuring-authorization.html ## Validate your deployment @@ -446,7 +446,7 @@ pkill -f httpproxy.jar ``` -To learn more, we recommend [reading.](https://docs.oracle.com/en/database/other-databases/nosql-database/23.3/admin/configuring-proxy.html) +To learn more, we recommend [reading.](https://docs.oracle.com/en/database/other-databases/nosql-database/24.1/admin/configuring-proxy.html) ### Test using the Oracle NoSQL SDK for Java examples @@ -509,7 +509,7 @@ The following error can be safely ignored when running the command `bash stop.sh ````bash $ bash stop.sh -23.3.32 2024-03-06 18:21:38 UTC Build id: 69f48431fc69 Edition: Client +24.1.15 2024-04-11 20:02:19 UTC Build id: e0c93c1f1395 Edition: Client Failed to stop SNA: Bootstrap config file /home/opc/nosql/kvroot/config.xml does not exist ```` @@ -522,8 +522,7 @@ The following error happen when trying to start the proxy and it is already runn ````bash $ kv_proxy -Starting Proxy -Failed to start proxy: java.lang.RuntimeException: Unable to start proxy: Address already in use. Configuration used: +Proxy started: async=false helperHosts=node1-nosql:5000 httpPort=8080 @@ -539,16 +538,23 @@ proxyType=KVPROXY sslProtocols=TLSv1.2,TLSv1.1,TLSv1 storeName=OUG verbose=true +proxyVersion=null +kvclientVersion=24.1.15 - at oracle.nosql.proxy.Proxy.start(Proxy.java:345) - at oracle.nosql.proxy.Proxy.initialize(Proxy.java:252) - at oracle.nosql.proxy.ProxyMain.startProxy(ProxyMain.java:193) - at oracle.nosql.proxy.ProxyMain.main(ProxyMain.java:51) + + at oracle.nosql.proxy.Proxy.start(Proxy.java:386) + at oracle.nosql.proxy.Proxy.initialize(Proxy.java:293) + at oracle.nosql.proxy.ProxyMain.startProxy(ProxyMain.java:227) + at oracle.nosql.proxy.ProxyMain.main(ProxyMain.java:53) Caused by: java.net.BindException: Address already in use - at sun.nio.ch.Net.bind0(Native Method) - at sun.nio.ch.Net.bind(Net.java:438) - at sun.nio.ch.Net.bind(Net.java:430) - at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:225) + at java.base/sun.nio.ch.Net.bind0(Native Method) + at java.base/sun.nio.ch.Net.bind(Net.java:555) + at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337) + at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294) + at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:141) + at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:562) + at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1334) + ```` diff --git a/examples-nosql-cluster-deployment/script/env-proxy.sh b/examples-nosql-cluster-deployment/script/env-proxy.sh index 663fea6..d7fcd85 100644 --- a/examples-nosql-cluster-deployment/script/env-proxy.sh +++ b/examples-nosql-cluster-deployment/script/env-proxy.sh @@ -3,7 +3,7 @@ # Copyright (c) 2023, 2024 Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ -export KVHOME=$HOME/nosql/kv-23.3.32 +export KVHOME=$HOME/nosql/kv-24.1.15 export KVHOST=`hostname` export KVSTORE=OUG export PROXYHOME=/home/opc/proxy diff --git a/examples-nosql-cluster-deployment/script/env.sh b/examples-nosql-cluster-deployment/script/env.sh index 4cd8210..fa09081 100644 --- a/examples-nosql-cluster-deployment/script/env.sh +++ b/examples-nosql-cluster-deployment/script/env.sh @@ -3,7 +3,7 @@ # Copyright (c) 2023, 2024 Oracle and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ -export KVHOME=$HOME/nosql/kv-23.3.32 +export KVHOME=$HOME/nosql/kv-24.1.15 export KVROOT=$HOME/nosql/kvroot export KVDATA=$HOME/nosql/data diff --git a/zips/examples-nosql-cluster-deployment.zip b/zips/examples-nosql-cluster-deployment.zip index 18477dd62db86195db87039c50545ae897b37950..99bc6293f32ee187b264b8d2efba73e7887e3df0 100644 GIT binary patch delta 17524 zcmZ{L1yoes_x8};eI1bQkdl;;E)i)Ek?xR2VrY==AtfZFyAcUN5D)<+C8Q(;6af|R z8)kkY`2IiE8WueJ+0Wi*pMB3g_pUR~YF&QRy5QYaK|#d^o&VGd^d#U3V^ohd_5O~mee6#$c69LAvNvRA-~pzn_6&CWd1~ILcv8@MuNi|cqq~r zFfTre8yXybPI3v}BSE1Bu@0%(?#1-`Mx$^U(TTE&t-xoPCK^>_Wj!_`Zf9`?Gw^_PS;!Q z&O8WXe#ji(o^auAhDBDp`(Fk!%8bzfdf8LF3ipvcMR4t@K`GH4vc zr9tJ7CXmNhvL!$+no1Q|LFI~jeaN|m)@6-l>O_sb-t0hjmIqrKEgRXr4VuK>qcBD|pBE*2(c0N2=7k*OR?T9kMt z>B`;y2339$b$&wm5J!%EvhH;OO-^&%z^)G0GPBQ~g+oe@^=TKLw+xxnj4RP?VPt1-Y3VpxjViD9&OTxA)0D;ni*o&%ijqKq5AkSt*w~9UN+4QQ)3nFTJfz|= zRPC+7dqhSi_l6Cepk7WRPh(zH+={td)ceFhvEL)gBiXWh&G|j=SLti-Jjme5(f;VTHDBz`{<47jd!zbtU8?pY zh|1T&LF5xw^1k5C)7wBlb--~Hb8sm0WKn6f7Dxi`3kT8L+0ePN1rlu9_JCkg%{nx< zGpWsmmYJO$ha*cGr;a{KJqd4mfBUiHuvhimi-}L}550PUaocLhf-#)1Hzo?ze-^#A z7mH7alumfni1clX|GP&ispUiqMc<7xy&+Mjf_v6$(Jd_@OfSbn9vQI-K2SPr*V*?s z@wpKZJ=j#uFZWf>)KLFB%f4|}mzZCu4<<|a!`tlzQV$<;Crj6@dlYDQ5=?TC)1A43 zuj|uhFQRSb;^-Gi67c(?fYGlM-&cW~6t5ra-h zl6^m;`0pQ^7(Z1GmirZ-`)2FN-MQ^hSWdiO%UU1xI63Y6I`PKp5D}9cA@7q#-+H{< zd-UwtN&;hHiriX{x^!7e7u7bp4JI|VvUzHPRVp8?A|j&E)P))dOXw(={fs%<{%+I zUbwT>O}raPd)bFhRMYEgc6Mm?e(s%sY1!A-dqV^u6a``ZMZAz^X~?hb!*yDz)&f;@ zGn=K=8_Y==-{ht~B^*$B+JDFpr&7d!boM-Pf;#8$lwT9c^f^%%(ZHKk`JP`E^T>Dc zkylGIzc^v+KG;AKTcJTga!Of?zMlC4GKI|+vAr1U`Ec4dv`3q|t6RNIGJd3Bi)+;& zaH&;3UoKrEs@R}rSqMqXRz`J6rPN9GUZI^u#mMwlP6W${kOXV)2`IIjFF=FYXFg1) z!o5SMrSxHbm`oh%-K`ZvuSBU0)&R6!Ikv6B*lOAKYC7XNBD~bLSCajiAHe9rkoARU z=smkqF(K8w@k!~_hnm7%W)>x1sx5sTREhb24D&F?+H;DblZK;Wc3CaFY-@k~NaA!Y z;BGo4lU04JXil71PR`88#2KC?`kScnrs4(g$p&Po7!v)2hh+4(fBpAU%FN)Lida$T zbenLp^YzUB;UMek^)7pK%188P2aw4!-Othu#3l`UHOr~Po94opmi$C#v@|?P-43ojYLjV|ijJG0t#(!1Vb+f$XVrAwql65js7_l}UazW~WBZrh9g+8YnDD6_s7q84TlL#Uc! zIH^KPIX34(!~#{fJ>^{a_n|>Nr4wgsU z)TBUR!#5{0S(^uyOz|I>HP1|xShl`(eF6aUZaHkH*=MJ>IMC^Zfq+@Xj%_v1lmJ4E z>_p~{9CGexYX?o*J;~QCJXr-0an1>Hllgfo;nUmiUfuGnLCcDd#!Pnmx)+wF6w~mD zu{>(;_!D&`JC;&Jy>PSzn;H8%@#ZIGw9ylv%kgqHPinT<{Bc)J_eHiOac)kZ5R(7! zbikfeAlR)djClu54C0Y+x;14@iK&m1eXwtgeM52C;L}I7y(5Kq!e4E80+5;a5BAb; z4cymAPr1#8Jxh1mArRJ??RpkshRgS0SB-P=P3@RA6`lZwsY#3+Pe?kjQRP`~YyEDf zvEuA=AT50h>lZql!Jlove^yZ~()`+r@fww9yfypWhr9{GW#=ae!b(4K zTJv`i0oCE`L!EH>`|02`uhMQu_|w0EgjR@ade`z>PYY8(qdUL-BNpCd@>X{)a^q#MA&A{R+6Gs z_0>S=HNtFA%c)&(=s?2L2o7_Rr8bHMjQ8k^cXMRNQbyZTTP^(Cu(mb1jmMsJSj#vL zbLG2Xvdd-K?5^m$QPK%gaCaQEJU4o{^d|Q4uONnS6zT@s_)I52HuW08ithazC!(C7 zt;rSiFOMo}e^K0Fj(gyJG6hL_KQ#7zVv|KFVZnuP$3I6k0{5lVdS=_+m$KrQL*wE> z_;Qoi^;^nq9$FG6)H~XLep2y;oW+-GXlC$ck7d*v5@}_##l7MpPJZkauJM@+_Y6(E zkD0*%Nds9N4vfw=!|tnsoF+^3x8jHg(|QIcT4!&d^02?FcQf%q3)j47q2NsjGxry zBYTA9A5QZ>UW?>xi>vwY5%P^oqkM%UMq)tyGd(aq&ykUlk*E{pu{564S%4{@uIM3m zY^+6|lVQ**fz+P3xqtV?vzI5oWKXg;ZI~1jS>!C7&9+P`_b`8bqBxVlF>Nxu))%%S zJk!8%mb~xj^!EBqmbSx!vJoGDrX4?W?oaK{AD#`MVNwLKoZ_|`q~uf0C6RsX`(iIX zZ$?q-V$rx5j0rK|86GP>g7(g%3ZOtGjiD#=sFV;Y?IOxshn|zZq^JuwztVE^i}KuD z?U}A(BCdMZ`p^*B$HGx{6xdCls6`KHl1q?g*Q+0~f4IW!Ut*hhZ=ZPnnA~fVw%Oo) z!Ba7JF|b%zg7=YfRPciU(Hr9FJ(2HCl*wnhBVUy?b!zRi$d|A5aZZ*dXKDXh&D9ph zkidQoY13rLf4)`OYOu;Wg_Y>{BJy~01?1wt#G(ncoP zu*TKF_9QV{W6QP*mIv+073TCIYs@lpTyhU;-vtmBu%5BUO}>e=aSU3ZPff)ZCs@huTHPvV9?-*TkTqJKeeLE2(|ZZb16~NoFEK%v7g0GOEK4kzIfIGq!nIQ~ z3I+^MmGhFpcJrQgUyS8xN9y*hUA#!CscGb$<=K5Eo@cIq*{bsYv037NKZ7B=x$)?c zr&41MbIDqInMYuhRTf>LjKgG_5*|R2jMCHbk-TH~)02j~iLL6EA*w@NcBv9Pz1m4^ zLbmsG(fSQWh3~5JLO8ZMqMb+^Oo);c?q}tiiE9xCeH|%5fl6x;9gnu=D_3a}5Bzc_ zjw;o2_Y0xgUo4XYZHkA#{tg`0g*Y{5`Ilj^ERmu+RuVnE7rp)PFl2aqJz0k)wHx`hWH*902TIYK_)6JEh+6K(oFt;CXO z8D>BH#%rwA=jrw}InJee?LlJ|K(>JKXE!=#7WL5^a^0I<1VNg$!GompPeg7JQ)@Q~ znu{@8MHi}9sZEC2jeJb<2wbqfc6_%XO*BqHvHH*xt@_)RXP3|5) zqS}(VhAPm|IGYM7bo(Z8h~5SLHF6?r^d_0c#a%aPi)-4!eN&~V&_ZOIirlvBtILCO zvimQFYspyuky^fk5CiVq-tIs%&gjWJ<9R}JO&Ctj1} zgL6nU>ex`#N22*ZR|nsR-Md*|eH6;G6*;O;utv&F2xV&?hkUACPb^aQXd_=^e%mZ_ z&uKeE?b-QYDX|LEUikKJ>NBEa<<%98Yin;82ni4-+_P(&<#FC|+^O#M zvuP79>g?=k)C3$;Vz#u2zq@TDEK#>Rd*f2bwD8IsCU_`161o@bI0U{%Hlrp_4JKojn7^)hbAvWMl!+r(>=io0*VQ<`G-2u zgc&~#*PSPBvSQM)Zikt4yj6>Eafy4n!%2!^^*Iu1?_U5eh2Y?-Wql1xS}$9V_n8GRp;gUbnN{iytMZIlF3;WRFaJ(9r}y3R1*cA= z&)fTqygluhgJNjc+!Yd{kI$&x6<_lD-Q(B5JmC6Lw797Hx<7-9L2{g8p-yA9GyscL zhsiU*7nm^|t8v&Ba~UY)e~5ptT=-|f5>(C2=UIO@?j#gr6_uAst$+Va({gtnE$(Tb z^R+C4^_se;%MBvtC$#9lsY7~$y$m*doS{amr~rxX@r21MG7fcRhUx6mcML)8i!IQ| zRa8^RPpQ41*=oNAb15iiOzEzXG#UFcFyo^RQ-gQAA4w8)c%fFC5e(t$?*vXtc$48w1cHV>!gj?7dyNCQjK9(?t=7G)%RpP@3-g?s0hj_?x}q#>Vc=!PV0 z&Lqk%?A3nL303zWx7IB+Q;MIM7*{c^IJgDapxj*)#MZ#D(DGCKAESa zw^V;P6y~o5D1P{|8X2{(&CyfjfAiO*GF6spkLgQIMR=H z|LxwSDJ4T!)qyWthaWe2%FK)Mk`K4*$J*D9P`udId&=-=4mwz&`FS50s~C5}D12a- zTU3g2J?-drVkChjc0HcqS?kf}jzvksXn8awS($e$5;#tz=g)9D-a)6V%6MST*KMg{ zL0(6@!HX%aG=-dRY#D5AnB*{?5ZQZR`ex-FagmI){U>PI_Q6EQ5#^z*s;FE6zU(guI%U=&nxYv~q$Z_#WpCag!7YLFtehUf&wqUzj(O5E+i(K8J@vtw;LTgO7Gm#_Qg zyRwjz<^ZIRS&!E{j#lG}u{cs|Hwyh!(v5%DvNZ6F)#o=`HBK>1a24!GCK@*`yePNW z?PN*sM{_1IP2EbzkNNQP_t(mb5(h>ch-939Xk+4x)EmCWKt`|065hU~JYrlN<~lZ- z>KfU1uTqUt18?-kEl4zV^e1xF795&1*{15*W;=dgb;}t%QYxw7yRlu_SuOUP=Z5{Q z1QCrOy8Z2Wi_V2C4;)c?9>W(;Cuv9&+58TIXuS^JsjSw~N$$B6WLYqtSoZx$poZ9_ zc1FL8Zm}=RSCGW?)%FnhX6%3B``Gv6!q~Xnh(U7sVE6AIz1?!*;y(}Ve|ArcQ%uwtZ*;cJ#&~Ct-Zf)_WY4_r;#?pEYiyFy66 z_MtlBrir!Iuqtamk2TdL%Ko7ZdA<=NvJsyMeb}ixOcm@-^Hu@m!Ax1hDn0>m#8K?AxpmLrR0-M$w*#;p6q z`b?GfCGnZ|%{&br62V-JjCO-gOF`ss_QY%q0h-;Ns#>7}0*cE-GOpr!xm-~(eIM{# zBW1Qt?dg(r)V%946gmVI3e??M`jN()4eomieXEO5K;EYNzGjTX9Vg{FQ^W5AagQHh z?mv!Iy@_Q1eZAN@Q|{JBPi{r%I$FQ9w^9VgH`pX7OO)pCg&nd~Q@%Nnc}Z9t~=A76io8CHlovE~@`Gba+eh0l5aTjzDXe#^7o zskJ~Op@-kGx1gC@vwOw@Qq|tQ6_9EbXU(VG*R?y04(t^Cf1r>jEG#Zo)^rTtx0b8R zc~PR`^-7h)b(cq|`sr*{nZde|xpP%|r0W+)34{Aqwzk7nhTj!->2bn`G2gUhr$6J) z!y%R|a%pYnerI~+J|325FmRr5&>#Zq{3yy-!7EAQ6CBRynU?oF^;)4B{~Oft~P zLXqRc=ALJ}zuIA)1Hm0Z!)!{iL_0jK$GNQ^o(}n|@>#IQlV=prA`^4aH#Ar?l5|(xlAHX73{0er$bP#L#p}h$KiN4&dW5CNBM4r06&rQ`Xi7_5g;?oroN2{d? zC_+!NL`NCI6RsiMG3}gt6E5%xVr`vMV<=pS$ah)0O zVD@&?9#vej>0L*qiog=VP6IRaFvqb8Crh#h{pdap2Y;c{7QR~?(U3lrjsc7?{R!S( z$$)&6{PaYA0*gN- zM>nl1gL;&=-(dOOYC|RFC+WIF8^PP>(v--^N{S#ttxXis}NJ4L2v8%oaI+$jb*DpUQg&fb+S_OEeeRD zRd|GS#}$uJXf|Z0JVT`Cg*a{}iF?3?=nY=~(}wvenzZ%AY3oXwuX{!IID*i+0q$8A zmK=PsowHAmcE6sK`#kpk`dWG`C)ZUw=}XTM$NZ~()s>#P9FnCYwkHu%IYY*xxdawol2?P61jt= z*xnXoJM?&AkP|JPaN!GgAUFP5{+D1(0n}QfRBb<@LNiPscg$dY7Yk>#jz{;cjFJrH zT{8g{GUM@07e1Hy3RWUV2-nw#a!3#q!5_?z1y7W~VVj_ih(KmF5Kn!=Ll@~sQn880 zV-{}DzDGd4<;A~q%&?jY9beDv$ZW&P#_N;lTx6woLw?5o?Q&zamWdN8Aca6yIH$Nd$8r~7@`#De@?RAq5XglPbxroy?LhB&@kqa5RcW!1>U=Sqa7(2zUe)Sh7P+@O5da=Q$v>&&-ziTop zNc3eo*j*wddUmnsZ~k zT6PmztRtz8$xa!8qQkes%EvTs_yoLReUQ(m3~h$7~smvM6?;FOGch-&l_doKEmfP!}ts626d_dBDhV2)1jV`=9qKb|szGX8} zU0=EvWQ)H@X^O3Rvxy4b&OYddnD{)Ayid27bCngiLd9{Kj84nICvCFEf39Jl&{PME zDqRU`GBMp1ew0lb2PspGcs|&tu#*Iu_~vOE=-rKkJQ>hB5@&lR|0s%9J;cN?-A|K? z=Ha@5)Bx-4!B@!s&M__E;&vwW!fxVLb5|3bP782 ztzsU{FWvrDTFPi7<;G0>?4{sc_Q3^Yt#=b{H|f=C1ltHO&LWEqQyo9O?aU0gsXuM# zuMu8|cFSX8XDSRm+IU1l(`T3^{z;&ADY0X1;5x;$z`8wiw*5w zOMT0s$GzcTAHK})jH?~zEPo?ph&rGwkFQSR$y*6m18cOYlc(@}h71ED7AP9A@0!#}4OrKW zM5KRw0xOI?Wnk0$sfSG}A-dCaB(eaBC=I$`^wpN!@^}z=hfpm&ReP`8tReBUEpGuY3>> zBcJYD;0w^BB|`VkfT)j@Y-1wQs5^`UJ!JVevgR8T3TN*^#`0YlvSwlqDdv?}L^O=lZr=nSww7#PnmAyO!nr7CsviotBI!s-)^WTPDQ zLh%Wx<@;{(rO;_%pVDwg$TlWBw~^%i)@IJI!884ZZzI2`bJ&QNt2Y!HM&}Qo`x`CH z&kCBOQM-A1LtbiFLZ@i0UU-Zz=$>Lq#8AED62Tv8Q3uU0W}8Rl{`BMP(_)A=%8gv( ze~%Q(|6ZD`Vn-h4xi>#HBTD;o3)RAQlNOEe+f&33!Q`&08{M|O^n%h7 zrt;v}u7WWWT&st#4!&7q)y+*Ggl)+1*%}eNwpp2zU54lj{HFd$#ARnIUcE2|~e*NOhs?Cw{=kVe=6!%@J zVbvKHgY4yJ&w9=*c8|Yqt5iMvlAS1|A&chj#HS|3g|zixrjU?RNT?;deiUo^W#G{r z!&zq~#{PydNcip?Bu$RXeLc*zxfuU9%U&LI)Ge#=XU^L%n;+yu&n7mi!uLDoorxP_ zMGvV%8oJa-ORby>zJl?!d% zlM@W<$2+f;rcUuu!lT-$!(8{O-fUY`M`-g)JkjxgoT)`(As+2mdW&g8S*g_FfVFU+ z_1>n?N6ynl^pjwqwXN-}hX24XM=cO2m$@Gj{$?gvD2QT)wN;&=_4M$yU9$m4M@`dm zgzi_Zy7v%~cqNiDHi>Yu?@KnZ<+j4TO{~pP4evcS%j|571LbK3GeOukN?PgW0i|F_kzXn}ib8_0Xe{3o^+g`j9B%PgUTc$Ux zq*adzmQ}+KNB0ogTCB$Z@;a-*W_#A3N@6}uGFXmsGBlr3k{E3z|2NY4!7WnQu`SH= zgImzpBUFVyXO5aa9-%hDk2s~IqFtPxYM4iZ;KENaJ;Xy(`NM@D>T2r6L(4pX+su&B z)i2w~!$*+On?{f^D$?P0NEXJ0Z#e8gSkq`0W{wfuidv+cp92Nr>2me@h2OR$X}WDm%ApCjJGYQ3 z{;@Z`Y#}w8gu~Yp$Swk&51J%ADuJviDuH~I8g4hPBG>uj2A_-Ykt*`0kt&L*eYm|e zkMgQN%$MwQVAClB)%DMa2spssGjDb{zyl08JVXr0{}FDYA^~<0XWnqYm)N>sfDi%O zGG2lk837N32oL8a*oPBXMzBo;|H8!;f&dOYVzty?wCO|&uts#7l^URQkw}voK#PE9 z^e?fQ4S-LG8NfEb1nZas3y6rq4wv8%2fzs*9`eu!K%6J+zBsT5)%OK1CIU(T0jQz9 zzQ7jddH-00LSmrT0{~&@o*zK=Cn+edKTrdg>-7KY+5~gOM4Ukc0)W4B03$m>KLr3X za1WM1;LabNCf`879pP~h1YERwlYB6cgMimV0D}v*QYe6q3_m_tr$Wn1h71BJqe46U z03K*`I6!$pD+>pB5T_XDo?H^;i3Ca!q93C!O*C6Hkb;1_V*ZvLN)!uxgXfD82V8V< zlSv#vkA!z#m}3Y-zz5h`0)_^@0d7D$;{lRC2|#D!fnB)oPy+CGi2)LU5=5ZBBtZ2K zxv>{uK`8E_2|UF_0)ft;?~-8ko`Zlfu>T$lMTCZ{wx#}cZ^DNHh6q*rv`dBUN&`M3 zYLJ@==wAfO0tivy1>`kiRI7vq6Gwsm4uTa>Ee9Zi{O<&+rMnjn2nlr^1q6csin*tu zK6``Ef268;RKk9YxEQSfn@wF?h_R8$7JG(~akEv|bo15I5xkX!5hWWoYQ=WF*0$X* zzrIKuNz{avPX%cb9R$%tH`tW7^MHNHjUQ4HsK0F7r7B3p3GFOn8YeGcSS(A?N`#0N z^b4KEBXe{!*_SdIIHPsDGuhR@A~UyEQCjJt#*&T{>n<=B)A*H(R0rK2b$gP7*c*CG5K@c8I_mBJ8KWJd`vM1 zY@%MCJoUkjI~>;MsDG)8o#$zh_X6Xs5;dXq=X^i3CflGoZhL(OU3;2YXu#8of3r=N*D=XK-Gi5n2^8S^`9x% zQd3{PLHOdc?ocXNieAZ3>b9Z??K(H{^^%#|LFJU^na!^RYU*fM?p7SWtjdnRX;UIg z(8&L7?T5QKKgL44$nt#FLwjmH3}>d=6my=Mpq@RP0l;>TI73`QqaLy&VA0P4y)Vj&8OZZ9|?SC%V{W%S@u&y$0gl;9CynD0kkf2 z9H!8_*E+wiuGFGMM9^P58n-_Ao-RaFlyvS<%+MkaXQXLMfTABkr+&av;--A@3(>#iWLi{fxHF zGN6EJnaB8(fbcPKp3-*-c}+Q{-1M+aKYg!vPIUtzW0kzk%mt4pl~B;s=pQaCD65&!Tw@jkhl)vV2UHc=n4=%nh{-QQ^P zM11+C+rGl!v>A6zU7uM^L6?T6TiO`9K08R?eign>;dV2(c}i$es&bul(Csa~ek^m^ zXKWV%ZvN_b?RVH+DrrentHL#ZImw-jL{W14ysoy`*wwoeoADJeGxf6{Tz9g0V*dwEl1TsgdrY>l-*%O=i`SobFldZ~#{;aIz{dofJn@o+@a-$rn zLwxcDip)+it~5GSr~tUw7@V(*+DN1q$Mp5KOT1y{d_W*h5Og#Nw%~CV0mOfnMJQ!C zAP-+!V~Z|HY!v|`h^6(#bHMTsxrx05NJHF({?+_l_J3)blmi+U&MoBtDnhff;_q@@ zOjZdXP|B*mt96rC6@Y|*eXB3QAFBZrB=|Q9L_gF#QiQGIn6S%R0y^3Ta6z5J!Q_{3 z8@Fl!Qv_M#scs-2jNAt!i=C7Cpg+RF_?O8)>i|_mK&6IDH}L!hU;%#Dm??Wdzy*_t zLWU;9!;09^`1h{YG}Q>vE*W&44i?(#MudLlbWW zLJ)9I+a;Kx9cV?si!Uxs(5()j012Mhw{5*)5m?0U|4WRf^KW9%_&I>ANv#u*KuE-P z0a_RHvC#$GLBOItfA9WHkv+iwCZzb)-$KCe)$l%H@4J*ncpo5((0Kd$()}LX4=^KO zxq-j?4QS#3umsoed;_Tc$pbq01~`MGLxaHmKWG!r5WtF%Fc=23FW|;u;06NTczX%{ z%XWTu2_Ay|gJ3g`0mc_1a2Vc2gKbrc;;`cN!x}>tDm@2?K{?(7L>Ek%_ka#UAnU`W zVgL95+(p2ulb1GW6_bE10tTi5(+iQ{X&@B=gJ&;g5i|=_B4GZxOWLq0yN`f(=K+%o z5#0sA2LXRr1dJ|Vkxzgw0!~^23@_mCOMlA5x^ih=JXQcV1bb)o??&qUNrJpdXAP(= zg3kj^%(aU>TGNA=YrPY2nAseBv3rI3n1jXOXbbF*KVhN2%)tzBl+FSyfBvl=XrMJ1 z3`d?=fYq)d$NxdBEdS+9Sb{aKdMR0f)vqG0|3Nsc!J1b&x&J}PZ2nb_umRuw<3$dA z=?O-MC;rn0toH{7!>_o%U*Lg4Y{9Y@#_Q*s65L0Zeoe8$RkT2iT}`oU#99;yHrx zt}?|PVNA#<&cDnE$A2~3&Y50?c>gjnoGxj?lmA@P5RZg~3#cS3n{|>%Na~|VTY%)&~SJ34K)(T))DESA(|hLFAwVD3dX(&M|FqyTn&UtQ}e|gYZH!#-K6e_r-plh)GQ~>qA zDHI7_a=hz)$q_z2A9tAecd5S|+?)Sr5_{*oa<#uasHn%KwuNiic)&Q<4gPX)h5k>i z`E#DS`6Zt4zdU$d$7ZshYvY4JUnSzhH$_qA{V?Tr>%!~#-@dA@v z=pwqv8^%F{AUHq$0i6FdL&-VAH~_)W3INFd!{B%fW7r3tGj2e=9)k(4hA25Viv+{X z1n}2~uGUxD8D11_LyjNYu)!6>Hh;2L2FMk9?y7QCw9*GA3JpKEh~aSmBM2Ya4PO|8 zJ`$0YpD!5qszBMfnJ)U=%=3Q>(D}g_=&^7H^mhz^`JaJjoHJD8&KVrgB|k9L)ezMF zF!NwM!VG)UL-=2Ta|Ti31q1E>&V&d8qv0gOX{pHo!GCmO&Iu7Ie+Zc8Z-M?U1@LlU z1;8jE=pPC?^j9i?by*0$nyu8O5_ZG(a{v|yBz$ESYM^-mV5y4%!spBxcw2S|V{gIO zGFRBEnTRo|1cI+$_4)e-33PGqL@Y^qIS3!vJ0<+fiNQnteH-!b73ZFZaD%;?z_|zo zAF^){Y{&rx2=l8T*kPlFvesNlr97;038XwbOFH= zgVG3z`on6_j|KwWy;1}8l5-#3|6fr2azs$r)8Cb#a8&}~_XC@-%bf(KEOte;v>a*@ z1?GeD39us=RRgy9U4~osnLV^fSz-27E#&T}7$t7Gkof~ie*A=(Ek8Vp>R;nPW)b=&fM+iVB>@Ly32hMGjf9zCu+ zTXaOj#P(hx#L#0dZIa=cOU1ymn(3c*$JIp;7}U=7&@Q@vV`&Nm3RU$K|2LwKS$;$W&|L(srP*kwvE z1dv~zLO7%SobhZJ!N7~ZGzoCCbUe(=H-a!{4+EIcjQC57C_FI_&BPKhSW>8{Aduvh z(zd)qI8r41tE-X#({&g_n6nZtRS+I_=G@Hj{@g49<#`WaU(OpopL4f#<8Q)(#=_Qu zKRZm=zp&?&RcJuszdOv$M3`R6Bs3ujEJwrlPZylOtq(7zNGi6TGN3uWyFY!FVjN&()RM$vmm1lM$+K4yL@+43}sWG%zi?wFMZa`2PS^o5!XA delta 17530 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 E0kBf1wg3PC