From 883d6cf5ea8b1f85f4a0b19d22e97cd3650289ae Mon Sep 17 00:00:00 2001 From: Shaelyn Tolkamp <46355612+tolkamps1@users.noreply.github.com> Date: Fri, 13 Dec 2024 13:21:38 -0800 Subject: [PATCH] [Track-220] Update Anticipated Date label (#2483) --- .../reports/anticipated_schedule_report.py | 50 ++++++++++++++---- .../anticipated_schedule.docx | Bin 16237 -> 16217 bytes 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/epictrack-api/src/api/reports/anticipated_schedule_report.py b/epictrack-api/src/api/reports/anticipated_schedule_report.py index 17a5d881..35597911 100644 --- a/epictrack-api/src/api/reports/anticipated_schedule_report.py +++ b/epictrack-api/src/api/reports/anticipated_schedule_report.py @@ -47,7 +47,6 @@ def __init__(self, filters, color_intensity): "work_id", "event_id", "work_issues", - "phase_name", "date_updated", "project_name", "proponent", @@ -64,7 +63,7 @@ def __init__(self, filters, color_intensity): "ministry", "referral_date", "actual_date", - "eac_decision_by", + "anticipated_date_label", "decision_by", "next_pecp_date", "next_pecp_title", @@ -123,6 +122,8 @@ def _fetch_data(self, report_date): exclude_phase_names = self.filters["exclude"] formatted_phase_name = self._get_formatted_phase_name() formatted_work_type = self._get_formatted_work_type_name() + formatted_anticipated_date = self._get_formatted_date_label(formatted_work_type, formatted_phase_name) + anticipated_date_column = self._get_anticipated_date_column(formatted_anticipated_date) ea_type_column = self._get_ea_type_column(formatted_phase_name) responsible_minister_column = self._get_responsible_minister_column(staff_minister) @@ -292,7 +293,7 @@ def _fetch_data(self, report_date): else_=Project.name ).label("amendment_title"), ea_type_column, - formatted_phase_name.label("phase_name"), + anticipated_date_column.label("anticipated_date_label"), latest_status_updates.c.posted_date.label("date_updated"), Project.name.label("project_name"), func.coalesce( @@ -320,14 +321,6 @@ def _fetch_data(self, report_date): Event.anticipated_date + func.cast(func.concat(Event.number_of_days, " DAYS"), INTERVAL) ).label("referral_date"), Event.actual_date.label("actual_date"), - case( - ( - EventConfiguration.event_type_id == EventTypeEnum.MINISTER_DECISION.value, - func.concat(Staff.first_name, " ", Staff.last_name) - ), - else_="", - ).label("eac_decision_by"), - staff_decision_by.first_name.label("eac_decision_by"), case( ( EventConfiguration.event_type_id != EventTypeEnum.MINISTER_DECISION.value, @@ -475,6 +468,41 @@ def _get_ea_type_column(self, formatted_phase_name): else_=WorkType.name, ).label("ea_type") + def _get_formatted_date_label(self, formatted_work_type, formatted_phase_name): + """Returns an expression for the date label""" + return case( + ( + EventConfiguration.event_type_id == EventTypeEnum.REFERRAL.value, + case( + ( + PhaseCode.name == "Effects Assessment & Recommendation", + "EA Certificate Package", + ), + else_=formatted_phase_name, + ) + ), + else_=case( + ( + EventConfiguration.event_type_id == EventTypeEnum.MINISTER_DECISION.value, + "EA Certificate" + ), + else_=formatted_work_type, + ) + ) + + def _get_anticipated_date_column(self, formatted_anticipated_date): + """Returns an expression for the anticipated date""" + referral_postfix = " Referral Date" + decision_postfix = " Decision Date" + date_prefix = "Anticipated " + return case( + ( + EventConfiguration.event_type_id == EventTypeEnum.REFERRAL.value, + func.concat(date_prefix, formatted_anticipated_date, referral_postfix) + ), + else_=func.concat(date_prefix, formatted_anticipated_date, decision_postfix), + ).label("anticipated_date_label") + def _get_formatted_phase_name(self): """Returns an expression for the reformatted PhaseCode.name""" return case( diff --git a/epictrack-api/src/api/reports/report_templates/anticipated_schedule.docx b/epictrack-api/src/api/reports/report_templates/anticipated_schedule.docx index a6a0c5eb3eb12f48f1db0d760d35497b38659ab1..f8e17461c16b70cc02e2562549d6e0a99f43e47f 100644 GIT binary patch delta 8259 zcmZX3bzEFM(>Cs|MT%3jxVvi$#ih7*(c&z&I4v!@xEGh=?!LGeUEE!Z+t>Df-uLbO zeEH*?ll*3Kl9?-$WUeE>c|Xi|%J2vTFeoS}FfCsqVldf2>_>bAfV!B%HAOspD$*4j zkAVFdUi;g-Yj-lT!k&8XV?ojDl7Y>4M4eb)bfSO?iriUrQYSN863zx&vUw@D^2(Y=qr)M_Wu?)tQPEkK!fPy)V3Tf3=_z^q z_^7oI(|TuO$-a1U9pt;H;QLGsOcfnVRjbszEJny;73A#-hCQajZh^HOavQdNxT#6X zX3bXnx`#96i7UrS&aJe9e}3R=KL?2)u(`tUNedzb$=U2U&c%x3Q4kxH*88oIFt()e z$BJoXR;|vAJWS}|ormRIH^d$YF{?H{%ag8ibeXnfnG;3KAMKjuj%F3vnJ^r*Cq^8n z7K@fa>!4ApIA!TY$YSo3gyZ?mr(8>h8IP)D<)rG4&JF<52y(F<;NIHgl>BO1gaf(glsY=U##a4CEC#Y+p#+v z+NcRqFX$P}p_{;b-ehpbdZn^0zNbzJg>GB_(C*h1F$@3n`S~+$F!fU4DZmx9qD~- z8aHTqR!q05bk#)wZ-!gZj+(d3vSMWUUZ(1Dj-5fApk8v?())}#FY3qq{uos;wV{gp zmr?QmKch;)(}Us+9idbNp(ocYtjG57Sf5|cmpx3_XfU{`PcCx5!Q&yrS+!HEeHK%n zE%o9B*ft3H?D{UdU`4MyklwBKL=Y+w!N}qu7;sIa0vS6tuGrp4n!JpEc@)2iDByzb zFsORVpToni@{!CF5rF>DRi%7mu8NkjFyf)^r?9sr(mv?n2f1183OeL{FC;*j*c>I1 zldM!jy3ly5Be!0x5fpz&(A-ene5B{y$_2s|N51d;Tn3~18nBQcfwvC*j*2VemP9|# z9LyBl02wjVUV1_bXd{PEMZ2CR>*$~43jqhf@2~F)-124U0{u46pz0K3Jl+)##w zH9MZJbPz*>ZXEt3GG*xd;fArckNL#sVfK-l6rTK&?JU#nCYjyX@L-aMy!loZht{4i zJoJQ8ZdD3Zbfq{03h^^qO*DY27NzOL>eTy@pmv3&ego0)wu>du3NVR|S_(JPBp3&> z$?TwAom!sgC$e8^Q?#Mupdcj8|MjZnOkD@binY9hmN)VG!Ncg`3Naq^3-!n-(HyIj z5x*SPhwxvkpn4ZU7Z(0kL;_1A(Si0HHyQ|^m)oU2eleTmJHr(oXi8<}60|}}LO7qMzX7k7bN@Wu9)8Am;x~4gCg|#e!d-5GUWWcH0L~G) zaHKEJ`GOBTyikOeVNF5RemBr52U`pqp&?FELw zK0nPA+dM!idjHfMvFNr-WJ}OT} zv`F_t?+Tk}C~HqLmVI|95#D}Z#VtMW?%V^W{;9o89k$6{r8m;Pn1`<0b;MdkI^GM5I>%LP@&Nt zM}W0VBnUtpbXP1~t;`IqTZ%nv`rO5cIzBP%;pG2h-IE2~QH=my#B=D|8hm}g)g=fZ zTzY$PQf3ignUDVzy!Xah#f~zB_Ubd0aABbMQ@r^4lW+BskiF7C+D)3=J+f{b2Qt`z#?>|;dZ%WIFi#!cRffO-Euv!${{v`=3eK9YjdI=l{OJ)UlN1sG}C!ZBn)*?>=FR^LCd9^Fn#N;~Qe z&6;~nk`xhJY$URJZ8GXqQ8od>o^OH0%$D6Z9G$n%pIM`*QWCdLBle9>pl!&*oj~Gs^u$QykgKDbxVpv(=k^!ch*VbDWk4MIqxMu5m z-3}>$?97}A3Lo5HVo_21-st4iQQT)a0<+UM@ZCfwMmR_P z6}wk%CvW4U1TR!+iAHjxgUT2sn_XDt$#CZ2&M2--Kr;HeSCKvo-C5o`_cdp8A945n z^-)G(z3H+ex|m}%7*V$iZ<5jh zR>@e4D4vc|4!nR=sbfTNL7V?u%6UVchTGY&DR?ZbhjU!#2#%=UrGZqStVX|~u;lRq zbQfV2BsE6l_~Raf6ZyDpnwjH0$1S9qA1In7+w##sKIlG`IlO@q19C@^cnK%nmZp-3 z7O3Xq)_`wE@B(v%vdRV}GpbqSmD}bLvXkvG+Cgp=a}Zqf2f;*?oLqHB9Eam7bH zLI8W)`mDkn0&1|W=b@JTp0N)YlP${Tgj5j&G<|Mh51g@SUEugwL0{jiDPPIpePNvA z#~8((xj1fd)$UMbEXCqa(`gnD_pSqPnAHQ@*pFq!{*fY7MNxRvB| z_eX^1vuVh-kzem7U~6VbiW>-Q?WRdhWYA9V&+^A)j&PV`r`Oun_#E$6Bl#_5!E4Fr zR*Kt8&6J@+|6ncr?t`M4u`INu9zW9Et!{#1bg%Gyw^V_dYJ-mlFQb(@Qa*SKRC!C{ zZ8}yOXGW~X(rb?#5w-W${Dp)M#g|~I71&p zu|mF`CCsr2C>yuSZO`3sWR85g0GiJR=SCs71f%-$_FQ*DYZ*;ChV10r4cy#-c{eRK zZRp|41+s({=n#rmGFKzXx@&{xSLdnwgNe20u1n1y6m@~tB1ChBX&Qvwptdf(;97UO zbKUb)Y}vfE@67l}f_uy+P=yw6L={RP{P#k@!uG%vs(f?e^lIB|4>LmlZ2emCTb1+h zbCJHv5YiFm4?NCphMYl~YP1#iXP@nSVBPXJQ_fO)ln@CljA*Wmrt#T4@x&z^!&XdJ z*pbLY?9;+S<9Q)pQp(M&LH35SIWI<(?pIQULX{{u-njUK0LW2ruGJHW1je29B{=BW zWPBemQLw22rrng|;AhF2jty z-_f#0C<=(i2(D3+=3y*0dveu`mw_$nDwK2r_8TkOco(4%I4@aHQ^877>V}WBFjv#O zbvtFW&|$%IWgtqP4S_-p-SX;bN==Ynrp8h85n0)VY%e?(ku#$jp&}lC<0-q94c7iJ zb^=U5&mhWr@Ty>w1y!wRqh*wzDqqd4E^1531Td(-mMku$)Q;vC-!_Vgv%|upO(e7~ zGv_{=*qHAsC0clAtZhxx{pM6eORufju(tsI#3KIFb?`E3+V|;B4?HE6@U(b^j`wTs zGNB$nlBrfNdGFy|brY&oe6|_|*bnrc^LXSeFQn>VgOw^pS3v1D%$2_Q=y_2YD?@P- zF;vMwkzDL=#z%<6HAlwBvo)<6%_C>l!bBIP|1`Er4iiR(XI35|!H0 zM5O9HrnxET>G+fm%UXe-${17Rvq<`Wt2{aZ&x$7t&E}Ur0DNx^b@% zgA^BM_FEjW7hQ~oGow>fi&!W@Z(p6eS48#bR&H%-`}Nf3UTZJ&1YGjac^>{gM195# zMig}rWQMQ;Fb+YqaK3_iST9g8;h>D9{#G4qc_Fai&~|0@4Re)!z-HEPZuFCCT$Zmh zYkk0(LEUMB$f2wd2eXe0JJXuKf9(!DodP|c8hWyE5)8AU?pnsl;Ci}HYxg2$rs($CP>*2+- z^|_jaNT0H_oE8tK`P^0_1H-zrfK_!_jd%-Xa}?|&eBx)Z%5eg)8ELuvDNp|fi~x^a zvVrLg8Pc;JFtr?a?Sa7i1I>q6d2R(8^8zwVLt}U8i4m%e}?bLh)7f| zaiVx_I3HX~%`4ggj#n`pi`$dmxty<$yf~<1u!lF_=+Saj;b$1A7#rG6(S)INLJIh3 zZ8?f|LdJ)&Yc@?6)HZR*De?IRDUhGspHGjam@$pn04A(1N;P*&jLNT&)^Nnz*c*x!`_8o8d2M!c&^?Cxkv`vu>Yg_DO{IID zIhLaAUBFk{`Zx^STyp2dN?l4(z) zVN_`$r=tB?J()c3x6pf$J$16T4Rx>L2%TIH!kHRj6pQUUsJnp^c=9{j;Ik^o zKx?fdI|*gIPNt~c6!%spje!uKwU~?to3-R7;77AQKSl0kcSb94c+zN}&WM z9NTO~HLdLyIwWs5+k5jxfZt{w5558?Q&oaE36p1m)Co4Rw&+~b0|7#0{AH7PDUA2K z4kYY0+nfx^6nBm4-l&561wxJGe#~*txR1MIpW=+CKWfI_uEn$!bCpG6P-5*jTccN6 zgkIHQ=AHj6PuD_t6geYPo_Uy)tTZmhcUo8^=4RM8&U{)C8D6jPi*y>pnG6fM+spuU z@8%uFl+?+C1npIOs~$M`yC`cBK8ri(07HV5@xm$~W=}XxrqeSTl^)Z`-Z4$n>h71v zlQZAu@4%g#XIKTcE@x*uHb#w`F(t|rk6Q-nmn*gRE6m45&YF#~K{=K>TP(E&(ql=L zja6=lBAuaMj$Gj1O3xfs$b2k(iiZQ)lmoTE%`f6O?KUAk-j98r{wt=I_NkY{aBBKU zd-_i2C#B2!O7c-@=l(f$cY_}jSLWU(8 zZ?9sTCVQ>=iH5ghZ9(dp>kBWVZS2UDr+l>U0*Tr@=Fg7SH64S|UMVfLsqVejHky@Q zQMA+%&e}HMD zs$-hq0~EH^h+n)4j&_XKsxJX~FlfwApB`t-yr8cy+d5LZnq(gF^3Jr`*UXU?jH`>nd@zq(48Ww>`qxCJ~v&DAa&}xp@)klvap?G;=}Z{T6O_Su&$h z45c*PP4Y6~vu!M&MD-d+pw;uhL@+r064JD;p zC4N5=GddS(SX1qk7o5%CHo%CotFB83vVklE+>J==9ZL8ea#dfRq(L>Zj;t-9&eR($ z)t*vOeOI!DLmPyZ7$=}S(XlUs)=DGFFBy-q4w`~fFlSjOj9(NCVY`V!O!S~Ma$33;aw)$+OI2y~O8hicyj$Rw@KoL2$cxpl?{V|apNN}QBpMC5BUEovlO|Mu9UK-zG zKO_E*KWE~5U4_^%F!m|`6@UJ-e_?`#9D+D-WUn95HhtkVwY2mC?6Sq&<0t+6&5Pa=DecCwAuH>3~!9bBah(DGj_@;WK!-lMYGuN`1%91{GPN= zV`@QnoLYxeb2v=(`+B9NwP%jR{SBYuu{pwkPsP5C>C)$!r@R$rVDUjhp*s@#m(U;= zQ)H#crf^hWNbW#jfcI!)H=7z;wA%_Dh;%+;AbHo1dW>(T6H?O}faeKt?u5<`cfBbo z%MtwsIQ*P{6AK{hj)Gi~Rj+~Mu%*yIU+5W#c3VtGq@ADLSS~5VT$E zWHmzJwFtBrakNzMFUJRC(T1lkSj8{y#KTpa0aAMbD_g^`G9mU_TGmD*l zZX=<=OcGG+p%vA0Z$a+2Ca`PyC zpJQn>hlPsr8EZ)<_UmtK)gs(R$YJZB zGG?MT?t$^Mfv~{nN>{GXJvT-y_S2|SKEx@GZ(AqQ&C<0~v?;4DphdJ$agV0-BzH$1 zrjp5H;SF%%>bh@nq_sP#QL}hpn6XPyG=01SFGuu9U%-fJm2hha7jlRF0yekOfcz; zs>xgGhOc`2=oFFDK;JPQT?W4^=^#pD^53?oB#rq~jRLAx^A2xix3KWaUTfNwCSI*G^rpyqNFniO=pI>)na@ zpA*l9hZLGmIFFvvdfNYF(|Hm~ulIg)N+|yU2g?8Odes)}egCA>**K{|OWJzBaDn4@ zQZ8}tz^Nv6F;}CP$rM(BzHf3Y_KyePGJT(>&Xb-}2Sl?aG7$_nWhPCvZ7H3l!vOZI zSHufY2&+|!nUw71YVHJ|^fk>5xx;GJl58}|zdCW_XpOPxGGTKBh@#6ZrK-4i8p? zCj^HJWBmDPvM?FkJ_7g}fr90oGAtYc%>Po;dVgP^aR1eZEcjWN>d#pIJ|h2nELvbO z5z0R@e{W;IcC)`qF4#we;*ZSVVfNqsd}Z_~4S@gF6HW?(QBWxVsHb2u|>i-yRoBzCySjJpCI27($SU&CFjx@q@bD1DF`wg+nSmS24!P6aGP7rtkqBtfjty;5 zNAq0vclWm*1O&zXO+Kf*g12Qmhk1-aMDG|FxI{V0X(6ae6-s@Bv_^G3W1)_lM?6*O zQgbPEI29cS#W+;)JlT?9cPJOT3Ft;cvU8(d(@pFKVC5Vrs#LNKw2Q#w;vloJ0o)15 zZy~GO7(l{_=ACA4B=?^YO37&lOxN>R(W2C>SSmp-I5QF3b@PFAKjz?&UGo?V`E8o% ze+(J(@#OLExIYIe{=(h}w1oAg2e;@+$WH0<*2ae4XbjjP~; zco2q3DTfmVqhj8X{WN<#_Oo9cOp>*|LGsNE#0E;)>^m+d2xAcA8tm$KondJ->v1Ls zY39^!&W}A!Enw7!f4OZ=IOd~QZh4W$58*_iGfY4y7-WoOkvc+3AA$9#efBwAt1emI zX|->A`USJKoaVi0Mq>zR--`I+J9I^$A`b@->NPR4g@k}ug@SQ7Etiz@=EVBU4uA+=ltxeAM#uvz@LI@*>(3SF3b#FMc`YKqX9CV3*Q*6}#Krd!c7dAmqj(Kld)PLa>a6?!Fk zGVDSGjAM;QPf`neiZ>77?jcW|Fch;V^69>2^M|>E{klByC;EnRe0q$5F~8D0x+kQX z39jdL5}3-mrxQ1YNZ~BxgqLgfRrNN^E>h-EnjphHdHOjbC;pZEJV75{iY3L!*8BpA>=29v+2^& z>5zhmD?MA-{SBLP;>a6V`G++p=M54*i&oQKtyRB8KU`bsR>cJ^U1cV&JT(?4aflSk*x$qfB z(!gg6B}>$s7NsM)Vh+Hd6z52{ydeZU>CC9=TXVYhc1yF$_HeQ@6NBXsb<;xV0vBJV z4Q#XKTLT25eW%QX_KPD4`v+^c*i^^nEj7k&mmWqkdX?+4Dgt(7AuH$Z*w0uYi~6V{ z)lDPz@Y?&Asc>mASInHRca>9yMxhD#Cp`}Zp!f4VSX#$R<_3TS7?h-dMYBYjY95@* zz+iEl9W;hJ+aobh926Kd!3(xs^= z*MS3wR|o}h0)5N7!j%GHjQ#P@_I+VE7<}KW@0hp_h905yzJFM(4(lcm5l{RUq!v6_ zzA=|?i9+@~B1#N=6v9}ArU*V;EnL73cT1<3&T0#qeN_Y^#eU ze7;e7j`WfJndNH@b^NhgGs@~cN8K)}tr}YsdE7~e?!FhBt;GP;9dKD1=03HWI0fyD zt^vqe8hQm;!3N-B@hYD6wb|j%3H<6_L#X()q!^Y>LVs-Am^N9((H@wj| z45=xsa5qbo3%C;~7evH4F9~tcG3woa@UGz7RFh2@iiETIGVClcH@K93Q&w zr9pw)1rVxIp5`w^%fjAu;?1y{qK^0J!*V9m=-3C!96A`zBm9KgoX~ zTENxp3-YGWiJxFSse$mQXw3C|M{jbYIi#;4llbi|(Em$Y4%;w7bG6XL6eI}{PO={m zk1bnIFtwH#8DA)9%xk^Llpf%%FyW1J@@DDRZu%%wj}oa5g)yzP_kiuQz)kpMMg%zp z1&?E~!ce#uE12cLmA(HZkT*Vo+|v00D>M0*0dFElADJ zR>4N$^et!*xd2DBGgaLmPNb6yXVU=~x>#$BrG4dc;E36@JcK9zMtq2g|u z9a#_Y%?AlRotqee=e}H@8Np{y9l=;L5vCAJ6@Dz9EU(&#YtBbYx4hAO_2)-@PC@FT z#NwGtr|IvJP|$C<6!rN87A!o!FIe{WYjKP!97%QSzin}w<_=v&q*fM$%pk7iF9tqT z0a2~s2nm1fQh@Qd?3H21+KX(53>idE^;QmGHpM1z81TK3*x*h(=jd7WS?}iS-rv>c zOSU^1NIyNS(0^(sL1OkHPPv8>@61$6c^jna>)woMhxHCwn7GykJ}0(KfZ840gj#wu z#B?Ka@$KfcfMWjs#K_tRS7){9@QL!;3aDAo@#~W@g$X7lTIE)aHc=t)&XBuVptQq` zl1*dOwP9Dc?AoTUyC-=yS%YXG`(z9leV->V?&~5BT6$?5*21iS_yqHr^G$95Rq8Sw zn*Sp=b;cWf7uCwJPd1+}Z$>-`ADmFVU4K#p=!yo4CHW;nhfs`08HWh%H_$oMgto;q4ZrYSzJ-79Xs$6%;~nN=p4=OY$CnU5kGqF8g}LuoOL zc@0?6T^b@?31yWBB(dF~5twgeM$R<}kh64^Wc%teDBnNfDBdOl+JVB~PPa27QqO~j z1j-xq)!KJkm-W3!NHv__yQ(>NH^%>hc$-Olaj&ELxp8M^b=2nThHV-)6nMp@*+xF8 zJ;I=+$Bip0F^HO0`vs3f2Ahknjf8S|5LX3Sz7o$-wp>GGO-rvIBbg&ozI*WOz4?)E z+)&+M8f|m=l-2Abyb#bnK~opdWCifii+-#t`O*f4>~j}GO!SCi5P45@D{_AA)%Nz8 zwABRKnDQ&mFAEDr8`7AI5kr%#Z)(x~u6O-trY0Rj7=(h-?809t9Ltkoqo3Mq zs>TDy>TK9+Q?Pm3?mA%Wpo(=NhP>nX}d1RR{5f;*q2{-Iw;@DU`ru?8Wn$*Q(KXj%#Az7!GJ`7_wH7++tW-7buA5+CTr7+ zcM_=?Y9A9^KXqa5n4%BGb2C>9Ta-zy!5X_RlgkMMFndyAHHS|(@1>yY(c=}v$s=DDtcNfLL$UW%Nt-y^8Iy0J0DYhB-LtpWui*7GFxKC`lVy7 z5S#R@#r<@%B9S2GqGkE;sY!K10=!#vuUK8 z*VqqGZs3$!CEwi^9u`}J05$wCwO(W^5MqUkm1hX&56Qq6WX41x9e);eD9Ir6z4JIB zQ=v6PX6uz}vP-8WvP)UG?^)<@)J59pd&OccEON6YsZ!6v}CHL0Q*Dq9{gi^y{grsq${@3 z<;$sT;0^|bX#_4T#mME=4Bn}9!;mLnyApkP09V1dRUH{E&*UNh$FtYvHH4F*Qowod9%+M zhbyz!LEY#AZZ_(5`Y+rgQ$i=)#G9Yd&S73y3KtO9N$ME zQ;;Isx%f@=$49*Th{;1RjVSO!Xwa_XLVuLwd&&k1UazrK7MUemYu@=5GLb+;b{~v0 z+vW*Wwj$G}_|y{1>WpnpQ$ZOQ_=SX|3179+F+fJ@#;fSEF*A#te0dw}z-pQ&Z6~qj ztjaIwAWQYh@A;)g0k=LR_$!$>V|psv$;HadOmXQ${KLD+4M5rfCL&Ogm9FT#6-GHo z;3iPKFL@Z-a!vG1*zppXJTu1>RS`z^o4G98b?D8-6^PBwW{>4lo&>$c{E|}Or zd^WU>TkUe+;$>*h6l(q2F$_)7kMz#PiF*cVhJAY1DTAO4kjT-y_^yc1pS)Ik6XxSe zhP6J~DodNZQ{PPRVw}V7ZB4d+N_^HEzG)j{D{9ZpM<8eH5>>zwa!0_2$Ro7 zF^N?j54887yhTi#AI_d4Qt_}rs)-ux`1Iy3{|tS@u!r&IQgW5q1C*tOK6erkaHhia z%+*5v8{_(cfy`Eu=8m80)Y5UO_sP=eFONMMKH=yOv*^W)cdfIqiw4^iy>dad9T0fK zFdGRK$&MMorvHHuch*jc0XZJo%+x1Dty%tPfO2j8!l zyaeC98^oP36=6i&5M>tXpBRbN5mX>xO<=n8J$r!Y6o0th!1_XZqknn^g2fjz%FMNG@k6Oo5kz=;X5puPaE7StqXZ8N*11|kBWvsNKUc)H-J^D zAPwYA(Rc#qHWhMO(EpAAQQ2lBcIA_R9#wKj;$&HROJ& z(M86$7noOjn7a4Jo$%DMH~}z@AxAe6E@>${NRVl`vOe9VY&z({rItmxy5Be`@Y+Vw zS^1?d9iWsey(i%R@kPwmvTWqS3`_!Cpz12!F3>kuR@PK(syO1tZ#rB8s2r&qv_Y#y z+naq%pO7=I{xWY>yR$M-vJQ`}kl5;%Gp%3VUK!pA8maV<8fD@Z;uBlqsh6p8EX)0;(%<8dtSs$Rys3y=9C`j#IEWE=FrG6(IS zN=3D0TWf+9Y;q2Uqbo@#g_`NtH$ro>B~sxY_)9}ELCdwGu8=bx?UM19BiB%{pUX;@ zas6HHKvLQn6+>%sWoneH$G}t(nfgzYDH}g>&8j|-fkxoWtCkoSUK}l>L$nV^$6uwN`U2k94wI_itFhQs^8hLnXRTM7GO=jaCW7b{qYX^Hd_2mS`x>PETwY(!< zvb1M{n~Un0IcaCN>8cQNZ+CT24s6Vcw;v6Ss`|c-AV|D|o5vih-Ot_*Ot}$Yq0gb? zVsX!H<}W|Su;DhSlK`4zG7HaMzYAX~7OMM6I6HGwzBi}Ueplq74TN9X9q+j@Fj)Nc zu$B8#7aq)5Sf<$F)>UF(R$qKAUiZ$fX1cMqoC_xgg&^`aPv2{*BD1Wb;=YTO2gro| zY=z~cu4z{M9=KRZe)M_;0SKMo+9A4dBEtFze@+<8LV=W@=Ki32SFC=2+n7q_O~or; zBp|z9ca)+dTTVk{SE?j!?0#cBn0j<@a8|zit9)5vfxc=!!6U$=j-yYJhUjW(Hh1}3 z?%L&S9`^)?rsLG9?5LrddTf;>wf4ZBR;-+y@Hm!r#>Ra9r7##@+Te*S3*;!4IbWM{ z5(dd~m`=j7r85{9VSJ1EGN$air~%B_odxa+KjQu_MhtFbUmH*%Aneosrx<~fsVIQM zN`0(oVLt^V!9E!UP$A{i9U6@93woiO$Ia2#IXy7$Z+PTq)F`nI2EJHZcE02|x3Bxk zp>qZ_PScZ}vy(&8R@TX3BX|LQ3w`iFyAu?>>l{9&nQUex74ngB(c5?- zBrJuN^VpQRHf`#uW$j~!v&GdwW2yo9tgPR~D9YQ5+!<7=vhNGmz=tPS>@~pb_G)6S zg~JE&I?g30)ky1IX82PK)Kq4DS+@C(WP>t)Pb9;3Ag5J=fGN!Zd&;98p7te^%yxpZ zi(m<57<1}bM2S0jeXzMBd)v#|t!E|adv~OkfwYg9VFrcb1@DYp7)iq+x8)-+`jkPn zMO^sTu!gTsR@rFQQ!L=-r5^xn*d!$60;ABSmOK@_4gF7lZtZVnJ;|w`iXAbQdY;ja@*2sP=YPFXU9tGu>C?-{v-K(VW)xp^TNu-^qLZf71r1L1q1xLy`CsOmKd1SDLpqF2lm7l zLNYp8%Ye0@g2&j{#(ld#aHsj}9=Tj*T2oY55OWo=x$JyE<0O54kEa*{Z5~L>0=>g{ zJ*HFDlt>$ar6DN7p?kXQFlCfpfe6F6+^(3SRSa7%J{asli5R$iG#ed~oToG+1{7(U ztc0RS=eH6YY|XFX&h=%Sqiwm2O|5AJOMOm)*q7-q;GnyAwL8G()dDeZMdHN_}hQ$^)RUEy+C3}989>2)Q(U9ZR zPt*9_%C-K+5uux!&3xp=Z)tv=-&*asownlPH4l!mL*|{fp5DPAHpB8|T>_D0vi6q2 zh6&A(F;>YPIqXaz-SK!Nz-aV2n9cmzjyrPg`FNIPcv~>BqnpV+ue^^+;KW&RZvn7D zup+*F$aPZV*y997xi`v6m{y$F@JxB>Mk)q7kw{0;OdSGwvbs)z^U$roGAA*WX>B`K z%kOa0pWpn(M@10L!WHDJ{vnU>AAtOWk2(XEZ~r{OQ?ro)ceVZxL~{QZB8C4zWHxZ8 zfOgVIB9h}Wc}it+cdmm`_Kh`S1v$QgRbl`JADsryRNM6!7?Wz=Iq6J|A>sgsu_GPW zT;4ZJc0Mo?#+Of^k%!GI<3Ll3R$QU9CSi?t1mt9bxkCKGz?$FUN^M@wl5PV%@=C4~ z_+KLMj^!#F7G+dovc@cNk@CRf@(o@lCjnX={l>#CLuIih6AYs*^1kI)z*3h{muN8A)w);0)}%sS|A197jHxtZm9$%U@50 z1S)iRt11`KV!2q+ycZJJTLX+-g+B z2e;VkB|C60Ci>ANmmosLR__BFJWe$fAJF&$Nd~mn3ieBAeiMV6+>!kX5y|oRD8O;W zKM-k*e0u&_k^>rmqlF9PKN8aow`~^QOlK6{@c(EZ8~L+pE5Hvii~_)VbtFi)Cg8bc z_zcOBo3P`T$(k+k^<~S=zw2Qh>EI|QbMmr_C$Id;rS8Vq`uUHDHb;y*7jW}hMgA{H zlsLTpfTV7OllULB9CO|NDJ#3&%fEl?df%h{V=>3`6B6M!z4@bog2wo`4S$dRR_I>I z&R?zcb;jSSoQtEAD~pMf6SJqior*jp6c)sPbZgzeC8Xaf-hUex=mS4F$?q9d+FX~= zUwu)%fq)?Vufc0?1(e6nK>FL}Z!(7dFB@)HkO?d%=!GBYkF&q;+5Zlg6+|yU^2g@y z; I@3-gw2bW8Z>i_@%