From 9c0dd9742966011322be36343611146ed7b862f0 Mon Sep 17 00:00:00 2001 From: Ufuk Celebi Date: Fri, 3 Jul 2015 16:45:15 +0200 Subject: [PATCH] [FLINK-2288] [docs] Add docs for HA/ZooKeeper setup This closes #886 --- docs/_includes/navbar.html | 1 + docs/page/css/flink.css | 14 ++- docs/setup/fig/jobmanager_ha_overview.png | Bin 0 -> 57875 bytes docs/setup/jobmanager_high_availability.md | 121 +++++++++++++++++++++ 4 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 docs/setup/fig/jobmanager_ha_overview.png create mode 100644 docs/setup/jobmanager_high_availability.md diff --git a/docs/_includes/navbar.html b/docs/_includes/navbar.html index 740ec9f07ae..dc7ef30d630 100644 --- a/docs/_includes/navbar.html +++ b/docs/_includes/navbar.html @@ -53,6 +53,7 @@ under the License.
  • YARN
  • GCloud
  • Flink on Tez Beta
  • +
  • JobManager High Availability
  • Configuration
  • diff --git a/docs/page/css/flink.css b/docs/page/css/flink.css index 9074e23b076..3b09e54db0d 100644 --- a/docs/page/css/flink.css +++ b/docs/page/css/flink.css @@ -113,11 +113,19 @@ h2, h3 { code { background: #f5f5f5; - padding: 0; - color: #333333; - font-family: "Menlo", "Lucida Console", monospace; + padding: 0; + color: #333333; + font-family: "Menlo", "Lucida Console", monospace; } pre { font-size: 85%; } + +img.center { + display: block; + margin-left: auto; + margin-right: auto; +} + + diff --git a/docs/setup/fig/jobmanager_ha_overview.png b/docs/setup/fig/jobmanager_ha_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..ff82cae5f8e5f7d32953b5f4aa8a375968e4d52c GIT binary patch literal 57875 zcmcG#Q?O`3ldZeBmu=g&ZQHhO+cx&HZQHhO+s4^_yZe8?5$8PA!>q{2tQvE~tc)37 zMaavF!9Zd{0ssKONQet70ssIO{Tu$^fBwxJIG~~c06+>@2noqc2npfKJKC9ASepO< zh{I&3x+yEIqlV3PvvtoQ65^9QVR}N~FK~&YfG9*r_{#%@29vr9gNh;}P^cO!_W_E9 z5gLggLj?sIu0lM(%a8Oc2#XwVM_WPMR}-uCANi`mA;U$bSWb3^=O; z`ZMRNBi~&1Ya=2}4!r`Q!vn&q1NQBknu3VE2?H&Cb@OCol!=ctzTD9I8+UF}_sWwx zt^E2W5V8po{{es$S!U(-B}F?1N>*wd#$fyfnRrT}U<_qoM9qgNs3JTZsS79ZdN6rgD*>k&89S~qd%0GbRc z>gvkc2{6}+mgEs1E z&e)NpfEuH4H`ux#2r(YaIS-OKfR-MJS|0}6pUED02Ol8VUmPAd6_{2W$buiFL4bGd zp9LA#09}JD?E#hoJm)}U16l3=XoINr!PrAV`-|~IhW1O*1MUP^fCt{eqZ9~K#G@9$ zWeBdoV`+kW2noouBLfc$Ma07=^1siKmZ4JyRpblF^E?qbV|IY+1byUz&EYfu`3Cd} zMo0%*G=NzHXz^dK4-`+sC>CpbpU+NCM{{0|%ZL zRR_nq7Z!|HCk8|yuu32-0xB2DjE614YL5|5a5w_~6P9m~j*dElaTul%y>F;$uwp1l zznpHAt}2ao!fFc76!0EcY`9!sqE1%D=L*4!@Hd8LNL4>hU#l*y9(c{*iVGWdv=8F| z+upYgU7OLCr3R!GZZ*2o|8fv!pY-0ni*g6~HW04g>CVubpa;?q+Yfg)4sWEFEFMA= z#3~SuAQhk3nphbg6Z{nXI~ZYrSs|cI&Y3V2-eXAHkfJ_zO`uBxn^ZOlSt67eO_7)) zqbWdH!je#jl!vsNAZeV_Sj-V!gI`y!hBy~rj|47}Pd=HP6j@FZTSRbOmP4|g--F*n zs8|uE%yvn=BE2J9Q?6UsN79E*EQu-YG3{`?I;k?jD&;cGi$pGYHO(zek2aS~kHAmz zr{t>*NTHv<+|nPGHqqdZ0W39&TO_G^Y77D*hO7OglF4_<@4YL&qWeuCT0&N2Br#T8uJJX zMy74%c;<2DDf4KPxh7OIh~}~8X|pbUO2*BUvMEVp6i0q_&2=fwJa5rc8ldVnO&4_^ zgBwGcRysyLqoJ0EMvXHi+b7M{XnwK9_GOIDCu0u9M+iN`Q-))~%a8hsyVo{^XrAeolvrxL>X|-wz zYPGG2uZFjlx23$Cyb-)HyhuH+J(WImZwB8$->x6qkE?g5AFH2oAnYJj5ND7@Afh0u zV7yR_5Qv~IAcOsY{hfh$bPIaK+DoWFf?q0rw&^jm|PUy7M%vGdU9&IY_zV2=y zG=?I=LPMS6abpW(Vo@=uQmAgC<6^@i%VIJjULt8CQfcbc8jVMy(VEftB|NBjSSVh^ zu8!re3)@m*hgS!Xhc~oL+Nq6K8;;G#<&(2D@p}Cl4wSf9csRT8zY$0S<;T)BPkQZc z#~`aoonfDerz2FSG50!eCSM64X~7M_^TKIEIuS+^H4-Qihd^=y&3i5ldJh3d<;n5M zg%nKX^X1bP!A);Xi-IHuk#$r$Ogv=Wbc4)=^g8Z8@k%*0G`Clsa-PM(f3k8CG##vjK&eOXLd++56hTz^8p`dMzQV5>t` zYP2`oW!-f8JNBP@F5_(QZN%5_CPgP>Ot5xsBX^b*@)YWN^vxS@PeugW1r_$YX=b!w zt%t2qtgp9C8>=lh(+G9vpA9DuA`j$9wh}LQHGI_Gx2Il$ue*z1ia*`+E&?#)GEcfM zyjribH%2#Cdv|U876D^`hrxJpk+Hk{#$M&Ess(I@4Yu~H24^n|E;@S6{Pg^Uuf^{Z zX2n9pibn_HT$Z_(R@utfl35305=ZI}9Y*cG_nw8kkSfpRnF`zAK-dX5?hi)a@NRRU zxz{}+eJak$zH?t%<}@QU^H;W3B3g=AExe??cF+A6vvFo{X!!pAdOtUIsMT2q}zGv@HvkC&Bg+b`txx^ z+vD}CyTxOHwZdgK1(IqBzhrMEjAnd9=+{Z|1^9z8J)Ix7}87e)AE`!UzzLc_StP_ zI6ib|HGi4GC%IGB!|}25VsmPIcC_ebaa&Rvxl`H0_Y&}(|7r9zns9z4_a>K;8^h=3 z4e|BhPHJO%vilnR_{qqr;rp+rgs>OaZ~_2;Li(=(2#}eD4gkOpAR#QE><)P41EH-n z`tr*Lk3U9;Pl$iRb>l)8DK*@&+M!|DaMpFo-%&>&stQTL7o|OKXLn(QQ%kztID#n7j4s)J8 zV}8`g97e*_{Q2LqwfI1x(yko_hy$X9@@wJZhier)Cw@YQ`9E-lekJzIu^~*H+ild* z_xe9u4*xBBA5<{E$KR_bfkzaNlQWQ_%3H9DxB5*R=k~c_W7ERI4QH2pDK=UjNGP&3 zKb4n3od1;v9X#DAW&82OS&0F{965>fE$1ZkhpO@xZow})mantA+}Bj{GT;k;VXB z9RAN{`N73?@ikx~CXkVwtaro<>p{KLuR}@n!kEcu6WB4wW%IknGn>iI~xV0Er z1SU9jwU7m=k%zY3nX+$oXu38aQE(}|*g&RSDwVtxWLZrB@hZQlZTByEm?~*7CKKKb z7Ea8YP{SElJH9U0UFPW5=FTC@uB)T3^pnfn!KGAztMIcaW3ZGaIhVLCM=Gx5Kz{O2 z?}~PK9AZom}ucK`EU;S-0q6J;}(ClFhX(b9x=TC5v@A3&)s~484(5bFQyWQ~g z=!8X&us&1Vu&0cSIt_InGD0jn=JI`_3*Qc|G`#_F?+5suTwN-4p>sku^Q0yk0e-qU zeP5$^fl#QbO^`7-Ho?GPNxuCZPMx2q;1?YuBq;*{u;R+A@!>Hnbi~%re8kw{QXsXp z8s(<|*ICP{WO9)a5)c!ha)5gqr-wCiL%bk~Om5?C$)X`^!Z|BJfjt8QA#Z;nmDyya ztOOU=(P!K-qzDcL>1)8!EvbFkQCkWrH%K~sL}EG`K;;R_HGq)b|l zyz%kl?Tx(@MJ9}@s31K34m;FVk>V_$iOvD$XA&z`uw*K4T>PjzO}{iC#Ys_qAX5`HrOi5(ltoO>%6Zl< z;c}bZp!!#;Mv&ghm@>+>&P7v+S)nFAlF;zz@qqSQR9&KqmpL&jDFqD(5v0xK`c=bX z{e9^$heaz)cHG1&Br4R#bG~_&6LO)$mg!BGDANzMy?cNg5mv%G2?%efx-vJc@5b%kZg*gyN)KtkcP)nQcAcl zsx2-1m^I$PMFIn3zaltZtEn3s+9fn1Z(+`&hN=q272GP7aYn7#ETO;MOI5C_s)>gq zbB>vjLjI~OM@J`xx-hSjZc>Q{t`mhHEs9u}IQO!m66z}U?A3R(RwJ&?dql)YQUe>J zoDoz+NCK7kjwva|iS_L?HlS^Oq{$2&3B9>_vU%V&kRUO zRK!S-Q8bUFO50wf!uv%i;r=NgLhEjZBoXn+$;uFv<9mr`?rkCX_zIvkdc8Y&1qPKQ z`&zdn`=Ct$M@Gx+V#2~~qvNgKd?ShQO(hvQ76-=OXP|0b?LTyDCBe8m8)0HSyBq=$Y~+VV4fCgar5r%+w0nM&^>z z!AQwuK!_6#d$}^A5ubm1q@#_ zDM+>i95OmEkg}cgk@BG8nk|Q5J^fV2)!ah?sQZ^ z3Wo#8@#F$|33lC*Jrj(kKWSh|;YE#at(2(>%A^tmGyxq&j&uZ^a5VrRRUW`rKo?7n zJg*tlq;-cy$Nm65vje*Uj(zPw>PKn-ax)Jc2zzve5C9d#l)B?GeU~Em)mp8zeqg%6 zfs8t$nY>3gB0_mZ2DeeExeY05B;#n%+_RIz?FgB1FG0-Tl(b){L0gCmjTQ+0s(>ta zcvACH)8?5j&mdHDO~8J8AMFEVAY8AWSTUFkjUP(dpT}-RW*0IiDUVg!?F|{o ziHL49IV0O-tYym`DBMz8ctB%q4uBBjaq`s?U`wv^kCc>5_BX=VjuxxJSf`=p^L1m~ zJqNfm**&q=YXzD?CuP^RAd6~6!4g=)Z_{pK^e(m{!c6)Q#0OeS=_K7bBx4HQd%Vm6usdnydXL(w>)}^BI|L8SIvjaYCa9vyF6XRMka~*p1OU=Uq-m*rDY=`tObk2&#t>2+2p? zvg8koQKn=TZv!E}c^RrfU%hg&>d@cxZD@7!5_|wy_iDC1=ApIBJw3x+8&>aL-19@PEu`sX_eqm+!3_#AE&F%ih(IVnno;L<8O z&?8eUcakOM=$Q@!v?Ui)H_O!mK1=ge>|=~kC8Sr9-_}N^-4_knX5l*Pm@TlKkr}P< zJ>~NBgqWp2x|&~U26kPx@00bvaV8scnXVgJzJu`c{oE%mG8jt@R1VI>0Cq&E!ZK!` z2a^IagWv~)toRDv-69{+O6t8rNX-vaZbblU;+YL>CwhXUos5pQg(Zedxt9zEzo^n* zW;{S@q4~Do15;HMF2cVll?(~yq+gAwgFRk&AC=u?-eF~0Vv+?XS~lZlg$|O}QO5*# z+ENw_Ie!tFYzZ{oP{QP1x=9J_H#MU*8PM#ibt{k8{WSea3D6^F!!2bYh2)=132u5> zY5Vt~@hYK>ONpwq*Orr}KY5 zoxUW2{$P;R`wI0N_2b-cvB$Z;h`I%wa=nonaw&$0$^~Ta8{N-miCb$i$${6Ntl$zz zwFq&QB$44;&ZtA*3>;a+_20@2bfjN`jw2oKgr6hpN`U7!6C>`V z50o3%lakyJbV2-PGxQP(>#Y7+Y$VMhF(c=N>UA<^;Z+>P;c>xDId}Gc+EKUetV)$} zz_~2bt>YYiYvkTlP%}>WCB)`x$7=ke=zeEeD4G;)r=S)}XQZG?*WXxSjmokH_YHLG zI|oxk%Xm~wN+d-Q5A zbT%&r<4)6bwkPx|`Ftl!869ukAv<6nPzwCOn3zDJHqhV5`_=OyxM!iXjWiPrYj3lL z&0-0VQ4Sekb`6*`*PKQq8F`EPMe_&N0|u6nq9HNq{BddHu4W$sY;?lj(U2$*79Eu( z0=6YTi2FE>d{&WQ7TE7cb*+1)e-er@?c$p~Y_r8dN-b=i)q@QMpohzmIE z#AX1+#g3D~G;GcuG)y+QR@O2?OK{HZ3;Q4=wgri_;AF5`9h(z+(boi~7x8trW^hC# ziQe`A`z=x0x6Qw-&LF*>Az*+B{@KNr=$e$ zk{!b1HY4ASXJBXxynVPnp`NH(%{eh0uf9{VRaT{SN;C$*B{I6OWI%JY_BU(^fqb^> z9NwXyo^^=trn-ER?{b6s1O(X6mj$Y*p0-|-U<6M~i{3EE{P_R+_OGFP0ScAR=r3ba zE}E>h8R6WRG(NP4fdWp`XIy}O#O84;W#@CZV*CIrQYats0Rww=hk#dH&K~|da$&j| z)nBdyWQjJQ6uF}#`XciW>l@s_YwBf-n^?d2kf^H3O&MQ)tk`|M_`nk;VId$zR~+#% zFQ9Q65M}pST`a4toc-w@Z|B75S9!Yc`L;}(#jdY>D&)OM6yw6V3;#?9ul-RKVPR$T zsvuP+Hk|BB2*>2aCbJ8VDUy1=pvT??w)tR2Ky2%Ep;e7VkNfpv1A<$YXyCh@6)ns} z9*f-dKmOh=<%S!wAoZ_;-~?qsG)5XrakJlB^fOq`qfZ{@gyv)_wcY_7#-N7SmejZ# z-FO=W&+SC+Jp3gD1rQFS9TmaxIb=Jg+xl{$FclLv8XZ6oY(cByBzMLR2FrB9#t?^u zNmz3URe|O(T%jxch3{JK<~RT)d@1Y$Z8ouBUj* zF^=3|Q46P$E0l2dAe>Pmc#nzbYo_5ddfCcF=#0KE#^tk0XN)yiCoEYTF?g*uC*ZbS zbrWR&tRLqH3NK$WXUUFGI-duRd&7Ycd;~&ky6BqXg)C<(IIQ;uw0xc>I z`SoZNk8gTcvAEV{&l}^OROgQFF+ANr>t%axY(V(J6m3d7JYCoe0ZHm<8Qdb&555Tt zJF@CCZry5*MBCuX_e`vs*giw&j2SpW4>?bq51@z=&J_QinGjw06K~+#aELn|`RK9CasB<8uXA{PR zD9w_1cAKL9i+H_AqpeV|sLczWS>6;o6|;7a!S{UGT!|RtQ|>30tVp!bM2ko|%QKF0 z<)+#wNRjE9Gp*+bBq+$}$F)eva3Ho8f%mRVFpT5S28mwccnJ@uT(q(np^wXBReY+R zI=*K3{Ql01j>{pq@h*EvOf=^WbjEjy(MmL3{avYw;nySQdq220D{r2)T3m(|U?O?< zhZ;nC-IxpZ&h4i7^=aS_o-f%}ZdYba@k^nC84`v3{rTJUE~FYPGXh2!_9aP;2m>%1_{ zcGbJmTtRwDh-Lwz?ZlA@b--y9mi9!1;_mH`NA6GIk`vj+ei$wCy8Ib5pyP5B@`H=` z0~C$rSg4|!Q`vcyP0qo`$S*`8nH^^6XY+kgJQw@tCdt}4Iq|Io6vIuWe$$H|OpR=N z8=jj=t#aM`lZ6XNzSiJ9o&a+1T>;Ft-07p^@_gGPH>X&{WY2=Y}(EUvRlqf{h%csX;ia$#qO+qbi`_ z34Ya+_Y}~v*%zc6cdsplB}P zhuG{};ujJ7Sq5$V_=LocWa_CNuo)ysf_J=o^4Ao`C&p0=((JCFbC9Bk-K-VPwzY$1 zgI7ymS-WKe$$vH`GGg!IriAq5OLMhO6;xE##z)3vYreHnn@=qFY)j{Be=bqd&#tL1 z0E&cLe8driETtw=El*l@pwo#%M^q@2a#^_usM!2wrq7$Y45cMu9tILV2|zKbSZFuq zxP)wWk%979Xe`g2v`r=@gU)OenY#IsU1W! zuwFt8#D%fom2bU6Nvo5fFAs?ykIuLfL|E%>BrmnK3uah2JX(c?BEs&S!)f!obMwai zA{eQV33p{pF3p^t|9c=3CVEiNp=p}6<-cBUX!xRH71i1NV)8) zK|oRx)}GNVj&=TW94*W9T3-ecizA18$lXSfDLl?858%T7l2|TzIAgm@vc<`{Zq)^k zBT;$EEEie1)+pdTr*b?-z*H_J2Ex#|U4fA<$Lz~|VWK0hlje9+cE|4Hg~%#4H40`# zsxNPLat!b{@Q*N?WWLwn{k4L~9EDTe`4})m4j~{`DWj8<0a_Pn)>M;WyDZ*9pmhKv zvjwGVo$v%uFytunPkGxFy@*R7?TVl-D{p&RR$@%NWPZVIP8;YOYk<&X0{XoW+8SFG zoo&v`9xU!5>CBCka5rGHg4Yu^w5>bjdd{?bZ7gs=MhFw1ZK+4zs)&9u?^&k}#LVbU zh#DK;yknLpP+ASp3yyQWTt5fn=JE?#<;%4W7sZ_JZK%zSop&%UteZly5tuU4#?OQ~ z{Q{m_qRS%HkFMXBCOd+Z$At_OM(CWe)hAco%LBr(3KcgCG$qU7`d5v!J2NwlUfB1L$S_@ThEoidBYr{#wMl;NTWuOc%Jg1y(eU z5EOzcjnFB>i#qQXTG|R2L7+oHj;+#y7~2|8`&nJh8#ooi92dlIF(}~F^X*0?CzV@> z*K{1*bICV96y(^Tovz>8oS%SO2yRiznEa$RJ1SjyTuyVY;dHu$U=Su=J3QCsETUl4 zx5DcaoK3`lTug)f@eZIgxDHwT?fWVIAHOXKI~XDlHsJ!TTx98+6#&WXoXXMk6&uODdMJ+&s^jzipqF&mErt)=EADW8YXM8zJBXBk88n0Q`#cy0ftZKL26YK0 zF4Fkv#mZ-|^=AF!b3qx`<_u6ygI;Wr-2H)H+I$B|ChX(M@ zNw7K&t;553@Wdw;uDzP#S%`sTodY5s%MdIW!luR-;v!v}=nWyg`GrP=C-OWor5@GI zc)`e{HOfE3-O-slA!|D1DhqT5MT#>7#kF66rFQh>Cibt@a9}Gi@>~5owW*Lohee>d zhkXgc1Y4a+coc;b%4Cc7p8aO*G83e1Vm$t;bMYFgSkqpg0`$uhNcES8At9lwnPFO3 zagiu`9w=sPkfC<{(W8`HPN#lfNKN*zE40n~Qs*j8Q;4b?^>vs}2(~6Jf*w!P$_i<( z$_j?w!+v}tv1gBCgt#*--ug+ND6Pwr${|lP-_bF>*l5PicIRO$(ijwY1V5$n*qrin zQzs}UwkKwq#%htYe;^2Kf-N@FAc+FcM3y>raD{TF;d`u5G3y?R8*cc15mDvtN=Hbs zkw!oa?qL;)kqGTAe>M#dsnt)v7&25RY@ne8^X?KG#}BvDuk=z#6xZ6DhP{l^)tI8M zhcRh!%*0+7I^NW2l$6!!fg~_^a7kw*2yAhFK4)bZ0_TWm!=-G9v&ef2Z@JX5SOYPY zFhgQ6L?_HKLSr%T;YGuy`LnhVf{1Jh8LhFsEsoKZM3c~JhMWz00y8|Y84gAl(^;Zb zPpdybh{7T!$lccgr?50z{S6R)Kmkp=7n=-7NiG%`;jM%;a*WJf4xp{03pZy7*7!*H z>rCB07KgqeE&C|EU)~goqQwo^aKf5P3FkxolO;n0i`jwaK1p3hmeBKVrH6bM zB4x9)-tdK4XnU?={CE0&Em)S z^L(OG?TcBaBt;k%W6QC?bUe-A+7c*aGP47cojeCXH4Dz=5o2r%LT|GrNHI_zg$_nB zky~MtyEj+kbCmOtp^NkQet4LnKT&149UZ<`+u7?9j)xI+Rz>nTWbVj*m?1WO7mwtQ z#viCB^ux8z2S{<&C@E-74}z%aysRV?9rj5+sE);De55UPA<^6zWg#ZY?5T^nfiWVr z#Z7AL9hQXnk0e8|F&?agm_w9U?uwN0iGngIGLY^I|HO``3yAWep>;o?$Vimqdz8PK z2+t0w7<1<(r1Q80-W>cLZ@il;T=BWEaz{^!<;6@rh5oSDp>zrCuxOT>oZ&wYKuo~y^$z2cobFaK3;??LUhn8WoB5xYlopO(>2On~j117cwqSYLKb;N(2YY95oHX;8J08leuR zSgLfDDj#&=Z&D@z(T|>Y$PpiYtSPp4%or6}Jw6CDMN!eyQ|3zib`!osJGm&Ke4t>5 z5M+5rf`kJjlt3Ty_o%4?+`{lxgJj3Txuw9WM@O{7Fa_Us8)mTybhT~QLpvI8OQZDs z1ekwXToiGb>UxF|>&tP_iO6h136016`7F#i&l6%MIM;*ymh92hoNt6tkEff z!>b~J{D#Rc9SS&|fvIw_Ho_;O;Ju*9crpUwq-(n7RS@Qn+R+?aybNh7a!{Cf}=Ta399$sRB;eV?%npb(K{Orv(VU_R9Um>f+OjV&(ull5tKtO!jQ z3#s(su=tEe@X{5(5P#NYdiQbPe$p9UuWeSND$mmE26(Z6>+TLiBpi5hIdw5Gz#o-2 zq0I(;4POgXo63nWrfWy~$w4f@!IOQ<6C&>L%?N^S&BC0`w2MOyacEJY(daYVIxE$E za?$U5_^Ij}t<<+t$P5{%&iJIaODbqIkwSg9G9xU3c`}Xp7<*V{%@e zc1#(s=i!MQinl(s$ftA{ckYWYMj!#m(vsvRn9d=Gf;SCQjC!hFV-_3rcE|1p4^%?) z_NVe`yaBQ84q2$|NDY=vqp!%HwO0qO4^LJ!G}kO4TZih~M@j0&d>o!79C0o`&5&Wp zw_*E#{X`YL(HW*3npV+fJS{8cLUrv`hE8pCp@GrxQ-@@L{kDY@Lk`Z%Xw6y59oB~U z-$=JRG;qVPhw?!&8eFN|O$%+Jx9>VdEYzk0C3i*r{<%65&nj~8-_;I!bJ%4ob~^$f zQ5XKlb*Zzt?qzdby`+-kpT!D^7?wQm5ap6XN9?&C7lZh%%>@NK=g`o03~(b+d0>~3T2zSsWl;TWCsx~7}{DEko4fhnDJ#yHr`&urI?5}lrP0ZZq;9X2aj zb1vG6B_?%vYFv=90pATL-(OCArB>Oz`aG; zgLvRrCzca~ET?~5MWq);;3C#&qKS{3TNcmCE1}{jlUwh2aHd+7e3qg~V;(-}WC<94 zbj}U`def5(y)=G?*8CPq9rl#|J341ACepbQkJL_7F>Tn$Pk)CHKpWX2q)$$<-v0 zV~0}#)C5PoY141Vf^#MM*E2_#745Qj9iaWw3cXE`dwRL10S(iK9$3d>^KVhQP@7(k zUT-Sm5hT;PgjK;Th`#G_7WLrh-WomgFA zjup_BQR^^;@R;6+w#G09W~)D(i>gA>D&&jjYhW9JXR{Ll>@GYIpQ~Ll!_M?uBa=-g zfe)O5SUs`tuu1k;j)*h3*-?{&ACOpuob?(+tb&n+Lc4!#gzkEz#M`_9le~ZU`3LWr z9kio*e#3{RdTEjKq|Zg9V}!p^Q9Bwkbyt84CU0j7mpA*m04~tK0-V@x0%p3Av*2uI zk#MiXu$Ej!(QOt7XV@Si|3=WdTqm@VAPbe07@ATKeq*x6IQ0eJAb}?39Ng0gQ$vgX;|%8C6FKk-MXns~ggW_r zxa<7zS!Xt5N}SFdcn+52e|Tpj)VCM zBaS|3S4Q#wkxwTPP7tP%0z1ugxn&wn3krlPv#&FdVdJyp*c-h z_Cxwc`-C!ssc#IcNOV|!$){rU`x_Ac_+$REURtKn%1P<0qo9`YxCssMb59cQbujP55Q12A~tx4&mix!3g>7j4= zXjMg7pv~O~`#u=e?~1zQsOJ^zxhM{l!lHRBoh9Rm*;JbkAQzkH z!GH*7R#Ge+pKxbbBX1r%E_#sa4d{DnyBZSiny>5YL4XEcgN+!Jc95*y!l0yqmob(m z^`TT4=m#>0kY*{EDFL|IS^U_3VXESH#83)_uQ~td`fmd^c&uHOkWNo4=CL89T1mJr zhsh8?f#kod6NdkY9tkO|riS-CZV^@pDKo5cE1!piL-DqpD9ofDkvqf-P?r+PG!L{> z3#rdVw&a0!O4b1nT1W#h+i$`sIz?Anm=JOuhU?Kb*9Z0*ZNuD>Zg<&?%4_|U%DYG` zKm6d65OaIUSXR^Lswmj*U9q=RXW>|aWqPN}Myj2)3u-n@K(}AInk33IR%=Sv+6-|$ zP|Ilavz#AlS z1R%U8%Jej1IVh)!2fMl^h*tYB4`7+avx`%3V`O(xT z(Zba0`eSF(izY89C%1X70U;Z2iRZX`KrOlVHpWJo4Qo&>pSk znCFg^6z$a7nHZt&ElVQyxZvuqG+E{Si=GyNy8geAe}yJeh%7zmKcqdtc$__Z|6M<- zRbb+bk;ZNfhmWi+=QaS#E@eh?IM3fmkPwBw^gUZ<4Vi1L6}0&A1i~P=hEye-S2*)q zD2U(%B9S5j8dc(3N)U^sGCLoO&LR9I6)Ks3DES>cX=%1Ea{^gGPV9u|l5)@cG2-AV z$FgRd8!58;hgphD3r=nSty_oXiFK9wWu^WzDOYS%XSyTmE0~VOaB|1PrH219p@Z3s z>I|!R7>h*ojGd@sGGxaK>S13QI3qeDVNfrf45y?`i{4-e!ubUsQUU9%JrXSi>g+j0 zV^zBl9Y3K-8YPp9YMkO%TdB@mWN)>Y7#n2{aa)sF3Cyi&eE5(dW{-CVy5aH+Z^#9g z9_jnT+a#`M6X|pxz@}9rn6zBo`-%EIh6z#*>~n!lRJCIv`-r%+L%oFnBk|6>;M_Jd zKi((__Vo4+c*U0x8YlgRI*{I*71aC=TSr*~Pp0Hq4 zt|SD)Fgt#CCk}3z%gu^tks$GrEk_~k6WBUOreV&30B4CPe}jjt&u)+mT!RJR){VAG zyxAgoF{Xqx6{!>LFAPTUBejXQaOq{WXiadnVh1%A;rh4`rFsNyzvroY2d;`;*OhvSa|1b{nwM zpA{7DFCo%}f-uu?_!%ruv;?IVePgWp!hYFs2)#zc(_I+B*4z&xHWx(84k#W_8^gfy z*!O=YMW_w}`bs5FMI2g?m)v{oNeHh%fQT80>GFm@>&`#Q(^c=+L*f*km2>+ksJ$=r z@oclFB6LXcchWCdSiA`xDWaJpADyF&WqRzq&A z{88GW|DK645cY3J%htRzq3ahzkABhB0w$7$!yrKg%tm1xv-iaNuHuH8ObbiO*uoLw zk=DhoAJ;X$^mY{5;QEps$SS2X{vH$94aY#c2#=x#hB(~`KL2#T*Dww;dGIFH-J5z~ z8{t+U0YlT~Yxfe_b#>KPsz!jU6FXiJtG)A*Q#h_q`V=fcvgGhjAz=_~Zy{h3QFW?O zkk(?ByE!&AHYz!8jo2v50=D>k<1TH@MU1Ul$^Oq4z~WjeU~~U=&tjvw95IAeunI#g z&K_Cm;CnJ_JO}4MJ$XEFN}}k$3zI}CR9^aFMH2j?Qc*CYsSL&H!q_IFKrLUm5~G=o@3DL= z5gHG@B~DrljEWiUZRjH!l#38)ia2v_jMWJXQsq<7VrX*Aw3*ru>)UHjlUnI=PDy4| z>KF{`&X*nv8t+aBAj*`C>niS#D#GMHZ`$DE#FC8b_p5ot@F`CLC&gMd>OZF;f#a`< zgeul;pwq9a)bPVjYI_&wN$y9@$Xo|v{f+Jej!^q{1rYL5`Wls2((u_ys6qaTywS&W z0t|a+?vs`vdrnaFi|66Scd49l?_H1P@Pv@b^I~oJXWEDw9HDA+!L}SHbJ102(J0R! zL`W8I#&JyQwoO^Ny_Kno>Y@|<6UkJ>ME!=w zh$(d`i4Y9z<)HX|ExnX02`DT2?)3;B{Gdd6jLgFjDU!pJ&4E&5&My_C+5{PanUue= z6h~Prgz#-v;*roP1Nv?GZQNA{@OkB1no?-vsTuBnW0!jLStRzh! zAj*h-Myrc`g3=piACckhs9=A{#Hi4t;&Di{C7=t+=WgRA6XU}8qWmfKT#ht$fpWXJe`-+k?hUu*PcTRS!MFKUCD<{tMax`l z(%}OVROkWTC@-nxfszfi!kDu93gAcO53X2WY&`F>n6*F(jE#!F1(aq1+)<*&vB4fgu|jmWl*a z;XOV(Ql}`P+>0(WYC#PEn6ma?dp6XNj#+oe$z%^Y0YXYTIx-3LmrQshz6CQ%nhCQE zsBg-u`KR#h1nv>vbU3pp5FJ~X`Gxrqme8aHB`lz+X7RfRCuZH=(`sbWiO5lvqVF?d zc3kg9?+i7TnB{zLH>~XbqdK01v=MDY{f!6XZ;1QnbeM>281UQCfybE#ng~rP4hxyF7uzCxei` zGbq+hySc(u4dx%P4e>e(_Unru@W68svpCMY_0QmxD!xNSz?*EzsyUl%2YjXTxAO}l zr}qb&(8h3Yx7iehQ-QC^Y-Q8UpcXxMpcWB_n z-5r+yo85_-*qMus*w~A`uc$ngk(rex&pA>jtlU&Ozr8=YB~Vg^DY?Lo5+cE~m2jJm z?f=4vVZftYk`KOhrgYsPurXqh(^G>fmSr6?s-fhNKQ~#eACzSuAQZ6NWs}@C}F}TN8m688<>ciCd3ll|pDwbk<2z%*VPhHQRURMvbrUnjSkt9!RRQ3^ps@J`lI1JR<;S}gTc^8TZOR?PGo zeB`ZeOfFg=H_+rwxb&7QiAW%nD14aVJ)q2krQahW8a%_u7>N!T7#^^+$f=fp4{<;5 zYja0Q_zM&!;0q7!GEl0NJ19#}EM(HpbG+Qr66-vfj?35%e!AJjiKNJpPnbd0rCLEq zp@+87NgfLwRjCZWjU$h_U@vyLr&jkX*4kGxUv(SUMI0$?vK8tgsNPSF~}mI=6{EH-M0@|LZ%6Mn>_N4uI6Sy>}0C45p_2IL&*Bic*7v zF?38xS=m#&(6O`^Agub4nU;JfVONw{H?Vgw38%sZnE{PVErxi#Lrli(D`k|YWRs7yDKAy@Gh+ z-;JF))D>reO67o?H|M`JsBaKa4_bT>IvhsCKPt4t9LhH6t}KaTn*JYxSR)J8!e2Mz zzoY*TF!WP_2dRqHZbUwO-v0-bqKAL|w2iLLph@!&&$}uk>_M9=SKj6B{)d|O@FV?& z8Rdr!ju`yM@oBSuoz8txJo7N+pXO94Ks5=~OnYr>|ACo3<-uR4t5y%Yefu}52rJ}E zO#(~%lMel#Xj~T&|H2$AQQKwf{L`Fn?pL&ix#0bSyZ=N}jRpE9dSFj+9m-~9$>dPJ za^MD(xMfz77va(<&+On1i|UNb$;gNN+^`H9n_5%9Ur;Zr3vQf4#~kb6dT4b-pHm=e z4&4(&#y50Zl~A-PA&H;*@@CLkn~E{fzsn>K4>@8ZJ2dYTsk4&u|J>%|p>Q-SQH>fA zab~9!ujy>|?=;}u*gu9xMATQxR~nln4U|!54KIdIJ(*F&m6XZZ)iGB+xrx3=1ZIVh zkVncN7piO#x1BS@_ifX!MQLgwxKf^>@rH(wQ1vWcZY2&~e z5X?2u1W`A9tX1B7s?(!tRnHDP)t*YF+56qy;xpST__xtJ2&?L5C}%T6YA)DOVfXK- zwe(`Qr(9#D5E5n*GkN64%W;j8g7`4SB7xH1POOwn!F)#|k*`kL=7}w-hq81I1~oA92RgYNFQLU0!o!v}- znJ)$3C*9tJ;4vnNZB;J5?itv(_IOcj3%+SoD5tt51#9vi zQe-yZAnHn-5xYOoD2__$QP;=6i8~166%Fh(7{z>ZLfpE#T)ixxv#l!yHl@B$REqy= zhoAsk_>GpT zYU-Z|aVraY;!)P^_^8fO>J}n|j zmMpYihVW$A9G0qt+L|?oT3-g#K_ewUv>*aijt?6eAaI!Jj>_F*L5uMPTk4gB`Il9L z#p)7El(Bl|hd^N{7nL{ju98Yca(dh93~4OA-o+PJHq=Y&$vB9A*=|ix8es?}eIQiOF%aZ9hoen(~GlNuzf6d3|HYe)Z?}W9D=W4TcU!0AQ zAW1nM>}R;#C`^T<+p94Y$v8}cXxw(fC7mvR?#dxx{g0v!KkD>=dZ{?wue(Lq(FAes z$ux^*OOK*hxGCbI)f%7A;qVzCiI< z`q4d@4X_RxKSgr`C4CHk$=WE|-^z3W*HE&1iwlUXY4@J+LAMO!0={Dv&?=&2i4jo^ zz@f=NAcq+z!PP)0Q+~GNxjkY~Jp=jI%A(ajnuKc2!G=%?1*Yiq_51?jvN(?uodWHu z23pE!RODZ^5+@nvORxKDnhDR5Q5H_ zj`Y4B9h;)@S;><=ZqRL(Vz|&S)AtpRkwZb68p{cuS{pw#RKdDHaNKnI0a`R-I+ao+ zUHsKsC-}nPYJH*`B>BO=Q?2Sypjz$D`?01{NDPQcF0>iIT1Kn$6)omK8nx~^ z!pGn;xsXCMv3rJE3DsFD)H&n^c`~`Ya93-D8X+dXKDa;?1u3|i<%nYMXB6tP8p*ao zsJ|=)X3J9r<}&R8q_f%~*|*tDWhLDh((5tid$bSCrPO&99&Xk#5M9VK_^oD2w5X5D zv4T>&1Q9x1O!@WJ)HE^*my?9JGwv>q=NxrK*bP?JRh*mj@1)uqshw}MBoyGZ-kV?A zpv+`BdPx386A~nhPTc*VxOyC@`nhuHWZ4$0huYHY?8Scvvf`~&m81P1p`A2R8Sp&< zk#FbwtCP@7x`YtF&b0_2et`zcbd10iJDjqR-x8HQpV3zK+fX&9&WO&V-|Sr>6UrFv zNrN@wCUp&MLnk6z&9+I4@m0bFk(`dd2yE3KG?hq_3CudVnwoH@Vb#4k zs=TJ;dkcWGlo!z`vvr<8*TBG_$)%?>Ikk*7$~4lB&3OwnO`%XFxbwPA zDi7!NQ?&@b((L9~X03$&G|KHDmc>YRylP-J?pr~WDk5tZJk5>5Jj2UV4ZP?=qlaN; z-wSR!QK_Usfy#K=xshk1F7^6Glb27RM}79DnVQ8;Tx5g@JmsyAm*yX?{L&;r+LPg%s}*KvT0qte?F$>P2I$07Z7 zqejc{Q&o|B|3%87oc-r$_dBv1oj?O}7lS1}7zAyr1=INJufZ6lJp1iK(+&!Fcvzlk zu~=jC`oVS4CePujTyO9Zb4fyJdhwlgt--lsajIEXMKV_wieCRcI;tVR;Dk2g^xZiB ze&)Az6J1gvRVz1!OkEPq`||KThO4-dGcsjVnda$YDG<0vH!dbKZN#0nIz1#!$+8=~ z%PiDqI!Zz|D&CbtZ0AsKcXORw%c8c{_B_|=W3`~sM>n-}p;XXBhc|cd{k09CfYruw z(9zu3L|5Nb=Y-f0K42>h)9;b!}IuV7%=lpN$EW_ia%4N!@xGA-6LDZtjZcP=7`C5p&H_`TH$%2_nVJdvdG=9 zi%12ad2LL#dCf;zF)_4C!rOI>}4xUjMk zdqp(YHy0;_IHfpy`#I)qpt`%5@$-aM9aWyqET#I_sQVko^k{K5gZo_SDU;3C)D%f! zo|pu)zc{z^?sX||6Az&ExH^*LcN!~*Vk9* z{K|;gPs7a3uG?$BkrG9%HyoIK31YO2`Rk>kNza^LQpMaNh1nYoD)W9!T-C+^%&Ka3vQL%_>PvHW7N2lJ8AMt|O zIN3zI`h~tz*zTyp%s7IvY5kJsKHN*Gy#XDlZA?!7O}dr-fWpHK4P!4q{mm0= z$bInCb{EiyYR+ydN^Z)uVN8MDC`;_LEAF>SJcvHo29Jc*xayPX$Fx^5WBVL@FG8%x zT`DFP{Ndo!Um9vBy4nO)U(^*~?(}++>bu}5b(mLNy<*6*WJ6CygAQDQ*?F}lvWz8O zqI-^)WILaA)9)p0yU8#KYIy4do#o%$ZE5yW+2jCSWtY|?mLUI6wrv8EqdEaUvd3ia z`B6dDR9uDLH-E9~Z{0gTePQi z6kM{hP`(r1S?oG(HExI<92%{4T;YI+n2T7CxV7SryrP?eBZyn49E{cb;Eg;&t8@#* z&9i`kSN6P9|7`!Hwj{wJ7lbA=YcL3ovvrLIeKgt_E_W}BGGwBY)?c;S^*aI+PZVGUK+SrF;TD6lL{r@SWaJfBm8=TXG~9^94ttH@J#S-(UK7oTh3Kp`VIVwNfTp*(rvuo?T*=TEPMequKU{t*$N zOazF33zt|SNnPL{F&vU~&V@SLR!f|}NGr?RFKvy};i8GOedBle`_a37?RFLNvz(1^ zZB;hgoK3`rDEdd#fYALn`aK}TL^PU0O|`lLkhOyMR}NQB;*NZv4=a{ZX>9_UygpX6 z(WA_o=<8N$AL;+{Y56?=@@dQtFp?!u!`fd2aAWnnJy1iW*#CIrNK~Dtm{3-8FdKe1 zpo&W5N1B)xfGAX$`MTU#_t)&xY{{|$ip+b?mr%21{|`b9@ia5Gai9pOAGGuIP(pN+ z$hqPO^c#_j^NmtSYi+H8)kcvvR%$=TFJ`dV%~sx)p9k;Sc2DmwVF%P+$?2{oSB0_3_FsI9p$f*Fj`o zS6#}CX&q(?~V8S zALRkQbCp;cT;=Kf&&%Joh5Itf!{~3#fE!ybjZ zlkapl5csx!XlcmB+*jFFKVRo=HQ<~62620uJVn5Np$AKBKo*46{xAL797*A)&gMLC z11Suz+_iG6%QqDMG*Iw|HwVN3-iyHI;J6NKqS;Cr7_!Hk9)0zhKTeAP=%Uh5Z2#-3 zegny~!=U^K5k1BooR{pZpT59OVBrKqeEYG3T#=BE+No?Q`f8w^N z95DxG2gErqFuZCg;UsJgMmIc*4oKZIK65%7=p^5XE3)E7-H zPv89qxF;`EV8aynuMAaMD5?RuWC0_QlDMUzF4zK1SL}|Ck^?wp#n&v=jSm5_yDLd! zI_i=%QkVQ^bf^LYolye5Y2z#Y-w@=PvI|mGX_{33zD;G>Tkv2@F&o|8mExEz+sGJn z5)=}NxVF;eggL{cefo%8@boXCd#O8nR8>3JV|D9Dd+%pwp-SdY#(Ajf3JG3in1Ps5`1+6A@Lska&F8zu_1f-Ts}cB#DV$%!m`8*KF#g6?wI(j^0I@rSH~cp=qs9t= z4Qra%#PK7w!+1OouLNSNP2p%WQsY_)IA$Hk0IA>t7>C1`AWIHihzOqBn3N zhtCqzK*jK?V2N?Q3V0shxB^4;kfBg{ryso^lpy|Mv z$^QVi<^=8rd+QAdm?9x+KbEraH9HU;xV6AaSRuR<-~c3Hnca0rVaVR;(gTkdSywhGI+GmBL6WvXue+Qbgmv2Ru71-i*ZEjI5pc5QYk$>6I`0$drwR$n%= zHhpl^n?IVLms*$F>9nC_JmYWKywCz;tv5T%cA>jgyFayq8~gL8SUVtUPbM|xg~cDA zA|+3VBpCCQ4gt9390{Gi0Amb<=Ix}!wxG@WAjHp$h4ErLQfg9AjD7lkxZ6-EH^SeJc}M%DEd1 zk;-8mN)huDgOhpjon7f6N**ole}i=DSw}D!B0OM;74n24!QATvQFs?Gory4phO$y| zoJhQ7Ad*9HOfRi1M@iMDMB?D15^Vy)caoYyL*LDb&UfhABW%c~`vh`6Qqf<21vX+e zq}w(;o-U+%hXe-T&!Ki7p(dJe!h=Wdt0_VlWFKSa=&y$X8!8L|N=@mE$4B{kZd0V%{;hNz;4T zK;DmCi)PU&2v@)xf>+C-pZrm|j*&tR?To&e@&dN*&8z@Lh!qy)uZ|0(l7c4@(J2YsXG|es_M{;xd`ae4gIoRG69=ot(yXVd8P|^MH0Z z9uv6G?s#yx9hxMvv3cZ2m!qwyC0{2Pe;}bu5+hO&Hi`$FCs&+pP$jl*K=$VDvx=%u z+2i~Cw3vsxO`;A(@H+dFBJ$BMRZw<@Ob{AVYE=Yo@bT1dt5k@v_an=%KO|M_0wxAs z^gUA$-ifH7!* zs*c(#6*OHK-=K3i=*|=1RZ;3_ftp^}u>TM%%GM596m6NlRU1HZ{0!cYnbFjEYD%5~ z?<#%C{l_a;os^;ej^8O69YyZWApd9QONUH;mL{5p^Hq<*&b>_yaI}=Y(|UF!nC2_- z^%|A=l#lo8`QpIc9eAQOm&BuKGKr9D4mHmcyJVTYwq(*d1EwFqxd7n)etUHQ)&R{<52%{jJ#MWAyFckbr4z{b|n z(?L5f$L%sEmLGS>F}3jD!W|x6A>JW6du#>K$l9)4`gLgI`9PlITQaXye)kqo?7SyH z@km2J=v^-8Ilp-g(%JVNKOXs@G$-Sa4z4u#`cA`<36*?+gd#J=ozr{bM$9sOwBB@j zNbvO41JukyMX;C3ZJo!P}iUk#gx~sAe?avIabH|Guoi^+w4Vk?Pom}6EE_mVZQ}Ov@KFJK&_$etX=~H#%7)5p96`R%!TLm%o0gdx$6(Cr8`7@HEX|G3W8Ts?Wr^mQA<+gu^ zR_eg#oF5filHwluZqpJ{h(DQ0TLIWeNno61)EhAnR2|V&K)kS*!)Ku}Z%6(OYfTY_CSS3VX^bAM0LxM-p*yllh?j#$c{|>crxbGU?rS zn*5NoNe}JTvQMWxr##5-itj_4FD#L!_(l1w1$K?6FfyyH>V7TU$e=`Ezxd1iKZ9EwS&ebyo!0jdoSsQJt>zme8%7;J^L`m^{#k>3iH!^R_(gj= z)yGw;7B3h5kyie`X8v$)zW?_o@%JBjX>*DM$nHii(52|uGrDgkrkJ2s`~oHnW8-4% zO*zx^Bdgl@&OUc*s{lz%#(uE(HAIgo|D8}umJ(}kU-I2X#-5zV1pQT~fY`Qt;l>k0 zMxr{UTe(Vgp#|l?6st-*?GY;Lhv*0FMKW3MDs*qnGk*iETQf2megH`wsFi<3s^o^Z z##2KJVa=*ZSd;Rnwo;)|nJ(xCcek1vje)<_8PWdI?nKtH*$!e}zQ~Z!A9h8n%6a;} zJPL{cJfpuDP&&DJv+}Fp5E5uSv-D;a;$p}gLMyZ8TKu2i(xKqbV{>3N2NQK z26vG>KpQXQ4jL#LP^D-}pWC{zF(E{pFX?Z6iLVb^ZGfY6l6nQFs=Gx11q1)n&2LMxBf0w1I9ci0rt4H@FTu>#?UIj^V(rpy z=(w?DIWam=&Hbkucv|TC9iDqbWeDN;!zrr359cXQHJ7=j_Z!-sf`O`Rt=c3UumjDf zbQ}=x%a!1I!Pv1D`>C85Y0gw!J9gFSm?vWwx*&|IGNKXQND0gpI}ioycc!f*&H zjnv=9PLF0QIi(M0er@8){Fx8#J{#*|N=tfVI$8hOH1t;^4b*lknfPk@2qXZn^rAgf zYBLLPKOA^!STrd=uef?@nG=(pAn7A_z}_=%fgB6Crf?$(LkJOIvDK>EbHJG7btlNt*jMVMI`eXQ^7jR6& z$~pJLJ4!LBk@++kUFe4nmIk%zpja`B>xb1DSBd<+RcfK`O3=kzbA4_4MB&~A?r^3V z^A%ZEs`ul8-CAtNx4k7%FOj-zy1vy-6In&IMR7DNsbK}N-g;OfTu(~{AzvBLD@n5Ae+&q-1Pv(l7A#W1~=9qLuYzR`8$~us?I?_yDD%Y*O za|v&Rv(}#VtS)*%G0VgZXSvmam@c==V;{MlB@??-88o|e3hzV@L5Z5^? zV2zq8zy>Sp%nLk1Tg@*THsw#k1<*d6Y+EFucF+X*fV)2(5(AbkdqH+q9$2jT9U$}D zsy}(Lm~+S~JIE7o%W=5t^7DR06ncBP{l1U6*5XS2kq_s^@`tgMRxVFbsPu2u#$7Ks zGo|lk8m~tS5rzXS5(7{GT>qe>S=d_FDZzzefQcXHa)#JPHK2leT2^f0n`>%el8BZ>Y3}rqr8aeLIKr<<@D<-)gYo4Y=Vo7#> zPa?1ApmUe`cHrm%ar*e?H;@Ro$&!U5lYo%r4Igj}*Ks`uQhA>3fua!HT#Ug8sS|VJ z%eh5tN3jF3EAts`VsDa%g3CIvLPS zb8t7i*%Rp(n%W8*9vj^9yz2U9FQtyWbQ7^1#@QZ#v=3%90LJjh6mNt9Ln0>O!}>?# zaAGz&Iba*}_aEoxDevapXyC?TYc5CgXLAP^@Tyw-^+CHA*rb`{B~lqP-j$PQYzKsz z3819*k^e>BY#A5*pjVN`+ym_6uTdCK^JKvFetBJMq@2JWProW}U=CAH`GE%^l zY_~D5HJL-Tp0ME_tl_U8c7&4Uvhw{pV{~5QwimNgZhlA*!{b@j+e_>!ksAJBIc0?} zf0+TPQMn|1?h$cp+9Vl}vuW|J;pHC{nSN`bFDzr^9(F&ToxXM~Z)+g#CJdf<$!5d$ zjzaTDxB~JX68cHg$t)-tOTRrjK5Wt4#YLyvbz+fO0TUl68^+;qh=Lq!Zbj7*ECYoJ zC!$^*Jw1T_P5rqge#u%~M848}Hn_M^$?)a`ytFAla-s$k;@}<`v_wcyNTpTN6Z!`q zkDlntZXp<5J=R%BCU~U|+bC;&NHN={Rzg0pXVRDA!d$8`SGspw<6+{892@SZKA3Z* z3`(|^XMK!0kx|bXBLG4uO#^82_}h2rxEoyJfR^T`-0$=glq8Vhef4!1phT_E)vFZp za@Fr&so3#tbfVrN;;>=1PZl>9S+Zs^!J>QV-JY1a9#ap2MRbyVrcBt31~Z?b4pax$2B`-!z_M ziOOLiRT0!09+^UdIOVfvIo$v+|7?r!xPC3&!BQ^EjblFw_CY~hGc#SfB+=oX+sSr! z?3*EO;%w5CDRj^ZiMJ_0d(u91-nlwtp0yZ647mg@OBjDNGjR{4PbbN-9REVk`AiPM zX3^(tc=Wid^7@YQ()2q9{IyYB?2uXT61jZ!NQSZA0NtC!Vq6IL%|=ugGJS47+O}cO zZ`PDns>|Y51#CHyZpF>n1$l%~TgLg!RLu0|Y2GoRv{97UAWhUBUA3JA>jpwbpRIBv zlZZS{CQ?(HxUEqggR-pt$rBAXnClAZyZNxTeGpK!12-O90Z~Z2(9p8jB``&>YV2~m zO$S)&FtJ?op8tyz6Ei(w`*KQ`JdQbtScM_Tz&k1OdcjB4ZzYb;vS2^9ZI|=|J+QKD_ya_0vAEOgYmSY2hs8DK}VBR36a^7>cJ{g zaH<-Pj1i6wQ_<2)RDGf7#fxENM~t{8UUvR(1$50tD85*#Pb_MTbJ)* z4#?*b=I>=XY;mVD93oOF18>p%Tm#BAH-Iyqc7ij{RgBs;f%h^$)}mwz&Gy)sy`>tx zV8e;;IeGoepLf2AbqV61o&1y%mZP01)^=g0YVUg>`4IG@sr$d+dr{-O3goUHTW=eAVC|OYRn+X;S{rlv#1&ur3TN(&8rY7R#y?GXT8#v zutdY2;AR*RyIox3w_IznD)qtqcC4(tLV!D#SiHK?*7*AzUqB-dthE;9$RA2TQOz9$ zVjIv@sMwV}r(Ly(a$&gbfxcBBUfAnLN*x8{sY;Z{C42T@0z{`yli@l=9%ob{92dme zGRt9~^-VDg>@|>%FNb80pj;_`tw=Gh!$0&8!-v2?{WTu^tKvu(E#48W91~u-9k)@Q zA2(-pc49t{xml{B$}kCv_MKmM?ioj|D006ZYRh0tvdSyYMxASthhDI2Zf zN9zH|T~Pv4PfMg(QIROA!uMTWYzmqmKidvC9W`6=SUX0wh9+)F9S8XV7ydD^I3bOj z4)%|5ENiLgZ)iF56)Nxt?q3{Xn#tkgQepJ7 zjT?nwBq?WCT?$6b=THgSjju-+q?>RzlmHkpJO;^5Te%?FLf~f6Hs4aep}|ctnai?x zi38y52mZR4O@?m3%&M|XAYK_Z59Okm4>yuT*%?v(~``eeQ!|BCQbs7 z?r;ghsq-zfAB$2ZO`U0ywcE-SdeTvuixYPFO;X$;PQ+>YsNR;Ko`^SpSMoA3-e2C_+=_+~TX3Cs&9ep$j3d z6LIc~j1)nRnvLF?$@{f_@m%r3NX;Y&2k{o`xQaS6E^nY^FN>qhyfHLH6i=h+iGUeOy=gkaMD{8PlrYELRibqw~B2 z7%1f-u_g7%h_Ld8@#0vLOKvx+b5hD#7_eY}r|zl5@SXSz9BGoG1_&HHhoDC-MoW8{ z?>+x2c+&u%18mq$tg|6lLGt+Bx4C0Bx-u&Zb%a1?b@k+glt>^eO%ww8A1j=zIajc_ zkOU$=Q6?EZChec1*UL2oZpa|RPEEg0qYU0hmx!&rZ??q8)%jpc672=|-`P;?Tji0k zhiGA*>v7RMLNd>NhG|OCiOrERGJg0^#5k#+qvPxsOj(1j$HnE3S&#kJu@~1CVY1*b zAJ$i!6u-@J4+FwQbAC%4Z$uh{v-cMHPKIBXY~aCE0jpkY$FM^qd#V}p z);)(Ms-`yOwFJwUvNf>j##1rggj^!UdDNbf{7QcAW~~6dsy-CYc{NUW=t<>r1H1n{ zr;ZO911&1sbSL>FX_J9G{8k2!|+{W7%US_pcWXOauO(AVs8Q}#_3F?&xCyQ(<^xTcBs-AxZnX$# z;F5>Z1{)8v%EzLMbrvzP!{0-jwqzhofa_=&QO0yVZK?~X*+#4O&9T?Y%QK%RpG87( zRz;-hDE#MP6X7*tAyw?SP>{pt0RqxmG-cU0w95ROn*;g7_5%c(1nbKFg4CokMY(`;wC9sXHzu^F=7NpW zH(absTV+R3f(DUEn{do3-Do%nR4SF#RAy2`Y&167*C$L3qh}|Ku|)?Zvi~ATpq^61w$p|qLL!qE^t^9R)<}ffY zPb|J@uC1VEapDGbQ%f`&$)cz5ZCUJ91dJ)YL|}r~d13&$7E7jVkv2R~B07g4L!m}j z4D|R~+JA+{E@xafrEg$hcCEp!k~B78WRwvZ$XsMMlgWxZZJ>n!GO1?0pes}v852RR zekB-tbWvE7QCg!;7pP7MO5TVJQr#{TY;yHeiZ*=L`z8X|!9y)vxQie~L=eiG5v~Fa z4haMzrG=CQ_!6|89}<&LpGsWFOh_vWSs6PiJFAkf*J+Wv$I!xB2%cUsz?vAE4`_X z*#A54HvHZrE5hw0YT_)Gz2^-(^qHL3F|*z zsxV!`DwFL2rTO^W4yC(DSAXFD%3M4&moVjwnnywePimP!rVQk_!^Nyny~D2w#4j%8 z24lgR6d%f>Cc$PXA}*VFn6lIzPgp?$k<$JxXX)9odJOPNc2f%)H%%0@UUsuJ0~55f zm`wj=42RV~3I%`PDH3h4+~VlgVr%(h&sG(FTL%+WlW_GaBs6M0j$EWl?35OJ<%YzW z-?tJsi(YcHDHu0{j$piUb*W&dAzH{+n5*@~zpuGsw2?xFC#2{}zCx_u3^&|YxDx5J zbUKcjga=vqqs_$7P|cPmDoK;Gl?QPKD*TPr5Xp?TI)L|5^Ed3yL^~z|UFf$;Xen3( zgciLhQ>PO}8I%Q5_-s})POE)lg7Eah9o7z+BZs<-=ele?aG!hFnJTiBS$*20)%kU; z%9{63?R?GW{&0exqLU)LXU0ioJeP}tWtZDK-744-4041j|8J~tI)M<%9<$1B@d^&S zg!3P@O+|;tXEEPS-wMfeE^*M%l(-wGL`2bg+}5@_Tdg^TJZBp~f37i8GP8{WZVZB= zBcWkoTdI^xA#dif&(xUF_JrVlPH)%PX*_w+&8H6%kA>Ju?g0dpDV$52(QIM~ z`%oC@(cCy?dbW2HXrAIyFfhS4I`p!fuVK+`9NAu8xj5q^1oPF=jAwYRO%--F)0qrU zO1HL$;U6H5XP>^9NethEn-Of9$MUAI#4a{Qs|a1&DoKay-Ydn1&8$Rxi;gZ}h_ov) z&pIca>53HQ(&tpm=1GC{E6XgTF^wpoRCUg8e>aZzE}c)8Dm7t^R4ks#8~EpxGOzR` zBVDv}MOZzu-Asyk2e*Tzy#3m0__8yku#?8$9oFk>Mk!mro5{U-nfDN#ji%gE{q~iL zlMiTMf_-+#00UQg$*wtlbm;HcV8Hjk0u>{qjtkUTMFWxBkWl!m(C_a#iMKz17OxdY zuZJ#i>afM*;SL>?t!y#yDCeuNh>j zCt9=Nn35ow6i)=Ji8gNJ(1u}r25R6%3&dXi9)e-QZt`%RFnh@2g3Pw z1V-jRo|FR`r0eN|i}mGI#rJwI|7YRP9JW(dr%pA`G8Wadt z&G((KSBe-97W!JOi6pAiEZOk{gE(P_b$2}ni%Q1h*5~JQTpmCS{?i2f7~G;bYc=E4 z^s9j8H2h<%UOd6B(23-Nv*U-)@S9+$*+QsKrF?nHV%d&M?;KN`dcV#-n!KlHhlp%t za8~Y|V}W;FNFiG9afN{I{ZP2!3I3^Kb+)mV_0HbRA6bDBE{wvN+V!Yl0M2%a?{Q;58EN|7 z7+O4MU`1%R3w?bpMFRXE-j*D+QI66ms2O}M(iZ6MCAbRb6=8JageZ&krOsBF6>cne zDN_BkRj|xIeP2}Z4pgyhR^i8|ZA0J0n4T>;>m_D7y0+N8dOi;F$4WL-=*TS8?p+Pv zrBcz#SE33ST^$Si)-A) zQxqkXv@&W|spk@c@JmU~7K=C@iCVLHGPUL67rMgbM5*?hzq(*0D6ORw^iGah0H>QM zqjU2plcbC~6rtI3ZS@abK1)3~-H!=Is1|5ZDtTjXBs{!qlNcNfr(?C@?|8hk>HG>F zS9{!+0(`{g%0>7atenX-@RobB@h4v+5vKZtFvC=Fp&LlqZ4U|>V*lrCnSz0#-g0Z> zteu8vX%kixQw>tpNX|kqa2$0}N7up?ZPMU+PX@9LHv6@Osf;2XO-3evJM6dCiyPy%y~ugAB!`AS_p3r&ZyfK+QnM@|qhbE5aF8~YMe=H|*YGS2g) zz0$+|*SjmEhL5T7LCiZ!)US{IlX*HTM`;-usiFKef{NcNMib`M{d_6@2V3tPTv^w~ zZFbmU$2K~)ZQEAIwr$&Xa$?)Iopfy5ob>z5S2Z&==igIjW7V#;?{(Jix-Tljx1M|Q z7J)gUKZDiHx>4xqWp|B)kfcudzzr#b{i;g$H7t@Ytj$55SE-F9?9tg3IA`v!9#eHB zqOB?45{A2|lO^9nF%6)uY=)igSE|;3N7}i1d3*9=&YzhQu$MU`1|6|vqo9v)A4Uxx z)P8Nq1&`6xRS!+6A2~KH9-YA6ihs8O6ffm*c&#F8$m}VBW_P=>79b>iL;RFyy}H+@ ze4VD=;8{s6?0#C;a-$p?>D5}c8J6VK00%-~f4ND)OZr(v$o*@5r&DW4YJeRDFaunx zmiyOtNm_+l(jTO<^m}JvO2Ah{d~%hC-rH&mYRvI=z7%*;QCKkXE3{)-4?t393-4bTKuN4zg7U-KX zG}%#1LOU9&b3IxyKa`9q0fZE~`*k4IgCexFrF)RzVCMkaXPB2NKy`^vniN268h zW!x03%beM5V`s-Eh>!1Y(>usRKq2v+Fx)vWderGp{D&SAE$)OnJ>YJL23K-Sd;5thiKu>EO_`Kp z$g5CP!Gc^q1cjKd(DLESq-dYet7GBCRIagJ1xqCiwmVU-@Umt8@{u;J;SwiRci3E}S z?}%-=yjB5wvh`mhRL#Ly=lTMpd2C;p`Uc*#6fJ{4*LxT)`96d$#kw7SAiS$7|e5?)ld8p~}Nu^r2qIv=?_(6to0QHgMR{8llkL z(o7ziA-6-gFzENFga&Zi%j6ePD!>IN^H0>|m;4;Rou`g{mtE?QX;!=(;MUfP`VEzk zQ#?ihloch2UBQN6YRW-OBi_N>K@wJZi%j{o#3d0>#C3g{j(huVK}?UcA#x4a>asq9 z-48Qml`0suA;J~ylY)@Igy;3a#4gL1!PQ4*&W^-JmsQLIm1jrFgp#Y2IItd>@a-7O zuxB(xzcPr82K37_8rSudd;s4)TT~W{O>=Zol-=xi$Ao&?OMH!;DaO-zL9Gru0-A76 z1@mGBD<=jv_B?L-&tdhD7+&F59;CTg^CA7c_Q@v1hYl+7c2k^;ijP9s-b*)oQt-?Y z8qcFRL}a%LxQ@P{t^Nk~Y4aet>j$)T2Mu3CuWc5Hclh4Meqfg_^43F{HDN zwYfrY4pWO@?ya}bzIMK0_w{$|@K*}{ks-1EXhYzoS_4d`aJ7q8dm_n83zF*u-A5e7 zUZF(uZCPSxvVox`c#?gwoBqunqXOI-5)*z#6tQ&#Mg4Gk*#n;1fD#&~iIR78$64z9 z%!+Q-_My1Yo)lXN8k9`gYo7cW2fqkb03JDDfutkk6%Z%&SQMbvtw&!x`GpxL|1oRR zr|EjZ!5lC0e|iDDJTi4^uvGN)KChN+No26y9P41yklfH*#umzDk0)0R+dy*0`X0I# zk3)2DxdE>QQ`mkS{dRRpK%9=T49!8M>3bD4LEyGTHST%}MxI_tlbGH`im~i@|CVzG z%{^jrL*oF?#n}>ob(+u$b{7+8+){MuT-#LW+%hM%vM0GQ=;XW;nk)J>ynrBm&0@D7 z!VH|&EVk6W3TGJiy+DL51_$|l?j${uHp_v^7@L4Hb+slv{%TNfMV?(aX6TGf%7h{- zBkCBZi`072FI9MEwi2liP7|A!>+2^)j-#C%ObDj&u~&$bETD}6$C*`fX|U-x!A&Z@ zovZ#WXw_4>llg@3(V_x$NJ3g5b{Vxjf)10)nOf4Zty#d)an`^`OiuKBR7vc^yStbk zovoX8P&9Wd{H8<~z`>YTc7V7x{bzkW zI5M9hfM)Ka?Sj;C+TnT}4f?o^ov?_sbq+#2sRK@4A)6C^#v4&Y7+in6EbSPnRcMUy zY)Srnl?$x^JgPUWCfcBb|unmvyz15y#6EXTJ;u%pSE#DbNuU5#3hyHCm;6u90Lz_=ouD@PnUPC1%}VTND%iE8A-Qwj#h z*KUvRRCU%vqCmj66T*_3E|np#$`EMS_4x8-HJW<9EsX)vuQqlY8CEIjRsWFV4K zqfq=?(Om(;qQQ+u?SuJqBWy6I?*iNSHJ3YbKkcQ#y3w7T=lzjQr1p5DdzWx9L#BFw z7O#7-gx>2fiYMC@h-bDV;$9KyTJ?SoZ{N=w-+`|P+0qHO=TlgP;*iZg7XagT2hIhi z^Y+x>c9!U9HS45122A8b8z*x6`m1hbFNHr`ixlnX21$d1)tZuK?#0(@xY#^=mB2yy zAmetoglF|CqW#vE19`CG9!+SnJ6T$v<%N8P%;qWBczJR=yG;gjVq_hftS!yw(Hw=m z3urOh666+L9?u7@K6-C$x;t<0`jP9mC?wQp1&rY{McWi))f9Sjah7m z!CKJWo+TY`w1=_8i%9$yr8L}qS~(CKpA%6YYsOdk_In0lkH*?j>74g-fKxpeYz+j> zEryNH6#^V_a5!NmOQO}}m@fQo3SE6YM&|wuUfy!0=MG@voB>a$7@1NFc0 zME7Wk!n#iEv7t_8MG|E7-_UM|4a~gh4NpxrK<+=xs*KU9rr$DVed12l zOVPtlJ44PFs|x82?0&9Uymq;~bU1b%L?}N`ub-rH-)X;J5A&a_!iiQ(cAr~3{o| z#UC76z+xEUGVRh~N=%@K7aZt}@ID4K?Z8EeeFZJLMwMMB@t}^_9YxN5h0>-22(E_W*dE&PMKi%J|`u~iWs39DRnWE z@)m>h4Fiqw!y~JVh?}L-BHNb{?Vil_Yv+P)Nf0H;=k!O<-TutCyIb##mtd&Do*^}4 zL7+1mK?I^ThAIU$P5X7TR&rR&}7pDimW zWe8yp^T{$Qnw+a+h!u&>jT?g0IpcB8C6uyT*hx;OzuH$e;OI`P1gCd`QY2yiOzZfx z0Ew3a{hNH@{hi6RF(>GRu{h7AGv23Llo>>>fl&R!>eR?mbe*E;$+R)CDxs&CxAiP^ z`ZsxmZ}Ck30;gPZ$1~5Dce3+Ea79f+ukNx~X{;9~j=G&{VO$7doyScZ-1}=jY{nd+ zlPzO3^{s`Vsp^FWa69z*rWR&U$rUM~CfYPhMav%e6t-+J>7qP<9IKIdcOn^k1oncy z&m*^#sVG@Y(b#g#8p_$43y@SlA{Tayk@ER)_Flr&N8ZtdMVXE1S54X#h15nafG=QG2-+D?&X&p|_X|4SfwQt$fmdqU}*6iMNF~-o|Y)>MkRj+Yy<= zYGHH#g?duui`?;LfZktx!IKdN7fQm>geUND;@JH(g`HGYd?k^80gAVcS3s)w-4o;p z)&<(p_vBs&BHnRK%aYq(H>2PdxJhb5UIa?-eF!X7P|+P4m3H_(kNU)>g0G$|pw$E< z5Le7{C*U^xoB88C?jI^bquzgLCN(hL!sMJ-({8by`n$2Q=Z97-5)~_;tE>CL#!%W@Wu$qALH!1fFT{$|H8-zqOB5M+)rmL&8;O3D@2R| zS`%x3iZ9*Fm0vLPxxRi&3RNmP39cIiDO$)a{`*7GJvD)doZn_aWFlQ{UCdcDfrh#e zA(F}*qAi-rOh}S`X$#rBe7r!034E$FxMN!s9$^%j41VoF{n@J(hm}Euu#Xo)*83hs zV^f|m6$UfBfAyjzdmbd}9d9r~b5ry^jAoygeka z%G*WD-Ghdzz`KLkO^zNweRRAh6Pjbn?ybP#R@xS4v1-nUiZ*SlQiXn1Ns=m%kZsiE zx+JkVe&*1Zh0#;xT6!g;r0}r8H)*Z zRIbnvZfrYSbA(;#+;cFn(IZvTjh&AS8=$2>g-+_bv;q>ezoJ;A&5)OVi|l4fD!Om>ZZ`ay zgGGo+G1$sgm#cmuB{WS$)f&bk2gC?&lz?Q(^^!DOZ-@9)4aEi-AmFaUSh<@8N%GcW zWEh_pWVo;WG`d~pX?Sbyf~^m)^(mKsHXj0t#Q$CIIK*$YCNp326@@#OsA7ty(V`1- zk1m>Qy61Q!Z*a5t`Z5QuQl!PI`nQzVeFJ~I`A^&V+eBa9*F7~eb@A2D#Y+bG&Kh8k z{6m6Zj3Ru|=F21M-_|eZFdbbH`vl{ywHYV!3l8YQ1!WKI)4RF>P5Q(7R=7oN$_fhO zb8wOweg+wWHF_t86}ojlW|0newzRzmx>Zibj_{&neY8WC+oO8tN{MO{jYJtLv^&vd zgU9k%Ey$C)Rfx;GqohX{@oCPt=EHd^Bp*P$vH>wf{$0JSBq>C=BP=1RWZ1{8s#;7~)tduV<=MvYvVPQjO1)2PuEDZg_Ew8$~l z8$VA7w0XSdY3%hz^blIzj zdW+(na#vayR|l4CV~^<2rx?bZo)Tq~+U*%`2FB$S*$h(3dKGX<`^M-YHF1S7;o@jm zMUmC}KPc6zsBI-7*P_zsiEmJ9F~bcfUoINet~#zK2WRfWNjW*gRBjQex3AazU(DPo zu{|7+CExA94zUygq^@qtl$RekFCVr&hc;c7WmHs&lw4d&S?vSsm|Tvob|9K8UHt~K z#N4dAL7JBiS#{&!yNZb5swAoST(Yp| znPD1&Gu%0t=|%$v-1G3{cb1^8~)=ydn0HBWd4MGCTN1)80yo zpf=o)+qKxYc=m|J>l~p%-ZXh`O`cm#Nl5abE;LQ&hHm$7vyGXF7mUIwO5*42B4tVd zNjFQ?UApWNo*tCp^3;`J_nR}Lw3Y=3)}M>D#!hj4h5YILQAJwJh%d9P?BFBB-2me$ z_ba9Y^{gU8xBA%$**9+(Y3bIhjT-qqrJ=8+6y4)81L_a-LtQz!?IBZjZ};@`3aXe4 z)++y5X3G_}dj5Wq*2v)E>jsCP9DRGkF$>m@Vum6|sn(_ADYVw^ulqR*S^Liw$vxc1sPv$74B9;MsGg3G6JkFY4t0N(^CxPP1PU6I^Vh02rO|UL zDbuH?@BiMIyI!n+PQ5z?i{MZHc@0N!HFJe~!@e^O>KH;sl&rEjmc$5}xzo5`6~kMa z*XGMfx_1lp_lo)DezlQ?Gwwf}2&DL{`{GMkgZlCAL6JtQZWmngL|=HS()WDjMFavwJhn&ViMC8Q(JpsxIPXVi<#a4s>yp0Szbk@IP+jI zaTu=Mc}brL^#j8Am~mQ%F~uhWweq3B)a=x5Zr>-nQk}6vZ#mj(aBQ%~l4*^7Xzbzf zo^_4>x6|9yg*mZ7+4tEvcY{DxioM<*7oHExX$fKHRSp}EX=Giz5 zD5BfE{V13O>_2u_Rr}U1!1ttI**Fscv5})Fd~ir7^VvLT#}2_fS;qz^ukpXHI=fU2 zAgPTmR`AE{iO#dU5}(kA^gdS9?#!j0)3q?IOag>SYUh} zUo_9ltlFK^#(A~wGNee*7#SHO&YZWmO$s4XLqm;QrF!XkSgW>5mVA10u_RNdVD#sW zn1WoiyMq@C#f2_MdG~-Zrf+XqmBjA8+K)jMQxCx4(t#JMNu5p*6G~JQ&CE&%ak4Kr zJT^^ER%yu#Z`D>mT1Axi4~JMLudiJMbK|!by0NsX>GiPR5@^zaw z@9DtWKS#f=bgyu1R%+syxU2CnGCA?^1Qgw*b|n4CA;BUA3JHvGz+*!+YgFEvb-zCYoCHzrT74~5R6S0emz3zKl+?c-GwJTt#`^zp>m=8p9hCM1396x{Ea)`VFUnzHWa6G;9PyVX_~6gk1#=2$>AoxK|J?6< zy_Ylw2eFI_sccuO*3llV!e{{jhwU6pgv6SxK|qmi=Pv6uzL6S5AF6jE>UR}E!o;K? zXZmQs@fZTms50pOcXueTQX);dVHga@yeJ1|R_^jN4r$E9)lDC>c7fs1ms_f1`jcx6 z>Oy#Ph}ycC;4e0BwsT=iwy2}#SaA*_TaIJB=hrN1(itMd)98_>tg?D*h4f1PW^9S~ zxal?GE+Thh8j;WYAhFC{9|5-PaLX@IEF%T3XHh;V-hwOT#&- zXdx^$(LDLFPFXnrqfBOc6`bpP#?(mvDzY&#U`~@9-r$U8pEur~bj#VjoZK^{>i&kl zYK#;7J0MJ4atN03*EHLGDA!M5;%GFQvbEvWPdfzLkBn7=U*lrwi+>*HRVmGh9aC)7 zBh1&|uL|XiLA>(Dk+)J1=|;HD8Mmv7(S@Y{X6%K6hW^d<{keZmj8BnvDpjK3r%8!$ z57HOYquGpIT4`*3k1DF&$4HR0S(`$h-IEmpY_&NF<~8$Z6)@T~2d0o?DqVv#GHfVx5x=OAeqn zoPr2^vuIyGh2h}6s4Q(M!TMOp!j8xm#9PcJ%aa-ivzf|!k<3DP8nZPET)3Web1n0M zzDTArqLA^v)g3L(_Lv?;=O}^b#;XcWrKgws>cZBY+B_l?lR7joH#pyD=#WfosTBuL zf_F1k|A`q#m4_hiNPZc{J3Tx%u6=FIx@P*iA~p)COU(Y{LE;RnbA}r#m^0a1QA*h` zj66#YQLfSvLr`hXCtM|d=$RauY8-~n4-l+@=XNJRola9bho_6nJewr;5%EwX&Z4Mw zvL^Lhw?ZghUk7=j^&nue;2L`S@Rw&?Vt|TF|Kc{DTd2wOGI{SVkuLQM#d3iK|PHKHKWzq;)$5h$@NO(Ud`#i;E_ zL)5<+N{st`bGXl%(%pK0Fv#eZHp&rUf@QJVMcT=rUwnFy1mN;+;zB#1P`vV`rlKU3 ze%9l9+QbK?oYs5#J742*#=hX`NgO;C`VwC)O%L z#{PUJNE({J(Dq77lTF@KUYcpY7EzvM!bpWeS;(9wGkxV}Hr~~rX5kXsk7`f0aLEG# zJtW!>uqGX_){!CgWc}8ts~@k=Krc5>_so=%r#c;T(P(w}R~mHE=lvzlEC8xtcq4H$ z!;u{m3)=wL;PY6sVtPHI4pnea-AuA~s@PYd-K<`PcDsYTkx{_&Q z{S=FAn*j7@@2)DuK!F^yEr~sk+Qs33p;w_1?w)tg;3hxT`BzTzJAQ)U9yN^pli-|cR^sv zT>~cly~nX!zj`M5X*DI~*Y*m|wHn>|NpQT%sWcjvk2zl3W3!^p!VC?gZRk|co6EV_edr=EGPfn74mvj~2yTq8mOKb`yK|wS zGi!m9Ba?=L%h$S}R-^_}1S!#(1SCgXMwltbI$T4Y%5Z4ZQ_uH!R(uOyPd|>inmLVhEU0 zKVQ95UW%`L1o&21z`SmJmkAQ~@0~e6=)zbH1rT^}+Hh4SZ_JNmXM&X7{pXnX(}inN z+S(J#GXe`j8Uvq21rf_yRmY_cpM*<;8+NZ1H`ivGoW4&yp5DMNs~XQC>+=j$kXDIu zGYDgHCae!~<4ukTyyl8Qbq?NZx>h(|DL{y#vYZ|#iAX_XVPxS?x&H@Yv^k)%2C?Ci zFq~6d?lh-V<-t!vII5mo80mQPKgMWidtnh92Cp@<_+@E#4r|ub{~u)3nkMF2h|DXx zspQv{NAz92ps9)(6O?Iy+DA==_b(0_mp3CXEKJY^)?@lXXOn-p-4y1G>zRZE*?oA4Oy8>Hm8^v7k8v|gd3o|bs zlreA(CP#|f!r_Kxhij3kgU`7-NG{yB@#?$y->ZVeQh9Lz4!HYv-#n0g$qLY4S>rtZ zH^06V%D#~2RcXo*S}nP3w&9LWZVCMASN7699;ts&tLX37r98oDMaZq z*Ul=oI#W{=c3`(Ci{>0!i|QX$P!LlI$uYhe=^RGNJIuM%nixKMN17bEAQeK?xE7l{Rx(elj~Y52^103c6={OY3JmM4ov?D-_f8T%q!jri0j|Bz`76RD z`{6&@q^Iy2hJ=<%QQxV#&EP$b=d3!GDDqQnB)Bq67ApzdR7Crl?M5)R+V=I9U>JmB zNcYm#r0iY{j?<53><-))u1Q=l7^hQaP#hfB!SD#wLmKzK_LoM7ODl!=sK>M`LUw{? zq7fiY)}VFQR|@8dD)PqUzZbh1w^`}EhHOH zIDRy07Vl2%7?R=oK+d+gc4t@T>(Zi5_rYp$C53H&ehIu)%}oJ4KjegWP53AV>vWot zmoGHS)y{WWQI_*^&|Jnm?2lM~@UOv0es(3@i?=$X*JC~AmDb*v4mkRjL7X(qQ!!>m zLXIQ}61h7PUv?~b$r))44p%$>wrCG%@qFmQp!dAq9}wTyJ#%7^n)%gfZ+$U5@CRA~ zz{!MxXUSf4kv&tqYI77zB@aC-&x%;~wE!w);|)E}a~6ZfnWR!!grWSI1;){G8&o2| zZX2W&L@|yiFAN(MyKa~q%i$XwOi>b(eU)M+cTCPmvC;(q0>8(M5xD^+P~JI|E~J-%v{fN=}EAG849QW>I>tDn5kmZ2`VJ=A-KK?o?E%DZvKo~ z!#d30^T?Sg5yP@aayB@+owvn%>F~}iiYR5^m2p$mjMj;$hBDS0$YqHy57ci6p6t&P zHfTItlNXfAtVCSh0hb z3arFQqPy*DH~-uWDXJz&mZiO!y-X*hX)6w^B2Cv4LZq&RG*mcr|MJhUtss2INmn`Y zl+Bj?bvLz6mei;!X&){MEwDN~f+k;zei5}KulFKz7mfqDNhs5h8s(66^n<&Q=ByujjUp*;-{}je9odImImuvO2qfc4=P z6AiD9G~L!1UaM3VVZ-%2-T#B8_^PvA7#a-}eg}`0aCp#<)_Gq7Zm&sEg!mGb5h&ZC zlJ5wls@x#PEsf&-zx>I*B_+G6mw!Xnh?WG8A7oIs z3Cd5#4i`eC@*6()1R(I8)+(WpCrbB(tk4@2#|iW$E0bPItB7r-+|L^$zz7xJ@A{a&HerS>&%8(e} z%MA1l<@|Qu_;FVf6lw5JiEIA=;zyQRTIICkHB#7fS_Tt3AXE$Tb)7Pf3wCa*g1+g9RTGK)_w&Rp zv;FbtvBSJF{9FX@9jMWfhC6& zPs@ozYp zOL)))dxDg#ejEARA&WTSz|4_Wh*14Dxm*o{F!-O|tF2kbG@1hAW|<*BGBl`__5?|Q zRK-{p0!kEcY6vi7clkiqK{LORpgPx1n_C;sE`U5D-UmlbwB@J-k$!KY0k4`;b$azZ9g>QV4>?6^SZlcRFz`buV{+~{<+ zRfOA{?}V!_2h7p@e3d$LJS_C%ix#qQgy>k4_>kgi_>V<1i9c25O+4JHV(!Eh?@4B! z&IwN|T9gTP_M-T?bMNSwnC4C!QtUNntQ;R6MMOgTZfYUEj!LoMw1Y##8C-7t5URJg z6&R8yFY*E+J$8>o@(Ud*fM4}GOW;+p_hM=6)YI396t#@@zPW zyAES2s3)urTZKaro+sDa5)d=|r8ZJ8RsdVG&25{E*n=dd{C07X%C3s~KJW!Q6y&Ww^eRip%Gq1ei@6c6c~8qu_$1jHXC7Nl z=8dxHJ|^b=2R%FUSI=g=oi__1emHOD*V!|O;{G?r6AIu_SF>e4ZG`lAczR!EhoBoD zp19}KoqdgK%SY_+a@CDjE4-8;DzZR17@Svy0g?~+lH#ek`=S^U&S*2XZFDgWKlXXt z9&}Us@y$*Y(2RH%Yc^ZMWe&&=|7=y7k@aa!*D~gB^I!!eks-a#F8H^r>&xh=f`USr zSb(})5gFb0;B^pUbmDCgtxF!h;M`ouA@FcjQbUAFD2OPUre7LpDr87FkW!mqviGLT zGBGGRa!q|g#QKe{4OkqJG*~QGji9^y<3cI~^ta;`${=0-KvYsJGJ&)B80&(r2(VVF zeHG#qt)(<)Yg#HLit6bFy!dBab8zp$rsAebycfB1gG8~JkL6`083+3uc{{7}le|S@ z_Pi#kAy2iT1JMU8Me2~24?hgXL~4BpO+gdGxx%BOoHFR#P7UDqvqmD+8pE%5&Bld& zxt^dP?fF|->Au6#S`?fjR2K`)l^Gd-^&yV+MVm5{fPfdUi~v<%N6jFdJnJw@uBVH> zjkDv0g@xwU;irtF&F5!K^*dIHp}ZAjz!aD$R`5!@k?G7{6WL|cCu%k;|y#)kVUGM^QxiqXg9R~k%+>^R&TZ*dh#TGkxBdk6UXfs#b3*%hL zl|W@%a;)ubaBYyB$&Z_@CRydDTX`<>(9pbBOBq@Pq|=?Z1iK)(3t5N8r!fq8?pRXk z!Gi>b>HOeRaN%r#;u4(2!t+U#V0#r0-+AUwfw_-$QLwa?4Qb>xMK2zK+hF6KmyPc=orLf3)yGej0Y?znp_Wvwo*nS}}K-P~R zvC3?;H2?FK*(!f)&+He|ckKVOsC|E5_07IR9S#0xQLFlAQLEBm)S~&%q89tlq9&-a z)6w#uMNRpiMNQcvc>F($8ZN^>i`oc9Cfa`%wHAtRi(0Gsq;2be7B#_t7Bx8apu64w zENZI%ENZHi7&K`AS=2`US=0#1ZFRK%ce?Gee@sjnbN|7A7Bx7G@56B$qD)1M|4-Vc zh4Ov1T8+jnTK~J6Z302xx4qJRsAad<3$k!)`h5}rPAi9%fO>EO91fm+dOuDF#;~p+ zkAwXPxdP^g4oM8L3E1p~o{n>GH7q8mA-e4D3gGK(rL%Zjy|Nu^U`i<^ZXdds;AQfL z)UC6XxA68tzf42g8zVlg6=WV%QDgxf0- zdxwcY-9n-B6_NWX#1MvQw7xo3@F7j$>qBxM?IdzYnhPJ<7!Lv#c9J=}@EuTfC?<6U zJ-WD0f!AxV|9|+XM%AqjOp7*Ebm8ocNMzIs^yzL29wxr#ZvkEN6#nztofU?MRt95%d2V_QLibd%;qm zjM`WV_;TR37EW}d2`z>&2fTYXCx(?Xzboqy{Ql0PCqt*o_C)7O#Hwo`WKMB_mH=_) z$(I9yL!LkWN1}W!7hV0p2n1VbH8scjnLUOLy#JWaf&I)Tnuho0GwdV7EUG*Etog)% z)joazEd~iotW&jws?y+EmH3&fK`jGYy@O*SL#A3DSXL1mxS!ZDdf%Ka%Y9^i=zDbY z$nT3h4o z>w&8aKiri>a5IlUAWVhi>$x~Drv6H&Gm*REt33Hq7T(6z?!NpZ2R@7zyYjPDbSdNQ z6g&vWuUOy>|CZ`l{EeYJG9(9P(qHrad+H^i3&`Z zPDj^z-FGOX`r=2QF=L?TM`I;~WNWn4(pxyvlB1UhSlu}lt(MRV!}5pDv55%v_6NPI z-vb)2rnErLwD6UlN47380uM`B#cH)ioDlr^jk@@09K_EpXw*zdckL;dm*rHlQ(OM! zRl6jyJ{lWQ0lmnHcAty^1Ann3o?>yz-P_ya?lA0Qsfs+;Wo2#>plIBj zLWz$Gb#^Pe(sJk2x0ISnP{sw0^4e)!Q+dqhQ4_t;q1K$gb4&{OF)47byVQ6EquKH^ zXvrgI&ZXfuwXCAsHZYP=of;s`{YwzsxvO}#63p*D99`S~)lmVNL?J*BH*c*LswfSj#}2qE{OP=J}Ka*M6yEVJk({=hAymyBqp)+&6=_}A24KWgoq?h*s~nqbKNh#+c;dAO4`dxOrD6}$Eg3S8pC{NC|)dcj6HgGmih7`oSrnULZ7peE@TuH?$0q}S#CI`WTF;C?Om(iN< za^KageJO4Zn5Cp;4{m*FQ3xLRe?AlQYi2 z$Pmm}hQz7-Fc>f~iti%oQWZIox6g57xOt^M`8T06;sCrgrROw@vcMj}z7+z4D-iHa z&*bZ@gVGN{*~^>)L&QQu+r#}KfuNH$2nLIBW&#G*9H(ZDZ8TiACvpq4AjF5#{`U)W zAqaVuSO*0(K3@#hR1`tv^t7TKP@140>g#FjI6>XzG|GQaA^JC!zu($FBxDIg^$k9l zzbXm8A8N%sV3y1Qd59VP`V$v<J4<9G8A*}xGszlI z;rJX1fu@$bBK5|*v&LnLvI7CBn0&7res*k9ZL}$6uBAbwuCKw5Kkm-%H!_0lyZ!a` zec{-HHCYU#Cp&dZ$H5T~ZS|1g zb^7Qi)Gg5Ez(h^?2bZkMiQ_Ts)|fSa7IW~viNS$=lsR}^JpMvHMea-&VM+#dlJ^r* zNlmcMYc#@AchNFbTYSg7dzdQ|;RhBbx>Kw)x=O%&Doz~#pX2~0( z<%#}S*t6@gCL>eKsS!^yABy@!Z_Xhr&9GyWdm<6-&$G{CnfQ8{MC7~NXOs;QqfT7B#GAMM-8 z(BQ40-Ix$lD(ZK`L_%}a1FDE>%tdFwarnsLnJvO;*N*A;N zDNaNL%E0k?vlOzF1Z>XEr2feFEF}1ak;&?4m{65aFs1QmRb`@5wA#vR^;{{%=YbYq zb`V=msFMJ2eM<*@E&`zAZ&RgGOlh<_D;z(83p||%W;`OCzVJ35sAX5#QiG-s?WOm; zpW2`Uq|8S{d{w(IuOMkoLabpL>Go8k8~o%OsD5|`taG&{1YUD>D~l2PNoXin==E>L zo0H|9#8Mrt4E}=l?G-DGGRhpRcGS+`pL#C$%8?(j9blF^!9}{&y_X|6Et);acP_PS z?a;qtZRKVhJ35_;L z+Ho=T7>IG;>dL4%IajNNkGaL1oqq5gjN<>nGWoi}!b9eOefA1I0(p zr@X0!GZa2XA&mnwBaGt6N73^LFZw24_<9Qr&%=vd)C$-zm9r>x%E-MtJ55>@XNC7$ zUY}pQKpC`uY>uHkUABL95ug=|X$41-&MVuZg)*Lq);h|g&rR7Jpij)Q@3d6qSDkQ^ z{Lp=lUAsKvZW+op8PrEAJ>v>E>hm#oQ=ZF|qL798!@YGlc8&AwuVc8)@M#Pjc`J4I z83FI&L#h&tJD9DPy;^i6mfPBa4Cu-kW@hpE(tWmmfqHj6LR88^GRl6(Qy~U65X`rI z1w<_zk*@G$oW^8_c-^!vbnLc^KH-16NP0W3N1Y5jdia$;6&2Lvc$v1@fI8RJ@CsY* zSCNIJ?uX%WvhczAJV&j_*4fPbLkdC*XJLunYn|?02L|qNQM5>9$*_RM=4~$!>6se% zQpBa!OhKBnf8FQ!72dfhX`%fssD!rTT_qZzK^L@=8HRHpY-PzyeNN&y>h8)3lLnoS zz9_|pADSGgD-d*9iKUj3U&0GTXTi`Ul^MEGTcV-wFIK7^c5P|aA7WSyeLZre`8c{b z*c>pLB+YecHeUFo#ztqtMJOQsgOy_KUv+i!A>TwR&F*JKB)S`d!P)wH_8DTSf5wGQ zQb}PJR8VwH=h^&3SX|R3nhmZf!bGf5iKkz2ht^9+QIVsZ0)sfkW{yenMy8ClgiddO zvV5|#kXbk7L4y%8#bi^1?|dWjgC2LA=N8$V#`$TWf~aHo=iDN=5a}TyBMYLqBdfP7 z@5+8Xwr7oFMkJBA=5_e0aD@&Fk^wl|u3`{z{=P8PQ4M{Ut-b?%5UTS*eaYeN(+#Nw zGJop!;6*Y*PgN@N7<-T*WJ}H~=~MR`!09<&$t?oSJD8|D=O7!0-6!JBgf~KUB3Kk9 zImjq2dq=?BOrDm4v%DAA@IxfwZL%OVOdlJUEE=l62$@A~a>kl2f$iD$=opCZO%#{4> zl;v%gv_cPglXTw^D$ZQS7}12LvtN?1!BJVutwA2U38Ldt1$@F>#eddCwTUd9*o^&!_*@=)u zk_LZ&?9?aqz?WWr*LvxfS$kvJ68r-*y6l&*4lxZ%%$i%xsS9W@Tn&GFQ{^6c(|ieN zrC6EK7qAY3fLaU#)g&-wD)Kq$33=Nc2;Lh`*FI9)AEYQ7JY8^L(n=|CQbnkKaaS?H z7R^m`$=p4a&yfJEIF!UIZsP+7M%IwPUr5_NdKloZ?)l2?hh$>iznHV-2kIvkFcR(( z`L$^BN`3XEmWM!_YnhOqtc|xfqaqoKq0KlL7SK!UsyIHXlL8lF%^GVE$5B~`zb7tc z1OuB>$<7Mgv-`$*E2BnzvB8)Z@sqwmO|AyGIkr+Tx1e^6M-cUCaz-&lJ9{*r0tUDrK}=?9-M~J@O@BM!Dam4v;t_1+k`>>#WZ9;*CwV=8 zdi1Mqf0W|sGXd)AeM?cf_#E6E8n%s3j8+^jfwuCQFxro>D}I2%*I4~dj+d}8GDSb^ zzTkfaqvvQ(k<>5zax0V4=BcsNFAf7Qvn<=@$L)3zR8jM+QK2F;bbWsk+#mcH6vx$X zULJe&(qqQvPL+sQ;dj@vSKs&rBCcEt!BXwCQy3fn6T`K_Q;dvG7!#4kcrL-%^q{XW z8HV^gxu-CU0qKL&y+25?)F^f=vhuyl`TR!EmQ&{NwOS>n;jBxY)rh=!2`)@ zOvP6r5TvFc zBsz_xrnA@hmN>q0s6v+S`NsV8kI*ZpaIv6-{C)ZCS6qE_{F?3YQZ)?mI!+;^8?Fw8 zCy38iL#&CI7sp&z=x=aoU7^=aBM3|`gqY=@xr37dsVIFUHo6_G@xl1q>BC;T689e= z=m?)#@J~^A&h-FAKu^>HD^w+9P7HAZfs_^6{}qZGb>zvUBU0B5>q@_}a@7p?l>a%j zc^zDzbVBmaAy~mRvjfo=mtc~uN+u1LRh9Sk=lisDcpKcB9fT*xSMu;G>gqgt8a(Ih zK=?bIAP(J%S1fN~*>r}NF4+ElkcJlPHmR_rL?kw3 z)Cn!QiTM#S&XW!{?+{Y6M#Ih40YkT~MVmkFpheG@!3mC8ariR7>ZP|E2H#14ShLGU2Nz=^WDOpX2+=ToMU4#ujkGp!G|TmT8KP zUR^l}#@Kxf2KtpRc$7ud{)>3#Z`R5aqn5saC$^p7>c$u-;4p9kthOFNTCN{lty^Ho z|F*;9t`xRp&`=hx9w5t5Z?w1WiOIXaLSk$VS`G39)41lHJ6J9ul@+Mhi&{xY4Uty4 zb)*)kYzVYk)#^~Wx=`0QXwm8CJc|-9HR`5yw<*{j>`P_N;+x=w*qun1{ey63wl}BJ za`2*!`}H(|Q~J{Be#DG+0PfSUJ#GVf5wkHdQRsjA`(jucS<{U3!#9k1_$)&7m&4W6 zVo@q5;i~K@d#-TOhqzS-v~*xNmf_a+|00FcbJ2dz zd#mslGo!b3f~(idu%)pq%KQTd-usH5oH?OEiY&5}vv7GCU5ObPQ!V*P`>}s@{L}3x z9Kp>j_E?70BgfR!SzUQ2a6$o-l}k@_C1zxl%Pi?Am^6diKo`CY&v*E1`elX&rBps| z>w4PbBBKh*+sbPYF(U`$lS+>TvCCk%c1XjC(Tk9jl8q8(y+_O_EB+$xNw_TZ9;V^Q zzrt}RR|YfN&ge0WXGRZWchUQQg3rW$E3{vpP={CY+DS+akye$Gv>L5&WUd{p8xpNn zw&1s;*Mhx0-6*mp)e(yCP}D_Gu4*cSOBd~HY~xx&G>7QTup>#kyD^nEfjSN4x@ll7U0L7P@Zbg8)E{$?Ze);!79f!Gdn+%4g_zhO+A(65olFEv|8DKvK8ZLiflQ%og!nv zA5c^>3%abgplqWuxazG@Z7aT){Un)o)fCH2ZA&%Ie3>UdL$`4&xz2OnAzh(wkeF20 ze-#oB%%JaXbQd%+q|kmNUNSWkW#|r?hTM`py!Zb=Dm&@}`%WoK3M+>eyi^yv37h8a z(`n~4F{FFh`FF^z2yta0REGgWqE$^3KVuF~6jfJ`Oz*Tz(LttTI;gnT=1<9Nw8^V& z9!>CTTZh*9GP9ptBhNXVv@X!dGiJo@!_IvNk#OY>t!fG3OwjCn`Z7^Wf4X*^h3m1~W#A0KVN^_A$)-@->R8(@>)Kdp}s$ocf6GL*W zgJv2<6^25qRZZyZIomIBrg)1Y3$IgTZyo!DoN0lXbnZ>@7mC`1=YS#QCz2Y#O`FaN zc?<^wni$fmSAE(vF*UwrIM51^Xp4br7}9NGNNhnZga(9xnr!IKqJFtjd_a*l8sI^( zKSgZ=V{+9+WnIH8P>*im?ThQvJF`*S*V8FPvZoCxe0#>07?J*z+Ii?pvgTp{g zlqXDGrwq)X<1EE-$_I_%pSWPHtn3;CZW?SKO^j=@C~L6YY;=Iv%SjE54vRYPa7`GJ z5;(SRG(vH6M)|Oj{Ogq=WhTYow~O(}E^LAqJ9I+#UVY)DD^Gj$)qg_bW4Lu|2g%LL zcwpWM9XV6yhCTA~5}6TiV`l{@kR4w(7Mb zRaUM)35hxNi#mCm zZ^3(T7sQj*a{9qn(SOU8x~p4{HOY+)M?y01<%_OBfQ6jAT{q19wZ*a+e3Sxz0GI1uB1(YR;zq7s$xjW)x}~e*;G+FszNQB z>7E&YHm0DLmt2-fFZGhMSVt!S><#@KbAvv|-kcon^zER*i+E>zCdIfKnLzFa>S;K{ zrgScW7hic3FSx0lp;k|A>Y!R*Tvp+%KXJW|cFf4iK&5CTPX1oWpe5 z^7Xxo5l){r#NEG$r9r`%yL=<=rC+3z?pI>^`rmn21X`_fOf)g1vs7w2MfUj{`}T&- zMqMc?Ll9l0DQ_Cdzg`%U^d39CX(GC|Q+`a!uq{UanX52sTsstA--j{e?mC9H^=1to zhVK+ED>7qu;v?pKk2(FLxOj66HwDSa-NE8zTX1T3NLkvLIcwD%0y5`%?<&f*9QhfY z9R8qeWx`r-UU(D7!e^G14*fk)Tk6;ju! zzRd0BF6SKP@#&k&oa&hlok<_Vet_0~b1;RR^7$=ghP4eK)bgZ;XYE-*)=gkQx3UxR zx%w=-VEV2_=-s4<=%X@Pl^}ZaeBMzdqqza^VQ)OM9V2t*Mn!j7#zR#5CsvC#w(MC_Cmod?VIgXxH!9q2zbgbrX$MwUb|v5ULl-{G_2 z>f9eo=$Ibn-^hQ-A`ECp2eM|JK)0d(cqu3f@i)?N;rJ%}I>#G7(~0BK$LR?FI)IMr zks>la4T*7)Xuo+L{MW^BeUrq~kwxTO&vo-}NTjkSW{C0j;88eA2YZ@Q4%4R15EJ5u zDakJ*Iw=kD=OcmOQE**&7-IW&NZ%ZQQ!30yl6VM9BW>aC%w8qK3fvx&VS!XRG>&g! z;^(7bD@{P;f*?fhxrUbg{4jnIV-Rid<_do}%93#Wvqkv%%dNO)(g8!in8}TomH%># ze7h$kXSd?#j~5{-Muy(+dJ|!naMGAfKq!2CyCRQEUye)ZV$P{vAF`u0w{su|e?D}A z_#l+r_yZ{kbn-*P2zrr_?7P1Ogm@$9+kHs5c^4A)feZyFI!bG0fF~?lKTWH*4g}-v zIayc~{U?%B{=%MV7Wi;*Ag6wBY_zJ0Au&9%QyL1{1qH^kNfHJ-T8Pa{>{@|tx@rtT zUzR(T-4Pyt0`o2QVbb6paBpoxtEdV1ZrcfP9>>LY@EF*a4(_x;cTZ1vINOnrrF1&$ zE*$em_JIR=^K9FD0zM&|$di|EDMqRb_N07{Uajn4>pTbx_6H#;B%UN2DbB2&Net!$ z{ynlg9brUu4-3YbH51E6xQJZ_A}(|?88+C#!DSFa;x+;6!jL5HgGC<#AMTDT%YX6b zdGHLG!hL03_Rv5sjO8ZmJvR8zdfG@>(D6JGW0&B@g=E|aTZnB3Gtm6C*I{MV1vcV* zT=--OQljE<|M*TE*^^2qqB@gQYmeTeNU?EqKXxqMiTerhxU%eHoQkD0>$qT#zP=qG zjSW|%UqH!m`V#!UJ6`$7p#O;*sS1EPgVn(+7}2yiyuZs2 z-o4tRz5NRq6EGip&n5GdWhJy)kdsetst%i~GnWIXT?x$%c=uF{Yxs%K1HFTmINDcAnkcByx;5qnjGmJNA2n z?l*B(E~bT#;6}~@om6s|I1j;MvU9n7LxS;sVf2OC23()*NpM}okL$?IM3P}1a3MD? zp+#AB>oS#&>gm$*MGHFgv^55=S`KhNqG%k=n-Vm(Xk)(sTL)c5JO2;x<{TH;*xRAG zZ8JKI?h1`2xeX^x@16fUsRsG=sALT3?LlYoy$Ewk7k79ABfjw>m*RBTD!oK@v^#9} zusM}sQ$#AxgeR+&H~bssF;+j++VQn%_>m$z5ASyBWt=(k13nzy17X3DI1w}mCNh2s zRnltbsT;BI_Ej9)y#ZJ0{J@y6*O2<%ms|BWHd-}&N;IrDUoWe!TL(h0`e-_j39%)d z$c%Kv)L@*Z&C;=0gX34(?u~lLI=2=twd(|*O{Zwi>V%1lchHH;U68Jnch$33f5&Dm zMc_;?pE7EoiO-$HXj;~ZNyRgtRE!4_C6HV`h@8U_t0>|IM} zNx&FJ3Eh{_VXevMenqzVaQK}GgU`D|NU55KTTy!vbuyE9iH7xN-V+}E=Jv$0s4i&% zr@&)%vygf2B9dk)Z|Ga-IF?o>pZy@Eu7*7qWO9ib=cBv9~wgU$hg6hgXpX zVm@c3TCs;0$b#0j+sim`DG$zlMqxRr*Fh4JV#q6Iul~LP)2fCyw)%cIx*T$O2^~kG z^KR$e+J_atIN_sVlerDOG62Y}K~?7%-AUL?LeT%=UMSmRU_pul zCN?nJMTZE#6^OpWTB|i~+qnu#m0reI%z`#92V<0btdie3y4J=~=JQ6Y4P$kvHnjS? zp_xnft1jxU%dok`Ap#Ka?O|l*l2HQr{FdaVKp!1Zkla3l8H$s;%L+%&#ERXQ`6-V+ z#M`^nhkP%sLSKa>)b{lc;kj!bf;RhNa({K=EUUu+F65<#CLx)_p|30K2X=#FS?r6< z?Iv`TJQ+S8+Raes2OB+I>l?>`twjw;V0^~Qs0 zaQ^(!svsd%GvpPL^}>+EE)x)cya)@1jzhO4su1~N-RUg~hjvbQ$LA_0b+f^+H5akr z?e8!pcp$pj&*KaDEJp-60h}`38{3_i6Z2@IS`mNk&i^?LTZ%nPX5j5!`~(GJdW+YG zq3QJFyc(g<0s(7CtuXynyu>~XV8J~Qk^82Xf0$<71A%1R5Ch($EuYEoe&xo7#E{tP zp)H1fwel%MF{6S5N1ZWpSO5YkazT0vr#=ZKpGU4p8nz5Q=7v#ZDN@`zc@Z|Ry^JBV z-@+RIPZ8T{HF}q&%W&u171;D^$L$bZnfC>pwk$*6&wn7Ph!6QmkvJ3<4^zK)l!BHb zrD6Qh;!*b!5~0Rp>IQ5t4929{T{AQj7cTAwDKyZ z?E&7QT}4=Av?7CvSh0N|BT4EZx3SHf-_k!@PtvwX)_OUV&N) zf5STptlDW_nIpm5jln$9c-nVP{vTx2&_i#)GH06-a-=CUh1k*(mX#2Y z8m-DC$jU9Cyv-}kTU|e%7g`l0r0PamJzXynk}3#dOJWWhc#DZx^;;hkVkUN~#cOnJ zLTy#%*tWb96EahMy8cWuQQ!09DEd%s5#sgCjLKoH;;NLa?2H-^8RXqZ&V|ZVX$1+D zGa_Zri&K+vKUI16^nZ2fPnR(0C(6aGet@J!p|!OtEj|r~8m*dGR_;am>0*^Wd0uF> z0a0S50Y9()5P`QnOY=i<-w>e~=3; zSB(MrBY`1Rjh&}c+MC=a1edyXcStT5XpfQP7Y&*QjBY zU)9w8Qh`=Ap~oQ8M35&545Fpb7EN?=Ge7#If!hkQ~MMAx8*kX64JC_$0@WOX2vmX;o? zE{~9II2a%mYk{=%kw%8pvZeJ6I;%mWTF-ELBtSwKkd+q7PYMjFhVKG#@hvqhB4pPW z2ITVN4h~H#|B6%vrlf*<$H-vifyyJ{(tt5Q$Kmc-5EH|EwN(@3KUI@KNH!1*ke1?z zqoY-pz>sPwqT+T<1T=o16-xEF0KjxY!WhE$7jC@p#v zN*q0{7Da_3y23!Id=525!=zpK_}3#3O6B-MyWB!9{a`>YrG>`qnzUU|BL9qD1L0e< znjlTLdCAFK$-k6M3Jgh!i5mPnIyycf!k9rtw4U&4P`!}#nK2-baIm$k)|jDUGl@^` zuA&uqLdEC8y+GQ#87es2TV~Rj1{p>V1Sl$Efc9?JJK9*48Hx!EsUn87 zyeAPelGxEIEwc;RbcF#qlCxy_AJwKgwwF{~S~89%FfBIBYtw>IrnVTMG1)uo?7>>m zn?nnW@2UKb+O{o}t1k@5;|uccmq|yg6@ei=1FoY^9ttK7zwa5U5Q^3z252nq6_pf^ z;P&}yS?}EF$P_9%mL@P^GrX2Ktm|T=jfl?4$K+?Jx3n;K8Z97Wo}~_GFTR85fqe@0pnMp{fcMLFQB$CO8wrpux zCn~qF0luTy8d=`$sRcMf zkvhSEJg%rj-mfxd#H!b~B+`RmU>`32&48g$Q9^o&p4n5p#1aiX+|7PGUL-PFN2_WZ zLx=S_fsf`a`S+!Tk7hGNllth>iatIL=H^D5Arie&AN31$R*HdaVj3UKJbP$orKxrB z@NQQA43S8*f}|yjI;c*lqIwLJkQM8Hb24xK+uhy0N_DtC8PZhh!w(eqQXEf_g^CR6 zXL>e<;y)>FrfBdXBO|Yc=?lio$Y0AeLav#?1KdCXBt~>mgp%1UTUh<3i!OXSV8mD$ ziT*=l+Flp!HO@BVQknt6C8hGugQE{WtZy7-WIu5-5#cKu(}~oUpe?E=gwv#cS|%%< z<797nxwG1V!dRtrNuziVY^*&U*5asSyIHM}D*l zYt>)?H()^NM=o5-xQEaF|bT{is9~hMmHj<0_&^cT#)DcIT(3%qR z1qrJ1Q7xqjN<#ioa_B#m)+tv-a#57TsPJ@q8ykc8$dRe?#O6k?(HQopv2>G*IodX~=C}2RqfPeu30|EvZ2AJ_ej3Nq#3=AVe5HKKMK)^sF!odFnWQu^^Dpb8b P00000NkvXXu0mjf$F^SW literal 0 HcmV?d00001 diff --git a/docs/setup/jobmanager_high_availability.md b/docs/setup/jobmanager_high_availability.md new file mode 100644 index 00000000000..dec0cdcbeef --- /dev/null +++ b/docs/setup/jobmanager_high_availability.md @@ -0,0 +1,121 @@ +--- +title: "JobManager High Availability (HA)" +--- + + +The JobManager is the coordinator of each Flink deployment. It is responsible for both *scheduling* and *resource management*. + +By default, there is a single JobManager instance per Flink cluster. This creates a *single point of failure* (SPOF): if the JobManager crashes, no new programs can be submitted and running programs fail. + +With JobManager High Availability, you can run multiple JobManager instances per Flink cluster and thereby circumvent the *SPOF*. + +The general idea of JobManager high availability is that there is a **single leading JobManager** at any time and **multiple standby JobManagers** to take over leadership in case the leader fails. This guarantees that there is **no single point of failure** and programs can make progress as soon as a standby JobManager has taken leadership. There is no explicit distinction between standby and master JobManager instances. Each JobManager can take the role of master or standby. + +As an example, consider the following setup with three JobManager instances: + + + +## Configuration + +To enable JobManager High Availability you have to configure a **ZooKeeper quorum** and set up a **masters file** with all JobManagers hosts. + +Flink leverages **[ZooKeeper](http://zookeeper.apache.org)** for *distributed coordination* between all running JobManager instances. ZooKeeper is a separate service from Flink, which provides highly reliable distirbuted coordination via leader election and light-weight consistent state storage. Check out [ZooKeeper's Getting Started Guide](http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html) for more information about ZooKeeper. + +Configuring a ZooKeeper quorum in `conf/flink-conf.yaml` *enables* high availability mode and all Flink components try to connect to a JobManager via coordination through ZooKeeper. + +- **ZooKeeper quorum** (required): A *ZooKeeper quorum* is a replicated group of ZooKeeper servers, which provide the distributed coordination service. + +
    ha.zookeeper.quorum: address1:2181[,...],addressX:2181
    + + Each *addressX:port* refers to a ZooKeeper server, which is reachable by Flink at the given address and port. + +- The following configuration keys are optional: + + - `ha.zookeeper.dir: /flink [default]`: ZooKeeper directory to use for coordination + - TODO Add client configuration keys + +## Starting an HA-cluster + +In order to start an HA-cluster configure the *masters* file in `conf/masters`: + +- **masters file**: The *masters file* contains all hosts, on which JobManagers are started. + +
    +jobManagerAddress1
    +[...]
    +jobManagerAddressX
    +  
    + +After configuring the masters and the ZooKeeper quorum, you can use the provided cluster startup scripts as usual. They will start a HA-cluster. **Keep in mind that the ZooKeeper quorum has to be running when you call the scripts**. + +## Running ZooKeeper + +If you don't have a running ZooKeeper installation, you can use the helper scripts, which ship with Flink. + +There is a ZooKeeper configuration template in `conf/zoo.cfg`. You can configure the hosts to run ZooKeeper on with the `server.X` entries, where X is a unique ID of each server: + +
    +server.X=addressX:peerPort:leaderPort
    +[...]
    +server.Y=addressY:peerPort:leaderPort
    +
    + +The script `bin/start-zookeeper-quorum.sh` will start a ZooKeeper server on each of the configured hosts. The started processes start ZooKeeper servers via a Flink wrapper, which reads the configuration from `conf/zoo.cfg` and makes sure to set some rqeuired configuration values for convenience. In production setups, it is recommended to manage your own ZooKeeper installation. + +## Example: Start and stop a local HA-cluster with 2 JobManagers + +1. **Configure ZooKeeper quorum** in `conf/flink.yaml`: + +
    ha.zookeeper.quorum: localhost
    + +2. **Configure masters** in `conf/masters`: + +
    +localhost
    +localhost
    + +3. **Configure ZooKeeper server** in `conf/zoo.cfg` (currently it's only possible to run a single ZooKeeper server per machine): + +
    server.0=localhost:2888:3888
    + +4. **Start ZooKeeper quorum**: + +
    +$ bin/start-zookeeper-quorum.sh
    +Starting zookeeper daemon on host localhost.
    + +5. **Start an HA-cluster**: + +
    +$ bin/start-cluster-streaming.sh
    +Starting HA cluster (streaming mode) with 2 masters and 1 peers in ZooKeeper quorum.
    +Starting jobmanager daemon on host localhost.
    +Starting jobmanager daemon on host localhost.
    +Starting taskmanager daemon on host localhost.
    + +6. **Stop ZooKeeper quorum and cluster**: + +
    +$ bin/stop-cluster.sh
    +Stopping taskmanager daemon (pid: 7647) on localhost.
    +Stopping jobmanager daemon (pid: 7495) on host localhost.
    +Stopping jobmanager daemon (pid: 7349) on host localhost.
    +$ bin/stop-zookeeper-quorum.sh
    +Stopping zookeeper daemon (pid: 7101) on host localhost.
    -- GitLab