From 9c194e9f90d85736d1435e2cb2a25335dc1db029 Mon Sep 17 00:00:00 2001 From: Arpit Jasapara <87999496+arpitjasa-db@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:16:18 -0700 Subject: [PATCH 1/7] Delete unused images (#154) --- .../docs/images/MLResourceConfigInterface.png | Bin 98761 -> 0 bytes .../docs/images/mlops-resource-config.png | Bin 91855 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 template/{{.input_root_dir}}/docs/images/MLResourceConfigInterface.png delete mode 100644 template/{{.input_root_dir}}/docs/images/mlops-resource-config.png diff --git a/template/{{.input_root_dir}}/docs/images/MLResourceConfigInterface.png b/template/{{.input_root_dir}}/docs/images/MLResourceConfigInterface.png deleted file mode 100644 index 3badf7018fd3a30a33034c65a9997bc78dc50284..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98761 zcmeEtS5(tmx39|HqS8b_0tg5SNGA!sZUsdoh!p8PK$ z7eWbyqDG_!1VV2&?(P20J?FgM$NR#_V8B0FD|62EYb*N6V|BVK>{rg6J4dJSP)+yT zIV#M#a~G^HU8MZR8za(u?%a!W8ftg-{Vdk9sT-K@H$~7qxypDuikJ7M{QxiG&--u$ z3k%Ct&!O|FRuA+cfU7LG5S~VchH&QzZ^PM^%4WBr<@MRwK=;{@cTGRW^oO%#pUM9G zFubh1p_93~ReffA=!iP&BUiPE00~5gx^0jj7yjS z^^PTgPqb03$cy%e^N_PowXLR|>Xya=00QUMaIU=xk9eSrI6=fx0ALCiEKe3cvqUX` zD{NZw?sslUtN(DdfeQbwN*lof9%$gZ&7H!t_~D%Z3u%7VTuWMETanD=d4D;6pGT($ zt0*@P?M1udh1EZx&EBoFq5b_570rve^YJUu{7igl=--Tod$NCVGC$x_=?Dn(?=n+H-=IIt z>>s|%2kFMjfI@6aDz*+SIdbi36&CE;@t{QJT%@GX#{kIbn4l#+*5_I2{YEsO9da1H z&BsgY{N3)q9>vTA7lm4|-kzTKE9h-7n9j~v{(~ssVuSRk8qhyZ+$8K*ZZgiPaHvR2 z0|?64VwU8bpu9~T3x0%6mKgYsswy_^Bq&K-1$OKaBw!gICyEN(IIj6mslBjr5nfJd z8N7>fBTr=nMZA+f~tvOqwP@9h^X%wjn*3ONFJ5>ED9CZtBM}%%Ei+BLRiAr8(9$B>p>w z&<(g-xQ`I?q^%67O0$1>=!ek7F-&=ATj-+Bvj63O3;EIhQK0A1@#=|!OXftNZ%cMg z`hV8`2b<}?E$zzwf4$DY<3o17dGGF1`PP02^zu$N+*zCG=4#k}a`g4s@jkdww$ulk zws$@>ap?m@#(ssh&Y5=L`3H3qBL+jeCQ(tB7lO!jO`3Nf3vD+Qk~90Iv3oR&lYpgq zcMcV{>Epu3zo)6mV+o9k|GE<)blk$Hv+i)}NK9oSJPw%2HN zhn01F2+!qu92nN4-Xww32A%NZGQ71oz6TI3C&!G|Kau@R@aLf5?Ck3XUsaI18Z?>b zH>`3p9j9vZudv!3+Mx!)J6bEhzoz^JN(&tMa1i1qEoM)b<4pS?#LzaG9anF`~NKvNh<#NjnZlLx|q#-ZpIZag?*+RtfQWkf*qmyD{WJI2#m} znMj?S!=t=pl)oAGmQ>mt(@t!9hVT^|c|?TeS=Zs301Ajr z^SnEFzCb}jZ?Q1w0m}Wh-RD8(1a$o-!NEn+=$}18BVH!T4evVubQ;F?MVKWpYR-f@ zXV^yDw}w}VYAONt5%1des-d%6QF*IVOxQKsz>0=fuJf(g!O-$!x~7eLe2$Brq68hzQ^J9xg>9wdt+vO?%cXhaze2;%9)%EIS zKB42C7Ovf4at$O@GNdiR)2C@TSfZAc#8D&d?GIx&d%8mIoTY8{91ok3^Zu#!e7d{jl|a-KQ-Evie4$EGZ(wRW(=61=QzJhF~1Hyv+<*|a@Q8toiTN4$PgR|*eB+S8t z5^E})^qe!jj={qFRqTbfXWK}O>d~&xTxw7AVXQWOxN^F=Ie6n`soTL18mt_c6Hd~s z&n8Y&d!B5w!lrpv8ET1p)0hl2XO^QAOI-YP_ZZAY27KB?3s#obbOK?o5~JHQZI7FR zw{{)7cAb$HlHQYEwx}~HZ+j+a|6$KUf8qM++!*p1T-1L53USiBGlhdd7bnx%^Sxiq zyG_FTA`n1`gUi&Ve_!}XMeJF<5Rpm@!c;cFA7OVDupIh_-&P=Jt}8>y$^mj`v;cw% zn|sHewDN^P4^XSD+6QgPkml9z{r}9JDCv)lsF|^g*^DwK04tY`ru{qhZPnyCwahA& zk6ewzyL`~*jrh#;m4^(c)1t5`amxmbe#B-MLRon`B?&$2ypOUYnE6_92X+fmHw{xA zRocR`lu_j&#nxe(*tDf}H-ekKK|(1%=s404_8~LJ5L`Npx0zWIfOG16HjfLv$#`?+ zq0-2chjAnyR1jQj^|XDA%@|Hv^&Y1mSQI#b!9{f*!>w*gV+`#B1j@oHK(4u=SUkuA z@ySU7{gN9NAc8YF0QDG%ayBHPl|W^dGU7zb5?hyzm^5Gw#A#eu$ds_}x^^}7_n^G) zxh{QQFIGZ{(4i{g|%4ETPA%0z-G2k`Wt83 zAoFy`o$Bk}`XEd>_fl>;BQWw2R$6MJytDjs7LDLYp18W2>+gveE4P@LUwVHW`)Yy~ zPTH`{v{Ue1ae(D`JG6h!-&@r3?oriGvxAe2i9W*P;2{=bbLWp$ll(UBfy^KL2{xSh zW$kz@)C~%ylrmU6Qj+-ga-h2*2%{=v)F}$~&@XFi^*3cNeQm-)(2SD_FC>8Em_~5L zAkGv=Dq@`2qFFBB9#hLuC#UWjb7n^x^x=Z-qh`vODc;?6e!BL zT#m;^HQE0z?ru(96}IA~0V^@xCqRChR0-iNjYzoHM#ahZubTY>3mX<6dXbMTsMPvA z_@GBSro%ox$0T(z;nWX4leZ0be~t@CJGdOQ^iOa!_2%E>v~PCb;NpY!cj>KGjnqp{ zG26g5K8aErf-!@68R%{o#``V&mR#;Z%@RPSpY&!!{tsJ&^iZ&^VIHM)jf@NML^}?F zg?<2GBXdh1IvSQcpdw@I;(uwYNKmE#GTQZ8|Ee~ZchzQ%qUUkY-ouwz7i!tZ@xJ3F zB2S#5%~gWyG}~HiN7w#YTP+X5h1wG&gG1UgB1|q}(=>7coqdH*dblJyhBCZfgR4#q zmX}9ER05B;lJX#NB<Uny8255hI7s8m| zAj9=|trueQCmoyV?xr4bkZgfXD7N#l=6867$6w<+@kViMEu_P>J-J{(e;j5a=LS}F zom^emwENLO|FKKNo*T(!gKGoiu-_nOOj`mImGVWvKF6siZf;^-!q&Wb{;}$s)*`os zU#KXPveGlVgLf}2GJ@l01H0_ql(3^VuN_(8q7PCe7yPnm66W5yn2ADz1URLpD~1~^ z`Ac|DWXGUx(KFQyv=U$e&jBe(Os5vml?{rC+~gOtS0To&Tp+?O@PGRxs{`R9ODj9| z;|-Oe5!`)*nprInXXY}wMTtp5OXBpYb}dhZEW!jon=))m3$UH0MkFFP(dF8OGSXST z8CxYHgaX=R&896oY+L*#Diu-jcYh>1cpUS924K9?=dsuHCS)wRpe=$75UFnCQe;$Y zt!q3-jq=BRAL^dCf3XfP8ttl;4YuB^-dj4IY_2Cr8Cp(R1dN`BWB#Oosw=+{po6oB z7}n>|k-E`1L4dotUNg*oO@v8zbNX$q>)roCr9Kz=mO(`RudpZsYm=<94~TpuqKyPKQ0zHNt~)|6whTUm6GS%4f6G zB%8{>QR2TWiRZ?D-jHWnvJ@S>MGPdRWDcX5hPj-zvp^$54en*Z>oo_ZBW7b|sc25y z<7Qo`tM!V7d5y%>*#3!3cwAiQu(PTN?6^@RH>Li*U-s22GuKZ{orzRE$^hUM5ddv7>3dy#BpxTNuwZBz0-Q}O-NcUS4&`-VadoTOQcoa|iu z1u81u&LdH6VDBIl4Xz`=PYFk^eSh9U;?%r>4vpGeWaQ|;^iefl$hAA{+xMN}%3f|O zXqx!`84~)C<~Mn*_)7wlKI`$)b+R>EiTwJ6gqv?|vlZg@BT6^#MucVcR#?fhraC#g zw56w1BrR7$&XOIE3M-W@`niyxnVk7`~HGv5}NN`?AyrA#X7xKh+4p3r;T-q zznNS-_Eb%9@c3pVdTFJ=JBe&Rd4~Q|H|ph7iwq(^jvc+X_dG$lcoh_!{*r zdF)W2Cq}q!yPL!8$~FSJSGQ>4856vV^S2`)&n8H_i0z)nLp?ENY>`sWQG?GM-!2AL zk(AyaKKW4vI-%xt%q1{^c1<(;W7GSx^+09O!*j&FMgvqf*p;o0XTdLjv&S=S z6U(X#?MHLxIQq2?1TewpHx97HvXkn~kb*dOmGLn)&85ucx5x9_Aanb^1mItmW=YF7 z#9`6!F_*&_&nZzMn3CFjw#%`<2kk8iPEt=X3BZ6txYIKtxFK(pgEBUc6s7eRODYRC zgCB4%-k5qkc3Srt$n8=HE~oe3~Y67%q_1lAY`ZM&5GO18#f;LRCW5)anNzP z5PTinVKXWf8E8H_*}`kZ9ptC^8R&35%2@3FXticBL{=qg^~E7i5zA90Bymu1kKe67 zj$=m}#c)rtRY#tBup9|YTOU~iB@7N$z%hWlhgUZ~t%f)r`vB`agg_5+w%pm=ze{{= z>#c1Pl)-Rk^XZ)uNN6uvk2su4 zJTgQTYz2HdHjWI*L@p0wIaWSiMxF}eM6v20N_!CZ9^U_v^@AhSLK`MOvQJItA+*Iz z-1Afw!$h-Hc12)|vv9>^D#4)*4tEEC1i5l^GR)JyZ4Jgc+P-}g4=YB^}~iJYw$8?T{<`Z6dw zZ6u-1D?N*K$*ekUdtaNM{yN>2p|R0<+=l@7t3cFAK>%;~nRAdN^EZ9lfuHKAp-bl( z4Kb|wsQ|)oTtdzT$2t}1IotCQOku3WTs>GH6Vyg#(@r!f6tQfk2Xg_sGqAa5L_fYj zD2U%MveHG}Dp+8Sr@6%@+qJ(WY~?aFXYD;cRC3z84<#yS1}mbkjcB&cQ^6B-p?^gO zT*NCgcrPVexx6e9C9o%n_h8dp(SzpOb~o8IxuI%$Im2X!T1XT4LAt}{pV*DuNb2)k zTu+AONU&qz_EnyrDWzZxRh&wiY(Sd^>I|$568(EeyL8Y0;FGSqtJZv7hypXq*dcuU zY1KyUg*Gm}3J$iVB&`H(-yJoZ;g+q}Nf#?*KF8xdO^@)@p0oS2O7v_`4ODE8wAM^G zXoc7aUN^)?=5>w|jP$W-WRsy=g?kqg72)h7UiojwA}_fV0Wp9XI=GCi8p%O>8f4`H z)C8(2S`Ml}U5NS)QE{THHG_}-fNIK1ow+fOTW?7Osv$JOfB4A`opWrv^*o#{as#Y< zO`hPV$6DM2bvd&RvX#9$0Jgu58)zcl()vW+I0ipRq5h-&ZL#D8-Ug1-|KjwS`b=`X z=B5QuIp9X8D&6jfy3NTi91G*?N7r_T3k?9Kqg}*p{yy#7hJTassG?T{EgN3X*&7sA z)S&|kGsP4mYCC%*SwNyLl1tT?E)v|4qu*o}P z(4a6hpSPSergIOEjh}Y+lY*MA>f2%ilWa6^r;zpeQ##&q~aK}2|2~Y@T27kzGe1;?;&DI*9cY}zG$)JA)d9Q-_Aoy=9doenfXSfhpV(Z~@<-LU`5%w5?y;nc56@%$s+`!}UBd3tmwx@Y32fAx zETNUXKH!seN{b*eB6GlVE!fWqYnl2s*c;m)Z`zkrT7?*Q*4h<(;f8P4+&|J^*R^3J zcD~jVtVI@xTNh=1h0Z?sQZ&>;&w+0Iu!D5&8(1DXqW8s00dQmZYqRFTPb_8LJqP&q z)AnXJdtrLAd|#W|H@8SHCGH*D>Ok1XVLPd$b!gBdPcYoo^I@DQ@d+?k8<11uAB!aDv3nA_Jh!fA_!uC-gb7I_gF@H`7IAr#b6?3$FcyDE5a{A^l@T ze?dF^&wUJwj7FZ?uT-l12+7$@*4RW+vu3GGvNZwPDy&=@Q9+^KO5FX7ql@^vEFP1R~KzPT1|*93Lp$V*oWIOd`Q zH(r^}*gg^VTK%?yG>QpUA`fxKPUD+AA9dY^Y}%?rj$a=fCT=p0=K@r?(lBaV=b_jw zakz}8OBl1|H24;f@h@E;?Op=Zg{@zskW5Fs6$H1Y<1god#(pi#@ml^9%gwC=-OXk< z)h*R9r>~J^62!VxTaKmz#{w6Uh|3<1S^*{l+$TbZ{q!1P7L!I$8nqE%y-S#@wPdHQxgbJ29_f7V%;T{&t-|CB z=XRiHtC{a;7IBi-x^-$#0jplPeB=k;IFH>EW_Ua&d76bI+y4VxyE-Te$X!p1h9L{k zQILY&#MJKYA}np3$6k!SYB~CT?QU6MF}??$Ksre0nn}AZqhsHE(W%y+bsy)f_%y>nUHEe;+91hXo{G4!uCPISD_)|{AbB!uaX5}xFofpTRFHYMF zJ+qhQ53K^p96HZ=rv%B2lM#_OJYqaw1cM(VoIg^9OD<%ecs?d?vukAkL-uT}b$an) z5fnneB1-X49xb>2R?*Q*6ilq8hBf%DsrsS6)chH2aq#t30&AVc{v6TWHp2TZlsx0h zUACLSfnMVI)7Q%6&Tj@)feo}g{xIC5a+GO4b~uq9IxD7h{a@WYzxUIBQ79bc^~mmW zt(ky@C39QHqoms!W#}|x6jjv>rOeT?uh1tyV^s*En7LL+!S2j3S19(+-Er+!5#)&R zo}#__I$FEEP+C0}iJnyyjRLqI2WmrSvzHz8P6M*BpW9Q~IO=#R`@EbeQa28ioqpZm zg(0_xSgJ)JZbDW8XEy?>T05B8_Z``KY%!GFYMG=VV3vGaBgsi5#2LqJN%_dJmjMKZ zkS&2d=m%nDK{oO}R3OLUXm{0}n%1Ph^{8`R4lGZ~Fm>H{Y9NXj`{4itVf4Ts-dun1 zWSGh1lrBI5rveVf?fbryPHRNEY0<2{BsK|B^T%v-}0KBunOtK?k+l7 zV^PS{oaLC>e6Ab`nt8l*8ecCS>m_~K^5FJ@rhGVu#IMI;{(YQ|EfR9X;a<2a6?>;c zKNlUmy=^(YOCmHg+onOGM|Hk!i@Z(4Et@3Wqrlvt?$i%^M3shx`qm@oz|V~81TkT+ zI+B9ddsDaig5d8(zN=u&B!GLo{I&%+nZgjoL8Rnm1?*Ymwg!qbU-|=Fo0C6gFBc-7 z+2r-52A+TgDJPQjSGJw7*DHs}{SN*{D0kaKcVfZ<5fb>_8?Y1#2)&^ekmrs%z;aWO zLNk`(E%Xu?2D<<;+!=c)oGCvbJ`QS?i&z69-FhW&In_9$>f=;=<9Ci*6s0g>zo=5~ zxyeN(;!y;#Sy->WrScjT=mUZRs?}@ce$;I@@gQ5Xmm45$z2tfb14pRqg_9)JzSQ1h}vzf~Y*p0P#NQxiMgt7QZy+h*N$JX)3w1Vmf1FI&cU2 zOb>cABctNEs)+v5nS{>X{=8keHp_i7C+c30tMtik=a}*zZnL&LUFzBWS)h$k3f%D_ z`Z(LV0B^4`;c9C(u@}MnV4|KbBmb5t@m9IBZ3eWZv|ZAB*b9a-)Y|c_c`P*^C(3XW zuY#h*?L|T+VJq$}rJX6&;t-aID@5N=R7iQ&<^xm}N9fEuScc2-t_1R9<8kh0DF*Qc z`paR}@js!%W`gsZ5LhX&62(BJ!qP(>fc+o9B)1k1#eozK)7>*?q86xDW)ARt{l=a> zGQ{?Hr}W~3>otA;v=XOgmi?<3sX0Wb)iH2X#f*to?&p(8Y9{iZ(2&yN4dwpTb5wnY zX6lEpmSlEr2%~m2h-VhEtV1-(!(j|?rGA&ljZOvZM*0b@9Szq7tMpG@3M5lOEfUzaTHZkzW_d>8;yaB295DcH{PD7msrN>-5jQ zYM6<@86VHE}WsAQ42e zUxAapVl(lY`O=CG2kDy+GKW8U*vP)yY~94BeG+IPs8HMsQ8u01>jbo)EU_V%&^(K4N<*+o0ME+`xhKXA3(y-)dK+>tE zWNJWu(VKX5_aEGLL5C88qoI^tc)%cADR{7Wj(;uim$#63f}p64jQm>l*V^$((pvg^ zQCm*nUcVZRnC%*5yregOdWzK$Fe>uT8(={!LWj3*5h1UdfVNW*T+1XM(ZtD&(p(z} zU1WEE48)|iQhhdpD$MDhDvMlZcKb-_ufpk=`Dt4IfSL8q>3qYQljqU zV!6&ZUiq|-x(HLR{4+(k6K~;V`D+2nZAOG5<-C8jX`f4W!*-mG z?XMd2;;ZQ+GCUUmA=byQwM#D|nnGx?@%}Qlo%J42`VXdo1lYHdH!(LXBP-$(I&5863h*V`)z4WM#`f977@7vZAUp;nD+DdhlFHug_^zrP@A$5rLIoPo&DtM!EAHF5 zywo@6%>wjNT)z;wAf3Hu#wG(JHnXp^Qcr7B2?J2?Lm-6Il6u(PhoX$=2fW^I5*Cau zF1W4_kt-mP02TYx%c)}ER;8ZE#@jKym~#~KMx60!d~nmIy%_wdD@zZrUmR?yq!f&W)M*o%t~CtukOeDJZ}&fE zfer9H#Te+>l*Ql7f9I>TyQABcI(Z78f#!~GwJciHt74{yw500>qjbdN`vW%4z9&?k zW^*4;aQSzz`NY*t?6^j3xNHPYYx6(71?>ks9x%A^vh$-3_Pgp|-xEqi1lueDXJzT< z{W;&25z85>u{4S^1Vm0A#$R+DDB#a2973t?m8rri-+dMkR+dLWcEv(RMIR7{1 z6aK$3pOrpEy0&$>Pq+ynNITR3q7gTt!q?A(Ff_RxbVklAn+fY^+y?TSDTBTpJ{t#RDE|3}wYSCqGAY(vghg*P!9YI;=_V~VpiU+e?hcVKvMm16tj4F8M| zi>b!p(lmPYic*~jx`^E3I-* zye#rUVmYPje#sIEExv|%m8IWW@RO~?l_5t*rb%!RwNNRv*p9S>Zf=M?x7?)L?>(t0 zGcD?SLw9NKm+r$D=w`a-PE#+ZJN9n6M7+2xG;ro|(y1spaCTxo3uYhhUJ`4&2UGCd_NG~tQU_tYvAZd;34&@a+8@3HntvQpnV-B=Cp|SX zbV7deTbd|%7wGrwr^iu~$e;P&ZPnKrCVeXBCkeK$N96hq@p4nmieJ`7<52e60JXUH zQRrG&qt94KCuzzsTi=0TkaA}6w<#VKuJ-j}xfI0@f1pa;9ID;6)^LxbcJqC^&*y*; z=^Yb*soRY4#%HEoapBzU4)4n2B~J!ldxeU&%@JXc!c20TkASm#30B7cOhdX`*=6m!X6W zZc_2QQsZYamYxT>>j59*!<*jvyANSF=#7VixrtlNZNUEfevvNq(X&p)JYrPe+Upln z>X6U3<<=W=_V>9IHrLSW3d6u0SvwoS3pWmvOFTA|Kg_^}5;tz-isuAdOi4Rxt5jRY zA00-D*Qd{W=P7*~1BOH0T}SGREY1I>);gYl_Xs7s;bR&2v1^0{mza<(IaG8OfvJ)NO9S5!P@UBTw zF&Gax*C)a4Q421#*|V(4C2;kO`X4OJcxX58%;+jqc7OCfOy5r(c0)x4yJ+hY)>=eXS zX@x1mw*r^$YgeV?^=zMtcISrY5Yne$pZCH$%gaL?VeHdd%_K#N3PQUHv@sG)z!f!K zba6)7rF(djMH!^=tn=v4#b&B-&K>}V+W`CO4(I0{PTx;XA88|%7n++-QL7EB=-JBC zo)~SsaGufoIJmsp zWMfn+pN@gQ!7V#&^?M~S_dpC7lI^nzFr^hC?Q{K9DpXn0J4{l3oKREOy~*+SSBU<6 z=huw3fySc0ZaZqogZSwS+G$J2Cj0O?vi|v|G5{goK+g141Ty)a!xa?Lo z1;bxt)EN*TDSh%_MMP$4#%un#ux*3^o5m3|6c+u4%a4e8g`Pe8G~(tz<4B#3+4~ge z+vG~}Un;34_DGKIR#wd~rG=qM^$#pzIro~aY>=*L3r7|ox{GpczCm%l9y;;<40dZw zR6bwhU}=34u-QQG8mftv#WXe=O^$ehcv@&V-o1{z_0|dMvb=X|nB5eliq?S|IPb~@ zCAju+LEh6%=SX&|1EwAyX7idvvBkuJBHoY~H|a?G%0I1Mta9*9X-Q#H7%Ob$g4BV| zYr^rZTjpPy?>-Xi2e0S;n6?TaDlb@HCfKe4`w<`Zr+M?U72#jl$M>G_DB3zYNN*WI zZg+=eE1wwn%!fT0ng?Q2sQL1=ff$$ENPe|c!GaA+;GuC-iFS26yGT)_n3B0@4~u9$ zIZ9D-xN^etj}eb1>olBq*6PNl+2uPTqMsx<68RBcLna)iqhZGBQ4;;u{1d{9hYxT6 zNcPC)5n_)|^?I7t*z5b?SuszzE7ZYJGe)qVA{KAc#>9z6WDFNFrq}rg#)AzDUt?u< z3UBl*=eFZ>d`YEttDanl#Lrdb;N>QqaH~y}*E8O%Ane<#8n;1dm`u>Bi%cFX0Tn7S z=O`qEiXnAJ6eX=>vLKy@!{W$U4@fE zVx^ByvOMl*zhp3h&Yu2`AZYT0bG)C>cXByM_xf&?#GmC6m6?YqF{_9Z<$apO{8$-! zPeUsn_M*FXcWrhyn4WR&XUMR`d6pi88>@9pCt&UwG-qgw9qx(vhC}U@;^<5~*pdP|3H)|onTd&qM^+4z_ zzINOz+bES6gRp09H}jN|i3gcS)>eQ0Jzz-Sq6;~Agzgal!^k*D&OU}G(@ncY6_$FZN^-4)5IpBnYZ7%!^{ z=e}l}&Q4Zr6UzH*`;&+543q>GUM*8F*JFN6*O(HhroEU()L*>GCI4Ie6bYt~J`=rC zG+$Ha^Qf5TVcfdUSR>GM4_*!zzNB~{{>H%%y|YecAoW#mgktVx2s1q{BHUN|(J>ex zf%)Z`8)s4szw*dzueacrg}nv=Fku}7?4P&@@2i5tUzG~l@u)<-*I$kEOj-Ak4~2ps zs=e6-JRD78!!5_l$#`UecgATguj&}bM?*_dhq^ZJ;?Q@HU9pI=3jbDF)%-#0Nag5jeRR|ih!VE6DVJI8a_qXR=2S`pO`@pVQu1y+^U@1i zKnz5z2V{JGIfPAE)bdA2HTvzS^KLa&hU%LyPwm5wJFq4Q%9^#KH3_x)@Ydf zZ5qg*cFATY-lLe(u}}i>OEwLm)5>Z~V%+-q+gdH?(?LA1y%#DTor%8N@kgWNd;r{( z4|s~~Ma$Y_G*c3Rs3805idv;$t=p0Sef#AiS9X5}M-nB5g;h?r;H>l&$$v{0M8)ev zxj==k?AI21d_~nfga=P=Fk@@MY)?&CyY|AO^E#-qCGwsY-H~7ZMyZuid;~Rw5_7q0 z-Ddmrzn2O{k3hwH+0rtUcC@#M&_Xo}=?Zi#P56l+js7U*kdsS9KA_i3N)Hnt&*~F@ zPB6lh;$ubh7U211_Os4@+0J%=K-~bGM_l2J8n=c6N{K=Ym|rh{yP?{~*jr$Zzzf}h z)5KePyw0=Ee=GS4?%3YodEAabRUz7K8(U-f3(5));i5LdD-3cWZMw!$Uw~Liw|=TW z^BdLP8rxqJ95}2PPHB4-+56ro*KqwkL_bZVOqc2Ubok!&$jjZMWKaI${1(cw?)UNI z>8LVaQQ94OVhNHbiv)Zi>((i2&Hv;I@=wJ}?O%!$A^hz&Cu1*)zwun0x&TUNAXD}gC5wL7q@tO3hny;u@!!IRw~>z>a|T)Lp#I5 z4x4G8pVq@NzchjqZ$@wH!!yY0)dz0^cnuMC4Px--?sLzQwF2(^V5xbj^X+1`55?b& ziV{BJrOO1SSo51;@y*?cq&$d7nBlu$b%v7Xdh?Vujx3($u5 zT8;Acu}!ka^QqMWnIU6cej3=eQEtc=H4a+o<&HuxsN~c}w)otax!Jy^Ws%8Jb`XXv zEZB=Ud6NWTD;=K=tXLY#4Ou+ypo+5U@{|37<%6LF;WR~@Rk!jJI{j?z-Rza}zrgc; z+=yBOwO$WnA8l^D4iMyWcoP%y%hfx29bNf6C=Q6>v3XpWLM==dBtACI)hKZ23}c_G z8K9z@lj+~I0sw2vIqdJFhC8}!zUI-AF1oi?auoD$79AzrZ<3i8trWm!?ES3fY%MO7 zt`Q&N$vGFB;x@erG zYGP%TTleekkB_}U-{)aTWuCRFcFfAnyE?WQYLaqu~&NnEAFZ;MT-TennocU5!6)zKTwb0$uCXB1CZR%z zP{Sr7ua+XI=VpFBnT^qbV&!C1=r)&gJNSO3gEdSg;SO)MR;k5I!DO}b%QyEB>>i z@hp3ePB~#62jR+EXOCaWy5%Fj9E0`8}4E5N-?tKD6WdgJZ>DFXVY=3 zG?b^$aK7swL>Kk3r^@Zonb@cyf8&OOTLW-Gu|;EVe)^j`@NdtH0*C7go>B3OQh=hX ziGYTyv7+tGj^LTXO}hofk9k1^oz5$(wU~WV$lq=NMHMDdptFW%gsn>v-%~Y5q*rXM z`{;JG&~}C>zrZa%IY=!=HoC3*Zv~m+QjWz_Y@1r!sLWvg@(fDs;$HUcI`7%N=?XVm z*<`0pg@`;m+U;)+PK-T>zfGO1_oAjL*zmvWME5S~DEv?TjpCm=ssB&2;@^))QSIwk z+Uk}Qs{SsE5>AS!RO-=0i3P4J?=L@oGOsq7|Gh_ocDpAFkV^TJH4A@XwR~e!HcQsKd*4T zFa5gG_A=G4JmS=jjA_rHlhU*7Qy&T$V4c>YNJ;NHpP{@($Mte&V396u(MqIh;v+j5 z#pmIqQSXE6mh(kVk0($n|G2~XK9p)MjHv73DOih8oe)kb&Y%ERU)8|nERFCc?8@7M zJ&eM7oq1l1oD(IiIU79i>7Ku4INR#yyfB4Hu$W5glX+&kxgc{Gesrtoelu4?@@fys zcYd17XX~ZU0PsjZ2mo~1x38SV6hyGBm^r^7IZepkoojuP?nHsMQzKAcbiJ~tR$gV1i7&BkM!_2Qd@g!m?;wL( zOl(YJCpJVgB=GM@su~?dP}A6P&h=;}tbZ`59S)JNdcvyK#9uaySKgX4_u2IXXFoiF ztcGRSxNMwaMFMd|9Er+(#-KzMjSl`s3|w1-Re9SBxu(ZR*DD3a{mSgpcn^-W$hiA5 zT-ukZaE?b8Rk;VPJ*po(tkl$#JgayHuc7h2OXk5Q`8b*j#TbbIH{{5gQjjtUWINC!RHyMCk&3 za|DW|$s4V(q0sVVj}rMa?{i2m*AdfuQ3+K3)aaI zW0?9@^mdl(pHH=F7?Ng+JdHE!E>`J0os8XxFA-@4PgK=1$qNnU zl+6^z{8E_gNKw+B%4!VJUe~1TP%EDHS!Q@&Xn3i){gjoTj*qg@T@nFfEl4r8i&A8g>ECCPKGNyG73DH*qS6nl7yx z6@ICir*T)Tc_Q$XHTXy9^S_&`tK%(Y`afm0f1?~bNYfEz6Sb=xRA0SysGA6#-Tbyw zIg4jvxHBfj$0BzM^~&YqVZn--kh$KD6rNSWVT5e+}F zzEk?n-UYa*rnjm|x{pQ|sZ8oeJ6=B_-@T){yhj)A;7@UBq8DCjm_0B!x2hjI z@mQ9471psDi@nwj<4|+M$(J@QfkU4CURd6*g&9g*R5KxNQG$@;sZ7AQeoBf0(Rr2B z;)h9SWh7}4q$co5T>Y}R_geWeF575^4Y9iRCnTRI9$R;GGyR`x8_{ETx0=O7oYl)j zM!r76Qk>9!yyeO+XT5r!*i(unsR0ZZF!Qp_qice-4-OUjntS}2o)7=}i13HG7tYx3 z0b`;KXMMZXbGVv3ZU@TgJ@mEG{P@|;OM04;iXu=Kjk}Kt);W#Jj{Z>H#4yUOahVyL zlj`c9R{5jCfl({F7T!e{E$h18RpKuuF4jIS6FVIEC-52mfO7biRZ=BP6K3CnzUrBU z4EU=zY^^yLy?jdo}ALbt#n0z?T0H8x?CgN_I37hZ(0NQs^S$ zyq0UlSg@Gk6=A~oq}gE6ra`P2FMr>(?K`?hi;uceBmZzz;BBSc(qVtUyJF|s(WRAY zQNa{D<~aQ;&lWDv$~Sx{Tj)f&QH0nGcXc@s(^2_4plbf$9D}9AY)ikaYplds?c&#m zCakgO=33{0fkEBut&NiZLTiO9HluupaCDZ3oX-6|pozyp;p$`G1xkY}rKF5Eh^Vz^ zKwZMvrrjn*`*};LAvZ{Ulsi;`6{9%%sgUH+=M{0J3T;c$$|!mE(G^BhTG1NqJ<@z} zJK2u+jiTAoY_XwrmNQgpF?_W}N6}~go_YDzx?k4_u6Spnv}+s|9PbLs|7{ zH30&eL~0np)_N_gt&J-G~m5dGU>kfG(ggrCJTmWne2~2}a4NcNxoWBjVbu_?! zwZ*N!BV*Uue<7i!hqq9}Q4!dM0SV2*cxFSlW8fWUSBXz-lG8od>%`YD^XZ89ereiB zW&USnwk~@dZIOhF$vYASpyi=WVc%C%_5)A^8)C`XZ&1_8CHmCH-m!n6Nli`TB$(pZ z6#XK0YPytMY_vs9R=kY84ev^{5!ff4Y&3K$WRUR@?7sa2`=M|$X($zjY+%f4*Au`92|Do{O3Vxv&i6#V9&v5pKC09@|@EX(|BynlSoSJ zb~I0zg6%Nsc4hPJ^V8;k z97AxGu>DZ&Q;NQi2%UCoq)e>!J2ZmrXurQ+$Y~|ipuYi(xruDgxE<|9x}+Z+{F@X4w+TtZF2<)&0)Qk5!0x)foGlaU}Lu+@%@~+tlcQS31z_ zs~+!e=NA+nTw8|JN6K>L`&cUq9a+s=^A@~)25F(jOrLU{Epdg;u*`Y03$GO4?kgD=;i(9pTK}AY$DU)?21yyzXC1uXBKd7zd85 zqRJdH|7&3Ue<@R}>9BlfeGB|KO9c7+IbRj0fA~0@7ubK|mV3b}e{k$vH6OOK^Iv4R z#rD=qCaLu`j1^s$^)j^NM-*L0GSqG{%kyWAp=LeH5D$9fc?DG7(pzX0kHqQRX~aIU z{jW)U$?4(W32M}@S?ERoo@{Qr6~QyV8sR~{-3O)GK~b1D6_ghbj0yvCDefdKF6q+5 z)m&(WIl(QTl%GD;=F9eKw^*W{_y19x?O-k?bm5#P_V-yV==lbCCHLRHR@aVVotpf_ zd%k3*z+Y!)DT;nKdL9OK+!y#xNdN4An*ZUea5zP1+STI6M@Iv@QZfC%K;`+IMWn}48R0CTk4`Hl1$#V0(? zyt0Htp!J5q{K@YTXz=b%U9TMSu#Y_j;1UUfQfyKh)R=*+^o@qbv|_EA5}}0^uUJ;G zWYoS?&Rz>8-xu2--YUO5*wz4TExqGuKw&ZilrgJ5YE5{skJld{TJ=2}z?l<9j?Ros zPY>D?Rxv4T7O5~_QGt_Cl@!UJn9mGn2KkJOfQrJE%M|{US0%a1#7Lo%X^XM*&3&@#;dg0`Q>ku8QGEdL`8SgS*lfXD!EUS@AOt+(qHKFu z?^Dd!%D3wp;!9oRIn&8+)oTNiRt@JFUzgGg7yqXhSCaiyWNt6q(+6Z3UhdF-PoQeb z)R!)?^yVAIX1m;udoXTg@7dGGTbFF2{&Ca+al^|8xvbK&r;>lsx0eJBTXbjc|7~L* z;k=v53W$E;#)6U~528O9=>WBRaS?|@-gF_W-)yXV-h{SWg|QntPA@-{kU?1S{Cnf= z4}oAG1Aj}Q@2E}vY$>Hd9>~rksvx%s+nObtp)syr`8 zrj74mTXGp-=}D*>4b8ze5mMw|->+96fiMh6`Lry)+5WcAtB*DA8yai=$9Hiv0MN*o znIxL$6xQ<9^}F`JLsQ;C!ehNpiRMQ`AYWR%AH(~)-tjpKfH2hX=%1mwvAX^PW3>7s zkpULIAs$mL1L4pMyVGlGGTx9jnLr|K+V+5NCf&mV*dt`hIgQ4b_ty_%RhUa zzfFjD{Al;&=aE9mBQD#xp(VMcIpjROY-w; z5^NEPdtOQt33|o@t^NassXy?%e7wmMqi?`!0hQajI$6JGUm6^}M zDv~7D4TjxR@Zz3(^CB)v7!CS^;g8~TS6k|exCBzcyfRI2Z7xc`s(g%KySZ<->8;*3 z_PSkz@oW>|O=wQO7evw`h= z7t3JXcLB*Xk*NUg*2#v_W&J)ogGvDr-V$8o)4usz@jpNtfj|@c(KOo}V<)-`vKUZK z;!H^NV2!k<${JfyA&z%Zjh_u?+QPEYm`yRI6V2?@go#zv^aK| zH-hghiHCP?nA6?gr%tdbK_+gI;?Q`0zm!#<6dpl$3YBTH{{W(fuK}FaXG2FfJYJE0 z0K}rEEmN{^RbQ40vF;;u-s|W}qFdbaytM5{-bRNhMUq!g2gi zzBn~)TxVUfM3Td3DC7&sF$cN+(FL*B@dZjs8!)@Rb#}@>&(;-7ZZqziwG6s2JbpMT zn=W za`S6Zzr1A!Zs)NCKbtLx$`Ygj2)X9)x4-^~-h;B+WXbegf%Un-WCAM_l4rzr7X_#R z6(R7WEe(+)f2rxs_RtM-D9c(lFU$3%8{6gCef)5 z%Tue4BNbq4dEi`p?)B;y1I;zl=x6TG>{FmcRIlpq>y+J+*R(dv;j!!&hIxc>FuNqA zWw(j^eY{{NhPtXz)tAi@zok)9GWXh{+FhQ??sTd0*Zu%Y=R=j=$|c>1{&0HmHrABi zXNH)HY@fX7Z{Xop9B2qg&2W}mY>$!0W!ZT$@>l(lcs9Q?zu|x~(y+#lOChJ47m1rybl+x=k zpRjF?scfmg0H=YeqryL?`Gf_CH4-S^)Hybq#11y5p*G4y^L@XIGdH9`8x;*z`b2fF|EL}C>c3}0oLr$A}~cqP4+nt1o; zsJV+OyFgObzM_0KeJ!pZ_JPd}U;B4W=J`zo*!vrGb6H{zbYaEf>TX)Al){(|VY%>_K>3r{( zjIl}AZK!5{di!4|a9WNn@&I6?O)g8O89#P{FSWZjZ#4ZTOHpX5)(i#wO!xs_*v2K< zi>V%z_7^5t)rMSi5z5K}= zu?Xs~;R<(~4EBHgKsB>h4!1)1DcmWCc0-Np~T=QOCM{Ii6x~TuJ@CiL(4bLs4zPI$=rg4;w(c*z#iV$N$be1p*21 z4X*j_&wS@ykK&+q|f1 zmTWfzU+P?3(wPt2{q=1`{NBA+_%?m=fe9G!_xRvw zsEAP@=NoQ=bZ_cwg(|S~y}ITNOy~>*c*`qT7~+A8@xolh7*an&K9}R}Rbp#OA-0>| zD?k^}kg#{q?6g6k(s;JGs32alWiDpJT)O)4*&)M=LZ?a^dLA9$-zb1A_q=s`)_kWW8XQ440(ejca<2o{}#JcnC*``dPbVSEeeX&;*#PI016-OWToLz_-Ng`vAZ2Bp1wp_eJiFs+Pr1 zFME;mW(*+4`%YPDMo^bY{~>^T{Y;}}I}zMa$TV*{58fhZa+@ic-)8QHm@OT_%{0(= zffOvQdb23$0SrCs{F>u;r1U~+2!Q}h3bWF5Bf|%M|EOci4aH8rf$JL=4Jl@NHe;iW ze>^Z_E6)f}I3`dNK(IcqTi~{oX07$$jnHs<^kOh*f}Z(r?#K zVfS{T!pJ==!yMjx6euXB0Su{l&{<*J8GyCko}cv-nEi3H9WWtOnp@@LC#q;TtvjD0lRSFgo!DGIT_k=qe%V&1FK5 zMFDkjcs?b3Bgg<6BBPn$lAGLW@(z$k!62(iR$wWPF?nRcgXXFB%ZD`f@&c+j1V2q7eMPkc;BVijsOm0a!|3U|Dr6 zMe?ET6B^Zbe*nI$_$Z1GYkk_BF(1aF^yFXAL3sO1%_l*5x9z*5KjQbDkK*Q}(Yw!-Om*4*JEhg@32yAoq(tJ* zznu8Sl$$p9)LGJ29K>}s^8hK3w2bgT+jS=9hkl?D&>Oxw=}3UcBZGPW_V;!~xMHk# zN>$so9Qk}th=@%2fuMVwd?ox&x_!%4mb}9tXg%0TG)3VZSmOeuf!sE-YspSF=|#Yj zZ;nVs+={!~>Z0lSe!Kg=NzN0?+^#Eb;x4&Ko-+yDj4uRv0E^ZVhh z|4M52Z7xSbjpTimm5cmKp+c2BEgh3Hr=@rt1XwWeLGG=7tI-E|l^mxN8@H}xqg$t#M@GCK%QyrqN`NP0>+p!3q9rLM<#B3*fWGX zq^CZRiBBiJ?J~9KX|$5l>}z={0!w{q$O==c5k5C8O!&tkczEL1RbmRrt49|J+gpz^ z&DLfkxHy59+-2oirkb3#;fX1(5kL4rq=-y>{OF|7Q+mJ06y($mdd_w#vM~bdTjN!q zfeH)d2~fiVtjvX*ZA4;TsSC{agqd+GAcd~;N2pmOPQRAp!G*B9Rgw=-0>TwnA+K3cQJdoF8 zsL2KCGv($^g+a>3;oS4~$0y;&-7i!9kJ5f^WrW)m!X7x;+aI@mj_6qLUabQI#7_PL zA#Qo`qi}Xap^P^mijnfWpdKSypuj6S(| zZ!f6zvnjD87CuqSqAGya?9R5dYNA*KWx^UvmAilPRld&iL<`B;C%KjGiGtyvJEBO_ z*vK9`gWm+!uF1PMy5E}_t#~>T=C#LpmlAvGlS4lGU!Q-J@*(vVk4;BBe=s+dDlx2i zRSVo?r^u2-3Wj5EStht7fi%?LKn8pz4^uS^3||6b!H`CaW*G;_+;)GD_?0>FkzIRu zGBnbU|D%Uqw~NaIIA+Ore$QYmF^b#f_gwnXgJ_C!OZz+M_bbmxb}zLi0a+mVwZSZ} zRIoOR#bmGV(r1Rh&dR_gsPFcx`YD}Che0v;T$F5+=*e&2aJp{(ynje_IfARHHl^DY zpUv1{NdMj9qBa-iVe5ZIKY7Foop2`=O0qvC2R0~{qZ#HUYSXKh7q10Hw9YG?GCT}F=V0#kpLM&Dcvva9QLhBFNYs% z;h(D?L^uBs=a1vdg1menKgmNS4U}}EY}Wx5x8$jH>ExmR{NZC?RFI_v1iR^X=Eo`dl=$p~!Y{->%2|I;`)+tMQXB#mFIK*RvZZ-NeA8H%QncJ&XP1x4ac8%Cs&n z)7c*?3U_R($PW*Ln7jU<${>c6@aaBU_W=kYNwoTG_vVEk8y1NC?=16rWqfCYBby8? zh^L=xi!#&Xw846q?_Y~p_J~P|Sn&FnvTHug!a>*20Vvsgb|htW15!gQ@+=p<&Ob87orZT?nR(#?-;? zpUk^Z5WW$c^S_GAAF=)4M}=07c5=&GY0^iVQ9(A?W+~s#mb6A>x=%)rQ)Y$E$5mSV zBWX*;x}s#10k+Kl*`wyU^+EgUoopp58OMlMQ5Ma)!P-7=p!%ABcOzf6OtAZ1RF6Fq z9NQX`Z*K;=*NH5dSrgTm5)JS5^J!UZL7QY__xB3r&28_4V=S7@GvMjT=^#F?x&4$N zi{0{`&)FdOnzpcx|+QClB!Lun7)%s0OD<{7-=peiK zR1&wV;As}8T=UjlzyBU1bT%{P$+8o~TW?1tlxt(O+$vhjeei|Z_=I}EGh{gNk^2#_ z>W)4AD^9qy%EYtn7Qc_lFn`O2Q7Sq*?>+pG*y;O*t7gtpymRjqHk5sBTKmMeS;@$82iU z(Dm!|_jmQ1^h1$1;aOA3w4b_uEBto?V9g^MD1Tq8XybBiO3~SF7@EA!Skfc;YyhoV z-+nx;aDYb9I|Q7qtEI3_8=pz}EMH}ljXA#<5tERRu;}3G4Z6;$sHHjbS8Uu}88w#h z@as82@4u0_-eZn+i)CRViREd2D6NL#$7gVffHyY-Jlk(hv`ZQqinU5qU!!&Q^pZmD z`dNxXRZ&n?cR##e30c|73hhiQXeO@=-soT%wK1dT-Mzl%-JQN>*%&xm`6c_@cBjmH z_iK(6*zLrN@V?U_@vw1)V(ySeg|?p+BR$n<0jcg6>`Slimw2+^m&0ko6!VHDvf{Db z_YV~huLpfrofK8bNXRs3aFbK)>?ngN;_3UQSBdO0$4(R^{C6KAc$U0`VXn>K{jbqZ zo`Q1q)w9i~SHZ1@Gc)}4VoPH~7%R`o`oOYJ?X=?>zNkUKMHHo1tcOzuBsVy8D{!m|&rrfzIs+@7`=sL%TkG&aC zYh$g}>gSU7AfM)?kIDW#;oI~q;g^`-euw9YS2XFw!H#S=Pmq$GT98(b%Y6_^9fFf62?tdyRO+b9X_#bAkconF?Cfff;#bZ}e7r3at=G>JkYnY3>Wt6;J;vTw<6&qDA-Wt2 zi`x@n6Ri5dedkW@kfpkeq{J3{f*kOKSX%v%1KyYgK2bYG-Bve$!&W~diL>EJJ9o=9 zSs(sbs_9;XdY1yYTI6uIoKF-R9oF=%mNWY!W2!e-sUl>U)O=-i!92di(v%_Mw}+?6 zdp`7;=iZw=IWM%^W9VNm?rxE+kujqv^?JdmxK%*`Wh z)*hr{b#A`{TfJ^1Wvegml;xFXWm~VzwUNiV<(-#(?%nIq@1+!gNdc1>X^Q$vcDiVE zSvL#|%VFS|kYdZXa?b48-zfiw8&VsEFLbu@Ydjq>R<2k~(R2Fz7{1XfFEQ%8p!Z zON$nxDqB^ol$&O6a|yNw-mf*xQh$cW#)lwnkUC)~g=b8@#tL#zK^we;PV28~UEd^M zbg&lx#RddY&QWBQkiijI(8KFq>1E7RJpE7=ox|B*eS75=hd!2xMZUcCq*_w>6m1w| zMk6WBi?55iFl+YJEXkC-3&N_w*(hTHo>B5$4}VJ--^gBIt!fHd@^@5xOWIp=IhjmD zLo4Ny6oSeZOI(xRc#4O}Mi96M2t6JYKMlJgTzH z6z;$Zv#&UWJ4`I_d81Fg2~YWLSGd1djL;I@R2~4m>!_XEy({kTG}dcfUd2pn1(I-l z>+Z}xSHt}8YX{1oQDFT1nwvi_{CqD@F|!g|-BLEYyC#v@!ODI7t63Ec6VnV({c-T! z`G-f#x&M6fs~-m&j#pt|`bw-&Wqi`7{)g&}aL#i6*qdcWNxmHebGxEZkG#*`5A#_J ztaBm;<&sD|@2c4S`^F3NDhVSP$|=qX?Nyw)Dhjr44GbdV>&AQ%XB|kR^^ObgM@Yn{ z=N$&A`cRn6nAw`JDamOo5(S$JH`S4IrBrO=m+aZr+z(QsuIv?C>w)9Z zK4;dzWGCmhn3uQ1uhCaKMk~HNfR{m99t7Z%W08|IvsI5o zvb~R5$S4z{LP35OHP{sqL~5_f6!Z1=kV3NLR{-Gue$qSbJon^!(8C2&np&;)p7j7V zSr~7?`Fu4RFVQ#sZg_&;%`UAQIklAdbE8eT`5lSpMK6Q*1t%f_84CujDHYBP->8e{cl z|JGx+B=_Wr)(Y%a9_QBgh4K~iG3hPC^Y^+qtu5W@>5pUH`5r3DtuVQS!nWGkw^Ek$ zC%*h;#k1n2g+f~=r#?hv!#Dvcx5PVVA?)A{e!|bkQ!AmrRDvkk|9uN|dp#-pLyR=x z(arLxJa_b2;jH&2>qL> z#^{5Rt}zwvf_mlNl%VyzM``m_TLn)O$H63qI~98iA>}3B#@97_8`coZQ z6X1P5#arvl*V%*r{Rz1w?<`{%UQm4gbXsuVaSzTJDrBce-0HVf2BaW#mW`i;{V2|y z6x0sjT*1&vc(&jP|Md33YW-3E0U@2^r;Hst;HjiIn5wVsL~j^$Cq_y)Nxd+!ZngP1 z@FsjySTAS2M%)h0Ak-w@5ce?M{C`*u1tkruw%L=;-$1~gyN-VDYdx=MrV)a$)y7(> z*Q=J4)}weyJhk4~xze86IL0cAWEx_@ERl~l4s58Syjmf)Ums)Y>*8l2yB?@p0g&w2 z*=Gw?7Z$g;1cYGE=Sn)4@tqiM(M~?r5X+9Y zidC>Vchuqz7%J>EE?vzUdZ&gL7a1qFJb@tGdsC;pkJaH}k8%*@|&prW82 zRZ>9fB_gp{6;QsSVScpdXjCIqk^9KlZm(vT1`#Yb3a6tz;{n$Gbo%t56nFk+iY)1J zld8lHo(`nIvmRY;(2ymxyB00iaTfx+LfZBB##z9+vCq( zi(WjI6Zi8yPvB|Q%G^Y97P*Gy-5w=-(TQdHpB}r&qe{jr?Ckr%w@8raBQ-z> zQ#8K_5L~4JGELZJO6ByhsFY*zt(G-e)>rYDVr4x9EyRkHwx(@YC_E zHl0B{xbM}^y=Dtaj*94wF|xV)v``J>FBD z=P-ZSRA62TRajIH{=TNX59@y-haNp`n*H@!Y`{Bzw__;QyTwaK?aWe9K?0Ijw3)*9 zqJBlfu-=zIZP>p2z;JW+{=T5HJpJQY=O2@ImF0{}G-vuZM0({&EkX1`)7E3%E2#j$ z0Z&uGDy|B7Q1XZ5?}ZGZ%7Nl*s)0o`YJG>eLyN8l72qX>RO`W&a`mqai|oYPpxWNn z<>iwu#cjgw*_$!qFQm{HJZHV{U6H?xvT=;M(10CZ+Ow{{gne|J(D}eu~I(^n08bUYt*YjLGf-lXKHZqUV44B7CBZ)I3<`J);-|oA`jeaXrYn_lq$%(H|3guXz8u zzt{Rl#KcE`jneHxJQXH4<(JndQwboE6w3Qw4_^6!C`{ysB63X2X9hGaZ#@2{sok>105{?gQI7E`+7wtLKl}E%i!dAL_BNyZ z>B{C==n6Hz`d%>ycCUEbVSnwu-pV)%XTzYsI!-l>A0N#csy1TC1xqCtnFN55&{VVb{hA3|xL8{qzN zO28{Owwua#Ch>%W?!?vG2=vMzYols}gY8hqJ=$hw$vQfW> zacZ^6Y%fD6yRWXUiXJx-6Y367tDN-RcpuW%;%3QuEu64fLiq$NyL@lx0ic=nbxv&C zpPOn@$dYYR-YF3+!oMB3q7@Mp`n0uaJ6tiJVb4y5hy~c8>Cd=N0cDQ!zg9mf*28j` zz^q8)Bw$7zEGxLx`~%EYtWtq)S>Zy~Me^4n$7ZM9KD6yuQa9PG*<$xUxHnCGTQsVv zeGyjVy|N&@?~^u*)~~Z4P7`w2`LRnOdGy@r_}5D;k5_s5*tvz_d7whmn`yGMplVVr|AvGTnz&Y{m$9r|m=0qtZgeDEQiCX%*xw>T1&pS!NXi&9<4x4PTTKhBUE`N1WJu)l&{Gb$}~^ zJ*2k&!1txL-wwAQE*WaLwOZeD#_6g1MW5XFjnnZ8|JkCp@#@pIqt4MJWB;P|bAsL3 zpikBcvULd`nPIu2i2No*`zN%`ZHUvbw%g3GsITS09SoUe78!j3UJux16GTaCNY%kn zVeDDDioLj*o7sHKzUuFL&o2R|=sT_czaoUWvLpP*4>@Kn>=58MAYzizX7vZtWP8{} zSdyn%O_OkI78vQS>vo0NpB0ut>J?PW#sqyT_WF4+P8)5S6*EV9gVU87TQfGbc4(ef zpF>B9#oDqa$EUFOj7DFcc>2krea%wZ%1)T7#c>}ekbHFsqROM>KHNhNu}Leo8SMDj z0lABkcZj){Dkcv(fSY=>^$@9bx${D(3N8;hYP)AS9zgV-t28+^XFK7MXNlnIqgF)xjNKL zfG~r|Nl9zCLqSSgWk!CVXL50gM@G?>w|BPVh+R1kX35I|`cBR)?vBD7is?G>t^5Xp z^1D3eUej+)A%7GfIfhqCoHZCIOtC!>i*H~4pbb248MT`8hEC)p8-J@Rf}Li?hqS$@ z#N9ZV{>^?)-QbKj2|7hTr#|qy<8z0wc0@b2O`B23a)QGSE$O%Q`Hhh`e|IUoa#5m* zvMeei)F3+;Qnyi%+}+dELFKlOC8Alyh^h>+rhX!1zx#d%t0d$*=Q)RBzJ8ouEayaf zraDD-AqCGbNkwdeGG;$Nc?C^mA%NTIZ8pN>%Wg z{1h%HOw}mJ zg2-z4beMJ~)6x^4GH2CzUC1@*XMC3@f>!BpIJIz%uU5T+Zn-{dyJP>7ILcYBf8&Lp zoA#|uCO}p+tdCppHsgF)1I5j{H4dJxpu7(=TfK2@ewkWM=X%2a1b4f52@Rzh5C4aH zcFJW@6Dp`r6NyehD(qttTR!U^>Ug~O!tii-l|Z0Dt^7bT8!yd#&yuIyfea)Fs)42y zqV^R#av0ZU1F~!+QiY#)4-FEq{hH(1+M3w5tB#kd`tpP5J7F)D_QB*ptBqs&l@1NaWc<$BfzC@C_ z(0U>#v@GTUcE4UB9`Sl}>sEz0as2B8&t}}p+K>bV_(5CUyZO2CzZZZbIq!_KjwAQ3+~SsW zz_B?&LPNgjbHSA2Lr|~PWuv`MoTwe_QwBe}aZu|8utaj6 zFjQ7O13A>Et7ZQQy`oK*pfq(|_u^My!4VoGm*xZ3LR zi1o)vkUo6s8gTM}-Ip3pG#7MQ?sv=OK7OH$*pLg0x=rT?)11Z8e6)-ALop^qnf*y^ zIv3&;)GUOcTBLA9Tl2T(sCx4+VhLx$0qtAyW!7xPKO3|6dozVmhOD0~B!#!mF5;tV zc6G*a452u?l&aN5-SheH=R)ue9)vLbym-CQb+7{;xP|pgTK|5Cp2Q^@WmU)q5X6)8|bD8^|0WTj2-Q5ZH z<^5oQDi=?+6+o@Ps5zLAqDcqtpSWhYal4W~Rck!#$X&m6o`iV zuAE9!xFFns1+}|IUH?q+y4|E_{IFebqH!t0j+C5eM&p&LmBis)f4g3tk*?sala{JK zV%z@lYVmL4aph3QLVMctrm70v;&rDENK(m9r^Z2C(pIwjgXkS)$`D^=^%19!6Uybf zRjby9wY&HHw!Wa<2N-Ua4)67s31-NsLcYl8I(Sz>k}`Ytqsrrws_e(Vp!iznf>rmm zjs41`&Q6uEq85#9BA`6M?m-o)+bPpK^!e{B>(>3Au2mhjucu5`9Y&*T88gcD!7v}6 z?i)?-=3{W|6X3n@NcwTgkW&(BK~B%^7n74CsaVOc4?@9&{%?H4A1^rd)pBZ6t$CL~ zM^b8Y*`36I&E%d`7qp4y&r+`zG`+G*Q_Zw-!Z<%6qxbgGz#aJHT>y53HK$0PXnW=C zr0UCrL{cT(ug|D4h2GCU(6xA?luP-2U(P2%Lej+k*uFKvPYRB$my0{yc-}RT(*30} zuWHb$psLHOs{gS6UIqVD91adn-1_R%`Zp6p4ft66KC=aQ*p>M~ zWt4@zHtm`8)CJjvM8AqdK-TTv#5f*)BE*l24`+dVDHmjSw7&Espo3*Igt)2;_g@#! zv~{bALGqGPYU;n*KLswful{PEdGz(cf)4P;;Y7YWYaAz;jTRj)Jf|1*(N9j!TrRF` zO3N&e9s@GAwh93YTyt_2GSQua1591el6N&2CF^xffYX)n?c%NOFY7E=n|nKGtsZFkt@v+@jAb=i5xdQPlCq@%i!-eW9B{pQA+(*29=V?$kZa zU?9uF+k!AP=(hu#yDk3Z6V8J>>Vc5d%scxdaeiKG!m-502^5`#)vZmXOk0nPV*P_Or$P6ew*0BW0AoYp+UP239WplQ zpQv08jB5Z_NYuvgLprF%oIwCBf89vHr>WB4QeikwjH_x0@h5Y8sW){fo6nw_KPJ^9 zZprNxw)DRiBK*2er{7PXkoW5%W%v83AX%wf!z(CnS=4S<_>NHx(yjktJZ-Z6w@I_p z!u4lHT6LXkKLMW6?;?Zdt$T$6RT7CnL@C7Ays`GvuxMu=jFWqB@)FD6t92A;O`YII zx;P86h!SJrJed{5-tIm4U`fCHQ}DSaTXL#=7wW7|6Y4c+7i1ET-BJii+zQ2i*y@*U zQ@uB<{kVaJ;{*(Q>`Dat-OB=1kTU_7Y8-fz_JVq29tzww^>?#dk)#3a9o?L7(AK})1_GJh|ySo)-SNv?GPcoP!jlADRCV~zZIbn@(zR<`)NsWj^}Y>gHBGW zA4K2cB3k57)BHB6K6_2-J~EMys_zUS2A-ZL)BqiPq;Wuq*9PHTLICEW&gd}34n<)B^w zDvnos+?bZ)f7%VLj4%r8dtmshal>i2i`S|~>DhLN29%f~0+H;SFREqywYiK^Ch!d` zY@fVLj?PU?CCT9=sC@g+J#5vMxFJ0Z^L7lSjfK3Yd8P*~g5P}MpZ~Fnjni5@=o*@_ zqH;0xlZ_){J>bJ~Zj(siEy{fsi4?boFCyncm}&JnV>Ky*KbJ4VDM=D&4ulhwDZX>T zIB|#dFNY>SX&khgMXbYlWm2YS@E2QyV)kRav84q&^0IKPlZWZSB_=O{OaQ%;()l%j z3x?-J%D~J54VL@mu3UM4ML|Ydvy%1qosgfdmL@5<=*Jw?QnO)^$tADYIDLHY2L{@n zi_(#1Y7QqTei?p`lFem1%@8X)I4mn#_o?3eT(uMwxf;>A9TN1>?tK$;%cCn6f1#;N zIPa6zT^-h>^M0r#Ym88l(X{cMqM>A4)`6FOl>BRnBRT5*oEc;Py5ae*4%3b&7iAZl zZJ*sw^%MjX5@(_QL)|bS>m5kH$(7hkZISCFC4K^-)$lF%eZipT5ULJQY<$)VRpb?euJRki(`gLsC` z7uqX|ci#qBjBdU70&zN~gO@=e zZ=d%Pj|_xslDK3=MN%x?<7d3Y&;(X(h=<9;DTY3vop#+n`nLLFIMU3%o!sFjoj#|j z41GA?YYsNUD!_iGu4Bc0XfpO({+igUKlSdbISQPF=5DTQ9pcS$fre{8nCn|AUOQ)> zb}qC~&i)GCUIPi zXRbOslG4QfJGuKzdw3nGm+BNs1(ETjSrS6`TZ#g#@9*;$o%D=kywa&q{E77A5}Q); z*t{Q;WG@1L-?Gr(C!^-TR4G=Hyp(Lo9)E^q^Qv^5^~^3Gnmuq~RoB}Lyy1V%GqgOM zfkhd3-|YiPOWR*~y*>Rx?begbO}^7NhIvYZ@$+A^xwqtPGK#uh$3+@6=|=L5zx~pd zz36PXe8LR3{J6K-dabM&@ z-yoTk-U~;IRsT_%1HI@7wTmLj`?XJMkha=uDfMjBLjcwnKwwVb-$>?j&FF0nOxp>@ z_a~IGo7p$c_DFWDi&z^Jbd>v<7&`tD5xMxX{TA7r8@Xppp18GF$$o|wuDQwaMNCq zZL70Z`%!Yq%C`#n5fjPNnigQMeR8Mgj(+3i)q6W{QV4@>H{a%|oa0-q|HRzl&Qaa? zNXV~4;YXC?+}u^xmB* z)?T@5{PAU@-7e`;KF6PF2wRm}f*ZuJZub$WGIL~U@ zu883|HQY`eYU2gl(kU#6+0yn_F{c~A`ae?Eg-Pm8Nxv=>CvGp{^?cHN!E5nEADnQu zE~E3w(*D@DrLMlJee^Gjb|rKLuiDh%;J{?(L+TS>>|uwp7B?-+5LFiU7AF?ZJDk^$G3$!z#;=> zPi~RFn_*w#Oq+lbFT+j8wZGYTu5AX-3rw-Ke(i&Opa{#6i2Kl{sb;6*a;I3+<`BZrOym0^Nk zHA@XxL$v%8zjGi=V>Q<~=y@SZ2~pq7ba(;oDjCb-H53H2gh;Q?HX+}P~&zYz><62@b5anNk!%lREn+J510&O%HbV{#J{;_-q%>7l;=-3J9{~ zY`S2-=;z(nNPIg3TXVI*-y_a6--lgEa- zb965ubwu$|RXYsg%Yuy^7ikxgfROUa7p^?`uiaenpc~#$2Ux49Gh@WtlB0+fEb%Eqd2y=x$t-{z+vgoHMx?)B+tCe4b8{-^D>9s zt3t>5ThDjxiR?7-!!}J!`9dfAru<-`nmZc$iQ(H42>0<568!WADPDgIoTntnc*f6m zI+7+flB$?@*X@%+cPTJoNhb@>{7m+Wz;K6nge71vYgzX3)+#et66gGOKB@CiT5~n& zvU{z|sm!s{NJ>bD|Tv1}uXv|0b5k}y%85e7Ou{8(_1&yNn!`l6WSfr^24*^`PXWPx648iQ$Xo_ zJqU<#{zXi>n%be5q%OaN5ytxY{i>B2W+p+u<$K9uFXfAFOn1W*XQ zZ5m~%KteY|;!cZyY}KkhjCob@Ku$d}?@!McH*1RwoPL8^s_aJctbjC#Wy)o%v;4z( zwnC7(wLGO24(hfMz^sYuzy&=LY%ty#yU@{toVaulSz2ws-@I`ksGJCTZUd27TX|sj zyKtA(+vS&<-WSjj4D=6mnsP{KKV<deejflxkqmM;q-y6zL}KF;|Dl|9k-~I z+X4t9-F@PW%Zz&O4)*nW~co00{Ox2_1y?Zh&=r_(1t!LHUq8V>k1_AV5l~(Y^8@;k4m>$9*%bKj|Xljg2a|uu!=mwHNo+GWfi>N@dNaE5{pJTvb=X? zHx2{0AoH!?TH4@ibyX@mch@=qg2a+BiCD}BzF;$~^V&>)<5$@MY0-#b5+sJ%p7+4R z+dRPYKik{j%-wAgFuTh3Lt~xt!yoyIuvBByyV~ceiznvGFRLp5T<)E|PMe5+nngx? z`e&Rf&4;r{z0#%SSiN9#CAs7EEf){nkQ7FcM!c{-&+-HBoYh&r28#8C^^&gb$7eL* z#Ph*eBo?>uA$4C~bN+*Xm1L%Ll$~kE((e8T98;gC^em#em0x^%(y1=>%}xJ4gz8b! z4PlMkS=Nmy=Q#pL$My4+PJUyW0w!l!2eGlC>>#lYcS~>S4@kj>DP7NluFwHFo3#2{ zwSv}nmJ|f1#RG&P=P^5_3WMeZ)gQE6^z~?f^lB*K%bHEK#!T0-~z*TAoKJg@g38?t_WfyQi*1>-wi4NOkKD- zp2*WwNST19GVnaKE(yYzDp6fXVfm3ngt9J5vG>SQKk=z$b4v$y0qH5JsgbGd5PO+; z{a;)T#&^orvm}NQ<1e03+=~{(*f5Lsndkik%D;;PY7;+^QgW%NP-*J|MAG6&Ag4|m zT4C6N+JG*<;$43HKxYtC+FTeT#-tFY%1c_Y*DeLRNrPZ%B|SM!u3UHVKdTz!eDKMK z5TrTD;UzofRhNfMP&`h@7HmX}^&aZKlMhDf;E=+9otWR?6gap!=`tj9T+A#f%aTrX z!Ba$DY+#+gM8|UCB2(3c?#k3iNHIP?lqLC98}>tCcC%@5%g1{35Y6KwD2ivjsj9-W zuOM(jeiq)z!kW-E=(WC-%bO*4Pd)jig|+og(b|ki0E$X{8BLz*Cws&vkq36kFM#wB zSJ9dnU4pmefP(cBbAb^HS+tAG62Ioj+;h1~lzCtnYb^m`Bql^Ngdu)#v4RJdoAxa9 z_YcY%@w?PxX4tpI6iF~=6&)lW;3LS1@V^x@Yt6XQ(L^eL%{ViE!9B$Mj1ivnl&V`f z&qRQJsx~HICUx3{kEIx#7wZZi8V^f(AuK4)Itc*BKe4V4YqBB@C46lEd!+)(Xe zLN*7^2k_a~NNv;7h4^vV-q3cXT+)DiFjN{;5LBvAE+nVNW~AsI$Ew0WPpFNC&0=)* z_wq((PkSB219c`2Fh6U8Fy@RB@Go|4qfaNicX5RyYarW|>TE`g?+KeuqTFIn977;* z=kl?O0f8SVF{=;iv(v37$8^@a&!s?_c1cBh#=}+j+~ZsF)`N}ha-zwOh3-d&1DYe~ zc-P60zQ1iN5(PnQ4qME9P!=Pn4I6OT#NHcUqgi)=i-1XnbrYloy;akj>ajG8NO5~b zjC36c)E#1R!R|jZ`(k1I9qdES4_&|u)QmsmQZ@i>{j7KMA7K~{8oBr>PLooLRZNT5 z|M$iyf3LO~{Z?MKB?UExql0J}!8Wjj=e@op4dYT_2Mq@LLmQJ|u^fEY<&e)f-=*l4 zXLoJ0BR_t|1^834LW#6Vzh z+mS84p!8|2E0^RjYJRz63GH{}+Etb$M$|j+7=Fit>wAMnf-;pbZ-hjcMQfs6u4&;= z^EKc-z7eTz0h`hk2s{Q7>!k9Ew8bYz*=(t>qW0tapzjNLLvC4E>|G>LRHTsgSW`pCkjn=<8?DL|{J`qB(H2qDw{5cT_Ty7pXvGfgGDeT8Aoa zMtwfVhM1f&IsQzqF!T7Js2I$8WHJJ_K^<9aE?hs;L?YSzD6N*?W(=f90=vL31|heC zLKsPc;VBBN#i=6Mpd?64PA!JKpP63#nh5uaf6%AejkaHBc&Jk0qWBB=xA^U8noj20 z`S!;JkZ9(=3+_{O*f%Gnrn@hKq=d3N_guS8tHBJBm|?)%V}4HuwS#AJBeTod$6WA3 zw3jg-t~3j5ZxKP-P{_NDZv(FnRbP5n0FPS|EC$6WO>pr*-##P6laQW0v*G0rnE=e- zqwO&HQTD}+`AvITV1b1Z<&B;^K9yv7dEHz&D=5?U-fHJLAp z+s_6BF%!G9xon#1AH>LA>F3fjYwrwa`yJSg4fY4ryj5qn+>dV2E^o$EqtHgYAQ#X$ z#=U4qTkBz(W$7bgbe*2KMlTO@lVYCd zQ=0I#tw=v-C;MUiY>;3%-RiaesXvhi4pGy^4%nk zsBT1f0_yRw>}}D6+M=%h zQs1*oD00)tq&E4QgFB z3!5zzvoKe-s|H`mG8*8(NnFZc0Njc@J1mG&NSO+j{t zKRrm9AwF`noK^Gc``4@iHKQPs(kz@Yh11js{omv2&sYROid2^XTK9wE?q)MUa9hY3#r(9bfL;?Zc^k2M?b}xhvHt%VDIp3?GLdw6Ai7Jts4wy`0xs zU+Ox%Xokp<{?AHvt1`~KX2W>LFPpsIDD%v^9Fi0RdEgFLNYlLd0Xc4MwPSy1BLVq^9nWhP0?weX) zczo1G3KgQdQx0m6XvA+1D$S1C(x_(e3J_n3Wz-hAex7!5N*f2tMPB(*32U$aY>;oY zba_R(Vr6Kl2*=>~69zINSK33GV`XP%a?1DazK$vtrdAXYu=1W~KjzVa9xbe*!8z0z z@}WvnvepH-E0J$`lIyTJZWw=Lv2;~{3P?&-pQ26cOwPo*d$@p8Um?CHBoyu)&zK3pa6v{joxd4a9f+%SkR9rb3dH%dqcKb?bo+**k{aqlrLP&zQ~1q2DF%b7EbH_OO7#Y@)N7rQGiwPH+$AF*vSU8& zD(kSQ(ipQA-tfqe%+7mv?V12N#ATnRNZM9pb#o%Vq;3nHW-RNsyMEOkrJu{Ae}6(c z;Pq|zLalzX^OWBDkZZw~`!Ir)m%yrKC~S4$VAP9nw@$s;0W0^+1@ ztWS2a%C3O($3Z3i5I$uN#?=tA{qXoLfSk}Dvdv#JK4yTgG(~wDFu_PoyUc$n!tZiG z-^ZGclz`t`skbSF1l(+OGmRMneX@C;#CbtEW;6 z&{Or#buTw{$m4$z+F>TEwU%)P5~H>eee1!B^A#)!OmeuV+-T^{?S^^ozCL$`z!#e_ z58!oAV)E$DpCYKp2*ESgoQnLuGvJen&1L?Ob+bLTwM`IS&+-OWl35r592TxGwbqd$ zn}V-WjWC(v3M0|s0b=kJjam|d1=T}z8HZn<>jB|^b1;=y{hY*J1iNI3m4Ks?{vDD6 z3~<@~K(!$q8NMAGJR#Q!8<2CWo2(@>+7z|%Ej$2*D5D**(DFq8Py;%T<}SvUZ7QAY zzHYCXLq>M4gCr-;6CspwxM2qVbxU&?jp8gwvMPUA^sx6#Q>8aKfA0o;qJn3oP@6A? zDioH}k+a6V@i$SaB^%=z>h()hL>)e=6m#6|ecS04-;Uf3LBwit-RM09Zr&}%m=Ejk zTxQW&fO1mCYTKL6tkVKv*^z1?QGLm-We_yBH9CMCwYk@0U3FS=HXi|hBfxjh*PI<4 zw!-KdbAc0r`W6PHQUGq6O&LfKip?S_;_vMQLZ2`{zNQaKw>y>}7&*O(hMe+o9XEE0 zS-0LFKm7G4?*1NV-uk8Nav|$XY)WUUp0`^3RJH?rmI1-Fi)OF6b1cXnxc4GrzIn*R zof$d4H04ba=ft&rYLtbCKvs@*DPoZJJhLBr{@Z1;O6~Y9T(tF1 z5DmJL=L5Qv_EwT}V)a1w2S}79l1yxFzPHJ-7>`Jo7FMQct)(cc&=|rZ^$Qg6{cQ%H zX)mC~HNNiS)gjd|9HPCMI&192Dd>ATDAiTg4}?DjuZkH#f4!JRgZNJAPwzX0lOp&} zn>$J7h2w`m6hm;gWrETVqXIr$4hF|n=P{HjdlvzvktcKmap5w@IMce9mV@Xj+5(Us zj9Mvf6h9q$QZfLA`+BD_8&GD9ckI(0L`knWJH52e1$x`wzeM`ElfA4B`-L-32SmBSLxxbQ33<>+qIx}R%CVP^j!!u7AKW)`glXFP{4e@f&ABuNL{>9hn!S@3_zBt7G#VG zC4~I5)%e0-XC{UNg=GvIId+6bbzPF6d8ir71Lb7v{M<=jL=s*ok`@ude=q&nL#hi1 z4sLa=>d?1`dv6h(`)LRNydoOwofHA>qD4RDfxi13Mwmyqk__0vXW`7!w6A-mjg3~K zIAYy1AqbTogk2B70vd+R2Ic$!Gd$=ECDg*SW-lyc45fr9gW-e%Z1Z|qpA*Rc9TBF^ z6!&=FAE_6-eLqooeg}c^uJ(|E5I2xfc^pRoz-YUwlPDdex zK3!cX5GuZu=&?+xR&nmo*ah*+r)atdB+0=lf;FwydxK6X%%Ow;lzlq2)sW9;51Fn2-KHd z$8IqYv{9)?hgd))8lJB?{R~Y-c|dk0zFAmT%lc+#90#9mK>3cOE~{`aaC&3r1C3~~ z<3)LY>2R|YE5AV!u@?FRpXsu$>?mlEw@)_WUPMmF6Q!Ghg>2CSUu$fZ^i9l*u&L+o z+HJ}c^4ftCb(0Lq>v(3$)wvgD;Hyt71K+Awu1|zZKjLv%j;Lag&C3oTS6;rm`|QKp zJ*Jy#8qMYD=`pUbY=JU&zjT~{R8>1*E~M!HYc9;+ZAbMRBLO)KG#({h z`_x=k(b3BJQ4%9a%Z#L$EDp-5d8nk|PSIX1H~b7Mi*N=Tq?}>>qxyKDSP!zy%U}R{ zcP|5=UF%X?dPk1`bHQo;^8rk8x{8t#XqmIc;7O0~1H#Hr1MY2@GY1sKSN4BGsSBmY zh3?xSUuMnq6=N{F-ind4F&AIC;+jbH$Hr~os96vKJ;py{_Cp^XeaO?dNi?_-t29-W zN4@_B1zpuIIZD*S9{Jt)|NQTD1t`8i@DON{X6vB!KSQGa-ys3s6>!|sUwyWSiG%at zYn}1~#e&nXoZoxKVKip1OrAcCeldK-P4IO2*=Tydgyh?YZ}7*PXNC8_2j;P5DfnoY z&ulhgeCjWr z#(+8EN{s5;ujXLA>sWv!kqNGs>J@+zv5Efr=wb!uR;drr@ZR7FwpZnEp{>6MB(7x$ z?yksFOSj_Bhz(9oez#DAm9>SLD8nLHp|uR8Ii+A!LmV~R|NBAQ?^Na}1&ljTF&)*d zWA!9!mWsqAf4Gs(L*%Gf$u>6Lh*{2%4<^T`Kw`^P*fnq`;B7t@S|gB5yPPwGZOpyJ z84ObW0N-K^@^gYi^TvX7)ad-H#$pH5-cr5Xqmc)HbA-@mY(F-_N%dL!?LB)ZL z<<`3mfQ|5KAOp^O&x>m|0?O;i%B=16KG5`B^+7*9<{9&^P_UD=9vxJjQT^x>HikpM z18w69@YM*0^sS0TfZbIv#oV8`Q4(8{J`E+!E@MwKjOH10#E=JHD&x*7z`F0s>D?F0D|uPu_V{w!K;3MYL7F_X&uDJ6`Ltkx9{O`p^mi4?NJH6D7)> z#q+Pp5Kz<>1#M##G|06kzv%`$Z#wtQwC_oJ#ii_RE{SK<_SP&p)K3C!d=DjiKEimu zz#HO928jU$kODcp_{zV|FHc*>3XhbiY{6gRC&mUy#~f)a!1h+3c9Y(WpD8oKW&;GX zuz?!k?hM?ESd4OP=i)8^825j|na6SebD9yK@tfJ*Ja0XEJ;VnPvzX548yZRqIZyxf ze0S(nFdCkTFyXslN-{~>{KNH3N~rgDU!AY_hU;oHM;vLCAqfmo4RDXpB54;dOaKnR zX0!ssyva`OE{KdC3|__rqm2J}q&rP%<8f5kYxi$G^8mvMr`YBNk*?NS5$-5!Vr=!_ zFxXl8MrIhFL0yNcli%D}nEaKzSDg)KV_8iD)ItEJ+di01GlzIQ9>6GU$^)eUiAFT21ucotFA^i9HUB0xS#nHp*I2Y8leJdvG>e0idqM7) znfAz}CGBt;QXifY&ObKm@O1Ze43u~gJUP2eN&dV!8`8&u;8K4d&+kaPkDmPIL~5%; zjJsY9M~x^SQ&9|%F5syWbRG4e#=mOW z4W-FT?M)3!?WIK{zD3RVPEK@p2$F^~TQ0pxqnNS9INvd|VTXsLbj_`=k5VLsC9=b$ zv_OyNCw`;+aHe;^XHNQh!SP*wWgVP$;0Su&xkG?ZqC}i+&MrQiyNot z4BwlWP8l8fY1AnJ2k-}6YlYP!LBYT(tqHe~k-nF>=iB_^KLi(Gr>M zRF-R$d|o<1NYCDYY7Bxb-mQS~qDLfdyq2!{M#Z!m59jy>aH0a!FV#?{(}7?V=afkj zG&m8&4B-^E&W`iU%KejGGYZ{i$edS>n`|@Y)jV)U+Hj!=E;QTfqKTv+b z?oja9_Fs}6bud1^IXPjb+O7k1)*Dx=vz-LUxvl)!y;eR0FnWTty1z+$eJ?|KS!xzk z4H6N5XZW<0}l?*s2NJ+7069JvCsQW52N>g#&gL~1l?z*Utg0A`pvgqD8|fj ziUb~;Y&MMpdF=Z*-&@n2t5mCE`nIfeO{)iVkkWR?P>0r`PeGJK&5shEdhFc*w&>=7 zyC*P20~Fp59cxX6PPP)gnQkQ#m}({D|1C;1Io;~rUQ>4OgrvBhAR63>k>!WU-g*Vy9M+L5+kg<~vdciMoofX%jc zPCpYMI#{Dq-^yfN%7QH%jkLn1B?KKUCfmdLZS#9%KtQK@Lappx-%YOj!J!AdM6>|f z_nI-_*W882rfq9Jlp=O%>9#0vWB=l8)A^N*1ykUYti%I_um!N*|hCUlvZ5R%VYyDx0=b$kwuQ@_kUt{@7SpR+$`-?T)>XM zzk%j7?|;AG?EAX}oIpqGAxA!#L!da!T`d7<&Leht~jBT%Kpo;ND83x=&k z!8GQxQi_7M()ow-j8Zde862-xm~xOg6V-&>qz)b5xjoy$j3hE@Wfy&!{BEMXU418^ z-#OWnz90G>X_#zJeOS8B!amfwg6^35e)N9uG@(328r_VUwQca=A-o59EPMUGb<1pSWs)EeNd{)5cg*p|aj-pubVX7(n_6;9HkRD=2714_&q`QrEV&^uS z9_ml2QR$x+E~)PvXJV6h@Qk*SB+f5R7x+FHnTXdZ1Gz*0$bu!fakQy-V#LR5EBhs> z&!*>E+~9p`x~8|I&D>W4q6Uc-5=9_Jdba6fEkZucg#2jp34*(q|Je4w{xTo)S43n# zQy;AC-A1XSycW<7cZT~#;HJR~wqdWV>(gh;U3Rn^TL_?~g<^Hs#c$d;n4>vp7fHK^ zn|}*lc*pEhaW=hQ_8CPn6*-?#JZ)R6l_2hg&p@c|!b$KQPS~7x;2a0%$kv z`VWcsi^7PV*VCp55}RwGl5doUFywV6s}=UtMl=V)4CWcI*xaXeeS9zdxIDdn%np`p zEb|+oQZGn^b9oqmiIi~HX!-7ZP2SdO_3`G(ZfH_{r4^MYUUTglV7{;Q{}=g6@00M% zO%?~|8jUB4yU$Oi&5HQ;Rm^)#O`hbmZ9Ky|FX37$6vS*<&jnPJ;7;U*A!UzYj3WDc zPijUW?YRY_31JP600heDBn}IvvuK7T$-LC4%9+Yc*nHqwN;ZpssqJ#9f^RHb45(CA;4}H=lgZ2%45=o0c-1V)uy37^@XMu0~rUBvP#48-4+UcV+x=YskgtFQ~PdYDfn_$#gix&bA^8ez4z?#ZOplv-R|o8`H3$&lvKQU?{BE$ zz^jCQF$8deX~L)4GmQ(CY(B)pjQUch{J87NeZ31P6F>Ny593|G_YE2y3hZ!Ax(__% zlUqBx$b@folZBGiW#(g71q>*wFI~tn!E9&6XEo;c`JDe4XgQ6~Gp0-dnsmo#$=4so zIST0?vMi#{L{VN4yv&WI#yHN41M;tLbB|0ZGawUTVwGdC*~uas(2bt+(mS;_boCpuK`8Ly7A zWnv{)fj_3&aZS`ZYI$ae$c@_`oN5=m8u%7CTJId81c)|tWwbvhvY{s;Z3_I&aJ@_7 zA*SVk9G3_evrLe3&T5)rBWT21XEN8aid)vg<8NbUmaoAq$b?X z1^8a9ik_=o&yD=pk#*pK8YEUVviv$Fn<;ht5brFAsZa`67+P_EjY=Z{2)w%;kGzc)>FeZ8c|L3?=e*a?is8q}*Y6J&mRn*cf>6#g?6` z<7B54gm&KZDQ`)vWg@i-nG)MOBXQ)S?wmV@XCwdUm#PgKH70$B3ZnASJe>RF+txy3 z9KE#>K=EZCO|{?~2|tuPbsBhAL~=#n@;fII>lGz|gpF9QpA2UmIZm&*E-}^{joId3 z=?}NK)-n5-)+IH5%goBN7qpA%KttkrV=O;Vc=_n9C|C677}iLQL9;~ietqDa<#~E$ zD8Zjr)7E8WDR@>wsK2>~dO)0AB~P^^*k_7(?$>pRy3KY+poreXS>N_`7`Ey7vNQR9 z5i^zk{QPd>pu(@#)cP~cSg)a~;<{oTZa7i|=GfKXd!s_uaJN_FcGhq=+Vc4;mEjVC z_SZUa|75TW>>tTmH_?~<@IT@1*ajI+J+-E0%mP@ z@*C@>ffI>Q;w z5IQI|7%uI0@9y%0JvC!E0-Su7^|!}lerxr$?a8(ni~tW%Sar5-47HjX%`$UOobWh{ zoTdR;dC}g_SWMG~VY>pzX*FM|&JW0i0BN~BvzoSNpobKW|M>W1`t}{3(-5G8xE3~Q zjEM19srMX(_zkZ~FMZNLpFrR0KE#@qY=Yd|9o!SP%=QS*^@@dkdWNNqfMAKgZXC ze!Uzz3N`x-ln=)nR)t?M5QN}9mXp?%ACsq^+frifd?>M^;1OQFWNB2irPG({mjKdJ z<+$8nJ9)e<>brCmbR>5h5C~r-pBM12?IUZ7Tx;|zl}BDbl1cvBN9oz9xAK|yoN62r z=>iLAuzS-68uFu~^P@n~v`{k$f<$wC@GxUKY@q8K9jY~JG(~}(!?fgm2cON%P_hwE z$yj5t%MnUP)%O0i{K(Tb50IoRLwI@?F1Y)NtufvGtg-mzNToS2p5-+9mM&LP={I#= z*GHY(axJf7{nLPGxbX*N@>$;8r69mPNcB2c_qC&iw+mi8C2fRK0W+B zj{vN@oN*-}7HPU1XWXQ6*#>Y^s4xRH-n5-Ca}!Mi9jhswVl^h(BT~Ev0xb(cRpQ`4Dyvz6~W^vYei1LwqYvRSN|Gy01LI zbr&_e)M8@mY?!m0>t%}cZ)BR7;T?XxjFMX*bvpGJ`@`Cs3*A!7wR@v1>vDdE5@tKkv|R;6a3ZL52Cy4Iap*w{ zDd(36K{2~ioF(JkOzRX0yA};9^x;7ibHbS6loTCQo^h)4}ghW;+?Y$k2Hqi3o! z#P?an6>o`1T3+T&1)-zp78Clb)BK++)9b|o`>k6g<8rc<@_3sZ(|U5A?1uLsDfk(80@D0a4%wQ%t>NV{j1S-N6=7?k zJKk@;MM_lL2Cl;7xu4xy{RZ;sdo=)*lUgl*v$deOa@lgTqxD+4RD85P z?7+Yq;`qih;-%-2GkoTyVmHgl}Hs&~(!H&|rLEm(4+5 z*5*gnX$z9KbWrG6^&Bupb-uZNhx=R_6$J7qusDrz(R8_3&^ z(c*y0&?Uck!%-!mhKULYWgLsa5B2k$e-g2=X) zw$3^~iXrnL5+e-Y<%XUPjd*5um($+1r=cl?w&)X_alsyW9Ye$Vn(@!_%>M(9Jg2m> zb2U@d^z@}G7S7L0gWDEM(&9yL$6elA8Pd~?)>ur+2KB3`ZK?GjGwt8B@mr#KbuApc zK}+8DLst8113qU^S+SUlW8$715G$n`Am1AW%}*;EERBZu4}lz1cur>y&NgddvzdJY zVYS&>-EH!Ccb^4w9lMxz6Qi`B=cWRY&KKs*SJqm|-@;Cl-}DZJDX%A!%@6?M2abXd z!Z>BtHxvU)J>F`pZgJUYG zJ7Vo;m|p+<(HC77pnvEGg8{Oli-GmXS1{1jzJ`6jDeDO!Zj1;Hy}pYtq-6s4tF*>d zxjp95aJG5%bN%l@`=|vES^_66#^vpHx_O@Yd-^lmWBU!cbKr!2^EF5!P$i)hN*5EmFHzdcmGNpUQbzmP^4Re z)zmK4)fc^KWE0s5aF*C3S-4~K^LAexfAD;mHyOSjF)d7;e!ac;rXy!bxHWW10tOk$ zFlLmmCroSwH0iS6lzdy_y=BdgH}+P9|D>G`8&$>$xzt>?llHdetk?0RX3B5))-tdJ zHqOlee4L!w?QE&9xv0k40$OZvP3>X@xWzRtDrSJij~%VR4W2$mN5(QAmb%69f3{-% zIdGm%s^{EPSybsJ8A z8&pZK+9!Poa=Xs2S90mBy!r$IK|$K_YZKF9rFB3_B=>)jS=D|$bA7yIl_+{t1@+cT z2vDXJ1d6?YI{n2fnBQ@>@6FJB8*Yr(NTp-69m;6^0sL<}puahEU@!$&7DZxK&gKR- zw{A{1#2c#YPrAjk1U{t|Prq--6$>g@iu3#>$*1}HU|y)IG@6|gqvX?9If`yJ&`*Ae z`Q-i7D5+bu+4z`d9`m;=c5rCZ*z^FheDTMgxi&c;;I($AmXpNccLSul*N9u?*|9WX z^l!2~gj;=sS2RwV=m4rCt}qMQKTicxy^j9?kMBOq7R!pL0>R?#+2`l63EysKl{ca_ z9Gx&76P6?@^8sN>U7(VJ#pOHLR$s{C_eGh+eJ9=Edd<=fF?EvPhDn(Gh5=f}z%i>V zonxfeAqgR-qYX+D{u^wRG|Y|)kZ@sTdLeveQp@V#G=pwyR@IKE58bQ7!+QZk!L%O%6CUT3SBz z1(~Cu$Xb^t%{C?wE#3hdn=tF1KY;q{%IGwbOWQ#+b&vDWggjm1`9NyQ0_1#Q|3#lx z=xHWsv)?5oydK^5@k+n0%Vodnew1-EQ*Zu5Ci4NYx8rFALi?QYG27NuykK`5ZF$Hv zH7bum(`bONqmairS5G}itg2p3z4ry?*5>V@ zVGzv3gwLb=5Y^@Y)7^IDMhua@U8UCOym)ZElO+Lqj==ox+~7-Q4T+L{>Bno3K$ZcWJIW zrWLmKn?7Efw>_n{AsVI%Haistxukljy;fQ&y0etc?b*E<*=Wtssmn+=vQ5fRv{eyY z>@&4T68o3gF9zKcRbCHud_Vv6j6-{YRq4((zR86ESR+g7|LlztUI}x_6&Pd02g)$`7_k;*ABP)qRi{?AQ@9zuXGcEk=;l{vPY z#k*$dzMd|ao` zjt2~XqC7-Ao-dzY7_Z+nyd(Bt1CWD!?abHq|4h&_tn|SUNV`AI_b>fkHFuEC8?ma%KF3rU5q-aHxiB(0@y@z71&xF#oX~nNX{36Ql=n?g&tv%0_zTz9s@CqI- zuO>(4uQU8-Ga@xzeu#3s?(%M6=E!bvQe1AnY1nD}+qsBt=H#2>CQthzHtQ;6Ti{%3 z;%fay6`^>MHiG9QC_U0K9o>G!$>)20ZZjubk}+6vE^sk2w|r}UV7htrQh7+3=nY@> z&@4}F>iz?l@#I29OKFUcjj5me@V3cNR-JrCV#%l=$Y$9B>EMChkzQEp~6?{ zia%`+SvHl|oK4_VsnpwxzY&6&WA3?1VhtuG66Uh|C^iqjuth|#OeY-X0&Et#bU(K7Pv5lxetLF_@Fn-zvDF!^lrLE44AE$rb;h7K!b^R^ga@ zfRb2wXKXC}IY+Qd<@PezqhgpaH9q|$wgO9i@Ds$klecEbS4eK*$_a`zb3hdB%14qN zcJg%K3qrf=%9~uws!~T?Ti1(WwmSu83Rmq2G;1Ec$d}nqs%|JL}Z?1o%@Bj)C=l$-u@*KB%cZ_R}}G+%+|%g^%=iHH5p11#FLjD+x#|V!q;7W!$-56w@s(NF49L5D{I7iBj>az1x$*?z%4n~ z--YiJN`{}OirL5wwawR4xmRur1V%JJ#Fq>MC?P1vd-eJ0&@sIN67<1_fG_kD5K4N(M^8?Cp>Or z;F0@>6*aIT>yEE}Ti!;pWky@#*98rgYflFWS51*r`ebaJU@Jb?)!16x;mQUarcG0& zi&^CacgF|fLgP*>QIJN$R^}dtqnh^2C znBIc0T*OOv5}E^2UqiaHH8xkvcvmupsT?S>O=vC(uT8wi;l(5C}RT0v?ZmwoYE7seEIryp!dvF>L zbB@8((yJ7LBA&$mn0i^3r#8cetscwI9F5M6j`mEutN6c+G>=ASohEI&!oL)sDqb*l zc?NNTD@*rz&vD&yLKE!ALe0tcS8fIhavq5lr zGRTz)$dUbNJBE{a-Wl0k&Nilb_HpvuQ21pFe;5I6_Q-OjEg{6fBI<2?@-tAf)`gGa z+X8%-ZGOXl-4A&vnZM&1KFCe^Oa+1ON%HBIUGOE2Bc*Td9W=pwrARPHn$5GSdqThqk)x6t%{6CMed!q z>4NY-G|?qjNgoX~NJUAc@{4sb3Y>bARRIsKzMJz>fNNVcXqEE|=aqURo-=O&Lc;z! z_a>a6;Uekzym9P4o$i9fhnDQ)5aG>nq9F@gNgEMW$m(ei!DeYXcA8hvN&MATLF`Z% zRbU$NL(uJU-{x#;Aovw<`1RNfMfIPEy1+r3{j=)nC``+aB3a(@ax+lTd&UXS07b+! z^kQ;;$W*$To8fM=`op51nqKx(1&tlTF2BQAJ*DOvac2F-{yDSWuRWniNmqmYDFQ(v z(wn=HImcD8A8!*_ry5mL#lv-=Uw1I(xq^AAyD2SNuFNrc3@%r9dru?6yu@9*(spSb z#oZge=8G{BLcMdPZ6aU38R^sfW%HIZ+0DWa(sV;?#&+Qs*n)L269sA~YMTz>VpG!k zujh^&Ke8XQUCODv=J2*TT+vIXnV{nCwv}}1-4xfYSaK9$SVgwey8_VzGAS(Ky;U33 zq*%g6sYKkmCHKl|^;d8Cy!A=IW^ZGlP5b4E@@X%T89lP-?xDQ8op*ZaqGem++-btK zE4z5DC%O3SW9!{7_Uf8^B=YUdQr3%k>*BShOqGW^T|-yD>TS1M&AQW1Umw7KoR`u$ zu7^tkDw&liI=!{pg7b(7+iDgi^}}kc!FKkPbZt|0twPT0?yEBE{H|+ng()c)aAdZp zw;wR{Lu@eCRHQAU;;^oI=E}xIu)C0b2{2uD@|Vh6hX$*gHfyBnF9+TMhpZp7Ol5`> zid3n8#pTEh#$74$!Q|q@Nf;6cQKL&bh5}1P^IumqUPD8YNDzrKkJ)tTj2;bJBIiRq zpFr%PSI!vQi>S7-9rtW{J8HRRhR~-zUyvV+K94%Msl6I@4sve4+RSvjK^pO$?@(oY zDPBk=PXy69;Wm#LIeguJ-pH^thXmn51sS?LJJy`IO_&zJp;=yy+kSJ7Hq{n-X$cai zIp9SK739|sLC|qowmI`?j)mRVI#bw z=|uh^v+ejvl^jm1hXWz|(wdwC;@)z?Q!=i36Bc&IYO7FryR~c>JM)+1g!2mD4|L$! zd$M2Ih2%W@Umf*aFZ>QqR;@74I97Wq5pu528!&2-OD?kZXBBk^EgygS-~u;}+sJRf zLGhnbW+mLt+ZqNKVst*>$hvrWn{8O5j*8EOX<27eN3{)Vy0Gc(1S_Ik`1#G`2<7z8 zbcf(_;0^j|n559no?Zvfmysa$=gymH6u8i=HJP@CtM0gY3a^4$=OHZQAy)Ar3ER-o zwpZpzAE!X&4aY51XW6GfG|QU;_e*5{B(ArZqBeel`V4OlzD2~Pm`oNiNQGrK2G@c< z)-syIAo}V-!Sz>WKRKoqd9kaATvqDGlqR04B75QIKW3;7H}Y0P=q;OgE#^%Y^r!iH zvhivaG?`vY)7VMk35KTbAH}t^kL(Ufe|5xouy!&;T3=JN^?9eAYLHp9#y5e-tdb6B zos8YH#3FZZXXdCKD0&!vS!VtwQ%hhyAi40!HizXis}kir`zXdMwrb-#>XajI_1)GR zWAp-5|?5EPg=m&oDKc?a zm^oZ?dcYf|W@zIndZMW{?zPmFjmFu-QV86yF+<}o%qr5~!c7>|K841a5XaKc#;nT@ zGU$0@;V}J{Xh7x&%Gt7 z3V-?M{BPa{X|rxsx&wB1Tr5r__DwsR8gutCmB@>kO$i4-v<=D;WnNZU4g7?^Fs_62ceWJN;LkLSGF87VkQog$`4pCs z`TS1}&&_6ER=uATapo{JM0GszI%}9pp$CD(vfNATCEajmr1-JQ~%5=sx!Amxxlt8^>fNQ=@i zLxaSCv;q!8!w@4egh+`n=jQpJcb#=UoU_)u79Ut}$F=vh4U?$fNq&Y$NSlw>2A>iPdklR+Wwq|H}J9Si%u z<7sNM2fpL>Grqrl#P+-7^wAFWBDH@fu$5cu&GE>YU$lU|a@`j`Gre5~N3?t2Iu_7$b;igzJ(~+E8Si(D%*65$d^0}`1@Wm zQt-xhj=Zk5|15ka>^H{1F{PV_G#8>nS|BKY3G)Fbpe0B=N*+lCXNnJC!- zFyH+9kKr1sdqcdBr=pC|EQ1+n{d8p@=S7$=={60waU|3`3>O zn5;)DFPCY}6kdUXFC}~rBvNw)$$#T72w#C&Ud@O=LkN2Z_rnLHol{v)YTLS(7({m- zitR7S>1A(FaWST-AYz$0JUP|@RJ#H+4_~;CP-v87X?E& zp=rxoIJLa8yXe+;AF^)lA1fA zl-r+ZYURryM}Ylj@!%7870>9}*qz86`($u;c3ggw-tB7NHmE=LYX4buEq6G3@-H*w zaSwm4j?1q<-n*pU=#>D^<&0 zb5&PdD{G@T0z)|qU-TD0nC04B6}v3_Q5f6z-{hYO93^!APTQIjrfKbF`KRYsH-8oh$nRl&?0QAtBKcnHar6Hgl>Rq$^%CmUM9uSq_ zK7vI7Nu+bCO`d;Yutxq{0&LhCvch@rGBAI@z~VMWkDqthELDSW-lJe0r9qnJuss`t zd%$+OVoy7`nXbCvG`z=C1-2 ze;YT?*ikRFo`!2?COiT{Hfj=RoYk!a9ME!ldCkYxVCXV`W~dNYO>HA4Th9304K4OE zt!e;!TE*hAgXb8!OSE_(S8g^o;L_WSem^$xQOsLPv&cVxM|k(Q+Dp!Uu|h+b^=7ax z{1qGI{>dIj(nPRl%8zLni)SI^>_F`K#8nfN2}x{xn$q@te?B5l1~RKRm}l;c99JmhxTUtE_yWOQ zwBU#S>zKAWMpUNy-~p-!cPJTkxhUP*HZl!g&_$6+WNuUa%uf7~ctWeIe zTFx}M0gT`6zsf8RNV;0}O2?edhYWjFjU(H!?;-+Zw_k}}jOXhY^GM|oIb=N#2n*6x}6ckmwQ2 z?jPHpL&%in)XUDiuLRi+(daLP=s0pk_%{*M0X!R#v$8gY>M5?&i*EyeSt7@=vk`x_ zYl)0u@WN<=XW;tjqv*Nk04^2qGbQg&9B!UJ4?MJ4C`CUogwnPh^)3(DIK=36{(LOG zAvtq-QBk@43;yE0V1PYEi4|vnY9GDTrKFRJWPOf5>+qKSnNIWJr!RV)4ph0325pEx zxm~k=WbI01)^Z*=x3W{^WQCz`!iT*~Dm@$Y-DQJXVXzOv{vU3Y)Z|9^G_{n19`b>t zWd+ca3a>C1XoSzy5V(kc*LZ-B;fsdIblgb|w z3?`d&D_IZJ)O|9v+jDcrP`R&KcJ^D2{iiYS*1KVg-(vDx7b=&56FEa{F4lpt^5&40 z3*-`0*xCOW8gP-Zwf*&YEQd#?ne3rvJ*!>Nr8b zM>6<>oA;c*LUBC84JAc3gb0z&2HOo$W;C$ zyrQj=^h-S@T0p4bE@DXQg}7K<8k4o?q_M&?p8?qud@GpCV%cE#lc!Hk=f%t);+VSq zm16!wv*Eu1iPbs_?6tL&G+i1)4m`yOdWCc?dCc%|qaWNfL9gJ2#V3AHm}dhaA^A{F z3K<>u0Vo@1EBWs3tTrOt0rL>d>gqp{M*=HitQDZh)()zG61BqtV+xHqCpy$#(O&dy zn3wGIn6sPxM%C>c(cp`X#_l>sZ-1Ss{n~;G82lqgPVY1M$ak|vZk%++%T~X0;=rtt zP~j>7fEj<}&kn!)dP#LxEjcbEca84Lzg&;7I?KKCJehVg^F~y16{1@x<6iw}geDkI z{Zq3ZFf~euW6Qclrhg%0d%adLYtAZ9=UI8cEzU22nC!FwZ;D@a&tkyE-X07A@)ANDzyi0dL z69lPHh-v($MtD)ri5xYwQ44B3TT%?)TzIp+I&y2(QZKwAA6yxgB+F%a=c%35#=&KQDo-Il%ku+V+6LvMj# zn?E;1xJ99VhZdn6rRwUnr8Uai7Ww4$rWp^%alnMZ%F4YEmLc+VB1AKg15bl08UdWKAk!WW?pj-;KtkODIq zrimG)aQz&(JpQ=lkSndcOKtQP{8 zXZrID+4B-3$V0sZ2_qd!Rz{+>wtHrj+c-sWrEu)_N>)-y=0tv%K*`Hr$NvQI&q7p@ zm29L{O|SY1Y!S-*G`y+^t#}JA4lM!6nF9>Vby@jTSA@ltp?2{lwy~6a-GXET!U6n! zk?E>9;L`hrDYitt-lG2SyZ^3w{=rgopv2*G*$<>^@>iy_yrXn)-s5)(Cm8c5ku0MSoM!&C+@Ya$xWd->WS&n8VGqP&A8$$UowPxqW1thy&k5D zOGkT7`zXq#WpH2Eb7JgylVf9o8|i}Za`;2#QV^4{>EmI9rKxIz_*s{Jm%m@0z{EJD0n+^qQjuw ztJAVC=UO&n)FW#Zy$EbBQwI)e%`!{g4adWDbcV z&wG~Jz+oa#nn>;V{Bi49F{DD;kgGq-*GE5UBb;uYdrPIgjv`*oz^Aph$U{I)HHu3v?g?-8I$Lpdm!8lu=Za?*7Q zuC76vvazvrHRX(E8!hfo5*XyQ>Jc)$=vGqP2a~@LDtp|h7O>z>roLpsr!=BYpFX`* za{YTP53!*o9&DS-_f1U8mMF%p5AcktJx7vRGWK6=+LOUTCmT^i!mF=5tCmm_8miPV zrqcVr@GffG8u!&6@c`MBm}hI#$`c_uE@CNkQCy5))ExauxcrDo&U+3x4UV!jhGa*P zF`lGNjBrAkWBV)zU!qC)RdS&GoDyzRup4E?TcxJd=KvOU`)d8ftBdF9XC{!3Uh_NT zABzyc7lCm2Es{y|K*(wKBpS5>vhaBH1-bjgj8Bxn{M+NdAI9;8 z_!e0{u}&t8qg6wj1o|nC6LN@3q;jWJeJV%Sw)AquXMU5E^!bZuWP_Y>xUdnP7+ElW z!!PlV0|c-5JY>#YQ2n2@v!Xw(N2mnTi-vj~z=u&iS20?R_y7}PzAN^xMQ{o(e3Tto z1F{Lc1E~WQVtFO(cs8k73b!!pTtO-bO{2zRU(|s543Jl8Sx0E}_S5Ni znl+jX{S50vf$o{5&ZFj|-!6r*B6?AtK^GoLiod_Ju;_KRW`s0N;f>Oh`HAyWQcI47 zRk6-I<9T66-+%bwocKI{GUe#J9Pps@kXBYT(oXrYAoOpdQo=XKpn-p)P96g=;8;02 z`x1(u&?};To6Q81#5e%r|2dS}PViIW zO>@3lD=<25KcV6+?~tsG@^9TdPm(gFOK&(m63k;2^uV%$N34M-0Y5JisRyGU@g^8U z{+Z%LzaiotYG9(F7JsHQ7_Zr%-A+vSK#hFkGwq%Q|G8+n$RjIara$k>W;@dN3CS=@v@2*(cXM$y3W3UGzQTO6Zo zD>*sAXA~9SuQXhuRl7<-K(2}X$-j>Ng~LG!=Y+6d>Lw&GR=o}NHtE$>`4P@U6Ce(F zB;-mvHD#McsqR)D%I)=t6yU?qz4nP@AV9HK}k5m|RPC>|okn{vy3Bx`%_CcxhfZA!x8LUmlkDguM1{r+x zjakU+6;F@%wvjUtkif_jP0Gqs*sK)9>JuKA$0lv`$r zTd=^yh>kaE`FDTt%mO`%t^xFw#bb(`E9+=Y-V5`+<#CQ^6o%BY*fPYppmkW42IC60 zYpPGke-(upD1Q~TMz-*`sO^No4fF3~!I9;V&y9J(+V68Y zb#NdF8uPfSa@~^jHwZ~Ym3^G;zVsZ5W8dzh)(_S+6WRnLP0BxHZdb&%Q zF>Lz8*D?kz`DXpX@=~AvM>kqvQ{Ne1qplw(&y) z;-%kyEvRhJD&P)LTJpB*fMT^TTZA#S*SbrI=^|meGh5j+zb9(1jSF6H{go!Z_qVB~ zfW)HCyQb~Lw-C$a^(Ze#0abS$vhy2^s>^i$!=hxE;bW%@IfQ`kWncXC6rVYs{PPKXSq^8Xw-%F=bxSEJCB$R6eC#qxfbEJKT+Fy`Ya%`Q#N9S= zFGKa86s0Nh#e@MWJVc(|s~Ki{ORRdzBTK-1Mr-^jE)P%t&aLCG{Ov~FNA>ZsB`D`6 z^|cjM2CF!!MQp_wI)U7iHLf&$8cUjtw<;V(Szk(>9w#ne%8I8ZC8G?K%B@8Hj5*R$5v8msc`HR)VnK?xh`b*+cM|uqy%w4d zk47m7O}a~S2&jH#GgUoWLFGQ^YOH$b^yceHe?UbWe{BiUfsrlhy#o#gjjF>J;vD|` zjr|d%;8>dVhGZ~_Rqc~6!(f|YJvFSeYU~YloOe6Tl-v0V6a`s)BdcX2s{+| zp|`?se5->Q{4~COQdpERK8hANk2)EgiwXkAH6#zunQ?fWM6(TV5~yp;vbCrZ`#%4E_jS5-s`Ql@ zsDr1h9~SV3Ldx+?3ioc41`m(Ufch=FC7kKO#Kf497j$&#a0#`6qvvXT>(RG>*pXTU zjx-=%Z^{U1w9IVa`0=AqnU*E3yP?~>KlNbyGj=z9`Jx%-~IE;xtnJ!mXpsvXjKTSjA2FK;<=-TkuKl>p28!8`L8xP!DAC zKl~crK$VmzCn`yE-M&bjUlf#8Zd_P9K_*4?lfX*lEop(7`BhKb9-QxwFWByVoMr#( zYj1aAFn)0tT7vn@V2~C5@q;E|Ujr2|02!>h@;$Kc+B`}BKx!`eqnuU42&_bZ-pns_ zgOwi@QmduDj?nry!v^Ht09H1e~Sm8virQIN5kjCMY^sx(_AX*Xq`gl}D%A8lXK8}!0c4ipR@Zd>J7 z$b6_nyFL~dGI>n^E`|@ZJ&$t4vu`U^lk;PF|Ku}o9qBpa)q1H;gUgz ziW25Oz=@KDe9E3m)GeaYcnKhsK){1hR2U%jtpm)%O85vVajf+BxRU4czP5FlyOL7r zz5A3y2-nv%A$8;cnauteZ~bj;~sZ$}*o3NCR*_W}*l6JZZ4sKgdrb414jJ_&oi1BFWv+l6^wYD$Ep# zP*kI^7OEpPhzrZV4W&NE-)_xrVdP-46X5iD#Mx`ZIKAptgm*HHpPC};WV9Y>lF70? z{+1A~bZb&6KfZebZ0JJ^?I3V#5&?jMUg6m->4Bq;dyU0_>w{>}5lwA1Xh#h$hahRn z+){3$TZbc#mt`Tx0jlOsXv$m5gv(v!N_*ED%b6l28AzJrEC&VHs2lg1KL7=Oja#iF ze3XWg2hth<3gJx3clyV_;Yw@xCD(}{^3h@pzTHR^7db`^C=ZV%OwT^MRfWi?OXb}2 z^mZ|z^75G=H+kf>-u>dFVMm1*k79va2;(cXgw+R%qD-C?8D|Xr=N9PXi7n)0Z5zl!gw zXBUQce#an)U@)@|hNe2`Bx+PDel#zhp13s@+8ueS#`m5!wAe5AWXP`NDxotbbmiMb z4WnyqqT{)HjbGE*J1Dc&9%&{|G@#$$KCzcw(A1i4JI^+#zYpwL21@mo6Y99cyiAr+ zRJ@~k<&n_dMBP_IITPN4K`Jx^H_=c-xWq;MkzCwj>}hY)Sr$~$ik>theSgc@9or0a znibZZww%?rUE@`7yn1^Q;M@7c{=y&Jn`k!EwBtt0!0uIKHF+KnU5zInNv2f8dZG@F zk4tmy_U=={;3JlZhvp%mr4y&mj&h3>6(wc28(+Gui6BY@0Nm3^tqSF-9EmPQh`S>7 zxzDn|^7a#VEGfDVuKT+J>OO#UOVFyg>gXyKw(u-eK`IP88?}gl|^{r9Kj;G z<|*IS3Mv3`<5p|fF)m}Mhs9-MqH~zN587!*$7mhU81&0VCXh~q*wM#47W48{Z&(5?NiHUm=RxdRiALA65tDjYP2}{aKf<24 zD+u9G8sb`N*bP?ooe$*eLhTM#vGFVo3YwO#y8f8{@*T9kcG=N$c*(wk>6zUkgu4-N znA{(>(yl^HGGgA`Y6%@>lH#CPCAT}7kjFsw?lmIo;aF0L6MYvm`3&}i7C7S?X`qe8 z6}=3n;t#nIFhGiWNh)NuGM6u+`Zz}4`o}pAO1(?Rsf$9cg2Ppa3CbM)G*cVP)`WJhQCw2X-Mo4e~<^wod{J zxLI2v;iRye3%@hd2cQiHc=7;;b!$$#7KYu+V2`-=G;uWJuV%F8M)Z@QVT+Kd1v%8v zzIzHmg~ESkrwmO7-uMO7${IWRVVP~^&j#N8_Jnif$@1C&`RS|mLc*#xHji8fHV?O# zqMQe%9}D~)Wec4=eZfrG!ltxSx}nSPd*>S(V7uY;!DN{i2zg$Q{D<9ee{K;k>|=1D zM}o20e>*jzRCa>_LWo)RFMJ+$K<~mR4Y>cG0vY;&oh)-)w18gYSpB0B|IEe zB=wI;h&;R7#^_P>?MCG>MERx(Ag0(qbDt90XMVaXq+=Haz3CGba)jYmeP@ZEu?NRn zaO!%Ut(Xi>faz6{*KVl(J0l;H-s7nr(~9ZdPj>*Zv=iQyZ*!LYo2m?g<@q;mBhvrw+jc1 zU}_xw9MClc?r%|j(rrKfj}ieJ7kH6yhZ3fvzVC$Lysf|JSO-8V+)4pcKvD5%$jXWo zu+bIV0G2bXU3RI}H?5=~=Jm+@{F2F2G;ijue=F3W9j?RvpH0`1Sa;GkY%rjy=Y|iw zy={fzQs@jm31ug8bLHF@PZD{pTl*Bq9j1TNq`*%ZIk)VW2cTx#@i#?nIMw^BGQ9UkaTEB62hQ`Ytei3I;JGaCGm?Jn zMjY?K-FT)Fi;nSbCcy*w0z;z=*_g+PPb$}Afx!H_kH9+x>OB}uylY-w8T-hpqDSdy ziEpxO*tbe>Ff&az49{|k(YQVKSOsh%&&DZdd6nNr;uO=}#c^OEUg6>XK^bvlk9qEH zXm!;oeb<~cR6(UUH)VIh&xR&JFRhuY=GxNQk*s7|Dv=;J!f?s|bxPRMc6`p@{fX`n zQ|saJRE~3|8_fb231&Q3pKo2>7(4Kx#pIz}%CX}H{6=Z%xSjcArl|y_fLk1q2^E+= zWtB?EuLi!gZFRMdQ@~)AVXIzO!rcJ$QxcT%kIS9sbn&sEf_xGD7)TcqUY68mlcG&Hc2j zOL`u=3Q#UibX#IXP4^y>j93qh`_X#yGZ_mB=0Z2zc~*;jqBchTXn9YNMVtmL!AIpj zp-~*Dtm>vVThOoHa!MZOI@w3{K1 z^x!ECpFTY$Y&6fF&wU0SAFDYSZOsdH(8seRKBPS4nb7nGPtiwxq=tFE^XbZf=&hTB zSH9cSX5z#MJM9Okn{s%l8Z8(sNqql-Qogu+?bh`TZz}C;WkRQhn*H;mpc}&_zo00! zSiA8kJl_L_w2)Ahv+Jk)Q4R1h1{L!^5%B03z69e~4>rLlwFto5ND24+;sFDrb7i6x zJEi?EEM`1jVsOBA>6?p6af1%DnWGlz?+_>EuPEQLsMpj9ZS_k6U!wZH5mAXPX7^e& zJfSK2P7cQ$5+36{$6w@7&ZW*?N80oQ5uKBlbCh3bc+%zamw_FW^Ua!k1O+;?vgcfX zE{t>D!FDRen8t3*2hYJr#+!Q^P%w4~i|AKC<@)=inftFH+T;iIgc=-C8Y!jX6u0N`*^BH!lf6OL@>zV`uBtMlsv!|(!Nm6GlJtop+Q%-m!MD2IRH02 zZvw=MId#r3k6eUb$Hz{To1l8&vPx%^G_142kk5V)e`0 z$(Bq-08GODem^h-7-GtxQ$AA#9sQ9OOVPG<)KLJWjF7aFiQOY(FpYqt*ZkF}_!H&5 z^}@78cA=jbJ&rt%b-|!mBMibLNvG==PJ=n7+nR-(FdsYJpV)yF! z+~6B6iU=a9r0ljjp6uanM-@DIp0vIN`k>_wdZzJ?TlOREBEi3~sxImKClAPPFvGvH z;yNQr8n(hQ>4F13?uw6r^klUvr0q!6c9}^;-Dq^3WAvh2sJ52myvZaZ;hEhRaYqs& zvp9G9CHq=WFK~Jp>!XGDWbWQ^^s#^2pdo`!sI4pZ?1U;_I|9FPw($cBF0!3XrGjAA zY~lj;f<2gDyJUX=Js7{}8}E2G=jZpE22rFTykiM^qTDgaZk9UVOI$=a*VfFj@Wbru z5uwNNLgQ>Hh0h2aO&#*)5< zaI0!DNNOxWOo&mKoR_pDUm=1rlS(5ooWm@S;&15l1yh?4yw}Arrwh=a>ZnB2TtFQ3 z{<|$gxaYv-RK`BiRQ7{vs_Wwq52I$A6;7&A<@tF{GDZP@Q;;WF zsNGqcw+BuBK&jZ!^T9b?Gh-sDVF^IlnMSp*d=|Kgu)8;k=K94_XoP}Mbg3yd02Uhi zXPpe=3H;%E&wrQ?+p9gOHMRl-P3QjIdK0G-Mj&KU{z|qDhcFH?!PoT@jBS8_!ig{s zhG^2biAi(3>iCXz~viCAt-3 z0hxR9-(7hmN!htHw-GnajFm7mqn&^GZfce8vkaAw{V&`e2`7)0p|<}xo<$4zChieZ zw&)XVFKyZM$ktSM03yQJ-{qorKu90I7xX-%@{WI46Li(Q)1YO&Y*qlkPn9?);Vaw* z=7LQK+19qnXUdD>b_SPy$D=xJrq;1AAd8C^wSNZ?eS+S9o#F*Ytm@Ue4=t~%pZ6swyW25?!;=G)hMab&HdS5W`*dDU;Bwz;O8epOLgI`)MJ%*LEp+6Q_Mv8}D z?m^TaTwwA_KRP`YbI8kmNAwmUVH1%9#f5io&^W`~JD4OJB@M09g!WayBfau|O4h7i zw%hy)7S<4<*Y(*}i>x*=%QOB8qp6>`m}3lZhlWsZ1}8*-!C0mF6|^nj&iSBkR~w!N44t!x z;{*VyyACziDg{+ksr`gNuZ!`YqtXhl*8DbVE}>@fnp$#?GH!oDlTwyfK?q}N%8Kg# z=D;}UTum6i;P7ya+q^U4#ud}%*Upwxc{GKn`%uZ@`V>eBuc zy<~wa@SToWI0yMa`e@)yZU%EYPBNAxd+y!2cyZ)m+LM&aj|H2K*0#3phgz4y9i)gG zj)NuK_&qgN6DgC^#%p143Vjqm1Mfix5*z2oX!Kxn{-eV5jy~?)Q!xtcE$x5WeuRvw zDyM7lB*!11K(MY*HyrCHb#s`Yi48C>kIU3=xT);_4&{wBuQ^GtxKGd zuzo$Q%NC3+`35P+vTvQ=KjJ5Mi$q%jNcA1{17i8`*}_s$b)FX_(1;Jeg+pY$CdcPh zjCP5OYG+mH-UCGpm2do|TjV?u&Kt^uUt*-lE)sDkh>QOgORpm+lv~ybPla2OLf)AV zSga?*mKS#xluwIbN~CDms96U&N&nj8=_IvR}vB= zu)qgnjs@G{uZx{EG`1rQHNg%#q@5my!*}kTk%CnOV?q=(eiK+liR`J^g*XO*MN>{^ zUdrGI30|S}Q|iylUv}n%!GkJDd-t&k86hu$IU8!`yQ$QF1KeHW_K?oSq5WB}9Y?pd z&Vp5h>Pl-Y5H>EJ{T82UUcGt%J*@2&BtCxE&=Xeu)fG9BXQMN{9ap;UP_Y zVqyR96&~xijCAskL4Ot3;YAzM{*?HOHz--&ev!}nhHWD8pT7}BcszTk3XkR+e(#vH z&QQ|e%rAgGk8f@ZOxk!bgb@Wv7Nm#Qv|+*^a{Xs%f3Pq&3kIl`LdtcSe?pUn2o`eT zC;@#(e>*1(W$_J_fDXN!#k4iey%`7poK2YjGy~?SXWcFoy7`RIN;(v~dB?{>1ykad zVj8_avvmMW=d9>J%&fnOFnL9>G3gC*8$C%fQ+F-mFu?I-cVdX4hjT!7(*&>7QX#=7%7Qd$PM3P$$OrM!&O4$(;zwU$ z6xs2)C0dZCyX${-!E<|M&fkXgese1>Gsi=7{*oyZJ8E(M$$jmt?k4OA;{KnR@>j~+ z7q4C=_kCIfJJsLK-S}Kh*=$s`p#xGCMQPPSlK&4K#SL&dZP$9{n8@!1LR%ZIq-Akd z5llm3=elEeh`&%rB-v_Qhy={3ZricF=00yGIEnyTYem^3YD$fcJ7=;~nicKDMFskT`wK8_&N#9w?op|+NB{2Jd2>fwP1&^J94}ox z&zEc-AM$~=bzB5VoGOF@hWsdUsT1-nS(7>_&0v=AWqR@~9fWrStmoa8w%cC4f_u#F zw583xPm(s~18rO-^{&x)GyTMo|m(`QKEGO_;34CL))vpzy@t3RHmtgU=mVnwz z?)q7exNB)JR8!U;hYj6U*LAeEqyJ|Dv6jj)rM?nDlhnazc1HJJrY_G?gx+7aZd2k3 zd&+FW+=ar1khu{B$CDG4{~5h~K_EJ8X5#)>V>yK{gzy^!pb$C9vW#ZG>C#9wU%}l& zi;t;+wrH}nppySNn&8WW+>I~Q5)aF~hBLb#I;MQ7d@-(3n8FuCI1bojXmpL3bPaAsGGiPdt zP5@k^A}U1jKg0C@-%3IYE`QNAbWR)5ClS?d8JKztxc>bwU*>-2q`{{ka^oIg1&jZ8 z+w__vbZQ|SA!}|WWS&};weh$WrryBR7xEDrfIvJ#)O*%Gxz?SRRGuF~oV6l=FCg~? z6VH7gvHarKuI5w!;Ebdd%Xxc3#4Dx$_g?pQoDE-b=B0YcOE&f@W(b&>Sdst#ZKU5rKYgL_~B1|42WZJ7BpEB9U!E_*v*mR3j~+eFxZF7FPss8$1@ z?J65eJ`?uF{X%1@9cz!_1YaGdXSFt*bwCv@fv(kF?SmVjf$PmUK?ScWOM|WJs#S!| zjL)L}L{Dw2h)D`^>fe5)NbWUVGv=oc-wf<0BKK5(e!9bmTXeX-uDjW>d}ppbbN=Cw-lZhTrPXP{_cq@w48pOX=oa6l?Bjbc=JpA3$3g@2I=brG zFr*C->+S}iZC4O+M!^-_+x#MLe?97e3~Wye1JH<&R<;b<0hO{5jp0KuQKL_znGiQq zmS|wMID_teP>HD%26tI*83^R10}j}~i;h)X+O z&;!g&x!(NiFiw^4^PF9Pn=3Rh9fli$mU_z3tDt zh8zctoFv0;o{zMnt%Fo6YtBE~Id`8T3`eP#L%l1zHtsHupGz)$>$(~97ITsip@dm% ztZ1%!t9N-|o`dbdk)QafVAC;_wFs*yhZG2KcJaE{s$H-&=Ce3K`g z2J=*Go^Zz4YdpnmY>KkXzwZl~KV*T9q{v%AJLx}rAC~Vj+R!<<=OAhBU0D9%1gUEZKjyI^5sG`mj4~55j54MR1zYl3w<5e<2usFuWP{1?b%+wrVoPw4V9ZNK9W4Q%a`cMzaXf)qxPgf3xoB- zgo7PySgBxv7FM}8%Hd=j^`z#!xlJjfCsd}C-SIkV8YgJp^UMG4rA-kb~$ zK>>TEDk_xmxrWy+(FU@AcSMppS%$?#!}V9G_VUEi29Y@N6y3|4-(Sm{nuNUQ-HQrB zqAoYHHpH&N!qE8I779Yt4xBuyIZ=BN%|4+`3PdtnG&R`mB77Ni&sNRA#Gf)bt_a1} zv2}%ru%mKEW|ilwmZ2>c(sf^gLMK0#^A|UqqVei?&I5~G59C`@+h5M!Xggp})it;F zRb{S1gRa^fBVg_OgI?Rwy0P0HXpA>;VMZJb`0Ctdj=A-#5P-{ zO3mqGK3Gd7`}W}OcC2Rk(4Eg>bcX|VdqNH(LiG;TyV2*myHe*@foF2pYkz;pkUr-3 z{inEmm|_^_ayfO@3N#3;%B=zoa>Ukij4tN};kJC9VfL38IQs-K-zP3)=UmFDOjT>P zAhUCkRSso=;e_0DSF4}tyl8LZupnKAHMPI!YWsy}FJxZ$1k+7Uc6c$(6U%ujSlqC+ za(sz$x5p+L{>t+cT=EUKJ&6tRtv~~) zipuJ(W#rqdj=NoQ59u5hFLG8^y8iy!?Ck6>%0F!8wcDFwMA(k^+M)vSjOcI9(R0TP z-RrYOBfh6+%^|tA_0p^^%)9hgugA0NUl$+Z?vTWU_9KefyMUR-C9@To*=lCn{E+UO z!eQ^YK$>Fa#8vv03;iQ&lw6)fhpvxDozM!=2BYuHPHgUpW`Jbt0(#c_P*$Xw@Osz`L+Ag4%f)>H~LC2BxKBM?>nPH zPMC(hoV+;b-*`TZG<&4Eeett#BLtIcjmy^jc}j^r%Tx8l0Z!_x#`@a3JtB#xs%t=S zk&`eu;&H!lb!^6Q*t6JA=%izgKl9$yv1}$-^KJP8_O2LKo5f9QF8`=tW!i}Ly5+!y ze!tdx-Hx3TqQztMg+Tj}^y!{!!HLC%emI>UCo9u@)}DQ?hRg=qLh}MvPahlTnk(LM z9bQJXJh9(6lU3=BPHWn;eW_@|??DRvH+1dd%-DN(S9&k*3<>5lJG>loIYa+~ou^ce z9V~JclFhme1sd1S6MbL`-=4v36}l2Q>AnnEYz|8-Ad={5y$%q>hW?Yhz~-n13hi~R z{gq~#!kb)VyJm#0grAg~u*x6qng zal9*pH4dM?zR35?`PbWf4H_`eKe&t!J2x1GfPOC@jWhZw?K#@0_h%g@xzI3Ltq0>g zxq^eXZmwE&!gX(C^r{~D!?7#Zas+Sp&PyUA9STKVSDS+2=(R#J0;?5^(0~=go()pc zuFE0%CsPk5l?zccT!hFf4@I?F+hG|?&t8l9Zj@LQqq`r>n3`v!u&)~xk)n(1a}hLv zo;O%*3m*3t+^;D$@kKK(9bb4JUshkqclJB{%mjmY9@BzNGZ};a&@`VdxaU)c|NheC zkJsuyXCp)!Tcux|Zf(oWVyNJ*(RA?kxp!u*Dn-*25OKeca~dW6lD+!cWnS_eyEfr? z{p+~u$>MM9i$xEYmA`)sY3&l%mK|p%#wR-u?25v!vPU}T55w6kG~>k4$fFSY`M<9g zpOIH)VOlR>xM>?Hbb&rTL~57YRvx(?fq#zE#}|vS6&{P7#ldj##cHRfYsp2-OBiyL zPz(u4*B5n&HIxZ?;R8}wJ(H6Z>O7-N?KOu@*ckR$2XtWqT%A*!t1Utb{l_n=UC<0) zI)=d0hfq;O>sb%upHp+vpOq~~NJz&BvE?C%#$3%YrigDKQv zOZQh@2TlfLg*-%px37Cv?i(Bi&mVhiFc^`=%=ZNRj4NMPWuK@YSR9j>`F4Ve)}Wmm zhT)0PT_&Yg9-pf1$|&QZqSv}0o&SzMyYHa6DRMW=hCdO2j!vjW{I9E@`V9Sy$r7T- zz0w@W8frN|I-!>i`r0!Bn=7!+t0@Dq!hXF!BGld;H>&95TzsyH^uZo~^*P*OC?#rI ziQp<|ok&?Vq^n&?Ox616)oA0?e};Zhej-ES63*zKe=XdV7yfir%KxD^{hZ2m<=Z6O zOdrG#x4}b)kKIDyictbr$5!x}NUk`CDBw&gza_g6&N;G#^3JMreOMp;{@jN_0;AxZ z+P!c_0H(Fgg@3wVWFI~w@7smWa(9xGbq>X)T4iR`t~u|ONdlMs%le1jXqBnPDvShx zmV9gZXBxMrl*87G9F9*ucVw+#7t#PQS<7oT)*SB>#WV&&8Z%Eat%wAH{$7oBMy}o` zCA(?YyH@q^U-9g0@`s4X3?V@wnd*k$@4`haY(F%>e|2p#*bNgfvh7m`yz#N#m0aZ; zyYVIZHQmAgIU4<-(41i^_%e>=BR>TU@`d!!4?=pnJ~bxiO&!8`!!TQI z=Qf-|odZJp5Mi%2p9bxIz@(i*jINJ=K~R^BGrGQ}@RX=b7v4l1`pA5-0&U*omOdqNo6yXLZ15H3tjh znkmtp+r)MjhfDAfcQ@lQEDd<9dQ>$z6}#>>glpz8_h6lxQiRdV=L=G#@9?w`L3W*! z9ebRh9j|J-d`-6`r72{tAOJ> zhVV@Lj>%T|2b~YNVkG~uSO4G;lM`=}9_C^TYuShVlsG%F^`NvC5;PIPFDFSjjHB<} z1sEII25w7=R>wQR8p5NQiiHGKfA{+>hV}BPO|^A zusUh_SFp6dg`SoijCH>R)xDsW`7(q52*H1wr2hpD1A^Ph*G=zLOV(3b+>e)`{ z`2YdWVM)1>)&O@86EO8Gd+!<6WVh}8K2}7f3erJ3 z3P@9W6BI-d#D-F(tMpz2qI5zrbSV*0kWN5DC-l%Gf)EH0dgvjPBoH9y=6Tjyd$0YT zcfV_$>pEY~*&mZDcboSdWBkW&j5*`3YTR*N3y9P=wFrz?{e%?b6~a_={bt}mKl)6i z-^Q$)PwE)4FV{e9e_!{TZw-$(6kn>`D!-w**_yQZJk>aBNacl2RwQOn^Xm!IjEau& z>M^*)6PCPC{l+hXr}1#hgqqE%GKxb@gmktzfzU9@YSk^@-TkR=*0~0Jk@Pb5+%4 zf=UEh#il8#SF^!~CF46>;~hXXbf_mpIzhdqpxKQ1#yVh=^`KPt>Cso*sW~h9A{F&Tzc}o^q-0?nhtjM{~f6MLofr0|n6v zo)hzONp`Jn1lif#9n5sU>QZ7`5*2$epJ1OCr(mGk*c6neMwB;oZY=d*$01Nk#8bsn z1`REzBI56*HdY7|o&@n&pv(N$!sn@Kq}R|e)=12B?j1Klp~E_)GwWW%7_%i zPRc1Vo-?ybYBX-i2~%cM31+lg+q`3JmR5Ut0JaOqq)Bd%5t=%4k!%t*m-!$DZLv#+zAg|Z~HeiU7Pbe#vzGgepx>j3bO^So1upuWR0e5T79}`)C-TA zomvjKA~US-*#FL3Q}$|WdiN)N9lJ`dDxQoawJ?>cjnnQK$+br#x0D_;y7OfD!hfv4 zll_Z)JxY0MjNaO6yU8VH?qex#`)#4dxjUd?hj`7XbCk&zIPN>5J zjCB0?diOfD1Ur1NW0$&G?uuBo8WeRI=%mj1(1_VOt$Q4cjYle|^A z>sP{^C0-tGCf0193Os^r4e+;1?Ecgp30qY016noxelocYyQUTv4}+#?)_N7qM?5DR zPA%2UO}_UNRu)v}?Zk)U#Hm2ti{Nw4R9OLpc5A8&fBqGWmB1?~``DBt*x=xT1QOqn zXTtn;`^hX4OE%3!UR8w8U4hR_)4K~2ILcwTj>8#TqixWrK8R!_luN3;E>UV3enl|8 z$fkZ{4Bn@`s#aqawcc!%2f5e<*4>?R<*>Oo)~j*oECBBQ%+1FpKIYFh^!fKdH`M~o z8}e&8W1X?eseX@CeHUK45Q>w0|V4|#`g43$v*x<%fUcUC!Cf)eEVe(Kx zvxKgNZQ1K&vR;8OfA@1gXTQR^x$qIkPZTvlHx37G6UyNb$&PWuoW}-Q=?b@cAJw6~ z)>th)1?;gG?E>@@MIE!M;`j>TlJorc?h5qYK#vv3ZqqULC0zZSmU))O>XB8K&7BBe zNRC@T3scWI^O3m+!aFh4a48?O zReQ|w9DGBW`1InwvwX=am+R_MH!MwMk&@q^vc_;{vcbcaBUTR&2hy@)t+#PFz9N zO&0h8{2KGd)Y9`UWMP*dwVlHH>(@5RJHTVd$EmyDo29$6xyvW}%c=IaypoMkBicNe zDz`Yiy(q+M&gY@uD%KOP9BjQJgz=M2yIH7e!^y_z@=!WT`uEqv)9l^U#=4p|l_`UPz%H~KKcjRX%d zCRr5rokPWwiu-;Y#++!))L=~G;4qY!=@iOq6$d&Bd4Lkm6T9C`@Zg|K*W^uW`!R*L z#j@BxkaCN6+!aO21h%b`b`CBX=smx_`ug;yM*)*&n+msJ`+g9e-9^GX^6d$r1wHVJ zG^hSKzA#1p0VgDR%umHN%w=|YhI4F0p`;;^UqWIE8Oz_AN{AZtYaPy7|g z!3pR|<4c|ED`&Sj(mH3VQKrDHyFn+V|FrdT9zSY#8upoRpS_AIF{~oM+X`C?GkKg^ z&c7OhQ$Ijlv${`~ImuGamOI0G=jB60wB{8j4yo%#mx90j(VCjL;>U-F?b<|vSWZGy z+#chf%-LoPE7SPqgF+jRBlJLJ{Z8WKC*zY=ZZOP8{1kH7}qQ*DglJ$GMkq zM@qkf@8%9$pdrhOQ=&U)bwW?1-rbus-EvYESwg{Evo*k9zj>;{!L&+%=%o}Qef{;uG+r6jHQYseg?zW|~y!YI3`{c z{HQvt;?7d%?x5j`IV5`jv(TA_rYr zIUCB3a9w(yn|IMwq!(D;233tAR0x&MlJM9_?pTLwA1=)VtA9v=K4>28_d8I)|B>Su z3@$aSWc7{maGB!Z9x9(BX-B?Neeiorj{bgpi)X*6c;9FSShGOz#uVab=U&p^=3#_r zG8kdYw#csk8rZISw224eW~vo_Ts6z8%)VzL`XZ(cR*rsL9+Ktf%Msb*0T_*FLhJn= zc2j1vP24~(V`P@*lqK(joAe_N}tr=dbv z{HhH~T9vaQj4(mIEijd|(4T;~(80sYbedo4P%$j&EQ@veS-YT;9Dz3!5ejeDOFUWC=Nu;qwJ4&}F@LWUUt*8hA z(T!asro}^bYBX}sN*$BWRxuGG#mQKE174#8pR00rzR}g1s6Wv5qn-9;k#}bN(<%EFVIOGvDH_5fY@81%Tw!0+=l>S|l6gi$U_9n=d#pqUKX@nD_fIgWaZ&an-CO1r;=wCFp6|&??>f%+?xeoU8EqEOX+m$`r-HI zsyNW$?BR@x_#t|F<-94_fd;`k#nfOby~2f$bSt^`qFE`DZ(}xG616Ptg+WO-|EOHc z3;UKA%$1|jG)M2wXAiaKnR3*)bYisGGyI!iu*QMCAO6=^2W|&xi#|yLXIwa_tCKAo ze7bIu#H9QCW@o5u3O(O~4{mF;L99C*j2BY9%MP`E8cjaIGDf8r`p&27zsx(@MHEQ>e^z zRBt!=E+>mRECT8}BKp1cnJ(ITN^U->=jYvAT-I6o&&;=)sW)7Lw8W%rH|u_}^NWAO zi@m)5M5^I+BKfR(wCSdR8+V`R(K)WTAif}VRi+6V&U@#i@sq9S970r-nk;nR|31^j zJqY=U-D}WabnjLAer=MHj#ChWRU2fzakGWJS_k=ucQQWy>||)*Mq-d_*vCr-y`*W9 zZr3kb#+>(*F5d^{M9l9eXltR(m1}K{3yL$U zSzg!OB!iv>^O-4Nxkx$qA&2UY8dO&7fK-!sNXW9#_H4vi1Ycm68nEhh#2vKP(D?hu zj!KE-apC*Cu#?P+bZ*PR_2{T+B_!y}5wI<0gEsllgS)2zm&8q50?7DX?bB!lGed{7 zt2R=iI9o8F%2Wy?y@cGSq%Rx-#@DCIOZGjFvH<3*X3kYr&pptGB~;{6pj9vB?e=2@ z|8m&%ESrqFZc60tfkU8-&ZCIm8(}qgkeH5jXV1)Z;*5% zurrX?@wmp?AjCowvhhJqv0a@sYDQL|Z`QbEu}_8{X2*rxx+p2w<7DbL4;im&13!}6 z9iuKjsCM%V?6DWN&6k&J?IRk7PK(js=gsa@}6wgsG2{ZUZx1b9})#J3-Yxe1>7gZ2cDO$Bu#e<0lV##wTyS6K$} zGV>$l)B5XQFK(m{6<#xVFD@dR+{WXlBfh`VJi{Q!>D8Lf+|wo7eM0YKaA)kyCS}Qt zKpnux8XKQ=QBMq${tXVx3M)puZs?!(ZEty|)p_*ticG=do~3ID=zzRn8lj)1UW$=M! zC9k~h%LV}oD%t9hSIz-FNLjz2ldV|oR~oS@f{vZ(q?eP8qO*oPwVzx5C{%`yLVbPQ zPb8<9%ux9c)O9i{dVjRsFk0achNp!=MlT%_GLjB{+|GhHbv#~w4>}r=UjKMn^q_Rc zB#y0omgFuM!*$ur5TrJGuFv}A8!?#XBf0cU7tk#yWJ}H!o9Z{@z+2`WA#9ZQ2rh2R zpz=3NN6%nTp;&}x!=eZnj{I5nFrod7!p9l|Mc*s5mqYMM^1Mc(17o~~uNmA_LqyZN zHMu)Oq%xx0_72SBPzxfO2MU>vsqnX0jw1`{p|>?csbq~$jba7_x@bv-VE;4B?%m&4 zX6Ziv5pti5=`T)XFBER7RnIVg2PO3DjkD>y2cx?LYi&H%P+e2kXZ!110CykQK zg6GUPJ_*L}3N}@1kiYY}9}SO&to4HC9I3-@s^T}3oE{U;7*7p5RQAYE?cEpXvwqqT z6U8)1t_f|%M~Od&2o;JAeTuTvwG{NqK93Njhcn9(J>P$cPN{zJ?ORPYz2xJAR!>j6 zmqh}PMdvcbh5W(Iq#r*A9tsM<2}FZ%bo_g@Tb*S~K{3(J4X)q*{@g3_$DhlGfZ50@ zp$B=A{Q6;grFOJ4;`ro)hWQe*9T57ff>(w`%V%0ba^AtJ3aR5a(HwCPmCCB{qgZFCZnGTByoFl-E$JwTM@}Pdq+Yg9o|!A zcBn@Bt;cBUUXhXrgNm!ZA5igHPTneU_KSz#^P^9AYJ2tl2aJyzDfJXM%y_S9!Hy2b zLlgK8Y(BWR*(bAp>)=|Q%iHw7UigaqbG3{+(C6IOrbb^sgu0)(4-sOu<7DA4dW(*E zUm6Am@kg9&_u*cnmGucWOw5Skb@6>El-moxGyQ3U3vFocgKXo*SNVl2J zKn4BI4jkJ(s^QYu|K=|xX{T{;;Lx{+Kbl1aQyiua^_($zQlJ6Q%BlttF|)HR znM~PmJ$i`jXK{J0&pJ0`){VRSItCBgN{NuQ*xL#Wrev_0zraLjP^6T5;&`fK zu+j;|J#_rH!Q!#7PQ~OiphcNKR4e#mPBeG%8)`eiMyl-UWE9Z*tb1OB3OB0=$ zP8JxSzHW!TIRiEPukml!>=M1=P3?l5ll>~9C7U+6a)J(>NgpC}2pB`f?UNyE9BgJY zQ&I_P<7K6`#h&q=@T5 zSbA@WX+1dsW2G^r<)CO?JQKC9h`waIc7Cv%amYPUv`0wy>8(dmAZElY@qN4^T>hlV zgn>t|*hT}0eg|8QShWfXR_)PirA$}3l2O?Gg^)T{ozkVG`I>_Sbs|KA`ku{l0l^>- z6AnEZa6K}?5U21*Ga?2b*W@Ry#UEd$#pfck<~8Jg-9O1?sCKlEI+{$FxQ?bWdImq; zRQZ>0k%<{o9YUr=tgn_-=kn<_660wuIzBK(KFFzz(AX#?1uqm_X5f6$i4*kEJJ$mK>nqP z?BlO$NF&B<Xu%zMQV9bKT zlwA)^&U?Fi(omXAbi{|b<{{{Qj7I#KqFIj^>0eybd;#!1B<{%_R}P4f-eJ%G`K1k7 zTK9gFKuvZc5quKkJJX&}kNXB1qY1OJzezvJ51JFEA9cP+Gjkp&j6)A#F(C}ml8=*P zk!qC1(F39)EE|EkMTZPOP5x4KUDgh?UJ&AiKOi$4$q80+^-Thf$VB zd&L@i)e&>o5z8*FX~vtIW*c3sIff@`Y$5+d}E-p{aR1KI}kr)xzw!xq#98TE#<)qwPZbrw_dmh5$gCCEOsXi zy;a1^jFE&-O@a1k5Zf3S<(vcxUN^@rf-;4t*86bNisBG}W;ukn#jB0+ z`OZ9580{hNC}{`SCGDNN+{^UvQvD%%(N-CScEM4Y?2BHZak-hcwKZ*VT?i)ylr9pK}S^pYuEN8Cg?0@>b#I zdS*z^?S~#bQq-|{(G`7q=lk~c?Z>G!5On4F?TIPUmh9Jn!#Mlj7O!{0@kfb#kLLXzXqJaO?Gn=c z?D?OMe`2TmJ>F-OY2gm+nGSHM*SmyCgLv;SL!**{E_8pW*&(yHN2%aJjJ4`h5hdpA z3;z)i^>VMNeD?lcA1@{q^FtPphk2KR)_gol1cPF%)$Vk<(9f@=eM@rWnK5RWE0pd2 zuw?cPRr5|*4-z9wckleuF{aYIN$=bKMkOg9U{J2?X`AXK8=jfREUQ<6d%j|fxSegb zdJgfK-7rNj{x(hv)cJQk`siCv{41XIGQpl$>rycIaAN5+UwtN)7==Y}6(nWt*^ zg;(ZHbjhq8ent8oLdt9_a%C@p6!5eDdx+LkpWCaie0hv4SRCza*Kj(bWc2#{b6qk^ zM?egClDq4-l#%GDa%;I*=i~n(?~+-HDg{k+>sO<;K0g;1w9!ydZb7<;B9&VU#6}+5 zt}SYo1xG8_jxYt^k;%E1#2q~lz7PJpQ2+8Ug=bKC+*~)At;2+agHk(4tL~$sG{U5Q z2bLpXqd?=adw;n5NBpLE4B<(}{9Ui>!wzOGfIGUAaaK6IXf0}Fa6|cXgV;z<7aA33 zunEI-!{Rru#_Y0i)GH+xTYfeu^A58#0v7=BExS`ibeK^%UqZ|Qrgx~(iQef`u-4$@+annuz%{5Uomy=gl8kLmdDO{bL`B4u?Z9@c?F zYJA4l;(CvayMZbF@13J3x_XL|Qok0VGWi;3zBtgZbPs41gBGp_lGs9gMyCjGP5t|x zS0CwA9pFZ>dscwL4B1pc#CgtaWp4Pmg7Bk14h2=K@Rt6tp9UbaWQ*I9t2jtwmex-iD)y41)EL3I8DPgaG zCc#IefhtzjcrW;;4K;TT=tTw7gAdFCNr+EAIP z=3uJe{>zqH@0)?B4#fLXH}&wx!ZMXheWFzQ%^m6Q7t*@X~17;d(nrll3ri72LCN~J@8&K#8o5T?F|<_sJfp6{@~o;L!s zFYee@?baJSDFO=4Tj|06haXS%DdA~&msmTYKYaiIhs_Qa$-R%3< zF$-aw)WolB7}Xy5R>MMRk~#%d4+4)Fr&f9opa1)Oe>hT3_1^_YIKFJ(T$pHw<-Ng{ ztJ|x18pw6V^DZ|HZ~Mwm@oEFhxnHINXGHd6(LAu#v%nd#7V7;}%cG^xl}qcu39oGy z%d{uiLGsMdUa_SU!^?6Lqrv;4)Wbjo)z$Y{u402pq824QY=(FKRB~|~Dg&j}Gy0^I zkp0nd;<2YUb*WvL*a%#=#EgtSnWuq*+UNjT){ntyy2d(V$$QX4f1!F*2$8FE)NH!? z_AVe%hp!BM`topu-uGvlxgSJ-P0eegVH_R;TDk2xKp{{>4c*eDraGPQu?g9=#gviB z$jtSpl`S8OYw8U!9Zm`URk-RhWtTfujputt24ChjbUqXp2E0+xCQOm@$9`DKL@kZ0 z(HpOox;eNn!f)q!mD=KuVv?_vIjkHQj{C&)WqOQ12>2EcH5-q1?RfQq)%(d!@-X{~ z9^iUEy+Pcy$E!FhRDq=3)Dp!yF*Zl*%axg>Vt6sp0+2_hzUlBz^`Yv6GzB(II-SE@l9L8PR})cC~%fIzVm_teLtPYHRLWvHr{&*F^}4bP?!l;6p!3cCM!ydAA9IFNftUF3LF)EXIvcUo5?(Y; z8f|>BrJE$;91cIjtLl(L)z2_9b>LCN@KwJm*yVC*aI@K&<{90k)Z_->3ROt{lkM%% zlFrXI!&et@jiaybIuUG8N<#;(3w6=!Umtq&JU#P|xgi?7sYO-c08OqoYfnC{p2Rh6 zPFjAPn{9`8Ia=<88ir+R>~N-x!lA<%`Ebx>1w1`_2Z}UYHx9jB9@m5r~@o zXsEAZYBPH;*krMlXVf#ZyuK(?HrPwD)^0_rTNXNMYQw7FJHqJ_nNeJSDo~kSA0!xU z$JdRoD^BplIN#{t86SepY}cebbHmnbOK)>o$3#ma4Oa->Q;Uy5G_Mzodg}vGX5%je zVdjN66~qUFQF}R&+EV%Fr4WbWqLRE&P5%x}poRz-CJ|QN?la^qQmeFT=rd%@wW?A> z-I}LWf0n*t(9oA9--0w@{~(~Q=d#x@QDNm$@LA08W2sF(5vD(r#QM@@2P{1w8}rPSzfZ`jOd@FHr=vaA z`*UDLR5f%)L(eM&6vPkfxIQYL?MF10d1nf|t`q7vBLX0R?)f%e-o%V~F(gv=BM^=a z-ZD7CD=G+Qxb)F|a1Gfxr(y2DmxGu?_y;Zb_s%}CJ(vp!nArjyJYdOJ!VV@SSC#|2 zS~@zWq!_y?Kr8a7Tn{Q676OtE)yKu1WV5N_)lyrdOzUU6o!3J2WnjXEUnM_fPoEX1 zRb0QUP^o3zd$XJF8pJ86RG_xBF23j_f>S`%TtunoOirHN%(sk8XO7@h!TK9q5iLYZ1~9H-JmNc<&J^~iyXs7;yvZPqX*J{qYhFG!)ys{a~O^dBHSb7r4^ivVm7_4^~FcwnJ@gwY}fm1Cli%!|n z?V%a^g%5oZOiy%t#uU))sUM^ugokHgs0Y{bwIkb!opZk5vhSaKcraP`#9a63Tf?~A z93en877>dP?ZmAP)6phG;HXvbGcEGKgBI3QzKtYv-;6WM011khZY1y5^ZKZ)$zrKKI+krsim*d+FO)>PDUykDC#e&PYj7*4PbTly$si2cH^?@o#Iwy zO0VrStTnBBm$con!jaAk^y9hP%Dc(N7r#S}^O84wl>1KpA`LZh@hS?sQBul_Lh#%< zUQu|*Rm8-1tMADuck4hC*VYRij?3+h_P^sVxXn2LSSs(w%>D)G3-7`dgy7VPq#KbS zp=-r)e9lhvsYR>b&Tkg-{~9`${l9~E)6nVx!5}MjdsgZ2bT0mhPgXtyn+p-YT`qS< zI}_Y5mC-_;t0SY=m1vwTRN_6gOxsG%mO(!oPTb&hvhMARl~xgJ{^8f7o;l2H%G*dw zx$D7kC*Jwb>i{B!zjX)@DcsZkBmRMW)7P68M5(A`{pLrBf7z;3T!(H_jLzmGupsGU*=BG6mtR2z787^Cd=>y+-F;I!OH% z4CG{-w*Rn^2#5H$@v70nzI9S2H;@T$h-v6w8CO$Vyk>z3t@EwbU5H7)cU~@9hkbz# zNI#2E?WwPOJ8&oUobVfZkPPJ*OTs(#HPKuV*reY|SOlmfqW7-5S?9~Y%!75dq~ssw zk<&{4kpO z10_pLK_4xTB^|^SY-SrA%+yP)w_n0{V3~+X4`r5<@E%Evt7GGiu>5IZjmJ^B-`X z`>o;HM0t#ebMP30uTM-K_&d#I*Q(-reR6i=4*Sm>h(9X>IIYC7XiVW@e`S4NmvmI+ zTMlyIwAsvK1?Fjfhst)zLp=__FRETJTSISxuVhO>PC;g@IlQJbV!+v(U}r*xNzYf$ zOKCFC|B6k!(&CbT#wPbGK*3D)?zuMK9Hd|hd(S&={aTGYJQNjnSCc~ zbMAry&l%#9tQO#$P1X_U-R1J!PLUuLsy%E52w+l#6>o&Y9bO z5$W?^VtfOhz0f@sx^>?D*)ssQJXxR9WH!yex|PL480f)D-0j>BD}nSK6%k6D=# z8sB-{Wj}MiT<7KKl=ySy;xoH~x$j$xd6wo`dS3=e4RP)D@pxM7H9P3�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 WZsU)qmoqu6xN_0-0!sfn{C@$Hvg}y^ From 9632f3d107bf8061df523bdb731297e353f2bad0 Mon Sep 17 00:00:00 2001 From: Luis Bronchal Date: Thu, 18 Apr 2024 17:17:52 +0200 Subject: [PATCH 2/7] Update the version of matplotlib to avoid security issues (#155) * Update the version of matplotlib to avoid security issues * forces minimum pillow version --- .../requirements.txt.tmpl | 1 + 1 file changed, 1 insertion(+) diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/requirements.txt.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/requirements.txt.tmpl index df7007ce..c9faafe9 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/requirements.txt.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/requirements.txt.tmpl @@ -3,6 +3,7 @@ numpy>=1.23.0 pandas==1.5.3 scikit-learn>=1.1.1 matplotlib>=3.5.2 +pillow>=10.0.1 Jinja2==3.0.3 pyspark~=3.3.0 pytz~=2022.2.1 From 4306c6b5ddf30feedb9fcb98f111e2daa3ff8899 Mon Sep 17 00:00:00 2001 From: Sivaudha Date: Wed, 5 Jun 2024 22:00:37 +0100 Subject: [PATCH 3/7] Lakehouse monitoring integration (#156) * define lakehouse monitoring resource * implement retrainig workflow based on monitored metric violation check * update monitoring table name * update readme with monitoring specific information * add explanation to the metrci violation check sql query * convert is_metric_violated flag to bool * fix monitoring resource definition * remove disallowed string * incorporate review comments - Minor readme changes - Use dafault assets_dir path for monitoring * incorporate review comments - Accept inference table name from CLI - Merge monitoring related resources into a single file - Parametrize the metric and validation threshold * accept fully qualified inference table name * updates * nit * apply comments * Update CLI version * Fix tests and add regex * Fix test * try to fix tests again * try to fix tests again * Fix query * upgrade gh versions * add assets-dir --------- Co-authored-by: Arpit Jasapara --- .github/workflows/run-checks.yaml | 2 +- README.md | 2 +- databricks_template_schema.json | 21 ++++- library/template_variables.tmpl | 2 +- ...{{.input_project_name}}-run-tests.yml.tmpl | 6 +- template/{{.input_root_dir}}/README.md.tmpl | 6 +- .../_params_testing_only.txt.tmpl | 1 + .../README.md.tmpl | 6 +- .../databricks.yml.tmpl | 2 +- .../monitoring/README.md.tmpl | 6 +- .../metric_violation_check_query.py.tmpl | 84 +++++++++++++++++++ .../MonitoredMetricViolationCheck.py.tmpl | 68 +++++++++++++++ .../resources/README.md.tmpl | 37 +++++++- .../resources/ml-artifacts-resource.yml.tmpl | 8 +- .../resources/monitoring-resource.yml.tmpl | 84 +++++++++++++++++++ .../monitoring-workflow-resource.yml.tmpl | 1 - .../aws/aws-github.json | 3 +- .../azure/azure-devops.json | 3 +- .../azure/azure-github.json | 3 +- .../gcp/gcp-github.json | 3 +- tests/install.sh | 2 +- tests/test_create_project.py | 1 + tests/utils.py | 2 + 23 files changed, 320 insertions(+), 33 deletions(-) create mode 100644 template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/metric_violation_check_query.py.tmpl create mode 100644 template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl create mode 100644 template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl delete mode 100644 template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-workflow-resource.yml.tmpl diff --git a/.github/workflows/run-checks.yaml b/.github/workflows/run-checks.yaml index 0f9f840c..1fc14900 100644 --- a/.github/workflows/run-checks.yaml +++ b/.github/workflows/run-checks.yaml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v2 + - uses: actions/setup-python@v5 with: python-version: 3.9 - name: Install act diff --git a/README.md b/README.md index d4ca3b08..610a415c 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ https://github.com/databricks/mlops-stacks/assets/87999496/0d220d55-465e-4a69-bd ### Prerequisites - Python 3.8+ - - [Databricks CLI](https://docs.databricks.com/en/dev-tools/cli/databricks-cli.html) >= v0.212.2 + - [Databricks CLI](https://docs.databricks.com/en/dev-tools/cli/databricks-cli.html) >= v0.221.0 [Databricks CLI](https://docs.databricks.com/en/dev-tools/cli/databricks-cli.html) contains [Databricks asset bundle templates](https://docs.databricks.com/en/dev-tools/bundles/templates.html) for the purpose of project creation. diff --git a/databricks_template_schema.json b/databricks_template_schema.json index 99a68768..f845ef34 100644 --- a/databricks_template_schema.json +++ b/databricks_template_schema.json @@ -1,6 +1,6 @@ { "welcome_message": "Welcome to MLOps Stacks. For detailed information on project generation, see the README at https://github.com/databricks/mlops-stacks/blob/main/README.md.", - "min_databricks_cli_version": "v0.212.2", + "min_databricks_cli_version": "v0.221.0", "properties": { "input_setup_cicd_and_project": { "order": 1, @@ -256,9 +256,24 @@ ] } }, - "input_include_feature_store": { + "input_inference_table_name": { "order": 17, "type": "string", + "description": "\nFully qualified name of inference table to attach monitoring to.\nThis table must already exist and service principals must have access.", + "default": "dev.{{ .input_project_name }}.predictions", + "pattern": "^[^ .\\-\\/]+(\\.[^ .\\-\\/]+){2}$", + "pattern_match_failure_message": "Fully qualified Unity Catalog table names must have catalog, schema, and table separated by \".\" and each cannot contain any of the following characters: \" \", \".\", \"-\", \"\\\", \"/\"", + "skip_prompt_if": { + "properties": { + "input_setup_cicd_and_project": { + "const": "CICD_Only" + } + } + } + }, + "input_include_feature_store": { + "order": 18, + "type": "string", "description": "\nWhether to include Feature Store", "default": "no", "enum": ["no", "yes"], @@ -271,7 +286,7 @@ } }, "input_include_mlflow_recipes": { - "order": 18, + "order": 19, "type": "string", "description": "\nWhether to include MLflow Recipes", "default": "no", diff --git a/library/template_variables.tmpl b/library/template_variables.tmpl index 3be5234e..2324c854 100644 --- a/library/template_variables.tmpl +++ b/library/template_variables.tmpl @@ -57,7 +57,7 @@ {{- end }} {{ define `cli_version` -}} - v0.212.2 + v0.221.0 {{- end }} {{ define `stacks_version` -}} diff --git a/template/{{.input_root_dir}}/.github/workflows/{{.input_project_name}}-run-tests.yml.tmpl b/template/{{.input_root_dir}}/.github/workflows/{{.input_project_name}}-run-tests.yml.tmpl index e3e40fa9..549d2465 100644 --- a/template/{{.input_root_dir}}/.github/workflows/{{.input_project_name}}-run-tests.yml.tmpl +++ b/template/{{.input_root_dir}}/.github/workflows/{{.input_project_name}}-run-tests.yml.tmpl @@ -25,13 +25,13 @@ jobs: unit_tests: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-python@v5 with: python-version: 3.8 {{- if (eq .input_include_feature_store `yes`) }} # Feature store tests bring up a local Spark session, so Java is required. - - uses: actions/setup-java@v2 + - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' diff --git a/template/{{.input_root_dir}}/README.md.tmpl b/template/{{.input_root_dir}}/README.md.tmpl index dbabde09..d801df7a 100644 --- a/template/{{.input_root_dir}}/README.md.tmpl +++ b/template/{{.input_root_dir}}/README.md.tmpl @@ -58,7 +58,7 @@ contained in the following files: │ │ │ ├── ml-artifacts-resource.yml <- ML resource config definition for model and experiment │ │ -│ ├── monitoring-workflow-resource.yml <- ML resource config definition for data monitoring workflow +│ ├── monitoring-resource.yml <- ML resource config definition for quality monitoring workflow {{- else if (eq .input_include_feature_store `yes`) }} │ ├── training <- Training folder contains Notebook that trains and registers the model with feature store support. │ │ @@ -89,7 +89,7 @@ contained in the following files: │ │ │ ├── ml-artifacts-resource.yml <- ML resource config definition for model and experiment │ │ -│ ├── monitoring-workflow-resource.yml <- ML resource config definition for data monitoring workflow +│ ├── monitoring-resource.yml <- ML resource config definition for quality monitoring workflow {{- else }} │ ├── training <- Folder for model development via MLflow recipes. │ │ │ @@ -127,7 +127,7 @@ contained in the following files: │ │ │ ├── ml-artifacts-resource.yml <- ML resource config definition for model and experiment │ │ -│ ├── monitoring-workflow-resource.yml <- ML resource config definition for data monitoring workflow +│ ├── monitoring-resource.yml <- ML resource config definition for quality monitoring workflow {{- end }} {{- end }} │ diff --git a/template/{{.input_root_dir}}/_params_testing_only.txt.tmpl b/template/{{.input_root_dir}}/_params_testing_only.txt.tmpl index fab52cc0..eaf7d9a6 100644 --- a/template/{{.input_root_dir}}/_params_testing_only.txt.tmpl +++ b/template/{{.input_root_dir}}/_params_testing_only.txt.tmpl @@ -12,6 +12,7 @@ input_include_mlflow_recipes={{.input_include_mlflow_recipes}} input_include_models_in_unity_catalog={{.input_include_models_in_unity_catalog}} input_schema_name={{.input_schema_name}} input_unity_catalog_read_user_group={{.input_unity_catalog_read_user_group}} +input_inference_table_name={{.input_inference_table_name}} databricks_prod_workspace_host={{ template `databricks_prod_workspace_host` . }} databricks_staging_workspace_host={{ template `databricks_staging_workspace_host` . }} diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/README.md.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/README.md.tmpl index bd44e67c..cdb7f98e 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/README.md.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/README.md.tmpl @@ -61,7 +61,7 @@ contained in the following files: │ │ │ ├── ml-artifacts-resource.yml <- ML resource config definition for model and experiment │ │ -│ ├── monitoring-workflow-resource.yml <- ML resource config definition for data monitoring workflow +│ ├── monitoring-resource.yml <- ML resource config definition for quality monitoring workflow {{- else if (eq .input_include_feature_store `yes`) }} │ ├── training <- Training folder contains Notebook that trains and registers the model with feature store support. │ │ @@ -92,7 +92,7 @@ contained in the following files: │ │ │ ├── ml-artifacts-resource.yml <- ML resource config definition for model and experiment │ │ -│ ├── monitoring-workflow-resource.yml <- ML resource config definition for data monitoring workflow +│ ├── monitoring-resource.yml <- ML resource config definition for quality monitoring workflow {{- else }} │ ├── training <- Folder for model development via MLflow recipes. │ │ │ @@ -130,7 +130,7 @@ contained in the following files: │ │ │ ├── ml-artifacts-resource.yml <- ML resource config definition for model and experiment │ │ -│ ├── monitoring-workflow-resource.yml <- ML resource config definition for data monitoring workflow +│ ├── monitoring-resource.yml <- ML resource config definition for quality monitoring workflow {{- end }} ``` diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl index d6a827ac..1c03c008 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl @@ -14,7 +14,7 @@ variables: include: # Resources folder contains ML artifact resources for the ML project that defines model and experiment # And workflows resources for the ML project including model training -> validation -> deployment, - # {{- if (eq .input_include_feature_store `yes`) }} feature engineering, {{ end }} batch inference, data monitoring, metric refresh, alerts and triggering retraining + # {{- if (eq .input_include_feature_store `yes`) }} feature engineering, {{ end }} batch inference, quality monitoring, metric refresh, alerts and triggering retraining - ./resources/*.yml # Deployment Target specific values for workspace diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl index 909eb5e1..22e1df31 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl @@ -1,5 +1,5 @@ # Monitoring -Databricks Data Monitoring is currently in Private Preview. - -Please contact a Databricks representative for more information. +To enable monitoring as part of a scheduled Databricks workflow, please update all the TODOs in the [monitoring resource file](../resources/monitoring-resource.yml), and refer to +[{{template `project_name_alphanumeric_underscore` .}}/resources/README.md](../resources/README.md). The implementation supports monitoring of batch inference tables directly. +For real time inference tables, unpacking is required before monitoring can be attached. diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/metric_violation_check_query.py.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/metric_violation_check_query.py.tmpl new file mode 100644 index 00000000..1dc40225 --- /dev/null +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/metric_violation_check_query.py.tmpl @@ -0,0 +1,84 @@ +# This file is used for the main SQL query that checks the last {num_evaluation_windows} metric violations and whether at least {num_violation_windows} of those runs violate the condition. + +import sys +import pathlib + +sys.path.append(str(pathlib.Path(__file__).parent.parent.parent.resolve())) + +"""The SQL query is divided into three main parts. The first part selects the top {num_evaluation_windows} +values of the metric to be monitored, ordered by the time window, and saves as recent_metrics. +```sql +WITH recent_metrics AS ( + SELECT + {metric_to_monitor}, + window + FROM + {table_name_under_monitor}_profile_metrics + WHERE + column_name = ":table" + AND slice_key IS NULL + AND model_id != "*" + AND log_type = "INPUT" + ORDER BY + window DESC + LIMIT + {num_evaluation_windows} +) +``` +The `column_name = ":table"` and `slice_key IS NULL` conditions ensure that the metric +is selected for the entire table within the given granularity. The `log_type = "INPUT"` +condition ensures that the primary table metrics are considered, but not the baseline +table metrics. The `model_id!= "*"` condition ensures that the metric aggregated across +all model IDs is not selected. + +The second part of the query determines if the metric values have been violated with two cases. +The first case checks if the metric value is greater than the threshold for at least {num_violation_windows} windows: +```sql +(SELECT COUNT(*) FROM recent_metrics WHERE {metric_to_monitor} > {metric_violation_threshold}) >= {num_violation_windows} +``` +The second case checks if the most recent metric value is greater than the threshold. This is to make sure we only trigger retraining +if the most recent window was violated, avoiding unnecessary retraining if the violation was in the past and the metric is now within the threshold: +```sql +(SELECT {metric_to_monitor} FROM recent_metrics ORDER BY window DESC LIMIT 1) > {metric_violation_threshold} +``` + +The final part of the query sets the `query_result` to 1 if both of the above conditions are met, and 0 otherwise: +```sql +SELECT + CASE + WHEN + # Check if the metric value is greater than the threshold for at least {num_violation_windows} windows + AND + # Check if the most recent metric value is greater than the threshold + THEN 1 + ELSE 0 + END AS query_result +``` +""" + +sql_query = """WITH recent_metrics AS ( + SELECT + {metric_to_monitor}, + window + FROM + {table_name_under_monitor}_profile_metrics + WHERE + column_name = ":table" + AND slice_key IS NULL + AND model_id != "*" + AND log_type = "INPUT" + ORDER BY + window DESC + LIMIT + {num_evaluation_windows} +) +SELECT + CASE + WHEN + (SELECT COUNT(*) FROM recent_metrics WHERE {metric_to_monitor} > {metric_violation_threshold}) >= {num_violation_windows} + AND + (SELECT {metric_to_monitor} FROM recent_metrics ORDER BY window DESC LIMIT 1) > {metric_violation_threshold} + THEN 1 + ELSE 0 + END AS query_result +""" diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl new file mode 100644 index 00000000..bff1ccff --- /dev/null +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl @@ -0,0 +1,68 @@ +# Databricks notebook source +################################################################################## +# This notebook runs a sql query and set the result as job task value +# +# This notebook has the following parameters: +# +# * table_name_under_monitor (required) - The name of a table that is currently being monitored +# * metric_to_monitor (required) - Metric to be monitored for threshold violation +# * metric_violation_threshold (required) - Threshold value for metric violation +# * num_evaluation_windows (required) - Number of windows to check for violation +# * num_violation_windows (required) - Number of windows that need to violate the threshold +################################################################################## + +# List of input args needed to run the notebook as a job. +# Provide them via DB widgets or notebook arguments. +# +# Name of the table that is currently being monitored +dbutils.widgets.text( + "table_name_under_monitor", "{{ .input_inference_table_name }}", label="Full (three-Level) table name" +) +# Metric to be used for threshold violation check +dbutils.widgets.text( + "metric_to_monitor", "root_mean_squared_error", label="Metric to be monitored for threshold violation" +) + +# Threshold value to be checked +dbutils.widgets.text( + "metric_violation_threshold", "100", label="Threshold value for metric violation" +) + +# Threshold value to be checked +dbutils.widgets.text( + "num_evaluation_windows", "5", label="Number of windows to check for violation" +) + +# Threshold value to be checked +dbutils.widgets.text( + "num_violation_windows", "2", label="Number of windows that need to violate the threshold" +) + +# COMMAND ---------- + +import os +import sys +notebook_path = '/Workspace/' + os.path.dirname(dbutils.notebook.entry_point.getDbutils().notebook().getContext().notebookPath().get()) +%cd $notebook_path +%cd .. +sys.path.append("../..") + +# COMMAND ---------- + +from metric_violation_check_query import sql_query + +table_name_under_monitor = dbutils.widgets.get("table_name_under_monitor") +metric_to_monitor = dbutils.widgets.get("metric_to_monitor") +metric_violation_threshold = dbutils.widgets.get("metric_violation_threshold") + +formatted_sql_query = sql_query.format( + table_name_under_monitor=table_name_under_monitor, + metric_to_monitor=metric_to_monitor, + metric_violation_threshold=metric_violation_threshold, + num_evaluation_windows=num_evaluation_windows, + num_violation_windows=num_violation_windows) +is_metric_violated = bool(spark.sql(formatted_sql_query).toPandas()["query_result"][0]) + +dbutils.jobs.taskValues.set("is_metric_violated", is_metric_violated) + + diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl index f3cc5fda..afa2cdcb 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl @@ -23,7 +23,7 @@ During databricks CLI bundles deployment, the root config file will be loaded, v ML Resource Configurations in this directory: - model workflow (`{{template `project_name_alphanumeric_underscore` .}}/resources/model-workflow-resource.yml`) - batch inference workflow (`{{template `project_name_alphanumeric_underscore` .}}/resources/batch-inference-workflow-resource.yml`) - - monitoring workflow (`{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-workflow-resource.yml`) + - monitoring resource and workflow (`{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml`) - feature engineering workflow (`{{template `project_name_alphanumeric_underscore` .}}/resources/feature-engineering-workflow-resource.yml`) - model definition and experiment definition (`{{template `project_name_alphanumeric_underscore` .}}/resources/ml-artifacts-resource.yml`) @@ -143,6 +143,41 @@ Model validation contains three components: To set up and enable model validation, update [validation.py](../validation/validation.py) to return desired custom metrics and validation thresholds, then resolve the `TODOs` in the ModelValidation task of [model-workflow-resource.yml](./model-workflow-resource.yml). + +### Setting up monitoring +The monitoring workflow focuses on building a plug-and-play stack component for monitoring the feature drifts and model drifts and retrain based on the +violation threshold defined given the ground truth labels. + +Its central purpose is to track production model performances, feature distributions and comparing different versions. + +Monitoring contains four components: +* [metric_violation_check_query.py](../monitoring/metric_violation_check_query.py) defines a query that checks for violation of the monitored metric. +* [notebooks/MonitoredMetricViolationCheck](../monitoring/notebooks/MonitoredMetricViolationCheck.py) acts as an entry point, executing the violation check query against the monitored inference table. +It emits a boolean value based on the query result. +* [monitoring-resource.yml](./monitoring-resource.yml) contains the resource config, inputs parameters for monitoring, and orchestrates model retraining based on monitoring. It first runs the [notebooks/MonitoredMetricViolationCheck](../monitoring/notebooks/MonitoredMetricViolationCheck.py) +entry point then decides whether to execute the model retraining workflow. + +To set up and enable monitoring: +* If it is not done already, generate inference table, join it with ground truth labels, and update the table name in [monitoring-resource.yml](./monitoring-resource.yml). +* Resolve the `TODOs` in [monitoring-resource.yml](./monitoring-resource.yml) +* OPTIONAL: Update the query in [metric_violation_check_query.py](../monitoring/metric_violation_check_query.py) to customize when the metric is considered to be in violation. + +NOTE: If ground truth labels are not available, you can still set up monitoring but should disable the retraining workflow. + +Retraining Constraints: +The retraining job has constraints for optimal functioning: +* Labels must be provided by the user, joined correctly for retraining history, and available on time with the retraining frequency. +* Retraining Frequency is tightly coupled with the granularity of the monitor. Users should take into account and ensure that their retraining frequency is equal to or close to the granularity of the monitor. + * If the granularity of the monitor is 1 day and retraining frequency is 1 hour, the job will preemptively stop as there is no new data to evaluate retraining criteria + * If the granularity of the monitor is 1 day and retraining frequency is 1 week, retraining would be stale and not be efficient + +Permissions: +Permissions for monitoring are inherited from the original table's permissions. +* Users who own the monitored table or its parent catalog/schema can create, update, and view monitors. +* Users with read permissions on the monitored table can view its monitor. + +Therefore, ensure that service principals are the owners or have the necessary permissions to manage the monitored table. + ## Develop and test config changes ### databricks CLI bundles schema overview diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/ml-artifacts-resource.yml.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/ml-artifacts-resource.yml.tmpl index 7d0f2bf1..1217dd79 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/ml-artifacts-resource.yml.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/ml-artifacts-resource.yml.tmpl @@ -18,9 +18,6 @@ resources: name: ${var.model_name} description: MLflow registered model for the "{{ .input_project_name }}" ML Project for ${bundle.target} deployment target. <<: *permissions - depends_on: - - resources.jobs.model_training_job.id - - resources.jobs.batch_inference_job.id {{- else -}} registered_models: model: @@ -28,10 +25,7 @@ resources: catalog_name: ${bundle.target} schema_name: {{ .input_schema_name }} comment: Registered model in Unity Catalog for the "{{ .input_project_name }}" ML Project for ${bundle.target} deployment target. - <<: *grants - depends_on: - - resources.jobs.model_training_job.id - - resources.jobs.batch_inference_job.id{{end}} + <<: *grants{{end}} experiments: experiment: diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl new file mode 100644 index 00000000..0eb528b9 --- /dev/null +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl @@ -0,0 +1,84 @@ +# Please complete all the TODOs in this file. +# NOTE: Monitoring only works on Unity Catalog tables. + +resources: + quality_monitors: + {{ .input_project_name }}_quality_monitor: + full_name: {{ .input_inference_table_name }} + # TODO: Update the output schema name as per your requirements + output_schema_name: ${bundle.target}.{{ .input_project_name }} + # TODO: Update the below parameters as per your requirements + assets_dir: /Users/${workspace.current_user.userName}/databricks_lakehouse_monitoring + inference_log: + granularities: [1 day] + model_id_col: model_id + prediction_col: predictions + label_col: labels + problem_type: PROBLEM_TYPE_REGRESSION + timestamp_col: timestamp + schedule: + quartz_cron_expression: 0 0 8 * * ? # Run Every day at 8am + timezone_id: UTC + +new_cluster: &new_cluster + new_cluster: + num_workers: 3 + spark_version: 13.3.x-cpu-ml-scala2.12 + node_type_id: {{template `cloud_specific_node_type_id` .}} + custom_tags: + clusterSource: mlops-stacks_{{template `stacks_version` .}} + +common_permissions: &permissions + permissions: + - level: CAN_VIEW + group_name: users + +resources: + jobs: + retraining_job: + name: ${bundle.target}-{{ .input_project_name }}-monitoring-retraining-job + tasks: + - task_key: monitored_metric_violation_check + <<: *new_cluster + notebook_task: + notebook_path: ../monitoring/notebooks/MonitoredMetricViolationCheck.py + base_parameters: + env: ${bundle.target} + table_name_under_monitor: {{ .input_inference_table_name }} + # TODO: Update the metric to be monitored and violation threshold + metric_to_monitor: root_mean_squared_error + metric_violation_threshold: 100 + num_evaluation_windows: 5 + num_violation_windows: 2 + # git source information of current ML resource deployment. It will be persisted as part of the workflow run + git_source_info: url:${bundle.git.origin_url}; branch:${bundle.git.branch}; commit:${bundle.git.commit} + + - task_key: is_metric_violated + depends_on: + - task_key: monitored_metric_violation_check + condition_task: + op: EQUAL_TO + left: "{{"{{tasks.monitored_metric_violation_check.values.is_metric_violated}}"}}" + right: "true" + git_source_info: url:${bundle.git.origin_url}; branch:${bundle.git.branch}; commit:${bundle.git.commit} + + - task_key: trigger_retraining + depends_on: + - task_key: is_metric_violated + outcome: "true" + run_job_task: + job_id: ${resources.jobs.model_training_job.id} + git_source_info: url:${bundle.git.origin_url}; branch:${bundle.git.branch}; commit:${bundle.git.commit} + + schedule: + quartz_cron_expression: "0 0 18 * * ?" # daily at 6pm + timezone_id: UTC + <<: *permissions + # If you want to turn on notifications for this job, please uncomment the below code, + # and provide a list of emails to the on_failure argument. + # + # email_notifications: + # on_failure: + # - first@company.com + # - second@company.com + diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-workflow-resource.yml.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-workflow-resource.yml.tmpl deleted file mode 100644 index a4d505d7..00000000 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-workflow-resource.yml.tmpl +++ /dev/null @@ -1 +0,0 @@ -# TODO: Add data monitoring support for mlops diff --git a/tests/example-project-configs/aws/aws-github.json b/tests/example-project-configs/aws/aws-github.json index d4fecf2a..30b6e596 100644 --- a/tests/example-project-configs/aws/aws-github.json +++ b/tests/example-project-configs/aws/aws-github.json @@ -13,5 +13,6 @@ "input_include_mlflow_recipes": "no", "input_include_models_in_unity_catalog": "yes", "input_schema_name": "test_project_schema_name", - "input_unity_catalog_read_user_group": "account users" + "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table" } diff --git a/tests/example-project-configs/azure/azure-devops.json b/tests/example-project-configs/azure/azure-devops.json index 2350f016..c38784b6 100644 --- a/tests/example-project-configs/azure/azure-devops.json +++ b/tests/example-project-configs/azure/azure-devops.json @@ -13,5 +13,6 @@ "input_include_mlflow_recipes": "no", "input_include_models_in_unity_catalog": "yes", "input_schema_name": "test_project_schema_name", - "input_unity_catalog_read_user_group": "account users" + "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table" } diff --git a/tests/example-project-configs/azure/azure-github.json b/tests/example-project-configs/azure/azure-github.json index d79ea1cc..1e405b3a 100644 --- a/tests/example-project-configs/azure/azure-github.json +++ b/tests/example-project-configs/azure/azure-github.json @@ -13,5 +13,6 @@ "input_include_mlflow_recipes": "no", "input_include_models_in_unity_catalog": "yes", "input_schema_name": "test_project_schema_name", - "input_unity_catalog_read_user_group": "account users" + "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table" } diff --git a/tests/example-project-configs/gcp/gcp-github.json b/tests/example-project-configs/gcp/gcp-github.json index 63f5838e..45e39adb 100644 --- a/tests/example-project-configs/gcp/gcp-github.json +++ b/tests/example-project-configs/gcp/gcp-github.json @@ -12,5 +12,6 @@ "input_include_mlflow_recipes": "no", "input_include_models_in_unity_catalog": "yes", "input_schema_name": "test_project_schema_name", - "input_unity_catalog_read_user_group": "account users" + "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table" } diff --git a/tests/install.sh b/tests/install.sh index 59aca38b..8d0f4b8a 100755 --- a/tests/install.sh +++ b/tests/install.sh @@ -4,7 +4,7 @@ # Usage in the wild uses the "curl | sh" approach and we need that to continue working. set -e -VERSION="0.212.2" +VERSION="0.221.0" FILE="databricks_cli_$VERSION" # Include operating system in file name. diff --git a/tests/test_create_project.py b/tests/test_create_project.py index 23fa76e7..6e503362 100644 --- a/tests/test_create_project.py +++ b/tests/test_create_project.py @@ -28,6 +28,7 @@ "input_include_models_in_unity_catalog": "no", "input_schema_name": "schema_name", "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table", } DEFAULT_PARAMS_AZURE = { "input_cloud": "azure", diff --git a/tests/utils.py b/tests/utils.py index c733cbe8..42eaa8ac 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -23,6 +23,7 @@ "input_include_models_in_unity_catalog": "no", "input_schema_name": "schema_name", "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table", } AWS_DEFAULT_PARAMS = { @@ -118,6 +119,7 @@ def generated_project_dir( "input_include_models_in_unity_catalog": include_models_in_unity_catalog, "input_schema_name": "schema_name", "input_unity_catalog_read_user_group": "account users", + "input_inference_table_name": "dummy.schema.table", } ) generate(tmpdir, databricks_cli, params) From 1cf78290b00434d09802c6257cb2bab390cbcfe3 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Wed, 5 Jun 2024 21:00:48 +0000 Subject: [PATCH 4/7] Generate CICD Zip File for 4306c6b5ddf30feedb9fcb98f111e2daa3ff8899 --- template/{{.input_root_dir}}/cicd.tar.gz | Bin 4405 -> 4390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/template/{{.input_root_dir}}/cicd.tar.gz b/template/{{.input_root_dir}}/cicd.tar.gz index 7ba4c4f6360e7d3130a9dc0ad27eb3ad45897642..618ce3c56d24b79a8b5be2cebb88d04c151470f6 100644 GIT binary patch literal 4390 zcmV+>5!vn^iwFP!000001MNNAa@$6he&$#7$f=>25-3sEj5d?9Oer2t99tzSN!4Vs z6a+LS*dTzQ0m_W5KiKDe+Nyn>@0u^zPuO$%f;&ipq$oSVNyWB+?$f9HoIclX$gm7^ z``P2d4#3gD0sh@NI_U79J4Z+SZwb#j`-giwor4bkd#BUc>+C%v2aik_hmZxjPslSr zbR6oJw=-Si{j~R=DHzCq+q(93fAUyzP@Vs~M+ZkW|JMO2{s(mA*?K?+W8Js(Yn!rm z08f@30~vg{zhBD#{k^>m|BnuKcb<`*RZMUe{K5JEoS1ZIIg}{glZf|?`+N2B%JbcK z)CdNSKB5EN_HK1298upg2BBk8pBb)CuZZ^W&>#T!_Zr#s=?(qhkt^-0)xMyB+n^`5 z-4A@rxgnd;>!1JgMEi%X{kEh1WuX01*w%x;0@Ah|FAN4rN?PRV3jQC6k#SV&m<0Zr zB;ByB!5B!iTqjAP!k2hW(ny|~HERLB{}t~a$pBQ>|9hR?!&?8Z1Je8tJrmWxtxw!A zSc&dOn5qAFv;03igx9tHUju+5w1#BU^~omvHPVS76a$oqq3e&x)r}S0hSvk#2tY|P z(75w99l*nZd_(22n#e6e*9?^E)A^@maV2}tjMvHYtx1J(6Ec!ayP{$B?a@?Y#H&9gjegAc`) z6o~5lKRQJJzvlnr!+iX|zc28IUbu=NN+ z!B#`Xl_uc5!wyX10oW_yM;#LxNm$n^p2C0bX`~t%f}T}bcj}s21*DL^_*OUj^t~%#|4KjE1nHa z;5m-)0)3{%U{;eid;ywLkmR<&)CfvYj5;}UK->fbu%(1BWT}PD84@L7lAJBRuN^nQ zmR`s}h6u=@3oZRfs$c+6F{XvI9FvcnBhYPAN&xhR7-2Kw=Fcz#%Qo8=AVsdz{AG(Y zd(eAqnW1iXd(BpBOZJ@6>pZmW3;JtFSz#WoWfJ~%O!`7&Bp8-unQWny+Wf5JxIEXj)pi<>dLu3#%@B|U zp@z~9^A{~)vYyGpy$oj9zZ4kgBZg2bg zoeWV!2#O6{7$;~O?kHigwiyjVPcv+5JE?q9X-(8-mY}B1ZjlwYFksFMj50Dxi54h4vUOGiBm1(?T7}cgQk^ijiqRmf z#}QRB|B*;A*luXb#KKi8N*E)YTzo&cJbQEU=5o+GMUwiLC$D;MUJXwE@x#U0pno2} zZKXQF0-u$4Iypao-RquQ_TIiJ>)Ai+UYuPP_D;2ECFjMnCrSEGPcBbhUi7-(^#_-4 zzdL)A#P`$Ni|_j9C*3pgDv2o0s>k{Worx*R=p22G%9@Ddp&pFJ-ojS<`4=vS7j)!~ z(I$YjSs?wEVFj`ob&LtO8a^FcZpe@}ZcShya7vRz@>d|U;O2w-0M3LDn}FK2POEiV zPN#8Cd0B;qNFGI-A>!4mvh$0#r`7aWx<@4?mhQTw2II))QeVQEPP;d)^@wtY z&t2p>Clyg8$5*-5b2#!TmwaB2`Lw`D$sp%+&ZSovYma$R>r&envGw}3&-};nnT22o zC6f?~Wn@6e(<&t(M_$eT6|rCV99|+GTF~Vv%fiMkM4k$kV0gJ&%=vV>Irh^+tZ+wx$ z=NuOYD4?5?5IjI2&jR3ykL8a~{D5QgvE-43<fbEab|sFv25TvF9?r7)=^h`+geSP0F1h&U z%{AX?{AE*m7AoKi)gD~>zzO2bMR%$AZkZz-iyh*4^kWTm)Ako+=vgaYH^y zc%ZZQAh(R3Pl8+5`B6kuFLnwkf@VatBYW+yl&i_P!(wk!Mr3`D8pqhKky+^2MfL

cu|8;h`l(JjOyeTWzDHG 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 From 7c512525153432aea5f28d803c06fc25434024e9 Mon Sep 17 00:00:00 2001 From: Arpit Jasapara <87999496+arpitjasa-db@users.noreply.github.com> Date: Thu, 6 Jun 2024 02:23:21 -0700 Subject: [PATCH 5/7] Update monitoring resource (#161) --- .../MonitoredMetricViolationCheck.py.tmpl | 2 ++ .../resources/monitoring-resource.yml.tmpl | 35 +++++++++---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl index bff1ccff..bfec9085 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/notebooks/MonitoredMetricViolationCheck.py.tmpl @@ -54,6 +54,8 @@ from metric_violation_check_query import sql_query table_name_under_monitor = dbutils.widgets.get("table_name_under_monitor") metric_to_monitor = dbutils.widgets.get("metric_to_monitor") metric_violation_threshold = dbutils.widgets.get("metric_violation_threshold") +num_evaluation_windows = dbutils.widgets.get("num_evaluation_windows") +num_violation_windows = dbutils.widgets.get("num_violation_windows") formatted_sql_query = sql_query.format( table_name_under_monitor=table_name_under_monitor, diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl index 0eb528b9..e0b80e1a 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/monitoring-resource.yml.tmpl @@ -1,10 +1,24 @@ # Please complete all the TODOs in this file. +# The regression monitor defined here works OOB with this example regression notebook: {{ template `generate_doc_link` (map (pair "cloud" .input_cloud) (pair "path" "_extras/notebooks/source/monitoring/regression-monitor.html")) }} # NOTE: Monitoring only works on Unity Catalog tables. +new_cluster: &new_cluster + new_cluster: + num_workers: 3 + spark_version: 13.3.x-cpu-ml-scala2.12 + node_type_id: {{template `cloud_specific_node_type_id` .}} + custom_tags: + clusterSource: mlops-stacks_{{template `stacks_version` .}} + +common_permissions: &permissions + permissions: + - level: CAN_VIEW + group_name: users + resources: quality_monitors: {{ .input_project_name }}_quality_monitor: - full_name: {{ .input_inference_table_name }} + table_name: {{ .input_inference_table_name }} # TODO: Update the output schema name as per your requirements output_schema_name: ${bundle.target}.{{ .input_project_name }} # TODO: Update the below parameters as per your requirements @@ -12,28 +26,13 @@ resources: inference_log: granularities: [1 day] model_id_col: model_id - prediction_col: predictions - label_col: labels + prediction_col: prediction + label_col: price problem_type: PROBLEM_TYPE_REGRESSION timestamp_col: timestamp schedule: quartz_cron_expression: 0 0 8 * * ? # Run Every day at 8am timezone_id: UTC - -new_cluster: &new_cluster - new_cluster: - num_workers: 3 - spark_version: 13.3.x-cpu-ml-scala2.12 - node_type_id: {{template `cloud_specific_node_type_id` .}} - custom_tags: - clusterSource: mlops-stacks_{{template `stacks_version` .}} - -common_permissions: &permissions - permissions: - - level: CAN_VIEW - group_name: users - -resources: jobs: retraining_job: name: ${bundle.target}-{{ .input_project_name }}-monitoring-retraining-job From 47060555acb7146e29577e7b40a06c5a10f2aff1 Mon Sep 17 00:00:00 2001 From: Arpit Jasapara <87999496+arpitjasa-db@users.noreply.github.com> Date: Fri, 7 Jun 2024 01:14:38 -0700 Subject: [PATCH 6/7] Make monitoring initially optional to allow creation of inference tables first (#162) --- .../databricks.yml.tmpl | 9 ++++++++- .../monitoring/README.md.tmpl | 9 +++++++-- .../resources/README.md.tmpl | 1 + 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl index 1c03c008..ec0c8fe8 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/databricks.yml.tmpl @@ -15,7 +15,14 @@ include: # Resources folder contains ML artifact resources for the ML project that defines model and experiment # And workflows resources for the ML project including model training -> validation -> deployment, # {{- if (eq .input_include_feature_store `yes`) }} feature engineering, {{ end }} batch inference, quality monitoring, metric refresh, alerts and triggering retraining - - ./resources/*.yml + - ./resources/batch-inference-workflow-resource.yml + - ./resources/ml-artifacts-resource.yml + - ./resources/model-workflow-resource.yml + {{- if (eq .input_include_feature_store `yes`) }} + - ./resources/feature-engineering-workflow-resource.yml + {{- end }} + # TODO: uncomment once monitoring inference table has been created + # - ./resources/monitoring-resource.yml # Deployment Target specific values for workspace targets: diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl index 22e1df31..55194d92 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/monitoring/README.md.tmpl @@ -1,5 +1,10 @@ # Monitoring -To enable monitoring as part of a scheduled Databricks workflow, please update all the TODOs in the [monitoring resource file](../resources/monitoring-resource.yml), and refer to -[{{template `project_name_alphanumeric_underscore` .}}/resources/README.md](../resources/README.md). The implementation supports monitoring of batch inference tables directly. +To enable monitoring as part of a scheduled Databricks workflow, please: +- Create the inference table that you want to monitor and was passed in as an initialization parameter. +- Update all the TODOs in the [monitoring resource file](../resources/monitoring-resource.yml). +- Uncomment the monitoring workflow from the main Databricks Asset Bundles file [databricks.yml](../databricks.yml). + +For more details, refer to [{{template `project_name_alphanumeric_underscore` .}}/resources/README.md](../resources/README.md). +The implementation supports monitoring of batch inference tables directly. For real time inference tables, unpacking is required before monitoring can be attached. diff --git a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl index afa2cdcb..5a7e259c 100644 --- a/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl +++ b/template/{{.input_root_dir}}/{{template `project_name_alphanumeric_underscore` .}}/resources/README.md.tmpl @@ -160,6 +160,7 @@ entry point then decides whether to execute the model retraining workflow. To set up and enable monitoring: * If it is not done already, generate inference table, join it with ground truth labels, and update the table name in [monitoring-resource.yml](./monitoring-resource.yml). * Resolve the `TODOs` in [monitoring-resource.yml](./monitoring-resource.yml) +* Uncomment the monitoring workflow in [databricks.yml](../databricks.yml) * OPTIONAL: Update the query in [metric_violation_check_query.py](../monitoring/metric_violation_check_query.py) to customize when the metric is considered to be in violation. NOTE: If ground truth labels are not available, you can still set up monitoring but should disable the retraining workflow. From cf07d1325f6f7e3e5f9a0c00cf5093a7a9b44c7a Mon Sep 17 00:00:00 2001 From: Arpit Jasapara <87999496+arpitjasa-db@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:52:16 -0700 Subject: [PATCH 7/7] Bump up Stacks version (#163) --- library/template_variables.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/template_variables.tmpl b/library/template_variables.tmpl index 2324c854..c3106f4a 100644 --- a/library/template_variables.tmpl +++ b/library/template_variables.tmpl @@ -61,5 +61,5 @@ {{- end }} {{ define `stacks_version` -}} - 0.3 + 0.4 {{- end }}